2026-04-29 15:54:14 +08:00
|
|
|
|
package service
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"context"
|
2026-05-12 13:45:08 +08:00
|
|
|
|
"encoding/json"
|
2026-04-29 15:54:14 +08:00
|
|
|
|
|
2026-05-15 14:56:26 +08:00
|
|
|
|
"model-gateway/model/entity"
|
2026-04-29 15:54:14 +08:00
|
|
|
|
|
2026-05-12 13:45:08 +08:00
|
|
|
|
"gitea.com/red-future/common/http"
|
2026-04-29 15:54:14 +08:00
|
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2026-05-12 13:45:08 +08:00
|
|
|
|
// triggerCallback 任务成功后的回调:
|
|
|
|
|
|
// - JSON body 参数:task_id/state/oss_file/file_type/text(可选)
|
|
|
|
|
|
func triggerCallback(ctx context.Context, t *entity.AsynchTask) {
|
|
|
|
|
|
callbackURL := t.BizName + t.CallbackURL
|
|
|
|
|
|
headers := forwardHeaders(ctx)
|
|
|
|
|
|
var req struct{}
|
|
|
|
|
|
payload := map[string]interface{}{
|
|
|
|
|
|
"task_id": t.TaskID,
|
|
|
|
|
|
"state": t.State,
|
|
|
|
|
|
"oss_file": t.OssFile,
|
|
|
|
|
|
"file_type": t.FileType,
|
|
|
|
|
|
"text": t.TextResult,
|
|
|
|
|
|
"error_msg": t.ErrorMsg,
|
2026-04-29 15:54:14 +08:00
|
|
|
|
}
|
2026-05-12 13:45:08 +08:00
|
|
|
|
jsonData, err := json.Marshal(payload)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
g.Log().Warningf(ctx, "[回调] JSON序列化失败 taskId=%s 错误=%v", t.TaskID, err)
|
2026-04-29 15:54:14 +08:00
|
|
|
|
return
|
|
|
|
|
|
}
|
2026-05-12 13:45:08 +08:00
|
|
|
|
g.Log().Infof(ctx, "[回调] 开始发送 taskId=%s 回调地址=%s 请求头数量=%d 消息体大小=%d字节",
|
|
|
|
|
|
t.TaskID, callbackURL, len(headers), len(jsonData))
|
2026-04-29 15:54:14 +08:00
|
|
|
|
|
2026-05-12 13:45:08 +08:00
|
|
|
|
err = http.Post(ctx, callbackURL, headers, &req, jsonData)
|
2026-04-29 15:54:14 +08:00
|
|
|
|
if err != nil {
|
2026-05-12 13:45:08 +08:00
|
|
|
|
g.Log().Warningf(ctx, "[回调] 发送失败 taskId=%s 回调地址=%s 错误=%v", t.TaskID, callbackURL, err)
|
2026-04-29 15:54:14 +08:00
|
|
|
|
return
|
|
|
|
|
|
}
|
2026-05-12 13:45:08 +08:00
|
|
|
|
g.Log().Infof(ctx, "[回调] 发送成功 taskId=%s 回调地址=%s 消息体大小=%d字节", t.TaskID, callbackURL, len(jsonData))
|
|
|
|
|
|
}
|
2026-04-29 15:54:14 +08:00
|
|
|
|
|
2026-05-12 13:45:08 +08:00
|
|
|
|
// triggerPromptsCallback 任务成功后的提示词回调
|
|
|
|
|
|
// - JSON body 参数:epicycleId(轮次id)/textResult(模型回答消息)
|
|
|
|
|
|
func triggerPromptsCallback(ctx context.Context, t *entity.AsynchTask, epicycleId int64) {
|
|
|
|
|
|
callbackURL := "prompts-core/session/sessionCallback"
|
|
|
|
|
|
headers := forwardHeaders(ctx)
|
|
|
|
|
|
var req struct{}
|
|
|
|
|
|
payload := map[string]interface{}{
|
|
|
|
|
|
"epicycleId": epicycleId,
|
|
|
|
|
|
"text": t.TextResult,
|
2026-04-29 15:54:14 +08:00
|
|
|
|
}
|
2026-05-12 13:45:08 +08:00
|
|
|
|
jsonData, err := json.Marshal(payload)
|
2026-04-29 15:54:14 +08:00
|
|
|
|
if err != nil {
|
2026-05-12 13:45:08 +08:00
|
|
|
|
g.Log().Warningf(ctx, "[提示词回调] JSON序列化失败 epicycleId=%d 错误=%v", epicycleId, err)
|
2026-04-29 15:54:14 +08:00
|
|
|
|
return
|
|
|
|
|
|
}
|
2026-05-12 13:45:08 +08:00
|
|
|
|
g.Log().Infof(ctx, "[提示词回调] 开始发送 epicycleId=%d 回调地址=%s 请求头数量=%d 消息体大小=%d字节",
|
|
|
|
|
|
t.EpicycleId, callbackURL, len(headers), len(jsonData))
|
2026-04-29 15:54:14 +08:00
|
|
|
|
|
2026-05-12 13:45:08 +08:00
|
|
|
|
err = http.Post(ctx, callbackURL, headers, &req, jsonData)
|
2026-04-29 15:54:14 +08:00
|
|
|
|
if err != nil {
|
2026-05-12 13:45:08 +08:00
|
|
|
|
g.Log().Warningf(ctx, "[提示词回调] 发送失败 epicycleId=%d 回调地址=%s 错误=%v", t.EpicycleId, callbackURL, err)
|
2026-04-29 15:54:14 +08:00
|
|
|
|
return
|
|
|
|
|
|
}
|
2026-05-12 13:45:08 +08:00
|
|
|
|
g.Log().Infof(ctx, "[提示词回调] 发送成功 epicycleId=%d 回调地址=%s 消息体大小=%d字节", t.EpicycleId, callbackURL, len(jsonData))
|
|
|
|
|
|
}
|