JIA-ss
20f5340784
fix(apicompat): Responses→Chat 转换补齐 completion_tokens_details 透传
OpenAI Responses API 在 gpt-5.x 等 reasoning 模型上会返回
output_tokens_details.reasoning_tokens, 但 ResponsesToChatCompletions
只映射了 input_tokens_details.cached_tokens, 导致客户端拿到的
chat.completion.usage 中 completion_tokens 出现无法解释的波动
(短 prompt 也可能 30+ token), 且缺失 reasoning_tokens 细分字段,
难以与 OpenAI 原生 Chat Completions 响应对账。
按 OpenAI 官方 CompletionUsage schema (openai/openai-go SDK
completion.go) 补齐所有 token-details 字段, 全部 omitempty:
prompt_tokens_details:
- cached_tokens (原已支持)
- audio_tokens (新增)
completion_tokens_details:
- reasoning_tokens (新增)
- audio_tokens (新增)
- accepted_prediction_tokens (新增)
- rejected_prediction_tokens (新增)
实现细节:
- 抽出 promptDetailsFromResponses / completionDetailsFromResponses
两个 helper, 全零字段返回 nil
- 非流路径 ResponsesToChatCompletions 复用已存在的
chatUsageFromResponsesUsage helper, 消除两条路径间的重复
- 非 reasoning / 非 audio 上游 (Anthropic, Gemini, gpt-4o) 不填这些
字段, helper 返回 nil → CompletionTokensDetails 不输出, 对现有响应
字节级兼容
新增单测:
- TestResponsesToChatCompletions_ReasoningTokens
- TestResponsesToChatCompletions_AllTokenDetailsPassThrough
- TestResponsesToChatCompletions_NoReasoningTokensWhenZero
- TestResponsesEventToChatChunks_CompletedWithReasoningTokens
2026-05-28 00:38:25 +08:00
..
2026-05-18 19:01:23 +08:00
2026-05-28 00:38:25 +08:00
2026-05-07 18:56:11 +08:00
2026-03-01 15:45:44 +08:00
2026-02-28 15:01:20 +08:00
2026-05-20 09:28:46 +08:00
2026-05-20 09:28:46 +08:00
2026-02-05 20:17:53 +08:00
2026-03-19 23:48:37 +08:00
2026-04-29 22:11:45 +08:00
2026-02-28 15:01:20 +08:00
2026-04-14 17:35:27 +08:00
2026-03-28 00:55:55 +08:00
2026-05-20 14:33:51 +08:00
2026-05-14 11:46:24 +08:00
2026-04-09 18:14:28 +08:00
2026-03-02 16:04:20 +08:00
2026-03-02 16:04:20 +08:00
2026-03-16 20:22:10 +08:00
2026-01-04 19:28:20 +08:00
2026-05-26 10:49:20 +08:00
2026-05-11 17:27:04 +08:00
2026-05-20 15:48:38 +08:00
2026-04-14 12:19:44 +08:00