Skip to content

fix(usage): 失败请求不计入总用量 / exclude failed requests from token aggregates - #401

Merged
qxcnm merged 1 commit into
qxcnm:mainfrom
MDX-Tom:main
Jul 28, 2026
Merged

fix(usage): 失败请求不计入总用量 / exclude failed requests from token aggregates#401
qxcnm merged 1 commit into
qxcnm:mainfrom
MDX-Tom:main

Conversation

@MDX-Tom

@MDX-Tom MDX-Tom commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

变更概述

本次修改调整了 Token 使用量、费用及配额消耗的统计口径:

  • 新增 usage_included 字段,用于标记请求是否计入使用量。
  • 只有 HTTP 2xx 成功请求计入 Token、费用和配额统计。
  • 499、502 等失败请求仍保留在请求日志中(但不计入使用量),并计入请求数和错误数。
  • 失败请求的 Token 明细仍会保留,但不会进入汇总统计。
  • 原始数据查询和小时聚合采用统一的成功请求统计口径。
  • 根据关联请求的 HTTP 状态码回填已有 Token 记录。
  • 增加 499、502 请求在小时聚合前后的回归测试。

统计口径说明

虽然 OpenAI 官方文档没有明确承诺所有本地观察到的 499 或 502 请求都一定不会产生费用,但实际使用中大多数失败请求都不会产生计费。

例如,499 可能表示客户端超时或主动断开,但上游服务可能已经开始甚至完成处理。因此,仅凭本地 HTTP 状态码无法准确完成账单对账。

本项目的本地使用量统计统一采用以下口径:

  • HTTP 2xx:计入 Token、费用及配额消耗。
  • 非 HTTP 2xx:不计入 Token、费用及配额消耗。
  • 实际账单对账仍以 OpenAI Costs API 或官方账单页面为准。

数据库迁移

新增迁移:

crates/core/migrations/125_request_token_stats_successful_usage.sql

迁移行为包括:

  • 为 Token 统计表增加 usage_included 字段。
  • 根据关联请求日志的 HTTP 状态码回填已有原始记录。
  • 将仅包含失败请求的历史小时聚合 Token 和费用清零。
  • 保留失败请求的请求数量和错误数量。
  • 添加成功请求统计使用的部分索引。

兼容性说明

迁移前已经压缩、且同时包含成功和失败请求的混合小时数据,无法精确拆分。

这是因为旧版小时聚合结构没有分别保存成功请求和失败请求的 Token 数量。迁移后产生的新数据以及仍保留原始记录的数据,均会按照新口径准确统计。

测试情况

已通过:

  • cargo fmt --all -- --check
  • git diff --check
  • cargo test -p codexmanager-core
  • cargo test -p codexmanager-service --test rpc rpc_requestlog_list_and_summary_support_pagination -- --nocapture

同时尝试执行了完整的 cargo test --workspace,过程中遇到:

  • 一个与本次修改无关、在现有代码中即可复现的临时路径/FIFO 测试失败。
  • 跳过该测试后,并行 RPC 测试出现长时间挂起。

因此,本次修改涉及的核心存储包及请求日志 RPC 路径已分别完成针对性验证。

@MDX-Tom MDX-Tom changed the title fix(usage): exclude failed requests from token aggregates fix(usage): 失败请求不计入总用量 / exclude failed requests from token aggregates Jul 28, 2026
@qxcnm
qxcnm merged commit ab3a96b into qxcnm:main Jul 28, 2026
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.

2 participants