qian
|
bc2f202f4f
|
fix(channel):修复ali百炼渠道路径拼接问题
|
2026-08-08 02:03:31 +08:00 |
|
qian
|
780cd26be8
|
fix(db):修复数据库查询结果为空的问题
|
2026-08-08 01:19:52 +08:00 |
|
chengqian
|
01459d29ce
|
fix(apikey):修复apikey缓存导致模型不可用的问题
|
2026-08-07 18:14:37 +08:00 |
|
chengqian
|
4f749930d6
|
fix(setup):修复系统初始化故障问题
|
2026-08-07 17:56:13 +08:00 |
|
chengqian
|
3256d84c30
|
fix(apikey):修复api key异步模型越权调用问题
|
2026-08-07 17:43:22 +08:00 |
|
qian
|
800e31b041
|
fix(model):修复模型阶梯价格显示问题
|
2026-08-06 00:27:15 +08:00 |
|
qian
|
b334ff2450
|
improve(ui):时间查询器优化
|
2026-08-06 00:16:03 +08:00 |
|
qian
|
6cf68b14b3
|
feat(wallet):管理后台钱包一键释放所有被冻结资产
|
2026-08-05 23:46:53 +08:00 |
|
qian
|
99cb57dcd2
|
refactor(wallet):预扣冻结金额完全走redis,提升数据库并发能力
|
2026-08-05 23:38:15 +08:00 |
|
qian
|
c7d15d82a4
|
improve(admin):优化管理功能搜索条件
|
2026-08-04 22:50:57 +08:00 |
|
qian
|
a73cf411a5
|
improve(ui):统一调整表格页面,将总数统计显示在左下角
|
2026-08-04 22:23:29 +08:00 |
|
chengqian
|
6ca1726298
|
fear(wallet):管理后台在租户钱包里面显示被冻结的资金
|
2026-08-04 14:35:58 +08:00 |
|
qian
|
2e0119ee85
|
improve(wallet):优化管理后台的钱包功能
|
2026-08-04 00:48:02 +08:00 |
|
qian
|
e464da852c
|
feat(payment):支付提示功能
|
2026-08-04 00:18:10 +08:00 |
|
qian
|
66f857a26b
|
fix(build):修复测试环境打包后的版本检测问题
|
2026-08-03 22:45:50 +08:00 |
|
qian
|
47ffb4e2a9
|
fix(model):修复模型设置价格后不能立即调用
|
2026-08-03 21:44:47 +08:00 |
|
qian
|
07369f2f30
|
improve(channel):调整渠道编辑表单
|
2026-08-03 21:38:34 +08:00 |
|
chengqian
|
141eac106a
|
feat:添加rpm/tpm指标
|
2026-08-03 15:29:38 +08:00 |
|
chengqian
|
8cb93d897e
|
improve: 优化高并发下的性能问题
|
2026-08-03 14:55:06 +08:00 |
|
chengqian
|
2491182939
|
improve: 优化高并发下的异常报错问题
|
2026-08-03 12:21:47 +08:00 |
|
qian
|
a4390c1cba
|
perf(relay): 减少大模型请求路径的数据库读写
- 额度累加(IncrMemberQuotaUsed/IncrApiKeyQuotaUsed)异步化,不再阻塞请求 goroutine
* context.WithoutCancel 脱父级取消,客户端断开不中断累加与缓存失效
- 审计日志(aud_request_logs)改批量通道写入,复用 UsageLogWriter
* UsageLogWriter 增加可选 DB getter,支持路由到独立审计库
* 新增 DefaultAuditLogWriter(64条/批或1s flush),OverflowSyncFallback 保证审计不丢
* UpdateTaskAudit 重试窗口扩至10次以覆盖批量 flush 延迟
- CheckApiKeyQuota 补 Redis 缓存(60s),同请求内两次检查第二次命中缓存
* IncrApiKeyQuotaUsed 落库后失效缓存,与成员额度缓存行为一致
- GetModelMapping/GetModelDeprecationInfo 合并对 mdl_models 的单次查询
* modelInfoCached 扩展弃用字段,GetModelDeprecationInfo 复用600s缓存不再裸查
* 缓存 key 加 v2 前缀隔离旧格式,避免部署窗口读到零值弃用字段
|
2026-08-03 00:48:21 +08:00 |
|
qian
|
60373a373d
|
fix(relay): 修复客户端断开时误伤渠道健康评分问题
客户端断开连接(context.Canceled / DeadlineExceeded)时,原来的行为:
1. MaterializeSelection 调用 getChannelKey(ctx, ...) 因 ctx 已取消而失败
2. 失败被包装为 ErrChannelUnavailable(掩盖真实原因)
3. reportMaterializeFailure 对渠道记了一次健康分惩罚
实际上渠道本身完全正常,是客户端主动断开导致的。
修复:
- MaterializeSelection:key 查询前后各加一次 ctx.Err() 检查,
有 ctx 错误时直接返回 ctx.Err() 而非 ErrChannelUnavailable
- relay_handler.go 调度循环:MaterializeSelection 返回 context 错误时
静默退出(不记 channelErrors、不调 reportMaterializeFailure),
用 context.WithoutCancel 退还预扣款项后直接返回,渠道健康分不受影响
|
2026-08-03 00:00:17 +08:00 |
|
qian
|
6683ca6d40
|
fix(cache): 修复高并发下租户模型权限缓存缺失导致误判问题
- CheckTenantModelAccess 增加 L1/L2 双层缓存(TenantModelAccessCache,TTL 300s)
区分「数据库无记录(IsNil=true,穿透到分组权限)」和「有记录」两种状态,
高并发下不再每次请求都发起 LEFT JOIN 查询,消除连接池压满时的误判根因
- 修复 Cache.DeleteByPattern 遗漏 L1 gcache 清除和跨实例 pub/sub 通知的问题:
原实现只做 Redis SCAN+批量 DEL,L1 条目靠 TTL 自然过期;
改为 SCAN 收集所有 key → 批量 DEL L2 → 逐 key gcache.Remove + PUBLISH cache:invalidate,
与 Cache.Delete 的三层清除行为对齐
- 新增 ClearTenantModelAccessCache(ctx, tenantID),以 {tenantID}:* 模式清除该租户缓存
- admin/tenant_model.go:BatchAssignModels / UpdateTenantModel / DeleteTenantModel
三个写操作在 ClearTenantPriceCache 后追加 ClearTenantModelAccessCache 调用
- admin/model_group.go:invalidateTenantGroupCache 新增 ClearTenantModelAccessCache 调用,
覆盖所有分组写操作(SetGroupModels / SetTenantGroups / UpdateModelGroup status 变更)
|
2026-08-02 23:59:00 +08:00 |
|
qian
|
ab463ede83
|
improve(task):定时任务优化,显示中文名称
|
2026-08-02 17:52:21 +08:00 |
|
qian
|
84ea7543b1
|
improve(log):调整审计日志大小,有需求需要设置独立的日志库
|
2026-08-02 16:36:51 +08:00 |
|
qian
|
03259a144a
|
feat(admin):添加模型调用堆叠柱状图
|
2026-08-02 14:45:50 +08:00 |
|
qian
|
f13b583c35
|
feat(admin):渠道模型能力页面添加字段使用说明
|
2026-08-02 14:20:35 +08:00 |
|
qian
|
49b05b66ad
|
fix(admin):修复渠道测试功能使用上游模型名称的问题
之前渠道测试时使用的是系统内模型名称,而不是上游配置的模型名称,
导致测试请求失败(上游供应商无法识别系统内模型名)。
修复内容:
- 将查询目标从 mdl_models 表改为 chn_abilities 表
- 查询条件:channel_id + model_name + enabled=true
- 获取 upstream_model 字段作为上游模型名称发送测试请求
影响范围:
- internal/logic/admin/channel_testing.go
|
2026-08-02 13:49:11 +08:00 |
|
qian
|
a24f9d29db
|
feat(log):添加日志硬删除按钮,防止频繁错误影响数据库
|
2026-08-02 00:56:03 +08:00 |
|
qian
|
4bf835394d
|
Merge branch 'main' into dev
# Conflicts:
# web/admin/src/views/ai/ChannelDetailPage.vue
|
2026-08-01 23:03:23 +08:00 |
|
qian
|
fae0d1efba
|
chore:渠道倒序排序
|
2026-08-01 23:02:30 +08:00 |
|
Qian
|
2ef5a40c26
|
新的调度方式 (#14)
重构模型渠道调度系统
|
2026-08-01 22:55:08 +08:00 |
|
chengqian
|
f4debdfab2
|
fix(channel):修复渠道无法修改协议
|
2026-07-31 15:19:01 +08:00 |
|
chengqian
|
8a8a96a012
|
fix(admin): 修复错误日志列表返回空元素
|
2026-07-30 14:26:34 +08:00 |
|
chengqian
|
245cedad47
|
fix(wallet): 修复预警阈值 nil 指针导致 /api/tenant/wallet 崩溃
warning_threshold 列可空,注册(Register)/后台建租户(CreateTenant)两条建钱包路径曾漏设该字段,导致这些租户的钱包阈值为 NULL。Wallet() 直接解引用 *w.WarningThreshold,owner/admin 访问 /api/tenant/wallet 时 panic recovered 500。
统一语义:warning_threshold = 0 表示关闭预警(也是新建默认值),正数 = 预警线,与告警引擎 alert.go「阈值 <= 0 视为未启用」一致。
- Wallet() 增加 nil 守卫,NULL 行按 0 返回,消除解引用崩溃
- 所有建钱包路径(懒初始化/Register/CreateTenant/EnsureWallet)显式写入 0,不再产生 NULL
- 管理后台阈值显示:>0 显示金额,否则显示「关闭」
|
2026-07-30 10:17:55 +08:00 |
|
chengqian
|
d14e5b00e1
|
fix:修复租户停用后令牌还能用的bug
|
2026-07-27 17:45:47 +08:00 |
|
chengqian
|
17d8fadad7
|
fix:修复异步图像可能导致的panic异常
|
2026-07-27 17:11:29 +08:00 |
|
martin
|
92c2cc033b
|
refactor: deduplicate task and security logic
|
2026-07-26 14:07:53 +08:00 |
|
martin
|
35a20cffeb
|
fix: 修复 P1-Resource 资源/SSRF 类问题
- P1-R1 rehostFromURL SSRF:syncImageDownloadClient 改用 SSRF 加固的
DialContext,dial 阶段拒绝 loopback/link-local/私网/multicast/unspecified,
用已校验 IP 直拨号杜绝 DNS rebinding;入口加 validateSSRFURL 预检(仅
http/https、字面量内网 IP 直接拒)。新增 isForbiddenIP/validateSSRFURL 单测。
- P1-R2 payment LockOrder 竞态:sync.Map + 手工引用计数改为 256 分片
sharded mutex(FNV-1a),同订单恒命中同分片,无引用计数/Delete,内存恒定。
公共 API 不变;同步更新 callback_test.go,-race 通过。
- P1-R4 OAuth 无超时:新增 oauthHTTPClient(10s 超时),替换全部 5 处
http.DefaultClient.Do / http.Post 出站请求。
- P1-R5 告警派发 goroutine 无上限:新增 goDispatchAlertNotifications,
阻塞式信号量(容量 16)封顶并发 + WithTimeout(30s) 兜底,不丢通知仅排队。
|
2026-07-26 12:54:41 +08:00 |
|
martin
|
4cc6ff307e
|
fix: 修复 P1 事务边界问题
- P1-T1 SetTenantGroups/SetGroupModels 删-插包进事务,避免插入失败清空关联
- P1-T2 ApiKeyUpdate 主表与 scope 更新同事务,缓存失效移到提交后
- P1-T3 InvalidateWallet 移到 FulfillOrder 事务提交后,避免缓存污染窗口
- P1-T4 handleDeletionRequest 跨 4 表删改包进事务,杜绝中间态
- P1-T5 subscribePlanTx 加事务级 advisory lock,串行化同租户订阅
|
2026-07-26 12:41:28 +08:00 |
|
martin
|
a7177cc6f5
|
fix: 修复 P2 可维护性与性能问题
- P2-3 ExportModelsJson N+1 改批量 WhereIn 查询定价
- P2-4 dashboard 聚合 Count 不再静默吞错,改 Warning 日志
- P2-5 promo_code/notification 的 map[string]any 返回值改 struct
- P2-6 CleanExpiredPreDeducts 改先 claim 再 release,避免多实例重复释放
- P2-7 trackPreDeduct 已由 P1-C 同步化+回滚覆盖,文档注明
- P2-8 支付金额容差比较改 decimal,消除 0.01 边界二进制误差
- P2-9 GetEnabledChannels 加 60s 进程内缓存,配置变更主动失效
- P2-10 OAuth callback 路径限定 provider 白名单 (github/google)
- P2-12 evaluateCondition eq 改浮点容差比较
- P2-13 api_metrics 加平台域调用方校验,防租户域误用泄露
- P2-14 删除 listProjectApiKeys 死代码
|
2026-07-26 12:31:41 +08:00 |
|
martin
|
a6ed67d841
|
fix: 完成 P3 细节优化项
依据《代码分析结果.md》P3 章节,逐条修复 20 项细节问题:
正确性修复:
- P3-1 锁定剩余分钟改用 math.Ceil,避免「0.9 分钟」显示为「0 分钟」
- P3-12 移除 CheckAndUpgradeLevel 中恒真的 hasUpdate 标志
- P3-14 移除 CheckTrialExpiry 中恒真表达式(count > 0 || true)调试残留,改用 RowsAffected
- P3-2 成员不存在统一返回 NewNotFoundError(404),与其它方法语义一致
安全加固:
- P3-6 X-Request-Id 加格式校验 ^[A-Za-z0-9-]{1,64}$,防日志注入
- P3-7 新增公共 EscapeLikePattern,转义 admin LIKE 搜索的 %/_ 通配符
- P3-8 Encrypt 输出加 v1: 版本前缀,Decrypt 兼容无前缀历史密文
- P3-9 turnstile 响应体读取加 64KB 上限,防内存耗尽
- P3-11 backup codes 熵由 48-bit 提升到 64-bit
- P3-15 recordAudit 对 multipart/二进制体跳过 Unmarshal 与原文落库
- P3-17 错误日志按 Content-Type 跳过 multipart/二进制体读取
- P3-16 HandleRealtime 加 panic recover 与连接生命周期日志
可维护性/一致性:
- P3-3 oauth.go 时间格式统一为 time.RFC3339
- P3-5 MsgSuccess 统一为 ok,response.go 改用常量引用
- P3-4 错误码分段策略加注释,说明空洞与跳跃的成因
- P3-13 ModelMultiplier 占位语义加注释(计费公式设计位 + 快照列)
- P3-19 抽取 registerCronJobs,主启动流程清爽
重构:
- P3-18 删除死代码 BuildBillingSummary/SummaryParams(仅测试引用),保留共用 helper
- P3-20 抽取 relay.InvalidateMemberModelScopeCache 单一失效入口,
消除三处 member_model 前缀字面量重复(原为有意跨包失效,原建议改名会破坏)
经核实保留 + 文档化:
- P3-10 TOTP 暂保留 SHA-1:totp.Validate 硬编码 SHA-1 且存储不保存算法元信息,
直接切 SHA-256 会导致校验恒失败,需配合 schema 改动,超出 P3 范围
|
2026-07-26 12:16:33 +08:00 |
|
martin
|
b7e71c685f
|
fix: 修复并发与一致性问题
|
2026-07-26 11:45:03 +08:00 |
|
martin
|
0f87322f49
|
fix: 修复 P1 功能正确性问题
|
2026-07-26 11:03:22 +08:00 |
|
martin
|
6665b1e113
|
refactor:重构渠道调度功能
|
2026-07-25 20:48:15 +08:00 |
|
martin
|
75bc4038db
|
fix:修复文件管理可能导致的越权操作
|
2026-07-25 20:10:35 +08:00 |
|
martin
|
48c72f1eb4
|
chore:抽取公共方法降低重复代码
|
2026-07-25 19:59:28 +08:00 |
|
martin
|
e9b5592666
|
fix:修复租户数据导出功能
|
2026-07-25 19:57:50 +08:00 |
|
qian
|
9374c64bad
|
feat:用户多次输错密码被锁后可以由管理员解锁
|
2026-07-24 00:18:29 +08:00 |
|
qian
|
ed0e6b5bbe
|
improve:全面使用decimal进行计算
|
2026-07-23 23:19:16 +08:00 |
|