8000 feat!: Chat Completions 推理回传字段可配置,sdk.Model 补充模型元数据 by sheepbox8646 · Pull Request #116 · felinics/twilight · GitHub
[go: up one dir, main page]

Skip to content

feat!: Chat Completions 推理回传字段可配置,sdk.Model 补充模型元数据 - #116

Merged
sheepbox8646 merged 1 commit into
mainfrom
feat/twi-7-reasoning-replay-catalog
Oct 13, 2026
Merged

sheepbox8646 merged 1 commit into
mainfrom
feat/twi-7-reasoning-replay-catalog

Conversation

@sheepbox8646
@sheepbox8646 sheepbox8646 commented Oct 12, 2026 •
Copy link
Copy Markdown
Member

概要

1. Chat Completions 推理回传字段可配置

新增 WithReasoningReplay(sdk.ReasoningReplay{Field, Required}):

Field 回传方式 适用端点
sdk.ReasoningReplayContent(默认) 推理文本写在 reasoning_content DeepSeek、Kimi、GLM、Qwen
sdk.ReasoningReplayDetails 端点返回的 reasoning_details 数组原样回传 OpenRouter、MiniMax
sdk.ReasoningReplayReasoning 推理文本写在 reasoning 读取 reasoning 的网关
  • 默认值尽量不破坏:不设置时回传 reasoning_content,只有对话里已经出现过这个字段时,才给没有推理的工具调用消息补空串,与原来通用路径的行为一致。
  • Required: true:每条带工具调用的助手消息都补上空的文本字段,满足 DeepSeek 和 Kimi 思考模式的校验。reasoning_details 是数组,不做补齐。
  • reasoning_details 通用保存:详情改存到 openai-chat 命名空间,回传时原样发回,保留签名、加密内容和 index。旧的 minimax 命名空间仍能读取,Memoh 已保存的历史不受影响。
  • 流式合并修复:按 index 合并,文本和摘要拼接,签名等字段由带值的片段写入。以前只带加密内容、没有文本的条目会被丢掉,现在会保留。reasoning.summary 条目也能显示为推理文本。
  • 未知的回传字段在请求发送前报错。

2. sdk.Model 补充模型元数据

sdk.Model 原来只有 ID、显示名、Provider 和类型。现在补充以下可选字段,零值表示未声明,现有的构造代码不受影响:

  • 通用字段:描述、模态(具名常量,提供 Accepts、Produces)、上下文窗口、最大输出、工具调用、结构化输出。
  • 推理能力 Reasoning *ModelReasoning,与 Memoh 的模型配置和新的推理字段设计对齐:
    • 能力:Toggle(独立开关)、Efforts(只列开启推理的档位)、Budget(预算范围)、Off(accepted、low_effort_only、rejected)。
    • 请求方言 Dialect:tier、budget、toggle、adaptive。adaptive 对应 Memoh thinking_mode 里区分自适应思考的那部分含义。
    • 默认值 Default:不发推理参数时模型是否思考、用哪一档或多少预算,取代单独的默认开启标记。
    • 回传 Replay:Chat Completions 回传字段与是否必须。
  • 回传配置的类型就是 sdk.ReasoningReplay,completions.WithReasoningReplay 直接接收它,模型上的 Reasoning.Replay 可以原样传入。
  • 文档里 Model 的定义已同步更新,并去掉了早已不存在的 MaxTokens 字段。

models.dev 的解析不放在 twilight,是否接入、如何接入由 Memoh 侧决定。

去掉 sdk.ModelType 的改动已拆到 #117 并已合并,本 PR 已变基到合并后的 main,sdk.Model 不再有 Type 字段。模型元数据不包含费用,本 PR 也不再改动 EmbeddingModel。

破坏性变更与迁移

兼容选项不再隐含回传行为,需要显式设置:

// DeepSeek、Kimi 思考模式
completions.WithReasoningReplay(sdk.ReasoningReplay{Required: true})

// MiniMax
completions.WithReasoningReplay(sdk.ReasoningReplay{Field: sdk.ReasoningReplayDetails})

兼容选项里与回传无关的行为保留不变,包括 DeepSeek 和 MiniMax 的思考开关映射、MiniMax 的 reasoning_split、Kimi 的工具 schema 改写。Memoh 升级本版本时需要按服务商补上这两行配置,或在 sdk.Model.Reasoning.Replay 里声明后原样传入。

关联

验证

  • 单测:三种回传字段与默认值;Required 补齐与不补齐;reasoning_details 原样往返,新旧两个命名空间都覆盖;默认配置只发 reasoning_content;未知字段在发送前报错;流式按 index 合并带签名和加密条目的详情;ModelReasoning 的 Controllable、CanTurnOff 与 Model 的 Accepts、Produces。原有用例按新的显式配置更新,并新增「只开 DeepSeek 兼容选项不再补齐」的用例,把破坏性变更固定下来。
  • 真实接口验证(OpenRouter,Agent 自测):
    • z-ai/glm-4.7 配 sdk.ReasoningReplayDetails:流式拿到推理和工具调用,推理详情合并为一条完整条目。第二步请求的助手消息只带 reasoning_details 和 tool_calls,接口正常返回最终答案。
    • deepseek/deepseek-v4-flash 配 reasoning_content 加 Required:第二步请求只带 reasoning_content,接口正常返回最终答案。
  • 本地按 CI 流程跑过:go build ./...、go vet ./...、go vet -tags integration ./...、golangci-lint run ./...(0 issues)、go test ./... -short -race、internal/sdkdiff 测试、go mod tidy 无变化。

🤖 Generated with Claude Code

@sheepbox8646 sheepbox8646 changed the title feat!: Chat Completions 推理回传字段可配置,新增 models.dev 模型目录包 feat!: Chat Completions 推理回传字段可配置,新增模型能力目录类型 Oct 12, 2026
@sheepbox8646
sheepbox8646 force-pushed the feat/twi-7-reasoning-replay-catalog branch from 3fe87c4 to 9c259d4 Compare October 13, 2026 05:17
@sheepbox8646 sheepbox8646 changed the title feat!: Chat Completions 推理回传字段可配置,新增模型能力目录类型 feat!: Chat Completions 推理回传字段可配置,sdk.Model 补充模型元数据 Oct 13, 2026
@sheepbox8646 sheepbox8646 changed the title feat!: Chat Completions 推理回传字段可配置,sdk.Model 补充模型元数据 feat!: Chat Completions 推理回传字段可配置,sdk 模型类型标准化 Oct 13, 2026
@sheepbox8646
sheepbox8646 force-pushed the feat/twi-7-reasoning-replay-catalog branch from bd7a79a to 5cef5ae Compare October 13, 2026 07:29
@sheepbox8646 sheepbox8646 changed the title feat!: Chat Completions 推理回传字段可配置,sdk 模型类型标准化 feat!: Chat Completions 推理回传字段可配置,sdk.Model 补充模型元数据 Oct 13, 2026
@sheepbox8646
sheepbox8646 force-pushed the feat/twi-7-reasoning-replay-catalog branch from 5cef5ae to 787b3c9 Compare October 13, 2026 07:37
- 新增 completions.WithReasoningReplay(sdk.ReasoningReplay):回传字段可选
  reasoning_content(默认)、reasoning_details、reasoning;Required 为真时每条
  带工具调用的助手消息都补上空的文本字段;默认沿用原通用路径
- reasoning_details 通用保存到 openai-chat 命名空间并原样回传,仍可读取旧的
  minimax 命名空间;流式按 index 合并,只带加密内容的条目不再丢失
- sdk.Model 补充描述、模态、上下文窗口、最大输出、工具调用、结构化输出与
  推理能力 ModelReasoning(Toggle、Efforts、Budget、Off、Dialect、Default、
  Replay)
- 文档:回传说明、兼容选项、API 参考

BREAKING CHANGE: WithDeepSeekChatCompletionsCompat、WithKimiChatCompletionsCompat
不再隐含补空 reasoning_content,需加 WithReasoningReplay(sdk.ReasoningReplay{Required: true});
WithMiniMaxChatCompletionsCompat 不再自动回传 reasoning_details,需加
WithReasoningReplay(sdk.ReasoningReplay{Field: sdk.ReasoningReplayDetails})。

Linear: TWI-7

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sheepbox8646
sheepbox8646 force-pushed the feat/twi-7-reasoning-replay-catalog branch from 787b3c9 to ff5eef7 Compare October 13, 2026 07:43
@sheepbox8646
sheepbox8646 merged commit e47c5b3 into main Oct 13, 2026
4 checks passed
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

0