From 445ee02c5a2e9b26af32c8c5e855a360f775ccd7 Mon Sep 17 00:00:00 2001 From: WangLiZhao <1838393649@qq.com> Date: Fri, 12 Jun 2026 17:50:22 +0800 Subject: [PATCH] =?UTF-8?q?refactor(model):=20=E9=87=8D=E6=9E=84=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E7=BD=91=E5=85=B3=E5=AE=9E=E4=BD=93=E5=92=8C=E6=98=A0?= =?UTF-8?q?=E5=B0=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/util/mapping.go | 6 +- model/dto/model_gateway_models_dto.go | 118 +++++++++-------- model/entity/model_gateway_model.go | 175 +++++++++++++------------- service/task/worker.go | 8 +- update.sql | 7 +- 5 files changed, 152 insertions(+), 162 deletions(-) diff --git a/common/util/mapping.go b/common/util/mapping.go index d229b4c..f00bf51 100644 --- a/common/util/mapping.go +++ b/common/util/mapping.go @@ -22,13 +22,13 @@ import ( // ParseAndValidate 解析并校验结果 func ParseAndValidate(raw map[string]any, model *entity.ModelGatewayModel) (map[string]any, error) { // 1) 解析 content 字符串为 rounds 数组 - contentVal, ok := raw[model.ResponseBody] + contentVal, ok := raw[entity.ResponseBody] if !ok { - return raw, fmt.Errorf("字段 %s 不存在", model.ResponseBody) + return raw, fmt.Errorf("字段 %s 不存在", entity.ResponseBody) } contentStr, ok := contentVal.(string) if !ok || strings.TrimSpace(contentStr) == "" { - return raw, fmt.Errorf("字段 %s 为空或不是字符串", model.ResponseBody) + return raw, fmt.Errorf("字段 %s 为空或不是字符串", entity.ResponseBody) } var arr []any if err := json.Unmarshal([]byte(contentStr), &arr); err != nil { diff --git a/model/dto/model_gateway_models_dto.go b/model/dto/model_gateway_models_dto.go index 384a570..b555064 100644 --- a/model/dto/model_gateway_models_dto.go +++ b/model/dto/model_gateway_models_dto.go @@ -9,36 +9,34 @@ import ( // CreateModelReq 添加模型配置 type CreateModelReq struct { - g.Meta `path:"/createModel" method:"post" tags:"模型管理" summary:"创建模型配置" dc:"添加新的模型配置"` - ModelName string `p:"modelName" json:"modelName" v:"required#模型名称不能为空" dc:"模型名称(唯一标识)"` - ModelType int `p:"modelType" json:"modelType" v:"required#模型类型不能为空" dc:"模型类型"` - BaseURL string `p:"baseUrl" json:"baseUrl" v:"required#模型地址不能为空" dc:"模型服务地址"` - HttpMethod string `p:"httpMethod" json:"httpMethod" dc:"请求方式:GET/POST(默认POST)"` - HeadMsg map[string]any `p:"headMsg" json:"headMsg" dc:"请求头JSON结构"` - IsPrivate *int `p:"isPrivate" json:"isPrivate" dc:"是否私有化:0-私有 1-公共"` - Enabled *int `p:"enabled" json:"enabled" dc:"是否启用:0-停用 1-启用"` - IsChatModel *int `p:"isChatModel" json:"isChatModel" dc:"是否为对话模型:0-否 1-是"` - CallModel *int `p:"callModel" json:"callModel" dc:"调用模式:0-同步 1-异步 2-流式"` - RequiredFields []string `p:"requiredFields" json:"requiredFields" dc:"必填字段"` - IsOwner *int `p:"isOwner" json:"isOwner" dc:"是否为所有者:0-否 1-是"` - ApiKey string `p:"apiKey" json:"apiKey" dc:"调用凭证/密钥"` - Form []map[string]any `p:"form" json:"form" dc:"动态表单配置"` - RequestMapping map[string]any `p:"requestMapping" json:"requestMapping" dc:"请求映射"` - ResponseMapping map[string]any `p:"responseMapping" json:"responseMapping" dc:"返回映射"` - ResponseBody string `p:"responseBody" json:"responseBody" dc:"返回主体"` - ResponseTokenField string `p:"responseTokenField" json:"responseTokenField" dc:"响应中消耗token的字段映射"` - OperatorName string `p:"operatorName" json:"operatorName" dc:"运营商名称"` - TokenConfig map[string]any `p:"tokenConfig" json:"tokenConfig" dc:"token计算配置"` - ExtendMapping map[string]any `p:"extendMapping" json:"extendMapping" dc:"附加映射"` - QueryConfig map[string]any `p:"queryConfig" json:"queryConfig" dc:"查询/回调配置"` - StreamConfig map[string]any `p:"streamConfig" json:"streamConfig" dc:"流式输出配置"` - FirstFrame string `p:"firstFrame" json:"firstFrame" dc:"首帧图片参数"` - LastFrame string `p:"lastFrame" json:"lastFrame" dc:"尾帧图片参数"` - MaxConcurrency int `p:"maxConcurrency" json:"maxConcurrency" dc:"最大并发数(默认10)"` - TimeoutSeconds int `p:"timeoutSeconds" json:"timeoutSeconds" dc:"请求超时时间(秒,默认600)"` - RetryTimes int `p:"retryTimes" json:"retryTimes" dc:"失败重试次数(默认3)"` - AutoCleanSeconds int `p:"autoCleanSeconds" json:"autoCleanSeconds" dc:"任务完成后自动清理时间(秒,默认86400)"` - CallbackUrl string `p:"callbackUrl" json:"callbackUrl" dc:"回调地址"` + g.Meta `path:"/createModel" method:"post" tags:"模型管理" summary:"创建模型配置" dc:"添加新的模型配置"` + ModelName string `p:"modelName" json:"modelName" v:"required#模型名称不能为空" dc:"模型名称(唯一标识)"` + ModelType int `p:"modelType" json:"modelType" v:"required#模型类型不能为空" dc:"模型类型"` + BaseURL string `p:"baseUrl" json:"baseUrl" v:"required#模型地址不能为空" dc:"模型服务地址"` + HttpMethod string `p:"httpMethod" json:"httpMethod" dc:"请求方式:GET/POST(默认POST)"` + HeadMsg map[string]any `p:"headMsg" json:"headMsg" dc:"请求头JSON结构"` + IsPrivate *int `p:"isPrivate" json:"isPrivate" dc:"是否私有化:0-私有 1-公共"` + Enabled *int `p:"enabled" json:"enabled" dc:"是否启用:0-停用 1-启用"` + IsChatModel *int `p:"isChatModel" json:"isChatModel" dc:"是否为对话模型:0-否 1-是"` + CallModel *int `p:"callModel" json:"callModel" dc:"调用模式:0-同步 1-异步 2-流式"` + RequiredFields []string `p:"requiredFields" json:"requiredFields" dc:"必填字段"` + IsOwner *int `p:"isOwner" json:"isOwner" dc:"是否为所有者:0-否 1-是"` + ApiKey string `p:"apiKey" json:"apiKey" dc:"调用凭证/密钥"` + Form []map[string]any `p:"form" json:"form" dc:"动态表单配置"` + RequestMapping map[string]any `p:"requestMapping" json:"requestMapping" dc:"请求映射"` + ResponseMapping map[string]any `p:"responseMapping" json:"responseMapping" dc:"返回映射"` + OperatorName string `p:"operatorName" json:"operatorName" dc:"运营商名称"` + TokenConfig map[string]any `p:"tokenConfig" json:"tokenConfig" dc:"token计算配置"` + ExtendMapping map[string]any `p:"extendMapping" json:"extendMapping" dc:"附加映射"` + QueryConfig map[string]any `p:"queryConfig" json:"queryConfig" dc:"查询/回调配置"` + StreamConfig map[string]any `p:"streamConfig" json:"streamConfig" dc:"流式输出配置"` + FirstFrame string `p:"firstFrame" json:"firstFrame" dc:"首帧图片参数"` + LastFrame string `p:"lastFrame" json:"lastFrame" dc:"尾帧图片参数"` + MaxConcurrency int `p:"maxConcurrency" json:"maxConcurrency" dc:"最大并发数(默认10)"` + TimeoutSeconds int `p:"timeoutSeconds" json:"timeoutSeconds" dc:"请求超时时间(秒,默认600)"` + RetryTimes int `p:"retryTimes" json:"retryTimes" dc:"失败重试次数(默认3)"` + AutoCleanSeconds int `p:"autoCleanSeconds" json:"autoCleanSeconds" dc:"任务完成后自动清理时间(秒,默认86400)"` + CallbackUrl string `p:"callbackUrl" json:"callbackUrl" dc:"回调地址"` } type CreateModelRes struct { @@ -46,37 +44,35 @@ type CreateModelRes struct { } type UpdateModelReq struct { - g.Meta `path:"/updateModel" method:"put" tags:"模型管理" summary:"更新模型配置" dc:"更新指定ID的模型配置"` - ID int64 `p:"id" json:"id" v:"required#id不能为空" dc:"配置ID"` - ModelName string `p:"modelName" json:"modelName" dc:"模型名称"` - ModelType int `p:"modelType" json:"modelType" dc:"模型类型"` - BaseURL string `p:"baseUrl" json:"baseUrl" dc:"模型服务地址"` - HttpMethod string `p:"httpMethod" json:"httpMethod" dc:"请求方式:GET/POST"` - HeadMsg map[string]any `p:"headMsg" json:"headMsg" dc:"请求头JSON结构"` - IsPrivate *int `p:"isPrivate" json:"isPrivate" dc:"是否私有化:0-私有 1-公共"` - Enabled *int `p:"enabled" json:"enabled" dc:"是否启用:0-停用 1-启用"` - IsChatModel *int `p:"isChatModel" json:"isChatModel" dc:"是否为对话模型:0-否 1-是"` - CallModel *int `p:"callModel" json:"callModel" dc:"调用模式:0-同步 1-异步 2-流式"` - RequiredFields []string `p:"requiredFields" json:"requiredFields" dc:"必填字段"` - IsOwner *int `p:"isOwner" json:"isOwner" dc:"是否为所有者:0-否 1-是"` - ApiKey string `p:"apiKey" json:"apiKey" dc:"调用凭证/密钥"` - Form []map[string]any `p:"form" json:"form" dc:"动态表单配置"` - RequestMapping map[string]any `p:"requestMapping" json:"requestMapping" dc:"请求映射"` - ResponseMapping map[string]any `p:"responseMapping" json:"responseMapping" dc:"返回映射"` - ResponseBody string `p:"responseBody" json:"responseBody" dc:"返回主体"` - ResponseTokenField string `p:"responseTokenField" json:"responseTokenField" dc:"响应中消耗token的字段映射"` - OperatorName string `p:"operatorName" json:"operatorName" dc:"运营商名称"` - TokenConfig map[string]any `p:"tokenConfig" json:"tokenConfig" dc:"token计算配置"` - ExtendMapping map[string]any `p:"extendMapping" json:"extendMapping" dc:"附加映射"` - QueryConfig map[string]any `p:"queryConfig" json:"queryConfig" dc:"查询/回调配置"` - StreamConfig map[string]any `p:"streamConfig" json:"streamConfig" dc:"流式输出配置"` - FirstFrame string `p:"firstFrame" json:"firstFrame" dc:"首帧图片参数"` - LastFrame string `p:"lastFrame" json:"lastFrame" dc:"尾帧图片参数"` - MaxConcurrency int `p:"maxConcurrency" json:"maxConcurrency" dc:"最大并发数"` - TimeoutSeconds int `p:"timeoutSeconds" json:"timeoutSeconds" dc:"请求超时时间(秒)"` - RetryTimes int `p:"retryTimes" json:"retryTimes" dc:"失败重试次数"` - AutoCleanSeconds int `p:"autoCleanSeconds" json:"autoCleanSeconds" dc:"任务完成后自动清理时间(秒)"` - CallbackUrl string `p:"callbackUrl" json:"callbackUrl" dc:"回调地址"` + g.Meta `path:"/updateModel" method:"put" tags:"模型管理" summary:"更新模型配置" dc:"更新指定ID的模型配置"` + ID int64 `p:"id" json:"id" v:"required#id不能为空" dc:"配置ID"` + ModelName string `p:"modelName" json:"modelName" dc:"模型名称"` + ModelType int `p:"modelType" json:"modelType" dc:"模型类型"` + BaseURL string `p:"baseUrl" json:"baseUrl" dc:"模型服务地址"` + HttpMethod string `p:"httpMethod" json:"httpMethod" dc:"请求方式:GET/POST"` + HeadMsg map[string]any `p:"headMsg" json:"headMsg" dc:"请求头JSON结构"` + IsPrivate *int `p:"isPrivate" json:"isPrivate" dc:"是否私有化:0-私有 1-公共"` + Enabled *int `p:"enabled" json:"enabled" dc:"是否启用:0-停用 1-启用"` + IsChatModel *int `p:"isChatModel" json:"isChatModel" dc:"是否为对话模型:0-否 1-是"` + CallModel *int `p:"callModel" json:"callModel" dc:"调用模式:0-同步 1-异步 2-流式"` + RequiredFields []string `p:"requiredFields" json:"requiredFields" dc:"必填字段"` + IsOwner *int `p:"isOwner" json:"isOwner" dc:"是否为所有者:0-否 1-是"` + ApiKey string `p:"apiKey" json:"apiKey" dc:"调用凭证/密钥"` + Form []map[string]any `p:"form" json:"form" dc:"动态表单配置"` + RequestMapping map[string]any `p:"requestMapping" json:"requestMapping" dc:"请求映射"` + ResponseMapping map[string]any `p:"responseMapping" json:"responseMapping" dc:"返回映射"` + OperatorName string `p:"operatorName" json:"operatorName" dc:"运营商名称"` + TokenConfig map[string]any `p:"tokenConfig" json:"tokenConfig" dc:"token计算配置"` + ExtendMapping map[string]any `p:"extendMapping" json:"extendMapping" dc:"附加映射"` + QueryConfig map[string]any `p:"queryConfig" json:"queryConfig" dc:"查询/回调配置"` + StreamConfig map[string]any `p:"streamConfig" json:"streamConfig" dc:"流式输出配置"` + FirstFrame string `p:"firstFrame" json:"firstFrame" dc:"首帧图片参数"` + LastFrame string `p:"lastFrame" json:"lastFrame" dc:"尾帧图片参数"` + MaxConcurrency int `p:"maxConcurrency" json:"maxConcurrency" dc:"最大并发数"` + TimeoutSeconds int `p:"timeoutSeconds" json:"timeoutSeconds" dc:"请求超时时间(秒)"` + RetryTimes int `p:"retryTimes" json:"retryTimes" dc:"失败重试次数"` + AutoCleanSeconds int `p:"autoCleanSeconds" json:"autoCleanSeconds" dc:"任务完成后自动清理时间(秒)"` + CallbackUrl string `p:"callbackUrl" json:"callbackUrl" dc:"回调地址"` } type UpdateModelRes struct { diff --git a/model/entity/model_gateway_model.go b/model/entity/model_gateway_model.go index c7f6ec1..282b7a2 100644 --- a/model/entity/model_gateway_model.go +++ b/model/entity/model_gateway_model.go @@ -4,99 +4,96 @@ import "gitea.redpowerfuture.com/red-future/common/beans" type modelGatewayModelCol struct { beans.SQLBaseCol - ModelName string - ModelType string - BaseURL string - HttpMethod string - HeadMsg string - FormJSON string - RequestMapping string - ResponseMapping string - ResponseBody string - ResponseTokenField string - RequiredFields string - IsPrivate string - IsChatModel string - CallMode string - ApiKey string - Enabled string - MaxConcurrency string - TimeoutSeconds string - RetryTimes string - AutoCleanSeconds string - IsOwner string - OperatorName string - TokenConfig string - ExtendMapping string - QueryConfig string - StreamConfig string - FirstFrame string - LastFrame string - MaxTokens string + ModelName string + ModelType string + BaseURL string + HttpMethod string + HeadMsg string + FormJSON string + RequestMapping string + ResponseMapping string + ResponseBody string + RequiredFields string + IsPrivate string + IsChatModel string + CallMode string + ApiKey string + Enabled string + MaxConcurrency string + TimeoutSeconds string + RetryTimes string + AutoCleanSeconds string + IsOwner string + OperatorName string + TokenConfig string + ExtendMapping string + QueryConfig string + StreamConfig string + FirstFrame string + LastFrame string } var ModelGatewayModelCol = modelGatewayModelCol{ - SQLBaseCol: beans.DefSQLBaseCol, - ModelName: "model_name", - ModelType: "model_type", - BaseURL: "base_url", - HttpMethod: "http_method", - HeadMsg: "head_msg", - FormJSON: "form_json", - RequestMapping: "request_mapping", - ResponseMapping: "response_mapping", - ResponseBody: "response_body", - ResponseTokenField: "response_token_field", - RequiredFields: "required_fields", - IsPrivate: "is_private", - IsChatModel: "is_chat_model", - CallMode: "call_mode", - ApiKey: "api_key", - Enabled: "enabled", - MaxConcurrency: "max_concurrency", - TimeoutSeconds: "timeout_seconds", - RetryTimes: "retry_times", - AutoCleanSeconds: "auto_clean_seconds", - IsOwner: "is_owner", - OperatorName: "operator_name", - TokenConfig: "token_config", - ExtendMapping: "extend_mapping", - QueryConfig: "query_config", - StreamConfig: "stream_config", - FirstFrame: "first_frame", - LastFrame: "last_frame", - MaxTokens: "max_tokens", + SQLBaseCol: beans.DefSQLBaseCol, + ModelName: "model_name", + ModelType: "model_type", + BaseURL: "base_url", + HttpMethod: "http_method", + HeadMsg: "head_msg", + FormJSON: "form_json", + RequestMapping: "request_mapping", + ResponseMapping: "response_mapping", + RequiredFields: "required_fields", + IsPrivate: "is_private", + IsChatModel: "is_chat_model", + CallMode: "call_mode", + ApiKey: "api_key", + Enabled: "enabled", + MaxConcurrency: "max_concurrency", + TimeoutSeconds: "timeout_seconds", + RetryTimes: "retry_times", + AutoCleanSeconds: "auto_clean_seconds", + IsOwner: "is_owner", + OperatorName: "operator_name", + TokenConfig: "token_config", + ExtendMapping: "extend_mapping", + QueryConfig: "query_config", + StreamConfig: "stream_config", + FirstFrame: "first_frame", + LastFrame: "last_frame", } type ModelGatewayModel struct { - beans.SQLBaseDO `orm:",inline"` - ModelName string `orm:"model_name" json:"modelName"` - ModelType int `orm:"model_type" json:"modelType"` - BaseURL string `orm:"base_url" json:"baseUrl"` - HttpMethod string `orm:"http_method" json:"httpMethod"` - HeadMsg map[string]any `orm:"head_msg" json:"headMsg"` - Form []map[string]any `orm:"form_json" json:"form"` - RequestMapping map[string]any `orm:"request_mapping" json:"requestMapping"` - ResponseMapping map[string]any `orm:"response_mapping" json:"responseMapping"` - ResponseBody string `orm:"response_body" json:"responseBody"` - ResponseTokenField string `orm:"response_token_field" json:"tokenField"` - RequiredFields []string `orm:"required_fields" json:"requiredFields"` - IsPrivate *int `orm:"is_private" json:"isPrivate"` - IsChatModel *int `orm:"is_chat_model" json:"isChatModel"` - CallMode *int `orm:"call_mode" json:"callMode"` - ApiKey string `orm:"api_key" json:"apiKey"` - Enabled *int `orm:"enabled" json:"enabled"` - MaxConcurrency int `orm:"max_concurrency" json:"maxConcurrency"` - TimeoutSeconds int `orm:"timeout_seconds" json:"timeoutSeconds"` - RetryTimes int `orm:"retry_times" json:"retryTimes"` - AutoCleanSeconds int `orm:"auto_clean_seconds" json:"autoCleanSeconds"` - IsOwner *int `orm:"is_owner" json:"isOwner"` - OperatorName string `orm:"operator_name" json:"operatorName"` - TokenConfig map[string]any `orm:"token_config" json:"tokenConfig"` - ExtendMapping map[string]any `orm:"extend_mapping" json:"extendMapping"` - QueryConfig map[string]any `orm:"query_config" json:"queryConfig"` - StreamConfig map[string]any `orm:"stream_config" json:"streamConfig"` - FirstFrame string `orm:"first_frame" json:"firstFrame"` - LastFrame string `orm:"last_frame" json:"lastFrame"` - MaxTokens int `orm:"max_tokens" json:"maxTokens"` + beans.SQLBaseDO `orm:",inline"` + ModelName string `orm:"model_name" json:"modelName"` + ModelType int `orm:"model_type" json:"modelType"` + BaseURL string `orm:"base_url" json:"baseUrl"` + HttpMethod string `orm:"http_method" json:"httpMethod"` + HeadMsg map[string]any `orm:"head_msg" json:"headMsg"` + Form []map[string]any `orm:"form_json" json:"form"` + RequestMapping map[string]any `orm:"request_mapping" json:"requestMapping"` + ResponseMapping map[string]any `orm:"response_mapping" json:"responseMapping"` + RequiredFields []string `orm:"required_fields" json:"requiredFields"` + IsPrivate *int `orm:"is_private" json:"isPrivate"` + IsChatModel *int `orm:"is_chat_model" json:"isChatModel"` + CallMode *int `orm:"call_mode" json:"callMode"` + ApiKey string `orm:"api_key" json:"apiKey"` + Enabled *int `orm:"enabled" json:"enabled"` + MaxConcurrency int `orm:"max_concurrency" json:"maxConcurrency"` + TimeoutSeconds int `orm:"timeout_seconds" json:"timeoutSeconds"` + RetryTimes int `orm:"retry_times" json:"retryTimes"` + AutoCleanSeconds int `orm:"auto_clean_seconds" json:"autoCleanSeconds"` + IsOwner *int `orm:"is_owner" json:"isOwner"` + OperatorName string `orm:"operator_name" json:"operatorName"` + TokenConfig map[string]any `orm:"token_config" json:"tokenConfig"` + ExtendMapping map[string]any `orm:"extend_mapping" json:"extendMapping"` + QueryConfig map[string]any `orm:"query_config" json:"queryConfig"` + StreamConfig map[string]any `orm:"stream_config" json:"streamConfig"` + FirstFrame string `orm:"first_frame" json:"firstFrame"` + LastFrame string `orm:"last_frame" json:"lastFrame"` } + +const ( //ResponseMapping 下的字段 + ResponseBody = "response_body" //返回主体 + TotalTokens = "total_tokens" //总token数 +) diff --git a/service/task/worker.go b/service/task/worker.go index de31f83..5cdd232 100644 --- a/service/task/worker.go +++ b/service/task/worker.go @@ -205,7 +205,7 @@ func (w *asyncWorker) callModelAsync(ctx context.Context, task *entity.ModelGate return nil, err } // 2. 拿到 task_id - taskID := gjson.New(body).Get(model.ResponseBody).String() + taskID := gjson.New(body).Get(entity.ResponseBody).String() // 3. 创建等待通道 ch := make(chan asyncResult, 1) @@ -310,8 +310,8 @@ func (w *asyncWorker) parseAndRetry(ctx context.Context, body map[string]any, ta } // 2) 先存 token 到数据库,防止后续失败丢失 - if _, ok := mapped[model.ResponseTokenField]; ok { - task.ExpendTokens = gconv.Int64(mapped[model.ResponseTokenField]) + if _, ok := mapped[entity.TotalTokens]; ok { + task.ExpendTokens = gconv.Int64(mapped[entity.TotalTokens]) _, err = dao.ModelGatewayTask.Update(ctx, &entity.ModelGatewayTask{ SQLBaseDO: beans.SQLBaseDO{Id: task.Id}, ExpendTokens: task.ExpendTokens, @@ -327,7 +327,7 @@ func (w *asyncWorker) parseAndRetry(ctx context.Context, body map[string]any, ta return parsed, nil } case public.BuildTypeStruct: - parsed = util.ParseStructResult(mapped, model.ResponseBody) + parsed = util.ParseStructResult(mapped, entity.ResponseBody) return parsed, nil default: return mapped, nil diff --git a/update.sql b/update.sql index 248f060..bde1dc0 100644 --- a/update.sql +++ b/update.sql @@ -33,7 +33,6 @@ CREATE TABLE IF NOT EXISTS model_gateway_models ( max_concurrency int4 NOT NULL DEFAULT 10, timeout_seconds int4 NOT NULL DEFAULT 600, retry_times int2 NOT NULL DEFAULT 3, - auto_clean_seconds int4 NOT NULL DEFAULT 86400, response_token_field varchar(128) NOT NULL DEFAULT '', call_mode int2 NOT NULL DEFAULT 0, 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.updated_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_type 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.head_msg 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.enabled 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.call_mode IS '调用模式:0-同步 1-异步 2-流式'; COMMENT ON COLUMN model_gateway_models.form_json IS '动态表单结构'; COMMENT ON COLUMN model_gateway_models.request_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.timeout_seconds 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.call_mode IS '调用模式:0-同步 1-异步 2-流式'; COMMENT ON COLUMN model_gateway_models.required_fields IS '必选字段列表'; COMMENT ON COLUMN model_gateway_models.max_tokens IS '最大 token 数,0 表示不传';