fix: 三端联调测试 2 P0 + 6 P1 + 2 P2 修复
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled

P0-1: SaaS relay 模型别名解析 — "glm-4-flash" → "glm-4-flash-250414" (resolve_model)
P0-2: config.rs interpolate_env_vars UTF-8 修复 (chars 迭代器替代 bytes as char)
      + DB 启动编码检查 + docker-compose UTF-8 编码参数

P1-3: UI 模型选择器覆盖 Agent 默认模型 (model_override 全链路: TS→Tauri→Rust kernel)
P1-6: 知识搜索管道修复 — seed_knowledge 创建 chunks + 默认分类 (seed/uploaded/distillation)
P1-7: 用量限额从当前 Plan 读取 (非 stale usage 表)
P1-8: relay 双维度配额检查 (relay_requests + input_tokens)

P2-9: SSE 路径 token 计数修复 — 流结束检测替代固定 500ms sleep + billing increment
This commit is contained in:
iven
2026-04-14 00:17:08 +08:00
parent 0903a0d652
commit 4c3136890b
13 changed files with 234 additions and 49 deletions

View File

@@ -248,6 +248,37 @@ impl AppCache {
.map(|r| r.value().clone())
}
/// 按别名查找模型 — 用于向后兼容旧模型 ID (如 "glm-4-flash" → "glm-4-flash-250414")
/// 先按 alias 字段精确匹配,再按 model_id 前缀匹配(去掉日期后缀)
pub fn resolve_model(&self, model_name: &str) -> Option<CachedModel> {
// 1. 直接 model_id 查找
if let Some(m) = self.get_model(model_name) {
return Some(m);
}
// 2. 按 alias 精确匹配
for entry in self.models.iter() {
if entry.value().enabled && entry.value().alias == model_name {
return Some(entry.value().clone());
}
}
// 3. 前缀匹配: "glm-4-flash" 匹配 "glm-4-flash-250414" 等带后缀的模型
for entry in self.models.iter() {
let mid = &entry.value().model_id;
if entry.value().enabled
&& (mid.starts_with(&format!("{}-", model_name))
|| mid.starts_with(&format!("{}v", model_name)))
{
tracing::info!(
"Model alias resolved: {} → {}",
model_name,
mid
);
return Some(entry.value().clone());
}
}
None
}
/// 按 provider id 查找已启用的 Provider。O(1) DashMap 查找。
pub fn get_provider(&self, provider_id: &str) -> Option<CachedProvider> {
self.providers.get(provider_id)