erio
|
513da0f4f7
|
chore: bump version to 0.1.105.25
|
2026-03-31 21:21:03 +08:00 |
|
erio
|
5631c5f20c
|
feat(ui): 渠道列表状态列改为 Toggle 开关,支持直接启用/禁用
|
2026-03-31 21:21:03 +08:00 |
|
erio
|
729530dfa6
|
chore: bump version to 0.1.105.24
|
2026-03-31 20:48:18 +08:00 |
|
erio
|
963c3b5dd6
|
fix(ui): 渠道定价折叠态模型名完整展示,不再截断
去掉 max-w-[120px] truncate 限制,改用 flex-wrap 允许换行,
充分利用空白区域展示完整模型名。
|
2026-03-31 20:48:18 +08:00 |
|
erio
|
493fa9d4c2
|
chore: bump version to 0.1.105.23
|
2026-03-31 20:38:02 +08:00 |
|
erio
|
9df5d90e78
|
fix(channel): 模型限制以原始请求模型检查定价列表,而非映射后模型
开启 restrict_models 时,应用原始模型名查定价列表;
定价列表未命中即拒绝,不因通配符映射而绕过限制。
|
2026-03-31 20:38:02 +08:00 |
|
erio
|
5a2d423d02
|
chore: bump version to 0.1.105.22
|
2026-03-31 20:11:46 +08:00 |
|
erio
|
adcf6328b4
|
fix(openai): 非 OAuth 账号 Chat Completions 也提取 system 消息并注入 instructions
GPT-5/Codex 等模型要求请求中必须包含 instructions 字段。
之前 extractSystemMessagesFromInput + applyInstructions 仅在
OAuth 路径执行,API Key 账号走 Chat Completions 时 system 消息
保留在 input 中但缺少 instructions,导致上游返回 400。
同时在 ChatCompletionsRequest 和 ResponsesRequest 中增加
Instructions 字段,支持客户端直接传入 instructions 透传到上游。
|
2026-03-31 20:11:39 +08:00 |
|
erio
|
788288c86b
|
chore: bump version to 0.1.105.21
|
2026-03-31 19:40:18 +08:00 |
|
erio
|
9311ca31fc
|
fix(channel): 前端重复模型校验改为按平台检查
后端 validateNoDuplicateModels 使用 platform:model 复合键,
前端之前跨平台扁平化检查导致不同平台下的同名模型误报重复。
|
2026-03-31 19:40:07 +08:00 |
|
erio
|
72b9d198a1
|
feat(channel): 模型映射源支持通配符匹配
与定价通配符一致,映射源支持 * 后缀通配符(最长前缀优先):
- `*` 匹配所有模型
- `claude-*` 匹配 claude- 开头的模型
- 精确匹配优先于通配符
|
2026-03-31 19:32:14 +08:00 |
|
erio
|
da72cf670a
|
fix(channel): 渠道表单校验增强 — 空模型定价报错 + 必填标记
- 保存时校验:定价条目有但模型列表为空时报错并跳转到对应平台 tab,
不再静默跳过导致数据丢失
- 保存时校验:启用的平台必须至少选择一个分组
- 分组关联标签增加红色 * 必填标记
|
2026-03-31 19:22:48 +08:00 |
|
erio
|
3840dc8787
|
fix(channel): 修复 invalidateCache 存入 typed nil 导致 loadCache panic
invalidateCache 存入 (*channelCache)(nil),类型断言 ok=true 但
指针为 nil,后续 cached.loadedAt 导致 nil pointer dereference。
在 loadCache 双重检查处增加 cached != nil 防御。
|
2026-03-31 18:37:30 +08:00 |
|
erio
|
c8eec9c076
|
chore: bump version to 0.1.105.20
|
2026-03-31 17:50:39 +08:00 |
|
erio
|
bd17bde19c
|
Merge branch 'feature/channel' into release/custom-0.1.105
|
2026-03-31 17:23:31 +08:00 |
|
erio
|
d058e5c112
|
fix(channel): 全平台渠道映射覆盖 + 公共函数抽取 + 死代码清理
- 4个缺失handler入口添加渠道映射+限制检查(ChatCompletions/Responses/Gemini)
- 模型限制错误信息优化,区分"模型不可用"和"无账号"
- OpenAI RecordUsage RequestedModel 改用 OriginalModel
- ResolveChannelMappingAndRestrict/ReplaceModelInBody 抽取到 ChannelService 消除跨service重复
- validateNoDuplicateModels 按 platform:model 去重
- 删除 Channel.ResolveMappedModel 死代码和 CalculateCostWithChannel Deprecated方法
- 移除冗余nil检查,抽取 validatePricingBillingMode 公共校验
|
2026-03-31 15:26:20 +08:00 |
|
erio
|
b4514501dd
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-31 02:11:52 +08:00 |
|
erio
|
d1791f43f8
|
refactor(channel): 抽取渠道映射公共函数 + OpenAI映射到body + 空响应修复 + 清理日志
- 抽取 ResolveChannelMappingAndRestrict 统一入口(5处→1个方法)
- 抽取 BuildModelMappingChain 到 ChannelMappingResult 方法(5处→1行调用)
- OpenAI 三入口 Forward 前应用渠道映射到请求体
- OpenAI Responses/Messages 限制检查添加错误响应
- 清理前端 3 处 console.log 调试日志
|
2026-03-31 02:11:24 +08:00 |
|
erio
|
8741864b79
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-31 01:34:37 +08:00 |
|
erio
|
946180ef0d
|
fix(channel): 模型限制用映射后模型检查 + 平台开关保留配置不删除
- OpenAI 网关三处 IsModelRestricted 改用 channelMapping.MappedModel
- 前端平台勾选改为 enabled 开关,取消勾选不清空配置数据
- formToAPI/校验只处理 enabled 的平台
|
2026-03-31 01:34:16 +08:00 |
|
erio
|
f27f1254ae
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-31 00:24:22 +08:00 |
|
erio
|
a65a8bcd93
|
feat(channel): 通配符定价匹配 + OpenAI BillingModelSource + 按次价格校验 + 用户端计费模式展示
- 定价查找支持通配符(suffix *),最长前缀优先匹配
- 模型限制(restrict_models)同样支持通配符匹配
- OpenAI 网关接入渠道映射/BillingModelSource/模型限制
- 按次/图片计费模式创建时强制要求价格或层级(前后端)
- 用户使用记录列表增加计费模式 badge 列
|
2026-03-31 00:23:45 +08:00 |
|
erio
|
7347916f09
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-30 23:05:04 +08:00 |
|
erio
|
08593ea3e4
|
fix(billing): 按次计费回退到默认 PerRequestPrice
ResolvedPricing 新增 DefaultPerRequestPrice,当无层级匹配时使用渠道的默认按次价格
|
2026-03-30 23:04:48 +08:00 |
|
erio
|
9876c05efc
|
merge: feature/channel → release (v0.1.105.15) — 计费迁移到 CalculateCostUnified
|
2026-03-30 22:59:15 +08:00 |
|
erio
|
f0d5163973
|
feat(billing): 网关计费迁移到 CalculateCostUnified + 模型限制错误统一
- GatewayService/OpenAIGatewayService 注入 ModelPricingResolver
- RecordUsage 从旧路径迁移到 CalculateCostUnified(支持 per_request/image 模式)
- 无渠道时自动回退旧路径,保持原有行为
- 长上下文双倍计费仅在无渠道定价时生效
- CostBreakdown 新增 BillingMode 字段,使用日志记录实际计费模式
- 模型限制错误改为与"无可用账号"相同的 503 响应
|
2026-03-30 22:58:28 +08:00 |
|
erio
|
54976c77ce
|
merge: feature/channel → release (v0.1.105.14) — 使用记录计费模式
|
2026-03-30 22:14:24 +08:00 |
|
erio
|
9e848ec2f0
|
feat(usage): 使用记录增加计费模式字段 — 记录/展示/筛选 token/按次/图片
- DB: usage_logs 表新增 billing_mode VARCHAR(20) 列
- 后端: RecordUsage 写入时根据 image_count 判定计费模式
- 前端: 使用记录表格新增计费模式 badge 列 + 筛选下拉
|
2026-03-30 22:13:16 +08:00 |
|
erio
|
a0d15fe784
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-30 21:47:21 +08:00 |
|
erio
|
bef6728ada
|
fix(channel): splice替换model_pricing条目 + 增强调试日志
|
2026-03-30 21:47:06 +08:00 |
|
erio
|
465ec9a9f3
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-30 21:37:57 +08:00 |
|
erio
|
79c3f4481a
|
debug(channel): 添加 formToAPI 调试日志 + 移除 Sora 平台
|
2026-03-30 21:37:27 +08:00 |
|
erio
|
b42b2a7491
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-30 21:06:55 +08:00 |
|
erio
|
47d52a971e
|
feat(channel): 平台配置改为勾选式,勾选后出现 Tab 但不自动跳转
|
2026-03-30 21:06:38 +08:00 |
|
erio
|
4e966d2331
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-30 19:06:28 +08:00 |
|
erio
|
6f6365e2c0
|
feat(channel): 对话框 Tab 布局 — 基础设置 + 平台独立 Tab + 固定高度
|
2026-03-30 19:06:03 +08:00 |
|
erio
|
a77eb1dc21
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-30 17:51:18 +08:00 |
|
erio
|
ed4a4f95f6
|
fix(channel): 分组加载时序修复 — 预加载 + await 确保分组数据就绪
|
2026-03-30 17:50:48 +08:00 |
|
erio
|
467bba161c
|
merge: feature/channel → release/custom-0.1.105 (v0.1.105.8)
|
2026-03-30 17:27:12 +08:00 |
|
erio
|
2f9f7de19d
|
fix(i18n): 渠道管理页面标题国际化
|
2026-03-30 17:26:16 +08:00 |
|
erio
|
4db51115cd
|
chore: bump version to 0.1.105.7
|
2026-03-30 16:13:53 +08:00 |
|
erio
|
2f1168a126
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
# Conflicts:
# backend/cmd/server/wire_gen.go
|
2026-03-30 16:13:52 +08:00 |
|
erio
|
c74c6f3f1f
|
feat(channel): 模型价格自动填充 + 默认定价 API
- 新增 GET /admin/channels/model-pricing?model=xxx API
- 从 BillingService 查询 LiteLLM/Fallback 默认定价
- 前端添加模型时自动查询并填充价格($/MTok)
- 仅在所有价格字段为空时才自动填充,不覆盖手动配置
|
2026-03-30 16:11:49 +08:00 |
|
erio
|
f954e3875e
|
chore: bump version to 0.1.105.6
|
2026-03-30 15:04:58 +08:00 |
|
erio
|
b80361e57a
|
Merge remote-tracking branch 'origin/feature/channel' into release/custom-0.1.105
|
2026-03-30 15:04:48 +08:00 |
|
erio
|
c67e5a9cd9
|
feat(channel): 缓存扁平化 + 网关映射集成 + 计费模式统一 + 模型限制
- 缓存按 (groupID, platform, model) 三维 key 扁平化,避免跨平台同名模型冲突
- buildCache 批量查询 group platform,按平台过滤展开定价和映射
- model_mapping 改为嵌套格式 {platform: {src: dst}}
- channel_model_pricing 新增 platform 列
- 前端按平台维度重构:每个平台独立配置分组/映射/定价
- 迁移 086: platform 列 + model_mapping 嵌套格式迁移
|
2026-03-30 15:04:30 +08:00 |
|
erio
|
a6b62e7508
|
chore: bump version to 0.1.105.7
|
2026-03-30 13:40:59 +08:00 |
|
erio
|
0924ef3c36
|
Merge branch 'feature/channel' into release/custom-0.1.105
|
2026-03-30 13:40:52 +08:00 |
|
erio
|
204da5c455
|
fix(channel): 分组紧凑布局+平台颜色名称+计费基准重命名+表单排序调整
|
2026-03-30 13:40:29 +08:00 |
|
erio
|
bc03778679
|
fix: revert ent schema change to fix runtime panic
|
2026-03-30 13:31:47 +08:00 |
|