feat(llm): 用量落库 + 只读汇总端点 + 面板用量小卡(契约 v0.64)
- model 层新增可选 UsageSink(nil ⇒ 逐字不变,既有用例零改动) - 组合根注入 UsageWriter:有界队列 1024 + 单写者 + 批量事务(128/批、2s 兜底), 队列满丢弃 + 限流 WARN,绝不阻塞模型调用;sink 挂 RuntimeLLM(热重载不断) - 迁移 0017:表 llm_usage(13 列,session_id 可空)+ idx_created_at + idx_session_id - 新端点 GET /api/v1/admin/llm/usage(owner|admin 读;缺省近 24h、上限 90 天、 超限 400 不静默裁剪;hitRate = cacheHit/(cacheHit+cacheMiss),分母 0 ⇒ 0; 绝不含凭据与正文;未接线/查库失败 ⇒ 500 usage_unavailable) - LLM_USAGE_RETENTION(默认 720h,≤0 = 关闭清理):启动清一次 + 每小时 - 面板 LLM 页「用量(近 24h)」小卡 + Docs 两份同步 v0.64 - 已知缺口(如实登记):session_id 恒 NULL,需 loop 侧在请求上打标,留列后接
This commit is contained in:
1 parent
18381f65fd
commit
be38651ba4
32 files changed
+2233
-44
No files matched your search
@@ -85,6 +85,12 @@ type app struct {
|
||||
// docGC 是文档回收的常驻任务(切片 S7):未被引用且超过保留期的文档连同
|
||||
// sidecar 与元数据行一起回收。GC 被配置关闭时为 nil(见 wire_document_gc.go)。
|
||||
docGC *documentGC
|
||||
// usage 是 LLM 用量的异步落库出口(切片 U1):注入模型栈后,每次成功模型
|
||||
// 调用都会把非敏感计数样本塞进它的有界队列。库未接时为 nil(= 只记日志)。
|
||||
usage *model.UsageWriter
|
||||
// usageGC 是用量样本的保留期清理常驻任务。`LLM_USAGE_RETENTION ≤ 0` 时为
|
||||
// nil(清理关闭,见 wire_usage.go)。
|
||||
usageGC *usageRetentionGC
|
||||
// capacitySink 把 capacity_awaken 状态迁移广播给 Web UI(design/14 §5)。
|
||||
// 由 *gateway.Server 满足(BroadcastCapacityAwaken);以接口形式持有,
|
||||
// 组合根才能用假出口做单元测试。
|
||||
|
||||
Reference in new issue
Block a user