feat(poe): default to the openai responses api endpoint - #14144
Conversation
This comment was marked as outdated.
This comment was marked as outdated.
9b7e423 to
0911df1
Compare
Signed-off-by: Konv Suu <hi@kovsu.com>
0911df1 to
8cfb7fc
Compare
|
|
||
| ## What the user should do | ||
|
|
||
| Open Settings → Model Providers → Poe and switch the API endpoint to |
There was a problem hiding this comment.
必须修复:Existing Poe provider rows remain routed through openai-chat-completions, but this PR removes Poe-specific reasoning and web-search handling while documenting a Settings endpoint switch that the UI does not persist for existing providers.
inv_564ed6016e8f062a#c0
kangfenmao
left a comment
There was a problem hiding this comment.
发现一个必须在合并前处理的升级兼容性问题,详见行内评论。
| "developerRole": false | ||
| }, | ||
| "defaultChatEndpoint": "openai-chat-completions", | ||
| "defaultChatEndpoint": "openai-responses", |
There was a problem hiding this comment.
[P1] 为现有 Poe provider 行保留/迁移旧端点。PresetProviderSeeder 的 batchUpsertTx 只插入不存在的 providerId,因此已存在的 Poe 行仍为 openai-chat-completions;本 PR 同时移除了 reasoning.ts/websearch.ts 的 Poe 分支,升级用户的 reasoning effort 和 web search 会静默失效。请在升级路径增加一次性迁移或保留兼容分支,并确保 endpoint config/default/model endpoint 一致后再移除旧协议支持。
…rovider Signed-off-by: Konv Suu <hi@kovsu.com> # Conflicts: # packages/provider-registry/data/models.json # packages/provider-registry/data/providers.json # packages/provider-registry/src/providers/poe.ts # src/main/ai/utils/reasoning.ts # src/main/ai/utils/websearch.ts # src/renderer/pages/settings/ProviderSettings/providerUrls.ts
models.dev now ships reasoning controls for ling-3-0-flash-fin; the membership invariant requires the owning creator to claim every catalog reasoning model. Signed-off-by: Konv Suu <hi@kovsu.com>
Signed-off-by: Konv Suu <hi@kovsu.com>
…breaking The chat-completions fallback keeps its reasoning contracts and web search, so existing installs lose nothing; only the default for fresh installs changes. Signed-off-by: Konv Suu <hi@kovsu.com>
models.dev dropped the accounts/fireworks/routers/* kimi SKUs, leaving the source overrides dangling; pin apiModelId and name so they stay resolvable as standalone rows. Signed-off-by: Konv Suu <hi@kovsu.com>
f97cf67 to
c188555
Compare
Poe's Responses emulation for Claude (LiteLLM→Vertex) breaks streams, so the 4.5-line official bots join the anthropic-messages pin, using the exact lowercase bot names api.poe.com/v1/models serves; an explicit-set contract test locks the full pinned roster. Also pins the Fireworks wire ids that models.dev de-listed (gpt-oss-20b, minimax-m2p7) so requests keep valid model paths. Catalog regenerated from source. Signed-off-by: Konv Suu <hi@kovsu.com>
The manifest embeds the provider catalog content hash; regenerate it against the updated catalog so build:builtin-knowledge:check passes. Signed-off-by: Konv Suu <hi@kovsu.com>
Sparse provider rows delegate to the registry preset by design (CherryHQ#17096), so the endpoint switch applies to existing installs too; document the real semantics and the explicit-choice escape hatch instead of promising a fresh-install-only change. Signed-off-by: Konv Suu <hi@kovsu.com>
Signed-off-by: Konv Suu <hi@kovsu.com>
| { modelId: 'gpt-oss-120b', values: ['low', 'medium', 'high'] }, | ||
| { modelId: 'gpt-oss-20b', values: ['low', 'medium', 'high'] }, | ||
| { modelId: 'minimax-m2-7', values: ['low', 'medium', 'high'] }, | ||
| { modelId: 'gpt-oss-20b', apiModelId: 'accounts/fireworks/models/gpt-oss-20b', values: ['low', 'medium', 'high'] }, |
There was a problem hiding this comment.
建议修复:The manually pinned Fireworks model overrides omit provider-specific pricing, so regenerated catalog rows lose known Fireworks prices. GPT OSS 20B and MiniMax M2.7 then inherit zero input/output pricing from the global catalog, while the standalone Kimi router rows have no pricing at all.
inv_7806d61e74d9fe01#c0
What this PR does
Before this PR:
Poe was a chat-completions-only registry entry (plus the Anthropic-compatible mirror for official Claude bots). On chat-completions, reasoning is fail-closed by design and only works for the model families with audited per-model
extra_bodycontracts (GPT-5.4, Gemini 3.1 Pro, Claude bots); every other bot has no reasoning control, and built-in web search rides the Poe-specificextra_body.web_searchparameter.After this PR:
Poe's registry entry declares the OpenAI Responses API endpoint (
https://api.poe.com/v1/, which Poe now serves natively) and makes it the default chat endpoint:openai-responsesreasoning format applies to all bots — no per-model contract needed on this path.web_searchtool via the existing server-tools config.extra_bodycontracts); the anthropic-messages endpoint for official Claude bots is untouched.creator.poe.com/docs,poe.com/api/models).openai-responseswith the standard reasoning format, chat-completions stays fail-closed (provider-reasoning-contracts.test.ts).Fixes #
Why we need it and why it was done in this way
The following tradeoffs were made:
src/main/ai/; since thenmainrebuilt that logic as data-driven registry wire contracts (feat(ai-reasoning): data-driven reasoning controls from the provider registry #17034) and server-tools (feat(server-tools): add provider-native search capabilities #17322), so this PR keeps them as the chat-endpoint fallback and only adds the Responses route on top. Nothing regresses for users pinned to chat-completions, and the PR no longer touchessrc/main/ai/at all.The following alternatives were considered:
extra_bodyreasoning/web-search paths (the original shape of this PR) — rejected after the data-driven reasoning refactor landed onmain; they now serve as the fallback endpoint's audited contracts.Links to places where the discussion took place:
Breaking changes
Poe's default chat endpoint moves to
openai-responsesfor fresh and existing installs (sparse rows inherit the registry default; an explicit endpoint choice is preserved). Plain chat, reasoning and web search keep working — reasoning coverage widens from contract-listed families to all bots. Users who want the legacy endpoint can selectopenai-chat-completionsexplicitly in Settings → Model Providers → Poe. Recorded (severity: notice) inv2-refactor-temp/docs/breaking-changes/2026-07-13-poe-responses-endpoint-required.md.Special notes for your reviewer
packages/provider-registry/data/*.jsonare regenerated viapnpm --filter @cherrystudio/provider-registry generate; the diff includes expected upstream (models.dev/OpenRouter) metadata drift perpackages/provider-registry/CLAUDE.md. Two pieces of drift needed source fixes (each its own commit): the newling-3-0-flash-finmodel ships reasoning controls, so the bailing creator gains a reasoning-membership rule; and models.dev de-listed Fireworks'accounts/fireworks/routers/*kimi SKUs, so their overrides pinapiModelId/nameto stay resolvable as standalone rows.pnpm test:provider-registry(346/346 incl. catalog-source-sync and the new Poe contract test) andpnpm --filter @cherrystudio/provider-registry compat:check(compatible with frozen registry schema v1).Checklist
This checklist is not enforcing, but it's a reminder of items that could be relevant to every PR.
Approvers are expected to review this list.
main/gh-pr-review,gh pr diff, or GitHub UI) before requesting review from othersRelease note