fix(responses): gate service tiers by provider capability - #860
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (17)
📝 WalkthroughWalkthroughThe change adds ChangesResponses service-tier capability
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant Client
participant router.ts
participant ProviderRegistry
participant responses/core.ts
participant UpstreamResponsesAPI
Client->>router.ts: Submit Responses request
router.ts->>ProviderRegistry: Resolve supportsServiceTier
ProviderRegistry-->>router.ts: Return provider capability
router.ts->>responses/core.ts: Process request and fastMode
responses/core.ts->>UpstreamResponsesAPI: Forward, inject, or remove service_tier
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Pull request overview
Adds a provider capability flag to control whether fastMode may inject/remove OpenAI’s service_tier on Responses requests, preventing OpenAI-only fields from being forwarded to Responses-compatible upstreams (notably DeepSeek) that reject unknown top-level parameters.
Changes:
- Introduce
supportsServiceTier?: booleanacross provider config/types/registry and backfill it from registry metadata at runtime. - Gate
service_tierinjection/removal in Responses request normalization onsupportsServiceTier(inject/remove only whentrue; always strip whenfalse). - Add focused wire-level regression tests and update configuration/docs in all maintained locales.
Reviewed changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| tests/deepseek-inbound-wire.test.ts | Adds capability-gated service_tier forwarding/injection tests and updates existing assertions. |
| src/types.ts | Extends OcxProviderConfig with supportsServiceTier documentation and typing. |
| src/server/responses/core.ts | Gates service_tier normalization behavior based on supportsServiceTier for openai-responses routes. |
| src/router.ts | Backfills supportsServiceTier from the registry into routed provider configs when unset in persisted config. |
| src/providers/registry.ts | Defines supportsServiceTier in the registry schema and marks OpenAI providers as supported / DeepSeek as unsupported. |
| src/providers/derive.ts | Ensures derived provider metadata can include supportsServiceTier and backfills it during enrichment. |
| src/config.ts | Allows supportsServiceTier in the provider config schema. |
| docs-site/src/content/docs/reference/configuration.md | Documents the new supportsServiceTier provider option (English). |
| docs-site/src/content/docs/zh-cn/reference/configuration.md | Documents the new supportsServiceTier provider option (zh-cn). |
| docs-site/src/content/docs/ru/reference/configuration.md | Documents the new supportsServiceTier provider option (ru). |
| docs-site/src/content/docs/ko/reference/configuration.md | Documents the new supportsServiceTier provider option (ko). |
| docs-site/src/content/docs/ja/reference/configuration.md | Documents the new supportsServiceTier provider option (ja). |
| docs-site/src/content/docs/guides/codex-app-models.md | Updates fast/service-tier behavior explanation (English). |
| docs-site/src/content/docs/zh-cn/guides/codex-app-models.md | Updates fast/service-tier behavior explanation (zh-cn). |
| docs-site/src/content/docs/ru/guides/codex-app-models.md | Updates fast/service-tier behavior explanation (ru). |
| docs-site/src/content/docs/ko/guides/codex-app-models.md | Updates fast/service-tier behavior explanation (ko). |
| docs-site/src/content/docs/ja/guides/codex-app-models.md | Updates fast/service-tier behavior explanation (ja). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| { model: "", provider: "" }, | ||
| { inboundWire: "responses" }, | ||
| ); | ||
| return bodies[0] ?? {}; |
|
Pre-merge review result: not merge-ready yet. Two blocking items:
Also needed before merge:
The direction is right and the fix is close — re-review should be fast once the default flips to fail-closed. |
Summary
supportsServiceTiercapability for Responses routes.fastModeinject or removeservice_tieronly for providers that explicitly support it, and strip the field for providers that explicitly reject it.Why
fastModepreviously treated everyopenai-responsesdestination like OpenAI and could injectservice_tier: "priority". DeepSeek V4 Flash now uses its native Responses endpoint by default, but DeepSeek's published Responses schema does not documentservice_tier. Provider transport and service-tier capability need to be separate decisions.This change keeps native DeepSeek Responses routing intact while preventing an OpenAI-only request field from reaching that upstream.
DeepSeek reference: https://api-docs.deepseek.com/api/create-response/
Verification
bun test tests/deepseek-inbound-wire.test.ts— 19 pass.bun run typecheck— pass.bun run privacy:scan— pass.cd docs-site && bun run build— pass (146 pages).*.example.testandproxy-only.invalidinto198.18.0.0/15, which the destination-policy tests intentionally reject. CI should provide the clean non-fake-IP run.Scope
Summary by CodeRabbit