mirror of
https://github.com/APIParkLab/APIPark.git
synced 2026-06-04 10:13:53 +08:00
update package script
This commit is contained in:
@@ -42,10 +42,15 @@ func main() {
|
||||
log.Fatal("check autowired:", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 2. 创建 NSQ 消费者
|
||||
config := nsq.NewConfig()
|
||||
consumer, err := nsq.NewConsumer("ai_event", "tmp", config)
|
||||
hostname, err := os.Hostname()
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to get hostname: %v", err)
|
||||
return
|
||||
}
|
||||
nsqConfig := handler.nsqConfig
|
||||
consumer, err := nsq.NewConsumer(fmt.Sprintf("%s_ai_event", nsqConfig.TopicPrefix), hostname, config)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to create NSQ consumer: %v", err)
|
||||
}
|
||||
@@ -53,8 +58,8 @@ func main() {
|
||||
consumer.AddHandler(handler)
|
||||
|
||||
// 4. 连接到 NSQ
|
||||
nsqAddress := "172.18.166.219:9150" // NSQ 地址
|
||||
err = consumer.ConnectToNSQD(nsqAddress)
|
||||
//nsqAddress := "172.18.166.219:9150" // NSQ 地址
|
||||
err = consumer.ConnectToNSQD(nsqConfig.Addr)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to connect to NSQ: %v", err)
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/eolinker/go-common/cftool"
|
||||
|
||||
ai_dto "github.com/APIParkLab/APIPark/module/ai/dto"
|
||||
|
||||
"github.com/eolinker/go-common/store"
|
||||
@@ -20,6 +22,15 @@ import (
|
||||
ai_api "github.com/APIParkLab/APIPark/service/ai-api"
|
||||
)
|
||||
|
||||
func init() {
|
||||
cftool.Register[NSQConfig]("nsq")
|
||||
}
|
||||
|
||||
type NSQConfig struct {
|
||||
Addr string `json:"addr"`
|
||||
TopicPrefix string `json:"topic_prefix"`
|
||||
}
|
||||
|
||||
// 定义 NSQ 消息结构
|
||||
type AIProviderStatus struct {
|
||||
Provider string `json:"provider"`
|
||||
@@ -52,6 +63,7 @@ type NSQHandler struct {
|
||||
aiKeyService ai_key.IKeyService `autowired:""`
|
||||
aiService ai.IProviderService `autowired:""`
|
||||
transaction store.ITransaction `autowired:""`
|
||||
nsqConfig *NSQConfig `autowired:""`
|
||||
ctx context.Context
|
||||
}
|
||||
|
||||
@@ -107,6 +119,11 @@ func (h *NSQHandler) HandleMessage(message *nsq.Message) error {
|
||||
err = h.aiService.Save(ctx, s.Provider, &ai.SetProvider{
|
||||
Status: &pStatus,
|
||||
})
|
||||
} else {
|
||||
pStatus := ai_dto.ProviderEnabled.Int()
|
||||
err = h.aiService.Save(ctx, s.Provider, &ai.SetProvider{
|
||||
Status: &pStatus,
|
||||
})
|
||||
}
|
||||
finalStatus = &s
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ var dynamicResourceMap = map[string]Worker{
|
||||
Driver: "loki",
|
||||
},
|
||||
"ai-provider": {
|
||||
Profession: ProfessionAIProvider,
|
||||
Profession: ProfessionAIResource,
|
||||
Driver: "ai-provider",
|
||||
},
|
||||
"ai-key": {
|
||||
|
||||
@@ -42,7 +42,7 @@ func newKey(key *ai_key.Key) *gateway.DynamicRelease {
|
||||
|
||||
return &gateway.DynamicRelease{
|
||||
BasicItem: &gateway.BasicItem{
|
||||
ID: key.ID,
|
||||
ID: fmt.Sprintf("%s-%s", key.Provider, key.ID),
|
||||
Description: key.Name,
|
||||
Resource: "ai-key",
|
||||
Version: time.Now().Format("20060102150405"),
|
||||
@@ -55,7 +55,7 @@ func newKey(key *ai_key.Key) *gateway.DynamicRelease {
|
||||
"config": key.Config,
|
||||
"provider": key.Provider,
|
||||
"priority": key.Priority,
|
||||
"disabled": key.Status == 1,
|
||||
"disabled": key.Status == 0,
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -243,7 +243,7 @@ func (i *imlKeyModule) Delete(ctx context.Context, providerId string, id string)
|
||||
}
|
||||
return i.syncGateway(ctx, cluster.DefaultClusterID, []*gateway.DynamicRelease{{
|
||||
BasicItem: &gateway.BasicItem{
|
||||
ID: id,
|
||||
ID: fmt.Sprintf("%s-%s", providerId, id),
|
||||
Resource: "ai-key",
|
||||
},
|
||||
Attr: nil,
|
||||
|
||||
+45
-24
@@ -33,7 +33,7 @@ func newKey(key *ai_key.Key) *gateway.DynamicRelease {
|
||||
|
||||
return &gateway.DynamicRelease{
|
||||
BasicItem: &gateway.BasicItem{
|
||||
ID: key.ID,
|
||||
ID: fmt.Sprintf("%s-%s", key.Provider, key.ID),
|
||||
Description: key.Name,
|
||||
Resource: "ai-key",
|
||||
Version: time.Now().Format("20060102150405"),
|
||||
@@ -46,7 +46,7 @@ func newKey(key *ai_key.Key) *gateway.DynamicRelease {
|
||||
"config": key.Config,
|
||||
"provider": key.Provider,
|
||||
"priority": key.Priority,
|
||||
"disabled": key.Status == 1,
|
||||
"disabled": key.Status == 0,
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -85,6 +85,7 @@ func (i *imlProviderModule) Sort(ctx context.Context, input *ai_dto.Sort) error
|
||||
return e.Id
|
||||
})
|
||||
releases := make([]*gateway.DynamicRelease, 0, len(list))
|
||||
offlineReleases := make([]*gateway.DynamicRelease, 0, len(list))
|
||||
for index, id := range input.Providers {
|
||||
p, has := model_runtime.GetProvider(id)
|
||||
if !has {
|
||||
@@ -106,30 +107,39 @@ func (i *imlProviderModule) Sort(ctx context.Context, input *ai_dto.Sort) error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
cfg := make(map[string]interface{})
|
||||
cfg["provider"] = l.Id
|
||||
cfg["model"] = l.DefaultLLM
|
||||
cfg["model_config"] = model.DefaultConfig()
|
||||
cfg["priority"] = l.Priority
|
||||
cfg["base"] = fmt.Sprintf("%s://%s", p.URI().Scheme(), p.URI().Host())
|
||||
releases = append(releases, &gateway.DynamicRelease{
|
||||
BasicItem: &gateway.BasicItem{
|
||||
ID: l.Id,
|
||||
Description: l.Name,
|
||||
Resource: "ai-provider",
|
||||
Version: l.UpdateAt.Format("20060102150405"),
|
||||
MatchLabels: map[string]string{
|
||||
"module": "ai-provider",
|
||||
if ai_dto.ToProviderStatus(l.Status) == ai_dto.ProviderDisabled {
|
||||
offlineReleases = append(offlineReleases, &gateway.DynamicRelease{
|
||||
BasicItem: &gateway.BasicItem{
|
||||
ID: l.Id,
|
||||
Resource: "ai-provider",
|
||||
}})
|
||||
} else {
|
||||
cfg := make(map[string]interface{})
|
||||
cfg["provider"] = l.Id
|
||||
cfg["model"] = l.DefaultLLM
|
||||
cfg["model_config"] = model.DefaultConfig()
|
||||
cfg["priority"] = l.Priority
|
||||
cfg["base"] = fmt.Sprintf("%s://%s", p.URI().Scheme(), p.URI().Host())
|
||||
releases = append(releases, &gateway.DynamicRelease{
|
||||
BasicItem: &gateway.BasicItem{
|
||||
ID: l.Id,
|
||||
Description: l.Name,
|
||||
Resource: "ai-provider",
|
||||
Version: l.UpdateAt.Format("20060102150405"),
|
||||
MatchLabels: map[string]string{
|
||||
"module": "ai-provider",
|
||||
},
|
||||
},
|
||||
},
|
||||
Attr: cfg,
|
||||
})
|
||||
err = i.syncGateway(ctx, cluster.DefaultClusterID, releases, true)
|
||||
if err != nil {
|
||||
return err
|
||||
Attr: cfg,
|
||||
})
|
||||
}
|
||||
}
|
||||
return nil
|
||||
err = i.syncGateway(ctx, cluster.DefaultClusterID, releases, true)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return i.syncGateway(ctx, cluster.DefaultClusterID, offlineReleases, false)
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
@@ -537,6 +547,7 @@ func (i *imlProviderModule) UpdateProviderConfig(ctx context.Context, id string,
|
||||
Status: 1,
|
||||
ExpireTime: 0,
|
||||
Default: true,
|
||||
Priority: 1,
|
||||
})
|
||||
} else {
|
||||
err = i.aiKeyService.Save(ctx, id, &ai_key.Edit{
|
||||
@@ -558,6 +569,16 @@ func (i *imlProviderModule) UpdateProviderConfig(ctx context.Context, id string,
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if *pInfo.Status == 0 {
|
||||
return i.syncGateway(ctx, cluster.DefaultClusterID, []*gateway.DynamicRelease{
|
||||
{
|
||||
BasicItem: &gateway.BasicItem{
|
||||
ID: id,
|
||||
Resource: "ai-provider",
|
||||
},
|
||||
},
|
||||
}, false)
|
||||
}
|
||||
// 获取当前供应商所有Key信息
|
||||
defaultKey, err := i.aiKeyService.DefaultKey(ctx, id)
|
||||
if err != nil {
|
||||
@@ -665,7 +686,7 @@ func (i *imlProviderModule) syncGateway(ctx context.Context, clusterId string, r
|
||||
if online {
|
||||
err = dynamicClient.Online(ctx, releaseInfo)
|
||||
} else {
|
||||
err = dynamicClient.Offline(ctx, releaseInfo)
|
||||
dynamicClient.Offline(ctx, releaseInfo)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -8,6 +8,9 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||
|
||||
ARG APP
|
||||
|
||||
ENV NSQ_ADDR=nsq:4150
|
||||
ENV NSQ_TOPIC_PREFIX=apipark
|
||||
|
||||
RUN mkdir -p /${APP}
|
||||
|
||||
COPY cmd/* /${APP}/
|
||||
|
||||
@@ -8,6 +8,8 @@ source ./scripts/common.sh
|
||||
OUTPUT_DIR=$(mkdir_output "$1")
|
||||
APP="apipark"
|
||||
OUTPUT_BIN="${OUTPUT_DIR}/${APP}"
|
||||
AI_EVENT_LISTEN_APP="apipark_ai_event_listen"
|
||||
AI_EVENT_LISTEN_BIN="${OUTPUT_DIR}/${AI_EVENT_LISTEN_APP}"
|
||||
VERSION=$(gen_version "$2")
|
||||
BUILD_TYPE=$3
|
||||
ARCH=$4
|
||||
@@ -104,6 +106,10 @@ build_backend() {
|
||||
# -ldflags="-w -s" means omit DWARF symbol table and the symbol table and debug information
|
||||
echo "GOOS=linux GOARCH=$ARCH CGO_ENABLED=0 go build $Tags -ldflags \"-w -s $flags\" -o \"${OUTPUT_BIN}\""
|
||||
GOOS=linux GOARCH=$ARCH CGO_ENABLED=0 go build ${Tags} -ldflags "-w -s $flags" -o ${OUTPUT_BIN}
|
||||
|
||||
echo "Build backend successfully..."
|
||||
echo "GOOS=linux GOARCH=$ARCH CGO_ENABLED=0 go build -ldflags \"-w -s\" -o \"${AI_EVENT_LISTEN_BIN}\" ./app/ai-event-handler"
|
||||
GOOS=linux GOARCH=$ARCH CGO_ENABLED=0 go build -ldflags "-w -s" -o "${AI_EVENT_LISTEN_BIN}" ./app/ai-event-handler
|
||||
return
|
||||
}
|
||||
|
||||
@@ -123,6 +129,9 @@ package() {
|
||||
|
||||
cp "${OUTPUT_BIN}" "${PACKAGE_DIR}"
|
||||
|
||||
echo "cp ${AI_EVENT_LISTEN_BIN} ${PACKAGE_DIR}"
|
||||
cp "${AI_EVENT_LISTEN_BIN}" "${PACKAGE_DIR}"
|
||||
|
||||
echo "tar -czvf ${PACKAGE_DIR}_linux_${ARCH}.tar.gz -C ${PACKAGE_DIR}/ ./"
|
||||
tar -czvf "${PACKAGE_DIR}_linux_${ARCH}.tar.gz" -C "${PACKAGE_DIR}/" "./"
|
||||
# rm -fr "${PACKAGE_DIR}"
|
||||
|
||||
@@ -21,6 +21,9 @@ echo -e "redis:" >> config.yml
|
||||
echo -e " user_name: ${REDIS_USER_NAME}" >> config.yml
|
||||
echo -e " password: ${REDIS_PWD}" >> config.yml
|
||||
echo -e " addr: " >> config.yml
|
||||
echo -e "nsq:" >> config.yml
|
||||
echo -e " addr: ${NSQ_ADDR}" >> config.yml
|
||||
echo -e " topic: ${NSQ_TOPIC}" >> config.yml
|
||||
for s in ${arr[@]}
|
||||
do
|
||||
echo -e " - $s" >> config.yml
|
||||
@@ -34,4 +37,6 @@ echo -e " log_expire: ${ERROR_EXPIRE}" >> config.yml
|
||||
echo -e " log_period: ${ERROR_PERIOD}" >> config.yml
|
||||
|
||||
cat config.yml
|
||||
./apipark
|
||||
nohup ./apipark >> run.log 2>&1 &
|
||||
nohup ./apipark_ai_event_listen >> run.log 2>&1 &
|
||||
tail -F run.log
|
||||
@@ -42,7 +42,8 @@ start() {
|
||||
cat "$LOG_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 启动ai事件监听程序
|
||||
# nohup ./apipark_ai_event_listen >> "$LOG_FILE" 2>&1 &
|
||||
}
|
||||
|
||||
# 停止函数
|
||||
|
||||
@@ -35,7 +35,7 @@ func (i *imlAPIService) OnComplete() {
|
||||
}
|
||||
|
||||
func labelHandler(e *api.AiAPIInfo) []string {
|
||||
return []string{e.Name}
|
||||
return []string{e.Name, e.Path}
|
||||
}
|
||||
func uniquestHandler(i *Create) []map[string]interface{} {
|
||||
return []map[string]interface{}{{"uuid": i.ID}}
|
||||
|
||||
Reference in New Issue
Block a user