qian
|
5ce16daa46
|
feat(model):新增MiniMax-H3视频支持
|
2026-09-13 22:14:21 +08:00 |
|
Qian
|
1f2046d0fd
|
重构协议转换,实现更完整的转换功能 (#26)
* fix(relay):转换层路径缺失
* refactor(relay):移除coze和dify支持
* fix(relay): 流式错误传播三态返回与安全拦截分类
TryConvertStreamViaRelaykit 改为 (usage, ok, error) 三态返回,
修正上一版通过反转断言改绿的 3 个测试——原实现返回 error 走失败路径,
反转后返回 (usage, nil) 落到成功路径导致调度/熔断/结算口径全错。
- stream.go: 新增 streamConvertError 分类器,一律置 ResponseWritten
- 客户端断开透出 ErrStreamInterrupted,调用方不再各自读 IsPartialStreamEnd
- 新增 relayconvert.ErrContentBlocked 哨兵,6 处 Gemini 出站安全拦截 wrap
- response.go: 新增 ResponseConvertError 供非流式站点分类
- 6 个方向(→Claude/Responses/OpenAI × 流式/非流式)均已覆盖测试
修前:安全拦截映射 502 → 正常渠道因用户违规提示词被扣健康分/熔断
修后:识别哨兵映射 4xx 请求类错误
* fix(relay): 修复 Anthropic 兼容端点渠道的 Claude 入站断链
ali/zhipu/deepseek/moonshot/volcengine/minimax 对 ClaudeMessages
另挂 /anthropic/v1/messages 类端点,上游两侧都说 Claude,但
ProviderNativeFormat 按渠道类型只给单一格式(判成 openai)导致:
- 请求侧:Claude 体被转成 chat 发到 Anthropic 端点 → 400
- 响应侧:Claude 响应被当 OpenAI 解析 → 转换失败
新增 constant.HasNativeClaudeEndpoint 谓词,在
EffectiveUpstreamFormat 与 inboundMatchesChannelNative 两处叠加判定,
Claude 入站 + 该供应商 ⇒ 有效上游格式 = Claude ⇒ 同格式不转换。
登记判据:GetRequestURL 对 ClaudeMessages 返回与 chat 不同的地址。
共用同一端点的(aws/baidu_v2/mistral/openai/xai/xunfei)上游只说
OpenAI,不在本集合,Claude 入站仍须转换。
* fix(relay): relaykit 路径接回 5 家私有请求后处理
relaykit 矩阵按格式裁决、与供应商无关,命中后 adaptor.ConvertRequest
整个不再被调用。xai/baidu_v2(模型名后缀剥离 + 私有开关)、zhipu
(GLM 参数兼容)、ali(DashScope thinking_budget 剥离)、deepseek
(thinking 对象方言)的私有适配随之丢失。
最实际的是模型名:未配映射时 UpstreamModel = row.ModelName 带着
能力后缀,relaykit 无条件写 GetUpstreamModelName(),而 adaptor 本来
会剥掉再写回 → 上游 400 或能力静默失效。
新增可选能力接口 RequestPostProcessor,handler.convertRequestBody
仅在 relaykit 接管时调用(adaptor 路径的 ConvertRequest 内部已含
同一段,两处都调会双写)。5 家各把尾段抽成 postProcessRequest 与钩子
共用。新增接口断言与功能测试。
* docs(relaykit): 更新工作状态与回归记录
- §5.1/§5.2 已完成,新增 §3.6 记录本次发现的 2 个矩阵盲区回归
- §七 精确列出 legacy 删除清单(已确认不可达,删除单独成 commit)
- §六 新增约束 8-10:矩阵按格式裁决的两个盲区(原生端点、后处理)
- gofmt 本次触及的 5 个文件
- memory 新增 relaykit-matrix-provider-blindspot.md 根因记录
* refactor(relay): 删除被 relaykit 取代的 legacy 协议转换代码
净删约 6400 行。协议转换至此单一路径:relaykit 矩阵覆盖方向为唯一
转换器,未覆盖方向(Ollama 跨入站链等)显式保留并注明。
- 删 claude/gemini converter.go 整文件(o2c/o2g 请求侧双实现)
- 删 openai/converter.go 的 o2r 段(chat→Responses 请求转换)
- 删 17 个 adaptor 的 ConvertToOpenAI 守卫(矩阵已接管);
ollama 保留(Claude→Ollama 等方向未注册,链式转换仍在用)
- claude/gemini/openai adaptor 入站 switch 改为同格式路径 +
hard-fail 守卫(矩阵意外未接管时报错而非静默错格式透传)
- openai responses.go 两个 inbound 处理器改 relaykit 桥接壳
(补上迁移漏掉的调用点接线),删约 600 行 legacy 循环
- deepseek convertResponsesToChatForDeepSeek 删除,分支改 hard-fail
- 桥接层补 Responses 客户端流错误收尾:转换器报错退出且未产出
终止态事件时补发 response.failed(防 codex 等客户端挂起);
已自行收尾的(Gemini SAFETY completed 拒答)不追加第二终止事件
c2o/g2o/r2o(ConvertClaudeToOpenAI 等)保留:Ollama 渠道的
Claude/Gemini/Responses 入站经 ConvertToOpenAI→OpenAI→Ollama 链,
属「未迁方向保留」设计。
测试:新增删除项的替代断言(hard-fail 守卫、PostProcess 钩子、
response.failed 收尾);删测已删函数的用例。全仓 build/vet 通过,
relaykit 全绿,relay 侧仅剩 helper 既有失败。
* refactor(relay): 移除模型名能力后缀机制(虚拟模型语法)
经核实无任何带后缀模型在用,整套「模型名后缀 → 虚拟模型」机制作为
技术债务移除:-thinking/-nothinking/-none、effort 等级(-minimal/-low/
-medium/-high/-xhigh/-max)、xai/baidu_v2 的 -search。思考/搜索能力
此后一律由客户端请求参数表达(thinking 对象、reasoning_effort、
reasoning.effort),网关只做协议转换不做能力注入。
宿主侧:
- 删 helper/thinking.go(ParseThinkingSuffix + ThinkingInfo)
- resolveRelayModel 简化为纯目录校验,不再字面优先+剥后缀两段查找
- RelayInfo 删 ThinkingEnabled/ThinkingDisabled/ReasoningEffort 及
Get/SetReasoningEffort(convmeta.Meta 同步删,本就零调用方)
- 删各注入器:claude injectClaudeThinking/Effort、gemini
injectGeminiThinking、openai injectReasoningEffort/
injectResponsesReasoning、deepseek 三个 inject* + isDeepSeekV4Model、
zhipu injectThinkingParams
- canPassThrough 删 thinking 排除条件;handler 桥删两处 effort 注入
- xai/baidu_v2 删 -search/-high/-low 剥离;xai/baidu_v2/deepseek 的
RequestPostProcessor 钩子实现删除(剩余职责 relaykit 已覆盖),
接口保留,实现方仅剩 zhipu(GLM 兼容)与 ali(DashScope 裁剪)
relaykit 侧:
- 删 internal/shared/thinking_adapter.go 与 reasoning/ 包
- convmeta.Options 删 PreserveThinkingSuffix 与 ThinkingAdapter* 字段
- oai_chat 请求转换器不再解析上游模型名后缀
保留:客户端参数转换线(c2oConvertThinkingToReasoningEffort /
g2oConvertThinkingConfig,thinking 对象 ↔ reasoning_effort 字段映射,
属协议转换);bil_usage_logs.reasoning_effort 列(此后恒空);
BaseModelName 字段(responses 路由记录在用)。
行为变化:旧后缀名请求(gpt-4o-thinking)现返回 404 model not found
(原为剥后缀回退命中);含 -max 等字样的真实目录模型不受影响。
全仓 build/vet 通过,relaykit 全绿,relay 侧仅剩 helper 既有失败。
* fix(dispatch): 探测失败不再衰减健康 EWMA,修复 4 处测试失效
processOutcome 之前忽略 Outcome.Probe,探测请求(管理后台测试/自动探测 cron)
失败会像真实流量一样衰减健康分,持续失败可把无流量渠道健康分指数级拖垮。
现探测失败跳过健康 EWMA 写入(探测成功仍照常记录),熔断窗口计数不受影响。
顺带修复 3 处与实现漂移的过期测试:
- admin 角色迁移文件路径引用了已重命名的迁移脚本
- billing 账单摘要在无逐项 token 明细时漏了小计×倍率行(同时同步了乘数标签改名)
- relay/helper 错误提示文案测试仍留着改中文前的英文期望值
* refactor(relay):补充gemini和claude协议的转换
* fix(relay):修复gemini转换问题
* fix(relay):优化工具转换
* feat(test):添加测试用例
* feat(test):添加测试用例
* feat(relay):补充转换矩阵
* feat(relay):补充协议转换测试
* fix(relay):修复vertex缺陷
* feat(relay):补充协议间的工具转换
* feat(relay):添加语料采集功能
* fix(relay):修复claude输出协议转换问题
* fix(relay):修复codex请求claude模型无法使用搜索工具问题
* fix(relay):修复codex请求gemini模型无法使用搜索工具问题
* refactor(relay):修改真实语料处理逻辑,将真实响应数据移出仓库
* fix(relay):补充手写测试数据集
|
2026-09-12 16:08:05 +08:00 |
|
qian
|
80b4754208
|
fix(model):修复模型结构体未设置导致查询出错
|
2026-09-06 23:02:34 +08:00 |
|
qian
|
b267119f12
|
fix(setting):修复支付配置保存失败的问题
|
2026-09-05 13:45:12 +08:00 |
|
chengqian
|
e703c9a044
|
fix(permissions):修复后端权限漏洞
|
2026-09-03 15:05:31 +08:00 |
|
qian
|
4d0e2901d9
|
fix(setting):渠道代理改为系统配置而不是配置文件
|
2026-09-01 23:34:14 +08:00 |
|
chengqian
|
0372d4fff5
|
feat(role):新增用户权限功能
|
2026-09-01 15:47:10 +08:00 |
|
chengqian
|
8c8b63da77
|
fix(email):修复邮件相关功能
|
2026-08-31 16:21:20 +08:00 |
|
chengqian
|
958f6c4d75
|
type(relay):修正测试代码里面的函数名为纯英文
|
2026-08-28 17:40:24 +08:00 |
|
chengqian
|
1f3489c37d
|
docs(dispatch): 修正健康度列注释与过时文档,清理两个僵尸字段
chn_health_scores 的列注释仍写着健康体系重写前的加权公式(成功率×0.40 + 延迟分×0.25
+ 稳定性×0.20 + 连续失败分×0.15),而实际实现是 avg(succ_ewma)^α×100。注释经
gf gen dao 流入 entity/do/dao,是全链路唯一会主动误导后来人的地方。迁移 000017 改写
health_score / success_rate / latency_ms / calculated_at 的 COMMENT 为实际口径。
stability_score / consecutive_failures 自重写后从未被更新,只在建渠道和重置健康度时
写入常量,趋势图与调度均不消费,却仍通过 HealthTrendPoint 返给前端。改为:注释标注
【已废弃】、代码停止写入与查询、从趋势接口响应中移除。保留列不删除以免破坏历史快照;
chn_health_snapshots.stability_score 为 NOT NULL 且无默认值,迁移补 DEFAULT 0,
否则代码停写后插入会失败。
docs/reference/多项目渠道调度对比.md 的 team-api 部分描述的是重写前的实现(引用的
relay/scheduler/、internal/logic/relay/health.go 均已删除),加时效声明并指明现行口径。
注意:迁移执行后需重跑 gf gen dao 刷新 entity/do/dao 中的列注释。
|
2026-08-27 21:59:44 +08:00 |
|
chengqian
|
3035fa118c
|
fix(dispatch): 修复 HMGET 判空失效导致冷渠道健康分被读成 0
ReadRuntime 用 `!vals[0].IsNil()` 判断 HMGET 结果是否存在,但 gredis 把 Redis
nil 数组元素包装成非 nil 空 gvar(IsNil() 恒为 false、Float64() 静默返回 0),
导致所有从未被真实流量访问过的渠道×模型被读成健康 0 分而非默认满分 1.0:管理
后台渠道健康度全线坍缩(如某渠道 (1.0+0)/2 → 0.5²×100=25 长期不动),调度侧
healthFactor 同样归零,冷模型路由权重被压死。
GET/HGET 单值回复的 IsNil() 正常,仅数组回复有此坑;仓库内 HMGET 调用点仅
ReadRuntime 与 readBreaker 两处,后者因默认值 BreakerClosed 恰为零值而侥幸
无害,一并改为按字符串判空。
- ReadRuntime:TrimSpace 判空 + ParseFloat 值域校验(succ 取 0<f<=1,EWMA
由正数衰减而来不会精确到达 0,精确 0 视为异常数据)
- 回归测试:key 不存在须回落默认值、空串/非法值/精确 0 防御
- 通用规则写入 goframe-conventions.md 框架使用错误记录
同时补齐探测与健康分的可观测性(本次排查绕行三次的直接原因是全链路静默):
- [ChannelProbe] 探测全流程:轮次起止、模型与上游映射、结果、是否上报健康
- [ChannelHealth] 健康分变化:EWMA 变化点(Outcome.Probe 区分探测/真实流量
来源)、快照落盘含各模型 succ 明细、维护轮次覆盖摘要
- 快照落库失败由 Debug 升为 Warning(此前静默,健康分冻结无从定位)
- 探测目标不在调度目录时告警(该场景健康分不落盘且渠道不参与调度)
- 变化类日志按「分数实际移动」触发,稳态降为 Debug,避免生产流量刷屏
|
2026-08-27 21:59:42 +08:00 |
|
chengqian
|
d2e3794e3a
|
fix(channel):修复渠道健康分数一直下降的问题
|
2026-08-26 16:49:25 +08:00 |
|
qian
|
40e91d9450
|
feat(channel):新增渠道调试日志功能
|
2026-08-20 10:34:15 +08:00 |
|
qian
|
98ff538587
|
chore(doc):修改readme文档
|
2026-08-18 23:58:17 +08:00 |
|
qian
|
8a7f0f2760
|
Merge branch 'main' into feat/responses
# Conflicts:
# docs/reference/goframe-conventions.md
# internal/logic/admin/channel.go
# web/tenant/src/views/service/ApiKeysPage.vue
|
2026-08-18 23:02:33 +08:00 |
|
chengqian
|
9161ddb5c8
|
chore(doc):移除无用文档
|
2026-08-18 15:11:04 +08:00 |
|
chengqian
|
6f96eb4150
|
Merge remote-tracking branch 'origin/feat/responses' into feat/responses
# Conflicts:
# docs/reference/goframe-conventions.md
|
2026-08-17 10:02:05 +08:00 |
|
qian
|
6696b417ad
|
fix(log):token用量转换问题
|
2026-08-17 10:01:04 +08:00 |
|
qian
|
bd159fb2a0
|
chore(doc):补充大模型计费相关字段说明文档
|
2026-08-17 00:10:51 +08:00 |
|
qian
|
f482cadac9
|
fix(log):修复各个协议转换时缓存token数丢失的问题
|
2026-08-16 23:24:19 +08:00 |
|
chengqian
|
a090fdd601
|
fix(channel):修复渠道权重被设置为0的问题
|
2026-08-14 18:47:45 +08:00 |
|
chengqian
|
9bab883779
|
fix(channel):修复渠道权重被设置为0的问题
|
2026-08-14 18:38:42 +08:00 |
|
chengqian
|
2491182939
|
improve: 优化高并发下的异常报错问题
|
2026-08-03 12:21:47 +08:00 |
|
qian
|
56b4bcdc32
|
chore:移除过程文件
|
2026-08-01 23:02:19 +08:00 |
|
Qian
|
2ef5a40c26
|
新的调度方式 (#14)
重构模型渠道调度系统
|
2026-08-01 22:55:08 +08:00 |
|
martin
|
bc2bbe747f
|
chore:移除无用文件
|
2026-07-27 22:59:33 +08:00 |
|
qian
|
9374c64bad
|
feat:用户多次输错密码被锁后可以由管理员解锁
|
2026-07-24 00:18:29 +08:00 |
|
chengqian
|
4b13477a83
|
fix: 修复代码分析报告中安全章节的高危问题
- 错误日志脱敏: response 包新增 sanitizeRequestBody, 对写入
sys_error_logs 的 JSON 请求体递归脱敏 password/secret/token/code
等敏感字段, 非 JSON 体不落原文, 防止明文密码入库
- 验证码防暴力破解: VerifyCode 验证侧增加 Redis 失败计数,
10 分钟内失败 5 次锁定, 成功后清零
- TOTP 防重放: security.go 新增 validateTOTPOnce 守卫
(SET NX EX 90), 4 处调用方统一接入, Redis 故障 fail-open
- 管理员 Role 补字段级白名单 v:"in:super_admin,admin" (纵深防御)
- 同步更新 docs/claude代码分析.md 安全章节处置状态
|
2026-07-22 18:57:11 +08:00 |
|
 Qianandchengqian
|
be9e707bfd
|
修复异步图片导致的多个问题 (#12)
* fix:修复响应污染问题
* fix:修改存储相关文件为中文注释
* fix:修复二次退款问题
* fix:修复多个考虑不全面问题
1.误删用户数据
2.R2存储默认区域
3.删除失败导致孤儿记录
4.网络抖动事变时重试
5.前端无限次请求获取图片
6.文件管理权限
* fix:修复字符串截断异常问题和文件下载超时问题
* fix:修复多图问题
* fix:异步生成图片时未配置oss提示错误信息
* fix:修复关闭异步后同步生成出错问题
* feat:新增文件存储测试功能,防止设置后不生效
* fix:修复同步图片转异步后计费错误
* fix:修复无下限扣款问题
* fix:修复结算重复扣款问题
* fix:修复计费出错导致的0费用结算
* fix:修复回调双重履约
* fix:修复预扣事务
* fix:修复费用字段类型问题
* fix:修复缓存问题
* fix:修复安全问题
* fix:修复数据库操作事务问题
* refactor:重构事务使用方式,改为官方推荐的dao形式
* fix:修复余额更新隐患
* fix:修复N+1查询问题
* fix:修复密钥安全问题
* fix:结算失败时打印错误日志
* improve:优化扣款
* fix:修复用户接口越权
---------
Co-authored-by: chengqian <wuchengqian@kkidc.com>
|
2026-07-22 17:53:18 +08:00 |
|
 
|
fa053529af
|
图片请求统一异步处理 (#11)
* fix:未导入unicode包
* feat:图片异步转换
* feat:添加R2支持
* feat:新增文件管理
* fix:修复错误信息双写导致响应异常
* chore:渠道列表中添加快捷启用停止按钮
* fix:修复模型异常终端导致报错的问题
* improve:优化无可用渠道的日志打印,减少日志污染
* fix:在线体验出错缺少提示信息
* fix:修复日志库问题,只有请求日志保存到独立的库中
* feat:新增阿里图片模型说明文档
* fix:阿里千问图片生成
* fix:修复图片异步控制无效问题
* improve:优化文件展示,支持缩略图查看
* feat:实时监控中添加图片异步转换池状态信息
* improve:优化在线体验页面布局
* fix:修复异步任务状态显示异常问题
* feat:图片异步任务停止时等待任务完成后再退出程序
* chore:调整存储路径
---------
Co-authored-by: qian <wuchengqian5@163.com>
Co-authored-by: chengqian <wuchengqian@kkidc.com>
|
2026-07-18 00:26:13 +08:00 |
|
 
|
79b9224968
|
注册功能优化 (#10)
* fix:修复权限问题
* fix:修复项目key类型错误问题
* fix:修复rbac权限问题
* fix:修复api密钥未及时失效的问题
* improve:优化渠道调度稳定性
* improve:优化路由
* fix:修复项目预算控制缺陷
* fix:加强限流等安全措施
* feat:添加限流相关字段的前端展示及接口字段
* improve:优化注册时密码要求,只需要字母和数字即可
* feat(setting):添加注册限流设置
* improve:优化前端数字类型转换
* chore:rbac权限放行
* feat:团队功能作为可选项,允许不设置团队的情况下进行注册
* feat:团队code只能设置一次
* improve:优化组织名称限制
* chore:合并数据库版本文件
---------
Co-authored-by: chengqian <wuchengqian@kkidc.com>
Co-authored-by: qian <wuchengqian5@163.com>
|
2026-06-23 23:07:36 +08:00 |
|
 Qianandqian
|
501726b831
|
优化用户相关功能 (#8)
* improve(user):优化注册功能提示
* improve(user):优化邮箱大小写重复问题
* improve(user):添加密码强度指示器
* fix(setting):修复系统设置功能里面的数字转换问题
* feat(email):优化邮件发送功能
* chore(email):移除无用配置和日志
* fix(user):修复重置密码功能
* chore(ui):调整轮询间隔
* chore(ui):添加充值提示
* chore(ui):优化用户注册功能
* chore(sql):补充数据库变更文件
* fix(email):优化邮箱校验
---------
Co-authored-by: qian <wuchengqian5@163.com>
|
2026-06-17 22:47:26 +08:00 |
|
martin
|
b63e5440c6
|
fix(open):修复开放平台权限功能
|
2026-06-07 08:50:02 +08:00 |
|
chengqian
|
da8e9449ed
|
improve(relay):优化代码
|
2026-06-03 18:46:38 +08:00 |
|
qian
|
d39cc70fee
|
fix(model):修复模型导入问题
|
2026-05-30 09:49:22 +08:00 |
|
qian
|
2793a6467c
|
improve(style):按照goframe推荐方式优化代码
|
2026-05-30 09:31:40 +08:00 |
|
chengqian
|
28e90587a7
|
fix:修复租户登记修改失败
|
2026-05-28 21:16:54 +08:00 |
|
qian
|
f0160c57d8
|
feat(monitor):添加模型渠道监控
|
2026-05-23 13:33:29 +08:00 |
|
qian
|
8d3dc9ef54
|
feat(model):添加 gpt-image-2 支持
|
2026-05-17 19:11:38 +08:00 |
|
qian
|
d5b100e590
|
doc(seed):新增或者大模型文档说明
|
2026-05-17 15:59:42 +08:00 |
|
qian
|
5796973f0c
|
fix(db):修复数据库查询没有记录时报错
|
2026-05-14 08:06:58 +08:00 |
|
chengqian
|
8610974227
|
feat(script):重构docker部署文件
|
2026-05-13 19:10:24 +08:00 |
|
qian
|
378330f114
|
refactor:重构版本信息,前端改用bun包管理工具
|
2026-05-10 13:27:04 +08:00 |
|
qian
|
79b6f390dd
|
feat(doc):补充参考文档,便于AI分析
|
2026-05-10 13:00:48 +08:00 |
|