Skip to content

[Bug]: 模型价格设置「选择模型」下拉为空,无法配置价格(Usage Service 正常、统计有数据) #158

Description

@yidecode

部署方式

完整 Docker 方案(seakee/cpa-manager + 独立上游 CPA)

CPA 版本

v7.1.30

CPA-Manager 版本

latest(镜像 seakee/cpa-manager@sha256:7741cefca94b…,2026-05-29 构建;内置管理中心前端 v1.5.3)

问题描述

「请求监控 → 模型价格设置」弹窗里的 「选择模型」下拉框为空(只有占位符一项),导致无法选择模型、无法配置价格。

但后端数据完全正常:

  • GET /v0/management/usage/summary 正确返回 facets.models: ["gemini-3.1-flash-lite-preview","gpt-5.4","gpt-5.5","gpt-image-2"]
  • 同一页面的「全部模型」筛选下拉能正确列出这 4 个模型;
  • GET /v0/management/model-prices 返回 {"prices":{}}(正常,未设置过);
  • PUT /v0/management/model-prices 直接写价格可以成功,写入后这些模型反而出现在下拉里。

定位(前端取数源问题):价格弹窗的下拉选项是
options = [占位符, ...unique([...ht.map(e=>e.model), ...Object.keys(savedPrices)])]
即只来自 ht(价格弹窗加载的“模型用量明细”)和“已存价格”。ht 来自 GET /v0/management/usage/models,而该接口在分页化(#138)后返回结构为:

{ "page": 1, "page_size": 500, "total_items": 8,
  "usage": { "facets": {}, "apis": { "POST /v1/chat/completions": { "models": { "gpt-5.5": { "details": [...] } } } } } }

模型名被嵌在 usage.apis["…"].models.{name} 的 key 里,顶层既没有扁平的模型数组(items/data/models),usage.facets 也是空 {}。前端按 e.items ?? e.data ?? e 解析得到空数组 → ht 为空 → 下拉为空。

对比:/v0/management/usage/summaryfacets.models 是有值的(监控页“全部模型”筛选用的就是它,正常)。所以建议把价格弹窗的模型来源改为 summary.facets.models,或让 /v0/management/usage/models 返回里带上 facets.models / 扁平模型列表。

复现步骤

  1. 完整 Docker 方案部署,Usage Service 正常采集(统计页有数据);
  2. 打开「请求监控」页,已能看到总调用、账号汇总、实时表、「全部模型」筛选有模型;
  3. 点击「模型价格设置」;
  4. 展开「选择模型」下拉 → 只有占位符,无任何模型可选 → 无法保存价格。

关键配置

# Usage Service /usage-service/info
configured: true
mode: embedded
service: cpa-manager

# collector
collectorMode: auto
upstream: http://cliproxyapi:8317
cpaUsage.usageStatisticsEnabled: true

/status 返回内容

{
  "collector": {
    "collector": "running",
    "upstream": "http://cliproxyapi:8317",
    "mode": "auto",
    "transport": "subscribe",
    "queue": "usage",
    "totalInserted": 257,
    "totalSkipped": 0,
    "deadLetters": 0
  },
  "dbPath": "/data/usage.sqlite",
  "events": 259,
  "service": "cpa-manager"
}

日志

# 无报错;GET /v0/management/usage/models 返回 200,但响应不含扁平模型数组、usage.facets 为空 {}

截图

(弹窗「选择模型」下拉仅有占位符;同页「全部模型」筛选能列出 4 个模型。)

检查清单

  • 我已经搜索过现有 Issues,没有找到重复问题
  • 我已经确认敏感信息已经脱敏,例如 token、key、账号信息

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions