Skip to content

fix(usage): 统一模型身份解析并修正 OpenClaw 模型归类 - #73

Open
liuweifeng wants to merge 1 commit into
cclank:mainfrom
liuweifeng:codex/model-identity-normalization
Open

fix(usage): 统一模型身份解析并修正 OpenClaw 模型归类#73
liuweifeng wants to merge 1 commit into
cclank:mainfrom
liuweifeng:codex/model-identity-normalization

Conversation

@liuweifeng

Copy link
Copy Markdown
Contributor

为什么改

OpenClaw 和 Hermes 对模型 ID 的处理方式不一致。

同一个模型在 Hermes 中显示为原始模型名,但 OpenClaw 在找不到匹配项时会回退到代表性模型。这样会造成两个问题:模型名称显示不准,价格也可能按错误的模型计算。

改了什么

统一模型身份

模型 ID 现在按以下顺序处理:

  1. 已有 alias;
  2. 标准模型 ID;
  3. 公开模型目录中的 canonical_slug
  4. 没有匹配结果时,保留原始 ID。

无法确认的模型不会再被猜成 Opus 或其他模型。

模型展示和价格计算使用同一个模型身份,避免两边各自处理后产生不同结果。

保存模型目录信息

价格更新仍然使用 OpenRouter 的公开模型目录,同时保存模型的 namecanonical_slugowned_by 以及输入、输出和缓存价格。

这些信息用于后续的精确匹配和价格查询。

修正 OpenClaw 与 Hermes

OpenClaw 和 Hermes 现在使用同一套模型身份逻辑。模型明细中会保留 model_id,这样后续重新计算成本或合并多设备数据时,不需要再从显示名称反推模型。

补齐模型明细 UI

Hermes 和 OpenClaw 卡片接入现有的“按模型”展开区,与其他 token Agent 保持一致。

模型展开区支持查看各模型的 token 总量、输入、输出、缓存和估算成本。没有 token/model 明细的任务记录仍然只显示任务状态。

数据示例

对于能在公开目录中精确匹配的模型:

raw model ID       provider/model-v2026
canonical model ID provider/model
display name       Model
pricing source     public catalog

没有匹配结果时:

raw model ID       vendor/model-variant
canonical model ID vendor/model-variant
display name       Vendor Model Variant
pricing source     unavailable

这种情况下保留原始模型名称,不使用其他模型的名称或价格。

数据影响

Token 数量、会话数、任务数和日期归属不会改变。

重新扫描后,模型分组名称、模型明细行、无权威账单时的估算成本,以及多设备合并后的模型列表可能发生变化。原始日志仍然存在时,旧数据可以按新的模型身份重新归类。

验证

  • python3 -m unittest discover -s tests
    • 212 tests passed
  • swift build -c debug
    • passed
  • git diff --check
    • passed
  • Release .app.dmg
    • 构建成功
    • 签名验证通过
  • OpenClaw 与 Hermes 数据检查
    • 模型身份统一
    • Token 数量与原始 usage 一致
    • 模型展开区可以正常显示
    • 多设备模型合并保持稳定

模型进入按模型统计和价格计算前统一使用精确目录匹配,无法确认的模型保留原始 ID,避免 OpenClaw 与 Hermes 的模型名称和估算价格分叉。

Co-authored-by: Codex <noreply@openai.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant