update package script

This commit is contained in:
Liujian
2025-01-08 11:11:41 +08:00
parent 9cf1cd99c2
commit 526390816b
10 changed files with 96 additions and 35 deletions
+9 -4
View File
@@ -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)
}
+17
View File
@@ -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
}
+1 -1
View File
@@ -63,7 +63,7 @@ var dynamicResourceMap = map[string]Worker{
Driver: "loki",
},
"ai-provider": {
Profession: ProfessionAIProvider,
Profession: ProfessionAIResource,
Driver: "ai-provider",
},
"ai-key": {
+3 -3
View File
@@ -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
View File
@@ -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
+3
View File
@@ -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}/
+9
View File
@@ -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}"
+6 -1
View File
@@ -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
+2 -1
View File
@@ -42,7 +42,8 @@ start() {
cat "$LOG_FILE"
exit 1
fi
# 启动ai事件监听程序
# nohup ./apipark_ai_event_listen >> "$LOG_FILE" 2>&1 &
}
# 停止函数
+1 -1
View File
@@ -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}}