refactor(model): 重构模型网关实体和映射逻辑
This commit is contained in:
@@ -22,13 +22,13 @@ import (
|
|||||||
// ParseAndValidate 解析并校验结果
|
// ParseAndValidate 解析并校验结果
|
||||||
func ParseAndValidate(raw map[string]any, model *entity.ModelGatewayModel) (map[string]any, error) {
|
func ParseAndValidate(raw map[string]any, model *entity.ModelGatewayModel) (map[string]any, error) {
|
||||||
// 1) 解析 content 字符串为 rounds 数组
|
// 1) 解析 content 字符串为 rounds 数组
|
||||||
contentVal, ok := raw[model.ResponseBody]
|
contentVal, ok := raw[entity.ResponseBody]
|
||||||
if !ok {
|
if !ok {
|
||||||
return raw, fmt.Errorf("字段 %s 不存在", model.ResponseBody)
|
return raw, fmt.Errorf("字段 %s 不存在", entity.ResponseBody)
|
||||||
}
|
}
|
||||||
contentStr, ok := contentVal.(string)
|
contentStr, ok := contentVal.(string)
|
||||||
if !ok || strings.TrimSpace(contentStr) == "" {
|
if !ok || strings.TrimSpace(contentStr) == "" {
|
||||||
return raw, fmt.Errorf("字段 %s 为空或不是字符串", model.ResponseBody)
|
return raw, fmt.Errorf("字段 %s 为空或不是字符串", entity.ResponseBody)
|
||||||
}
|
}
|
||||||
var arr []any
|
var arr []any
|
||||||
if err := json.Unmarshal([]byte(contentStr), &arr); err != nil {
|
if err := json.Unmarshal([]byte(contentStr), &arr); err != nil {
|
||||||
|
|||||||
@@ -9,36 +9,34 @@ import (
|
|||||||
|
|
||||||
// CreateModelReq 添加模型配置
|
// CreateModelReq 添加模型配置
|
||||||
type CreateModelReq struct {
|
type CreateModelReq struct {
|
||||||
g.Meta `path:"/createModel" method:"post" tags:"模型管理" summary:"创建模型配置" dc:"添加新的模型配置"`
|
g.Meta `path:"/createModel" method:"post" tags:"模型管理" summary:"创建模型配置" dc:"添加新的模型配置"`
|
||||||
ModelName string `p:"modelName" json:"modelName" v:"required#模型名称不能为空" dc:"模型名称(唯一标识)"`
|
ModelName string `p:"modelName" json:"modelName" v:"required#模型名称不能为空" dc:"模型名称(唯一标识)"`
|
||||||
ModelType int `p:"modelType" json:"modelType" v:"required#模型类型不能为空" dc:"模型类型"`
|
ModelType int `p:"modelType" json:"modelType" v:"required#模型类型不能为空" dc:"模型类型"`
|
||||||
BaseURL string `p:"baseUrl" json:"baseUrl" v:"required#模型地址不能为空" dc:"模型服务地址"`
|
BaseURL string `p:"baseUrl" json:"baseUrl" v:"required#模型地址不能为空" dc:"模型服务地址"`
|
||||||
HttpMethod string `p:"httpMethod" json:"httpMethod" dc:"请求方式:GET/POST(默认POST)"`
|
HttpMethod string `p:"httpMethod" json:"httpMethod" dc:"请求方式:GET/POST(默认POST)"`
|
||||||
HeadMsg map[string]any `p:"headMsg" json:"headMsg" dc:"请求头JSON结构"`
|
HeadMsg map[string]any `p:"headMsg" json:"headMsg" dc:"请求头JSON结构"`
|
||||||
IsPrivate *int `p:"isPrivate" json:"isPrivate" dc:"是否私有化:0-私有 1-公共"`
|
IsPrivate *int `p:"isPrivate" json:"isPrivate" dc:"是否私有化:0-私有 1-公共"`
|
||||||
Enabled *int `p:"enabled" json:"enabled" dc:"是否启用:0-停用 1-启用"`
|
Enabled *int `p:"enabled" json:"enabled" dc:"是否启用:0-停用 1-启用"`
|
||||||
IsChatModel *int `p:"isChatModel" json:"isChatModel" dc:"是否为对话模型:0-否 1-是"`
|
IsChatModel *int `p:"isChatModel" json:"isChatModel" dc:"是否为对话模型:0-否 1-是"`
|
||||||
CallModel *int `p:"callModel" json:"callModel" dc:"调用模式:0-同步 1-异步 2-流式"`
|
CallModel *int `p:"callModel" json:"callModel" dc:"调用模式:0-同步 1-异步 2-流式"`
|
||||||
RequiredFields []string `p:"requiredFields" json:"requiredFields" dc:"必填字段"`
|
RequiredFields []string `p:"requiredFields" json:"requiredFields" dc:"必填字段"`
|
||||||
IsOwner *int `p:"isOwner" json:"isOwner" dc:"是否为所有者:0-否 1-是"`
|
IsOwner *int `p:"isOwner" json:"isOwner" dc:"是否为所有者:0-否 1-是"`
|
||||||
ApiKey string `p:"apiKey" json:"apiKey" dc:"调用凭证/密钥"`
|
ApiKey string `p:"apiKey" json:"apiKey" dc:"调用凭证/密钥"`
|
||||||
Form []map[string]any `p:"form" json:"form" dc:"动态表单配置"`
|
Form []map[string]any `p:"form" json:"form" dc:"动态表单配置"`
|
||||||
RequestMapping map[string]any `p:"requestMapping" json:"requestMapping" dc:"请求映射"`
|
RequestMapping map[string]any `p:"requestMapping" json:"requestMapping" dc:"请求映射"`
|
||||||
ResponseMapping map[string]any `p:"responseMapping" json:"responseMapping" dc:"返回映射"`
|
ResponseMapping map[string]any `p:"responseMapping" json:"responseMapping" dc:"返回映射"`
|
||||||
ResponseBody string `p:"responseBody" json:"responseBody" dc:"返回主体"`
|
OperatorName string `p:"operatorName" json:"operatorName" dc:"运营商名称"`
|
||||||
ResponseTokenField string `p:"responseTokenField" json:"responseTokenField" dc:"响应中消耗token的字段映射"`
|
TokenConfig map[string]any `p:"tokenConfig" json:"tokenConfig" dc:"token计算配置"`
|
||||||
OperatorName string `p:"operatorName" json:"operatorName" dc:"运营商名称"`
|
ExtendMapping map[string]any `p:"extendMapping" json:"extendMapping" dc:"附加映射"`
|
||||||
TokenConfig map[string]any `p:"tokenConfig" json:"tokenConfig" dc:"token计算配置"`
|
QueryConfig map[string]any `p:"queryConfig" json:"queryConfig" dc:"查询/回调配置"`
|
||||||
ExtendMapping map[string]any `p:"extendMapping" json:"extendMapping" dc:"附加映射"`
|
StreamConfig map[string]any `p:"streamConfig" json:"streamConfig" dc:"流式输出配置"`
|
||||||
QueryConfig map[string]any `p:"queryConfig" json:"queryConfig" dc:"查询/回调配置"`
|
FirstFrame string `p:"firstFrame" json:"firstFrame" dc:"首帧图片参数"`
|
||||||
StreamConfig map[string]any `p:"streamConfig" json:"streamConfig" dc:"流式输出配置"`
|
LastFrame string `p:"lastFrame" json:"lastFrame" dc:"尾帧图片参数"`
|
||||||
FirstFrame string `p:"firstFrame" json:"firstFrame" dc:"首帧图片参数"`
|
MaxConcurrency int `p:"maxConcurrency" json:"maxConcurrency" dc:"最大并发数(默认10)"`
|
||||||
LastFrame string `p:"lastFrame" json:"lastFrame" dc:"尾帧图片参数"`
|
TimeoutSeconds int `p:"timeoutSeconds" json:"timeoutSeconds" dc:"请求超时时间(秒,默认600)"`
|
||||||
MaxConcurrency int `p:"maxConcurrency" json:"maxConcurrency" dc:"最大并发数(默认10)"`
|
RetryTimes int `p:"retryTimes" json:"retryTimes" dc:"失败重试次数(默认3)"`
|
||||||
TimeoutSeconds int `p:"timeoutSeconds" json:"timeoutSeconds" dc:"请求超时时间(秒,默认600)"`
|
AutoCleanSeconds int `p:"autoCleanSeconds" json:"autoCleanSeconds" dc:"任务完成后自动清理时间(秒,默认86400)"`
|
||||||
RetryTimes int `p:"retryTimes" json:"retryTimes" dc:"失败重试次数(默认3)"`
|
CallbackUrl string `p:"callbackUrl" json:"callbackUrl" dc:"回调地址"`
|
||||||
AutoCleanSeconds int `p:"autoCleanSeconds" json:"autoCleanSeconds" dc:"任务完成后自动清理时间(秒,默认86400)"`
|
|
||||||
CallbackUrl string `p:"callbackUrl" json:"callbackUrl" dc:"回调地址"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateModelRes struct {
|
type CreateModelRes struct {
|
||||||
@@ -46,37 +44,35 @@ type CreateModelRes struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type UpdateModelReq struct {
|
type UpdateModelReq struct {
|
||||||
g.Meta `path:"/updateModel" method:"put" tags:"模型管理" summary:"更新模型配置" dc:"更新指定ID的模型配置"`
|
g.Meta `path:"/updateModel" method:"put" tags:"模型管理" summary:"更新模型配置" dc:"更新指定ID的模型配置"`
|
||||||
ID int64 `p:"id" json:"id" v:"required#id不能为空" dc:"配置ID"`
|
ID int64 `p:"id" json:"id" v:"required#id不能为空" dc:"配置ID"`
|
||||||
ModelName string `p:"modelName" json:"modelName" dc:"模型名称"`
|
ModelName string `p:"modelName" json:"modelName" dc:"模型名称"`
|
||||||
ModelType int `p:"modelType" json:"modelType" dc:"模型类型"`
|
ModelType int `p:"modelType" json:"modelType" dc:"模型类型"`
|
||||||
BaseURL string `p:"baseUrl" json:"baseUrl" dc:"模型服务地址"`
|
BaseURL string `p:"baseUrl" json:"baseUrl" dc:"模型服务地址"`
|
||||||
HttpMethod string `p:"httpMethod" json:"httpMethod" dc:"请求方式:GET/POST"`
|
HttpMethod string `p:"httpMethod" json:"httpMethod" dc:"请求方式:GET/POST"`
|
||||||
HeadMsg map[string]any `p:"headMsg" json:"headMsg" dc:"请求头JSON结构"`
|
HeadMsg map[string]any `p:"headMsg" json:"headMsg" dc:"请求头JSON结构"`
|
||||||
IsPrivate *int `p:"isPrivate" json:"isPrivate" dc:"是否私有化:0-私有 1-公共"`
|
IsPrivate *int `p:"isPrivate" json:"isPrivate" dc:"是否私有化:0-私有 1-公共"`
|
||||||
Enabled *int `p:"enabled" json:"enabled" dc:"是否启用:0-停用 1-启用"`
|
Enabled *int `p:"enabled" json:"enabled" dc:"是否启用:0-停用 1-启用"`
|
||||||
IsChatModel *int `p:"isChatModel" json:"isChatModel" dc:"是否为对话模型:0-否 1-是"`
|
IsChatModel *int `p:"isChatModel" json:"isChatModel" dc:"是否为对话模型:0-否 1-是"`
|
||||||
CallModel *int `p:"callModel" json:"callModel" dc:"调用模式:0-同步 1-异步 2-流式"`
|
CallModel *int `p:"callModel" json:"callModel" dc:"调用模式:0-同步 1-异步 2-流式"`
|
||||||
RequiredFields []string `p:"requiredFields" json:"requiredFields" dc:"必填字段"`
|
RequiredFields []string `p:"requiredFields" json:"requiredFields" dc:"必填字段"`
|
||||||
IsOwner *int `p:"isOwner" json:"isOwner" dc:"是否为所有者:0-否 1-是"`
|
IsOwner *int `p:"isOwner" json:"isOwner" dc:"是否为所有者:0-否 1-是"`
|
||||||
ApiKey string `p:"apiKey" json:"apiKey" dc:"调用凭证/密钥"`
|
ApiKey string `p:"apiKey" json:"apiKey" dc:"调用凭证/密钥"`
|
||||||
Form []map[string]any `p:"form" json:"form" dc:"动态表单配置"`
|
Form []map[string]any `p:"form" json:"form" dc:"动态表单配置"`
|
||||||
RequestMapping map[string]any `p:"requestMapping" json:"requestMapping" dc:"请求映射"`
|
RequestMapping map[string]any `p:"requestMapping" json:"requestMapping" dc:"请求映射"`
|
||||||
ResponseMapping map[string]any `p:"responseMapping" json:"responseMapping" dc:"返回映射"`
|
ResponseMapping map[string]any `p:"responseMapping" json:"responseMapping" dc:"返回映射"`
|
||||||
ResponseBody string `p:"responseBody" json:"responseBody" dc:"返回主体"`
|
OperatorName string `p:"operatorName" json:"operatorName" dc:"运营商名称"`
|
||||||
ResponseTokenField string `p:"responseTokenField" json:"responseTokenField" dc:"响应中消耗token的字段映射"`
|
TokenConfig map[string]any `p:"tokenConfig" json:"tokenConfig" dc:"token计算配置"`
|
||||||
OperatorName string `p:"operatorName" json:"operatorName" dc:"运营商名称"`
|
ExtendMapping map[string]any `p:"extendMapping" json:"extendMapping" dc:"附加映射"`
|
||||||
TokenConfig map[string]any `p:"tokenConfig" json:"tokenConfig" dc:"token计算配置"`
|
QueryConfig map[string]any `p:"queryConfig" json:"queryConfig" dc:"查询/回调配置"`
|
||||||
ExtendMapping map[string]any `p:"extendMapping" json:"extendMapping" dc:"附加映射"`
|
StreamConfig map[string]any `p:"streamConfig" json:"streamConfig" dc:"流式输出配置"`
|
||||||
QueryConfig map[string]any `p:"queryConfig" json:"queryConfig" dc:"查询/回调配置"`
|
FirstFrame string `p:"firstFrame" json:"firstFrame" dc:"首帧图片参数"`
|
||||||
StreamConfig map[string]any `p:"streamConfig" json:"streamConfig" dc:"流式输出配置"`
|
LastFrame string `p:"lastFrame" json:"lastFrame" dc:"尾帧图片参数"`
|
||||||
FirstFrame string `p:"firstFrame" json:"firstFrame" dc:"首帧图片参数"`
|
MaxConcurrency int `p:"maxConcurrency" json:"maxConcurrency" dc:"最大并发数"`
|
||||||
LastFrame string `p:"lastFrame" json:"lastFrame" dc:"尾帧图片参数"`
|
TimeoutSeconds int `p:"timeoutSeconds" json:"timeoutSeconds" dc:"请求超时时间(秒)"`
|
||||||
MaxConcurrency int `p:"maxConcurrency" json:"maxConcurrency" dc:"最大并发数"`
|
RetryTimes int `p:"retryTimes" json:"retryTimes" dc:"失败重试次数"`
|
||||||
TimeoutSeconds int `p:"timeoutSeconds" json:"timeoutSeconds" dc:"请求超时时间(秒)"`
|
AutoCleanSeconds int `p:"autoCleanSeconds" json:"autoCleanSeconds" dc:"任务完成后自动清理时间(秒)"`
|
||||||
RetryTimes int `p:"retryTimes" json:"retryTimes" dc:"失败重试次数"`
|
CallbackUrl string `p:"callbackUrl" json:"callbackUrl" dc:"回调地址"`
|
||||||
AutoCleanSeconds int `p:"autoCleanSeconds" json:"autoCleanSeconds" dc:"任务完成后自动清理时间(秒)"`
|
|
||||||
CallbackUrl string `p:"callbackUrl" json:"callbackUrl" dc:"回调地址"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateModelRes struct {
|
type UpdateModelRes struct {
|
||||||
|
|||||||
@@ -4,99 +4,96 @@ import "gitea.redpowerfuture.com/red-future/common/beans"
|
|||||||
|
|
||||||
type modelGatewayModelCol struct {
|
type modelGatewayModelCol struct {
|
||||||
beans.SQLBaseCol
|
beans.SQLBaseCol
|
||||||
ModelName string
|
ModelName string
|
||||||
ModelType string
|
ModelType string
|
||||||
BaseURL string
|
BaseURL string
|
||||||
HttpMethod string
|
HttpMethod string
|
||||||
HeadMsg string
|
HeadMsg string
|
||||||
FormJSON string
|
FormJSON string
|
||||||
RequestMapping string
|
RequestMapping string
|
||||||
ResponseMapping string
|
ResponseMapping string
|
||||||
ResponseBody string
|
ResponseBody string
|
||||||
ResponseTokenField string
|
RequiredFields string
|
||||||
RequiredFields string
|
IsPrivate string
|
||||||
IsPrivate string
|
IsChatModel string
|
||||||
IsChatModel string
|
CallMode string
|
||||||
CallMode string
|
ApiKey string
|
||||||
ApiKey string
|
Enabled string
|
||||||
Enabled string
|
MaxConcurrency string
|
||||||
MaxConcurrency string
|
TimeoutSeconds string
|
||||||
TimeoutSeconds string
|
RetryTimes string
|
||||||
RetryTimes string
|
AutoCleanSeconds string
|
||||||
AutoCleanSeconds string
|
IsOwner string
|
||||||
IsOwner string
|
OperatorName string
|
||||||
OperatorName string
|
TokenConfig string
|
||||||
TokenConfig string
|
ExtendMapping string
|
||||||
ExtendMapping string
|
QueryConfig string
|
||||||
QueryConfig string
|
StreamConfig string
|
||||||
StreamConfig string
|
FirstFrame string
|
||||||
FirstFrame string
|
LastFrame string
|
||||||
LastFrame string
|
|
||||||
MaxTokens string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var ModelGatewayModelCol = modelGatewayModelCol{
|
var ModelGatewayModelCol = modelGatewayModelCol{
|
||||||
SQLBaseCol: beans.DefSQLBaseCol,
|
SQLBaseCol: beans.DefSQLBaseCol,
|
||||||
ModelName: "model_name",
|
ModelName: "model_name",
|
||||||
ModelType: "model_type",
|
ModelType: "model_type",
|
||||||
BaseURL: "base_url",
|
BaseURL: "base_url",
|
||||||
HttpMethod: "http_method",
|
HttpMethod: "http_method",
|
||||||
HeadMsg: "head_msg",
|
HeadMsg: "head_msg",
|
||||||
FormJSON: "form_json",
|
FormJSON: "form_json",
|
||||||
RequestMapping: "request_mapping",
|
RequestMapping: "request_mapping",
|
||||||
ResponseMapping: "response_mapping",
|
ResponseMapping: "response_mapping",
|
||||||
ResponseBody: "response_body",
|
RequiredFields: "required_fields",
|
||||||
ResponseTokenField: "response_token_field",
|
IsPrivate: "is_private",
|
||||||
RequiredFields: "required_fields",
|
IsChatModel: "is_chat_model",
|
||||||
IsPrivate: "is_private",
|
CallMode: "call_mode",
|
||||||
IsChatModel: "is_chat_model",
|
ApiKey: "api_key",
|
||||||
CallMode: "call_mode",
|
Enabled: "enabled",
|
||||||
ApiKey: "api_key",
|
MaxConcurrency: "max_concurrency",
|
||||||
Enabled: "enabled",
|
TimeoutSeconds: "timeout_seconds",
|
||||||
MaxConcurrency: "max_concurrency",
|
RetryTimes: "retry_times",
|
||||||
TimeoutSeconds: "timeout_seconds",
|
AutoCleanSeconds: "auto_clean_seconds",
|
||||||
RetryTimes: "retry_times",
|
IsOwner: "is_owner",
|
||||||
AutoCleanSeconds: "auto_clean_seconds",
|
OperatorName: "operator_name",
|
||||||
IsOwner: "is_owner",
|
TokenConfig: "token_config",
|
||||||
OperatorName: "operator_name",
|
ExtendMapping: "extend_mapping",
|
||||||
TokenConfig: "token_config",
|
QueryConfig: "query_config",
|
||||||
ExtendMapping: "extend_mapping",
|
StreamConfig: "stream_config",
|
||||||
QueryConfig: "query_config",
|
FirstFrame: "first_frame",
|
||||||
StreamConfig: "stream_config",
|
LastFrame: "last_frame",
|
||||||
FirstFrame: "first_frame",
|
|
||||||
LastFrame: "last_frame",
|
|
||||||
MaxTokens: "max_tokens",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type ModelGatewayModel struct {
|
type ModelGatewayModel struct {
|
||||||
beans.SQLBaseDO `orm:",inline"`
|
beans.SQLBaseDO `orm:",inline"`
|
||||||
ModelName string `orm:"model_name" json:"modelName"`
|
ModelName string `orm:"model_name" json:"modelName"`
|
||||||
ModelType int `orm:"model_type" json:"modelType"`
|
ModelType int `orm:"model_type" json:"modelType"`
|
||||||
BaseURL string `orm:"base_url" json:"baseUrl"`
|
BaseURL string `orm:"base_url" json:"baseUrl"`
|
||||||
HttpMethod string `orm:"http_method" json:"httpMethod"`
|
HttpMethod string `orm:"http_method" json:"httpMethod"`
|
||||||
HeadMsg map[string]any `orm:"head_msg" json:"headMsg"`
|
HeadMsg map[string]any `orm:"head_msg" json:"headMsg"`
|
||||||
Form []map[string]any `orm:"form_json" json:"form"`
|
Form []map[string]any `orm:"form_json" json:"form"`
|
||||||
RequestMapping map[string]any `orm:"request_mapping" json:"requestMapping"`
|
RequestMapping map[string]any `orm:"request_mapping" json:"requestMapping"`
|
||||||
ResponseMapping map[string]any `orm:"response_mapping" json:"responseMapping"`
|
ResponseMapping map[string]any `orm:"response_mapping" json:"responseMapping"`
|
||||||
ResponseBody string `orm:"response_body" json:"responseBody"`
|
RequiredFields []string `orm:"required_fields" json:"requiredFields"`
|
||||||
ResponseTokenField string `orm:"response_token_field" json:"tokenField"`
|
IsPrivate *int `orm:"is_private" json:"isPrivate"`
|
||||||
RequiredFields []string `orm:"required_fields" json:"requiredFields"`
|
IsChatModel *int `orm:"is_chat_model" json:"isChatModel"`
|
||||||
IsPrivate *int `orm:"is_private" json:"isPrivate"`
|
CallMode *int `orm:"call_mode" json:"callMode"`
|
||||||
IsChatModel *int `orm:"is_chat_model" json:"isChatModel"`
|
ApiKey string `orm:"api_key" json:"apiKey"`
|
||||||
CallMode *int `orm:"call_mode" json:"callMode"`
|
Enabled *int `orm:"enabled" json:"enabled"`
|
||||||
ApiKey string `orm:"api_key" json:"apiKey"`
|
MaxConcurrency int `orm:"max_concurrency" json:"maxConcurrency"`
|
||||||
Enabled *int `orm:"enabled" json:"enabled"`
|
TimeoutSeconds int `orm:"timeout_seconds" json:"timeoutSeconds"`
|
||||||
MaxConcurrency int `orm:"max_concurrency" json:"maxConcurrency"`
|
RetryTimes int `orm:"retry_times" json:"retryTimes"`
|
||||||
TimeoutSeconds int `orm:"timeout_seconds" json:"timeoutSeconds"`
|
AutoCleanSeconds int `orm:"auto_clean_seconds" json:"autoCleanSeconds"`
|
||||||
RetryTimes int `orm:"retry_times" json:"retryTimes"`
|
IsOwner *int `orm:"is_owner" json:"isOwner"`
|
||||||
AutoCleanSeconds int `orm:"auto_clean_seconds" json:"autoCleanSeconds"`
|
OperatorName string `orm:"operator_name" json:"operatorName"`
|
||||||
IsOwner *int `orm:"is_owner" json:"isOwner"`
|
TokenConfig map[string]any `orm:"token_config" json:"tokenConfig"`
|
||||||
OperatorName string `orm:"operator_name" json:"operatorName"`
|
ExtendMapping map[string]any `orm:"extend_mapping" json:"extendMapping"`
|
||||||
TokenConfig map[string]any `orm:"token_config" json:"tokenConfig"`
|
QueryConfig map[string]any `orm:"query_config" json:"queryConfig"`
|
||||||
ExtendMapping map[string]any `orm:"extend_mapping" json:"extendMapping"`
|
StreamConfig map[string]any `orm:"stream_config" json:"streamConfig"`
|
||||||
QueryConfig map[string]any `orm:"query_config" json:"queryConfig"`
|
FirstFrame string `orm:"first_frame" json:"firstFrame"`
|
||||||
StreamConfig map[string]any `orm:"stream_config" json:"streamConfig"`
|
LastFrame string `orm:"last_frame" json:"lastFrame"`
|
||||||
FirstFrame string `orm:"first_frame" json:"firstFrame"`
|
|
||||||
LastFrame string `orm:"last_frame" json:"lastFrame"`
|
|
||||||
MaxTokens int `orm:"max_tokens" json:"maxTokens"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ( //ResponseMapping 下的字段
|
||||||
|
ResponseBody = "response_body" //返回主体
|
||||||
|
TotalTokens = "total_tokens" //总token数
|
||||||
|
)
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ func (w *asyncWorker) callModelAsync(ctx context.Context, task *entity.ModelGate
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// 2. 拿到 task_id
|
// 2. 拿到 task_id
|
||||||
taskID := gjson.New(body).Get(model.ResponseBody).String()
|
taskID := gjson.New(body).Get(entity.ResponseBody).String()
|
||||||
|
|
||||||
// 3. 创建等待通道
|
// 3. 创建等待通道
|
||||||
ch := make(chan asyncResult, 1)
|
ch := make(chan asyncResult, 1)
|
||||||
@@ -310,8 +310,8 @@ func (w *asyncWorker) parseAndRetry(ctx context.Context, body map[string]any, ta
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 2) 先存 token 到数据库,防止后续失败丢失
|
// 2) 先存 token 到数据库,防止后续失败丢失
|
||||||
if _, ok := mapped[model.ResponseTokenField]; ok {
|
if _, ok := mapped[entity.TotalTokens]; ok {
|
||||||
task.ExpendTokens = gconv.Int64(mapped[model.ResponseTokenField])
|
task.ExpendTokens = gconv.Int64(mapped[entity.TotalTokens])
|
||||||
_, err = dao.ModelGatewayTask.Update(ctx, &entity.ModelGatewayTask{
|
_, err = dao.ModelGatewayTask.Update(ctx, &entity.ModelGatewayTask{
|
||||||
SQLBaseDO: beans.SQLBaseDO{Id: task.Id},
|
SQLBaseDO: beans.SQLBaseDO{Id: task.Id},
|
||||||
ExpendTokens: task.ExpendTokens,
|
ExpendTokens: task.ExpendTokens,
|
||||||
@@ -327,7 +327,7 @@ func (w *asyncWorker) parseAndRetry(ctx context.Context, body map[string]any, ta
|
|||||||
return parsed, nil
|
return parsed, nil
|
||||||
}
|
}
|
||||||
case public.BuildTypeStruct:
|
case public.BuildTypeStruct:
|
||||||
parsed = util.ParseStructResult(mapped, model.ResponseBody)
|
parsed = util.ParseStructResult(mapped, entity.ResponseBody)
|
||||||
return parsed, nil
|
return parsed, nil
|
||||||
default:
|
default:
|
||||||
return mapped, nil
|
return mapped, nil
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ CREATE TABLE IF NOT EXISTS model_gateway_models (
|
|||||||
max_concurrency int4 NOT NULL DEFAULT 10,
|
max_concurrency int4 NOT NULL DEFAULT 10,
|
||||||
timeout_seconds int4 NOT NULL DEFAULT 600,
|
timeout_seconds int4 NOT NULL DEFAULT 600,
|
||||||
retry_times int2 NOT NULL DEFAULT 3,
|
retry_times int2 NOT NULL DEFAULT 3,
|
||||||
auto_clean_seconds int4 NOT NULL DEFAULT 86400,
|
|
||||||
response_token_field varchar(128) NOT NULL DEFAULT '',
|
response_token_field varchar(128) NOT NULL DEFAULT '',
|
||||||
call_mode int2 NOT NULL DEFAULT 0,
|
call_mode int2 NOT NULL DEFAULT 0,
|
||||||
required_fields jsonb NOT NULL DEFAULT '[]',
|
required_fields jsonb NOT NULL DEFAULT '[]',
|
||||||
@@ -55,6 +54,7 @@ COMMENT ON COLUMN model_gateway_models.created_at IS '创建时间';
|
|||||||
COMMENT ON COLUMN model_gateway_models.updater IS '更新人';
|
COMMENT ON COLUMN model_gateway_models.updater IS '更新人';
|
||||||
COMMENT ON COLUMN model_gateway_models.updated_at IS '更新时间';
|
COMMENT ON COLUMN model_gateway_models.updated_at IS '更新时间';
|
||||||
COMMENT ON COLUMN model_gateway_models.deleted_at IS '删除时间(软删)';
|
COMMENT ON COLUMN model_gateway_models.deleted_at IS '删除时间(软删)';
|
||||||
|
|
||||||
COMMENT ON COLUMN model_gateway_models.model_name IS '模型名称';
|
COMMENT ON COLUMN model_gateway_models.model_name IS '模型名称';
|
||||||
COMMENT ON COLUMN model_gateway_models.model_type IS '模型类型';
|
COMMENT ON COLUMN model_gateway_models.model_type IS '模型类型';
|
||||||
COMMENT ON COLUMN model_gateway_models.operator_name IS '运营商名称';
|
COMMENT ON COLUMN model_gateway_models.operator_name IS '运营商名称';
|
||||||
@@ -62,12 +62,11 @@ COMMENT ON COLUMN model_gateway_models.base_url IS '模型地址';
|
|||||||
COMMENT ON COLUMN model_gateway_models.http_method IS '请求方式 GET/POST';
|
COMMENT ON COLUMN model_gateway_models.http_method IS '请求方式 GET/POST';
|
||||||
COMMENT ON COLUMN model_gateway_models.head_msg IS '请求头信息';
|
COMMENT ON COLUMN model_gateway_models.head_msg IS '请求头信息';
|
||||||
COMMENT ON COLUMN model_gateway_models.api_key IS '调用凭证/密钥';
|
COMMENT ON COLUMN model_gateway_models.api_key IS '调用凭证/密钥';
|
||||||
|
|
||||||
COMMENT ON COLUMN model_gateway_models.is_private IS '是否私有化:0-私有 1-公共';
|
COMMENT ON COLUMN model_gateway_models.is_private IS '是否私有化:0-私有 1-公共';
|
||||||
COMMENT ON COLUMN model_gateway_models.enabled IS '是否启用:0-停用 1-启用';
|
COMMENT ON COLUMN model_gateway_models.enabled IS '是否启用:0-停用 1-启用';
|
||||||
COMMENT ON COLUMN model_gateway_models.is_chat_model IS '是否为对话模型:0-否 1-是';
|
COMMENT ON COLUMN model_gateway_models.is_chat_model IS '是否为对话模型:0-否 1-是';
|
||||||
COMMENT ON COLUMN model_gateway_models.is_owner IS '1=当前用户创建 0=超级管理员';
|
COMMENT ON COLUMN model_gateway_models.is_owner IS '1=当前用户创建 0=超级管理员';
|
||||||
|
COMMENT ON COLUMN model_gateway_models.call_mode IS '调用模式:0-同步 1-异步 2-流式';
|
||||||
COMMENT ON COLUMN model_gateway_models.form_json IS '动态表单结构';
|
COMMENT ON COLUMN model_gateway_models.form_json IS '动态表单结构';
|
||||||
COMMENT ON COLUMN model_gateway_models.request_mapping IS '请求映射';
|
COMMENT ON COLUMN model_gateway_models.request_mapping IS '请求映射';
|
||||||
COMMENT ON COLUMN model_gateway_models.response_mapping IS '返回映射';
|
COMMENT ON COLUMN model_gateway_models.response_mapping IS '返回映射';
|
||||||
@@ -81,9 +80,7 @@ COMMENT ON COLUMN model_gateway_models.last_frame IS '尾帧图片参数';
|
|||||||
COMMENT ON COLUMN model_gateway_models.max_concurrency IS '最大并发数';
|
COMMENT ON COLUMN model_gateway_models.max_concurrency IS '最大并发数';
|
||||||
COMMENT ON COLUMN model_gateway_models.timeout_seconds IS '调用模型超时(秒)';
|
COMMENT ON COLUMN model_gateway_models.timeout_seconds IS '调用模型超时(秒)';
|
||||||
COMMENT ON COLUMN model_gateway_models.retry_times IS '失败重试次数';
|
COMMENT ON COLUMN model_gateway_models.retry_times IS '失败重试次数';
|
||||||
COMMENT ON COLUMN model_gateway_models.auto_clean_seconds IS '任务完成后自动清理时间(秒)';
|
|
||||||
COMMENT ON COLUMN model_gateway_models.response_token_field IS '响应中消耗token的字段映射';
|
COMMENT ON COLUMN model_gateway_models.response_token_field IS '响应中消耗token的字段映射';
|
||||||
COMMENT ON COLUMN model_gateway_models.call_mode IS '调用模式:0-同步 1-异步 2-流式';
|
|
||||||
COMMENT ON COLUMN model_gateway_models.required_fields IS '必选字段列表';
|
COMMENT ON COLUMN model_gateway_models.required_fields IS '必选字段列表';
|
||||||
COMMENT ON COLUMN model_gateway_models.max_tokens IS '最大 token 数,0 表示不传';
|
COMMENT ON COLUMN model_gateway_models.max_tokens IS '最大 token 数,0 表示不传';
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user