docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder) - #440

Merged
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites
May 29, 2026
Merged

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder)#440
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites

Conversation

@moonming

@moonmingmoonming commented May 29, 2026

Copy link
Copy Markdown
Member

Summary

Completes the remaining Phase H doc items (the #438 subset covered the adapter concept + BYO + 3 platform integration guides). Every claim grounded in origin/main crates.

New:

  • reference/runtime-config-schema.md — complete ProviderKey JSON schema: all top-level fields, the closed adapter enum, telemetry_tags + request/response overrides, validation rules, examples.
  • integration/upstream-openai-compat.md — onboard a public OpenAI-compatible vendor (DeepSeek/Groq/Mistral/…) via the openai adapter; self-hosted vs Cloud; distinguished from byo-endpoint.md + openai-compatible-api.md.

Rewrites (surgical):

  • configuration/provider-keys.md — add provider/adapter/telemetry_tags fields + curl + bedrock/azure-openai api_base rows + backlinks. Existing api_base table preserved.
  • configuration/models.mdfix stale provider 6-value-enum claim (it's free-form ^[a-z0-9][a-z0-9._-]*$, ≤64); add model_name-is-upstream-id semantics.
  • reference/provider-compatibility.md — reframe "Current Provider Enum" → 5 adapter families + coverage matrix + per-family limitations + featured note.
  • index.md — "connect an upstream provider" nav block + 2 reference entries.

Verified against source

provider_key.rs (fields incl. telemetry_tags{kind,featured,branded_provider,pk_label,byo_label}, strip_headers default, reasoning_field), model.rs+schema.rs (Adapter enum, Model.provider pattern), dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml (ports :3001/:3000). External vendor hosts carry a "confirm against the vendor's current API reference" caveat.

Closes the 3 stale-doc items flagged in #438

provider-keys missing adapter; models.md stale provider enum; provider-compatibility pre-adapter framing — all fixed here.

🤖 Generated with Claude Code

Summary by CodeRabbit

Documentation

  • Clarified field definitions and constraints for model configuration (display_name, model_name, provider)
  • Expanded provider key documentation with additional configuration options and detailed setup guidance
  • Added comprehensive guide for integrating OpenAI-compatible upstream vendors
  • Introduced adapter-family-based compatibility reference for provider support
  • Published complete provider key schema documentation with examples
  • Enhanced navigation with new integration and reference guides

Review Change Stack

…mpat guide (#302 Phase H remainder)
Completes the remaining Phase H doc items, grounded in origin/main
crates (every field/validation verified against source):
NEW:
- reference/runtime-config-schema.md — complete ProviderKey JSON schema:
top-level fields (display_name/secret/api_base/provider/adapter/
telemetry_tags/request/response/strip_headers), the closed adapter
enum, telemetry_tags + request/response override sub-objects, with
validation rules and minimal/full examples.
- integration/upstream-openai-compat.md — onboard a public
OpenAI-compatible vendor (DeepSeek/Groq/Mistral/Together/Fireworks/
Perplexity) via the openai adapter; self-hosted vs Cloud; verification;
distinguished from byo-endpoint.md (private endpoints) and
openai-compatible-api.md (client-facing surface).
REWRITES (surgical — preserve existing accurate prose):
- configuration/provider-keys.md — add provider/adapter/telemetry_tags
to Current Fields + the create curl; add bedrock + azure-openai rows
to the api_base table (adapter-keyed); backlink the schema + adapter
+ upstream guides. Existing api_base behavior table + tolerance rules
preserved verbatim.
- configuration/models.md — FIX the stale claim that `provider` is a
6-value enum (openai/anthropic/google/deepseek/cohere/jina); it is a
free-form string matching ^[a-z0-9][a-z0-9._-]*$ (≤64). Add
model_name-is-upstream-id vs display_name-is-alias semantics.
- reference/provider-compatibility.md — reframe "Current Provider Enum"
around the 5 adapter families + a coverage matrix + per-family
limitations (Vertex non-Gemini not implemented; Bedrock /invoke vs
Converse; Azure dual-auth) + featured/non-featured note. Existing
compatibility-boundary + reading-guide sections preserved.
- index.md — add a "connect an upstream provider" nav block + 2
reference entries. Additive.
Verified against: provider_key.rs (fields/telemetry_tags/strip_headers/
reasoning_field), model.rs + schema.rs (Adapter enum, provider pattern),
dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml
(ports). External vendor hosts carry a "confirm against the vendor's
current API reference" caveat (not gateway behavior).
Also resolves the 3 stale-existing-doc items flagged during #438 review.
@coderabbitai

coderabbitaiBot commented May 29, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 7 minutes and 26 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: ad55ce95-897f-4342-895d-bb07f1c2b6e5

📥 Commits

Reviewing files that changed from the base of the PR and between a51d27f and 12ffb02.

📒 Files selected for processing (2)
  • docs/reference/provider-compatibility.md
  • docs/reference/runtime-config-schema.md
📝 Walkthrough

Walkthrough

This PR adds and refines comprehensive documentation for provider key configuration, adapter protocol families, and upstream vendor integration. It introduces a complete JSON schema reference for the ProviderKey resource, redefines field semantics, and provides an end-to-end guide for integrating OpenAI-compatible upstream vendors into AISIX AI Gateway.

Changes

Provider Configuration and Adapter Integration Documentation

Layer / File(s)Summary
Provider Key runtime configuration schema reference
docs/reference/runtime-config-schema.md
Complete ProviderKey JSON schema defining required (display_name, secret) and optional fields (provider, adapter, api_base, telemetry_tags, request, response, strip_headers), closed adapter enum with wire-shape mappings, nested override specifications, and backward compatibility notes with minimal/full example payloads.
Provider key configuration field documentation
docs/configuration/provider-keys.md
New optional fields (provider, adapter, telemetry_tags) and their dispatch-time/telemetry roles are documented; provider-key creation example now includes provider and adapter; api_base section expanded with canonical-forms table detailing adapter-family-specific rules for Bedrock and Azure OpenAI, plus guidance on when api_base must be set; related pages extended with schema, adapter families, BYO, and specialized upstream links.
Model field definitions and provider constraints
docs/configuration/models.md
display_name clarified as caller alias echoed in response.model; model_name clarified as upstream model identifier; provider redefined from fixed supported set to free-form vendor label with lowercase pattern, max-length constraints, and explanation of dispatch adapter/provider selection and metrics/log labeling role; adapter families link added to related pages.
Adapter family compatibility reference
docs/reference/provider-compatibility.md
Shifted from provider-enum to adapter-family-based compatibility boundary; introduces five closed adapter families (openai, anthropic, bedrock, vertex, azure-openai), documents endpoint-capability coverage matrix (chat completions, streaming, embeddings, images/audio/responses, rerank), per-family limitations (normalization gaps, routing, authentication), featured vs non-featured catalog providers, and updated related links.
OpenAI-compatible upstream vendor integration guide
docs/integration/upstream-openai-compat.md
New comprehensive guide covering when to use, distinction from BYO endpoint and client-facing OpenAI-compatible API, upstream configuration model (provider key + model), api_base requirement for non-openai vendors with vendor-to-api_base table, self-hosted setup steps (provider key creation, model mapping, caller API key with hashing, sample request), self-hosted vs cloud configuration guidance, verification checks (alias restoration, dispatch confirmation), limitations, and cross-navigation links.
Documentation index and navigation updates
docs/index.md
Added "I want to connect an upstream provider" subsection with links to adapter families, OpenAI-compatible vendor onboarding, BYO endpoint configuration, and specialized upstream integrations (Bedrock/Vertex/Azure); extended "Documentation Structure" list with adapter families and schema reference links.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes


Note

🎁 Summarized by CodeRabbit Free

Your organization has reached its limit of developer seats under the Pro Plan. For new users, CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please add seats to your subscription by visiting https://app.coderabbit.ai/login.If you believe this is a mistake and have available seats, please assign one to the pull request author through the subscription management page using the link above.

Comment @coderabbitai help to get the list of available commands and usage tips.

…er gating
Audit (no HIGH/MEDIUM) flagged two precision nuances; both fixed:
- runtime-config-schema.md: the "overrides are an on-disk shape, not
applied at request time" caveat was wrong for the self-hosted path.
Verified the `openai` + `azure-openai` bridges DO apply request
(param_renames/param_constraints/default_headers/default_body_fields)
and response (stream_done_marker/content_list_to_string/reasoning_field)
overrides at dispatch via prepare_outbound_body + extract_reasoning_field
(overrides.rs; bridge.rs:677-737). bedrock/vertex build native shapes
and don't apply them. What's unshipped is the Cloud control-plane block
that auto-populates them — so Cloud keys are empty, but a self-hosted
operator setting them directly gets them applied. Reworded accordingly.
- provider-compatibility.md: the image/audio/responses/embeddings gate
keys on the literal `provider: "openai"`, not the whole `openai`
adapter family (responses.rs:171). Added a note that an OpenAI-compatible
vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions
but is rejected on /v1/responses, images, and audio.
@moonming

Copy link
Copy Markdown
MemberAuthor

Independent doc-accuracy audit: clean — no HIGH, no MEDIUM.

A fresh cold-read agent verified all 7 files against crates/ source (in addition to the author's pre-push verification). Every field/type/default/cross-link/curl confirmed against provider_key.rs, schema.rs, dispatch.rs, the bridges, aisix-admin/lib.rs, and config.example.yaml.

Two LOW precision nuances were raised and both fixed in 12ffb02:

  1. Override consumption — the schema doc's "overrides are stored but not applied at request time" caveat was wrong for the self-hosted path. The openai + azure-openai bridges DO apply request/response overrides at dispatch (prepare_outbound_body + extract_reasoning_field); bedrock/vertex build native shapes and don't. What's unshipped is the Cloud control-plane block that auto-populates them. Reworded to scope it accurately (applied on openai/azure paths; Cloud doesn't auto-populate yet; self-hosted direct-set works).
  2. Literal-provider gating/v1/responses + images/audio key on the literal provider: "openai" (responses.rs:171), not the whole openai adapter family. Added a note that an OpenAI-compatible vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions but is rejected on those endpoints.

Merging on green CI.

@moonming
moonming merged commit ac719b5 into mainMay 29, 2026
7 checks passed
@moonming
moonming deleted the docs/phase-h-schema-rewrites branch May 29, 2026 03:23
Sign up for freeto 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

@moonming
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder) - #440

Merged
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites
May 29, 2026
Merged

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder)#440
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites

Conversation

@moonming

@moonmingmoonming commented May 29, 2026

Copy link
Copy Markdown
Member

Summary

Completes the remaining Phase H doc items (the #438 subset covered the adapter concept + BYO + 3 platform integration guides). Every claim grounded in origin/main crates.

New:

  • reference/runtime-config-schema.md — complete ProviderKey JSON schema: all top-level fields, the closed adapter enum, telemetry_tags + request/response overrides, validation rules, examples.
  • integration/upstream-openai-compat.md — onboard a public OpenAI-compatible vendor (DeepSeek/Groq/Mistral/…) via the openai adapter; self-hosted vs Cloud; distinguished from byo-endpoint.md + openai-compatible-api.md.

Rewrites (surgical):

  • configuration/provider-keys.md — add provider/adapter/telemetry_tags fields + curl + bedrock/azure-openai api_base rows + backlinks. Existing api_base table preserved.
  • configuration/models.mdfix stale provider 6-value-enum claim (it's free-form ^[a-z0-9][a-z0-9._-]*$, ≤64); add model_name-is-upstream-id semantics.
  • reference/provider-compatibility.md — reframe "Current Provider Enum" → 5 adapter families + coverage matrix + per-family limitations + featured note.
  • index.md — "connect an upstream provider" nav block + 2 reference entries.

Verified against source

provider_key.rs (fields incl. telemetry_tags{kind,featured,branded_provider,pk_label,byo_label}, strip_headers default, reasoning_field), model.rs+schema.rs (Adapter enum, Model.provider pattern), dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml (ports :3001/:3000). External vendor hosts carry a "confirm against the vendor's current API reference" caveat.

Closes the 3 stale-doc items flagged in #438

provider-keys missing adapter; models.md stale provider enum; provider-compatibility pre-adapter framing — all fixed here.

🤖 Generated with Claude Code

Summary by CodeRabbit

Documentation

  • Clarified field definitions and constraints for model configuration (display_name, model_name, provider)
  • Expanded provider key documentation with additional configuration options and detailed setup guidance
  • Added comprehensive guide for integrating OpenAI-compatible upstream vendors
  • Introduced adapter-family-based compatibility reference for provider support
  • Published complete provider key schema documentation with examples
  • Enhanced navigation with new integration and reference guides

Review Change Stack

…mpat guide (#302 Phase H remainder)
Completes the remaining Phase H doc items, grounded in origin/main
crates (every field/validation verified against source):
NEW:
- reference/runtime-config-schema.md — complete ProviderKey JSON schema:
top-level fields (display_name/secret/api_base/provider/adapter/
telemetry_tags/request/response/strip_headers), the closed adapter
enum, telemetry_tags + request/response override sub-objects, with
validation rules and minimal/full examples.
- integration/upstream-openai-compat.md — onboard a public
OpenAI-compatible vendor (DeepSeek/Groq/Mistral/Together/Fireworks/
Perplexity) via the openai adapter; self-hosted vs Cloud; verification;
distinguished from byo-endpoint.md (private endpoints) and
openai-compatible-api.md (client-facing surface).
REWRITES (surgical — preserve existing accurate prose):
- configuration/provider-keys.md — add provider/adapter/telemetry_tags
to Current Fields + the create curl; add bedrock + azure-openai rows
to the api_base table (adapter-keyed); backlink the schema + adapter
+ upstream guides. Existing api_base behavior table + tolerance rules
preserved verbatim.
- configuration/models.md — FIX the stale claim that `provider` is a
6-value enum (openai/anthropic/google/deepseek/cohere/jina); it is a
free-form string matching ^[a-z0-9][a-z0-9._-]*$ (≤64). Add
model_name-is-upstream-id vs display_name-is-alias semantics.
- reference/provider-compatibility.md — reframe "Current Provider Enum"
around the 5 adapter families + a coverage matrix + per-family
limitations (Vertex non-Gemini not implemented; Bedrock /invoke vs
Converse; Azure dual-auth) + featured/non-featured note. Existing
compatibility-boundary + reading-guide sections preserved.
- index.md — add a "connect an upstream provider" nav block + 2
reference entries. Additive.
Verified against: provider_key.rs (fields/telemetry_tags/strip_headers/
reasoning_field), model.rs + schema.rs (Adapter enum, provider pattern),
dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml
(ports). External vendor hosts carry a "confirm against the vendor's
current API reference" caveat (not gateway behavior).
Also resolves the 3 stale-existing-doc items flagged during #438 review.
@coderabbitai

coderabbitaiBot commented May 29, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 7 minutes and 26 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: ad55ce95-897f-4342-895d-bb07f1c2b6e5

📥 Commits

Reviewing files that changed from the base of the PR and between a51d27f and 12ffb02.

📒 Files selected for processing (2)
  • docs/reference/provider-compatibility.md
  • docs/reference/runtime-config-schema.md
📝 Walkthrough

Walkthrough

This PR adds and refines comprehensive documentation for provider key configuration, adapter protocol families, and upstream vendor integration. It introduces a complete JSON schema reference for the ProviderKey resource, redefines field semantics, and provides an end-to-end guide for integrating OpenAI-compatible upstream vendors into AISIX AI Gateway.

Changes

Provider Configuration and Adapter Integration Documentation

Layer / File(s)Summary
Provider Key runtime configuration schema reference
docs/reference/runtime-config-schema.md
Complete ProviderKey JSON schema defining required (display_name, secret) and optional fields (provider, adapter, api_base, telemetry_tags, request, response, strip_headers), closed adapter enum with wire-shape mappings, nested override specifications, and backward compatibility notes with minimal/full example payloads.
Provider key configuration field documentation
docs/configuration/provider-keys.md
New optional fields (provider, adapter, telemetry_tags) and their dispatch-time/telemetry roles are documented; provider-key creation example now includes provider and adapter; api_base section expanded with canonical-forms table detailing adapter-family-specific rules for Bedrock and Azure OpenAI, plus guidance on when api_base must be set; related pages extended with schema, adapter families, BYO, and specialized upstream links.
Model field definitions and provider constraints
docs/configuration/models.md
display_name clarified as caller alias echoed in response.model; model_name clarified as upstream model identifier; provider redefined from fixed supported set to free-form vendor label with lowercase pattern, max-length constraints, and explanation of dispatch adapter/provider selection and metrics/log labeling role; adapter families link added to related pages.
Adapter family compatibility reference
docs/reference/provider-compatibility.md
Shifted from provider-enum to adapter-family-based compatibility boundary; introduces five closed adapter families (openai, anthropic, bedrock, vertex, azure-openai), documents endpoint-capability coverage matrix (chat completions, streaming, embeddings, images/audio/responses, rerank), per-family limitations (normalization gaps, routing, authentication), featured vs non-featured catalog providers, and updated related links.
OpenAI-compatible upstream vendor integration guide
docs/integration/upstream-openai-compat.md
New comprehensive guide covering when to use, distinction from BYO endpoint and client-facing OpenAI-compatible API, upstream configuration model (provider key + model), api_base requirement for non-openai vendors with vendor-to-api_base table, self-hosted setup steps (provider key creation, model mapping, caller API key with hashing, sample request), self-hosted vs cloud configuration guidance, verification checks (alias restoration, dispatch confirmation), limitations, and cross-navigation links.
Documentation index and navigation updates
docs/index.md
Added "I want to connect an upstream provider" subsection with links to adapter families, OpenAI-compatible vendor onboarding, BYO endpoint configuration, and specialized upstream integrations (Bedrock/Vertex/Azure); extended "Documentation Structure" list with adapter families and schema reference links.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes


Note

🎁 Summarized by CodeRabbit Free

Your organization has reached its limit of developer seats under the Pro Plan. For new users, CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please add seats to your subscription by visiting https://app.coderabbit.ai/login.If you believe this is a mistake and have available seats, please assign one to the pull request author through the subscription management page using the link above.

Comment @coderabbitai help to get the list of available commands and usage tips.

…er gating
Audit (no HIGH/MEDIUM) flagged two precision nuances; both fixed:
- runtime-config-schema.md: the "overrides are an on-disk shape, not
applied at request time" caveat was wrong for the self-hosted path.
Verified the `openai` + `azure-openai` bridges DO apply request
(param_renames/param_constraints/default_headers/default_body_fields)
and response (stream_done_marker/content_list_to_string/reasoning_field)
overrides at dispatch via prepare_outbound_body + extract_reasoning_field
(overrides.rs; bridge.rs:677-737). bedrock/vertex build native shapes
and don't apply them. What's unshipped is the Cloud control-plane block
that auto-populates them — so Cloud keys are empty, but a self-hosted
operator setting them directly gets them applied. Reworded accordingly.
- provider-compatibility.md: the image/audio/responses/embeddings gate
keys on the literal `provider: "openai"`, not the whole `openai`
adapter family (responses.rs:171). Added a note that an OpenAI-compatible
vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions
but is rejected on /v1/responses, images, and audio.
@moonming

Copy link
Copy Markdown
MemberAuthor

Independent doc-accuracy audit: clean — no HIGH, no MEDIUM.

A fresh cold-read agent verified all 7 files against crates/ source (in addition to the author's pre-push verification). Every field/type/default/cross-link/curl confirmed against provider_key.rs, schema.rs, dispatch.rs, the bridges, aisix-admin/lib.rs, and config.example.yaml.

Two LOW precision nuances were raised and both fixed in 12ffb02:

  1. Override consumption — the schema doc's "overrides are stored but not applied at request time" caveat was wrong for the self-hosted path. The openai + azure-openai bridges DO apply request/response overrides at dispatch (prepare_outbound_body + extract_reasoning_field); bedrock/vertex build native shapes and don't. What's unshipped is the Cloud control-plane block that auto-populates them. Reworded to scope it accurately (applied on openai/azure paths; Cloud doesn't auto-populate yet; self-hosted direct-set works).
  2. Literal-provider gating/v1/responses + images/audio key on the literal provider: "openai" (responses.rs:171), not the whole openai adapter family. Added a note that an OpenAI-compatible vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions but is rejected on those endpoints.

Merging on green CI.

@moonming
moonming merged commit ac719b5 into mainMay 29, 2026
7 checks passed
@moonming
moonming deleted the docs/phase-h-schema-rewrites branch May 29, 2026 03:23
Sign up for freeto 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

@moonming
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder) - #440

Merged
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites
May 29, 2026
Merged

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder)#440
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites

Conversation

@moonming

@moonmingmoonming commented May 29, 2026

Copy link
Copy Markdown
Member

Summary

Completes the remaining Phase H doc items (the #438 subset covered the adapter concept + BYO + 3 platform integration guides). Every claim grounded in origin/main crates.

New:

  • reference/runtime-config-schema.md — complete ProviderKey JSON schema: all top-level fields, the closed adapter enum, telemetry_tags + request/response overrides, validation rules, examples.
  • integration/upstream-openai-compat.md — onboard a public OpenAI-compatible vendor (DeepSeek/Groq/Mistral/…) via the openai adapter; self-hosted vs Cloud; distinguished from byo-endpoint.md + openai-compatible-api.md.

Rewrites (surgical):

  • configuration/provider-keys.md — add provider/adapter/telemetry_tags fields + curl + bedrock/azure-openai api_base rows + backlinks. Existing api_base table preserved.
  • configuration/models.mdfix stale provider 6-value-enum claim (it's free-form ^[a-z0-9][a-z0-9._-]*$, ≤64); add model_name-is-upstream-id semantics.
  • reference/provider-compatibility.md — reframe "Current Provider Enum" → 5 adapter families + coverage matrix + per-family limitations + featured note.
  • index.md — "connect an upstream provider" nav block + 2 reference entries.

Verified against source

provider_key.rs (fields incl. telemetry_tags{kind,featured,branded_provider,pk_label,byo_label}, strip_headers default, reasoning_field), model.rs+schema.rs (Adapter enum, Model.provider pattern), dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml (ports :3001/:3000). External vendor hosts carry a "confirm against the vendor's current API reference" caveat.

Closes the 3 stale-doc items flagged in #438

provider-keys missing adapter; models.md stale provider enum; provider-compatibility pre-adapter framing — all fixed here.

🤖 Generated with Claude Code

Summary by CodeRabbit

Documentation

  • Clarified field definitions and constraints for model configuration (display_name, model_name, provider)
  • Expanded provider key documentation with additional configuration options and detailed setup guidance
  • Added comprehensive guide for integrating OpenAI-compatible upstream vendors
  • Introduced adapter-family-based compatibility reference for provider support
  • Published complete provider key schema documentation with examples
  • Enhanced navigation with new integration and reference guides

Review Change Stack

…mpat guide (#302 Phase H remainder)
Completes the remaining Phase H doc items, grounded in origin/main
crates (every field/validation verified against source):
NEW:
- reference/runtime-config-schema.md — complete ProviderKey JSON schema:
top-level fields (display_name/secret/api_base/provider/adapter/
telemetry_tags/request/response/strip_headers), the closed adapter
enum, telemetry_tags + request/response override sub-objects, with
validation rules and minimal/full examples.
- integration/upstream-openai-compat.md — onboard a public
OpenAI-compatible vendor (DeepSeek/Groq/Mistral/Together/Fireworks/
Perplexity) via the openai adapter; self-hosted vs Cloud; verification;
distinguished from byo-endpoint.md (private endpoints) and
openai-compatible-api.md (client-facing surface).
REWRITES (surgical — preserve existing accurate prose):
- configuration/provider-keys.md — add provider/adapter/telemetry_tags
to Current Fields + the create curl; add bedrock + azure-openai rows
to the api_base table (adapter-keyed); backlink the schema + adapter
+ upstream guides. Existing api_base behavior table + tolerance rules
preserved verbatim.
- configuration/models.md — FIX the stale claim that `provider` is a
6-value enum (openai/anthropic/google/deepseek/cohere/jina); it is a
free-form string matching ^[a-z0-9][a-z0-9._-]*$ (≤64). Add
model_name-is-upstream-id vs display_name-is-alias semantics.
- reference/provider-compatibility.md — reframe "Current Provider Enum"
around the 5 adapter families + a coverage matrix + per-family
limitations (Vertex non-Gemini not implemented; Bedrock /invoke vs
Converse; Azure dual-auth) + featured/non-featured note. Existing
compatibility-boundary + reading-guide sections preserved.
- index.md — add a "connect an upstream provider" nav block + 2
reference entries. Additive.
Verified against: provider_key.rs (fields/telemetry_tags/strip_headers/
reasoning_field), model.rs + schema.rs (Adapter enum, provider pattern),
dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml
(ports). External vendor hosts carry a "confirm against the vendor's
current API reference" caveat (not gateway behavior).
Also resolves the 3 stale-existing-doc items flagged during #438 review.
@coderabbitai

coderabbitaiBot commented May 29, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 7 minutes and 26 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: ad55ce95-897f-4342-895d-bb07f1c2b6e5

📥 Commits

Reviewing files that changed from the base of the PR and between a51d27f and 12ffb02.

📒 Files selected for processing (2)
  • docs/reference/provider-compatibility.md
  • docs/reference/runtime-config-schema.md
📝 Walkthrough

Walkthrough

This PR adds and refines comprehensive documentation for provider key configuration, adapter protocol families, and upstream vendor integration. It introduces a complete JSON schema reference for the ProviderKey resource, redefines field semantics, and provides an end-to-end guide for integrating OpenAI-compatible upstream vendors into AISIX AI Gateway.

Changes

Provider Configuration and Adapter Integration Documentation

Layer / File(s)Summary
Provider Key runtime configuration schema reference
docs/reference/runtime-config-schema.md
Complete ProviderKey JSON schema defining required (display_name, secret) and optional fields (provider, adapter, api_base, telemetry_tags, request, response, strip_headers), closed adapter enum with wire-shape mappings, nested override specifications, and backward compatibility notes with minimal/full example payloads.
Provider key configuration field documentation
docs/configuration/provider-keys.md
New optional fields (provider, adapter, telemetry_tags) and their dispatch-time/telemetry roles are documented; provider-key creation example now includes provider and adapter; api_base section expanded with canonical-forms table detailing adapter-family-specific rules for Bedrock and Azure OpenAI, plus guidance on when api_base must be set; related pages extended with schema, adapter families, BYO, and specialized upstream links.
Model field definitions and provider constraints
docs/configuration/models.md
display_name clarified as caller alias echoed in response.model; model_name clarified as upstream model identifier; provider redefined from fixed supported set to free-form vendor label with lowercase pattern, max-length constraints, and explanation of dispatch adapter/provider selection and metrics/log labeling role; adapter families link added to related pages.
Adapter family compatibility reference
docs/reference/provider-compatibility.md
Shifted from provider-enum to adapter-family-based compatibility boundary; introduces five closed adapter families (openai, anthropic, bedrock, vertex, azure-openai), documents endpoint-capability coverage matrix (chat completions, streaming, embeddings, images/audio/responses, rerank), per-family limitations (normalization gaps, routing, authentication), featured vs non-featured catalog providers, and updated related links.
OpenAI-compatible upstream vendor integration guide
docs/integration/upstream-openai-compat.md
New comprehensive guide covering when to use, distinction from BYO endpoint and client-facing OpenAI-compatible API, upstream configuration model (provider key + model), api_base requirement for non-openai vendors with vendor-to-api_base table, self-hosted setup steps (provider key creation, model mapping, caller API key with hashing, sample request), self-hosted vs cloud configuration guidance, verification checks (alias restoration, dispatch confirmation), limitations, and cross-navigation links.
Documentation index and navigation updates
docs/index.md
Added "I want to connect an upstream provider" subsection with links to adapter families, OpenAI-compatible vendor onboarding, BYO endpoint configuration, and specialized upstream integrations (Bedrock/Vertex/Azure); extended "Documentation Structure" list with adapter families and schema reference links.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes


Note

🎁 Summarized by CodeRabbit Free

Your organization has reached its limit of developer seats under the Pro Plan. For new users, CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please add seats to your subscription by visiting https://app.coderabbit.ai/login.If you believe this is a mistake and have available seats, please assign one to the pull request author through the subscription management page using the link above.

Comment @coderabbitai help to get the list of available commands and usage tips.

…er gating
Audit (no HIGH/MEDIUM) flagged two precision nuances; both fixed:
- runtime-config-schema.md: the "overrides are an on-disk shape, not
applied at request time" caveat was wrong for the self-hosted path.
Verified the `openai` + `azure-openai` bridges DO apply request
(param_renames/param_constraints/default_headers/default_body_fields)
and response (stream_done_marker/content_list_to_string/reasoning_field)
overrides at dispatch via prepare_outbound_body + extract_reasoning_field
(overrides.rs; bridge.rs:677-737). bedrock/vertex build native shapes
and don't apply them. What's unshipped is the Cloud control-plane block
that auto-populates them — so Cloud keys are empty, but a self-hosted
operator setting them directly gets them applied. Reworded accordingly.
- provider-compatibility.md: the image/audio/responses/embeddings gate
keys on the literal `provider: "openai"`, not the whole `openai`
adapter family (responses.rs:171). Added a note that an OpenAI-compatible
vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions
but is rejected on /v1/responses, images, and audio.
@moonming

Copy link
Copy Markdown
MemberAuthor

Independent doc-accuracy audit: clean — no HIGH, no MEDIUM.

A fresh cold-read agent verified all 7 files against crates/ source (in addition to the author's pre-push verification). Every field/type/default/cross-link/curl confirmed against provider_key.rs, schema.rs, dispatch.rs, the bridges, aisix-admin/lib.rs, and config.example.yaml.

Two LOW precision nuances were raised and both fixed in 12ffb02:

  1. Override consumption — the schema doc's "overrides are stored but not applied at request time" caveat was wrong for the self-hosted path. The openai + azure-openai bridges DO apply request/response overrides at dispatch (prepare_outbound_body + extract_reasoning_field); bedrock/vertex build native shapes and don't. What's unshipped is the Cloud control-plane block that auto-populates them. Reworded to scope it accurately (applied on openai/azure paths; Cloud doesn't auto-populate yet; self-hosted direct-set works).
  2. Literal-provider gating/v1/responses + images/audio key on the literal provider: "openai" (responses.rs:171), not the whole openai adapter family. Added a note that an OpenAI-compatible vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions but is rejected on those endpoints.

Merging on green CI.

@moonming
moonming merged commit ac719b5 into mainMay 29, 2026
7 checks passed
@moonming
moonming deleted the docs/phase-h-schema-rewrites branch May 29, 2026 03:23
Sign up for freeto 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

@moonming
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder) - #440

Merged
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites
May 29, 2026
Merged

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder)#440
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites

Conversation

@moonming

@moonmingmoonming commented May 29, 2026

Copy link
Copy Markdown
Member

Summary

Completes the remaining Phase H doc items (the #438 subset covered the adapter concept + BYO + 3 platform integration guides). Every claim grounded in origin/main crates.

New:

  • reference/runtime-config-schema.md — complete ProviderKey JSON schema: all top-level fields, the closed adapter enum, telemetry_tags + request/response overrides, validation rules, examples.
  • integration/upstream-openai-compat.md — onboard a public OpenAI-compatible vendor (DeepSeek/Groq/Mistral/…) via the openai adapter; self-hosted vs Cloud; distinguished from byo-endpoint.md + openai-compatible-api.md.

Rewrites (surgical):

  • configuration/provider-keys.md — add provider/adapter/telemetry_tags fields + curl + bedrock/azure-openai api_base rows + backlinks. Existing api_base table preserved.
  • configuration/models.mdfix stale provider 6-value-enum claim (it's free-form ^[a-z0-9][a-z0-9._-]*$, ≤64); add model_name-is-upstream-id semantics.
  • reference/provider-compatibility.md — reframe "Current Provider Enum" → 5 adapter families + coverage matrix + per-family limitations + featured note.
  • index.md — "connect an upstream provider" nav block + 2 reference entries.

Verified against source

provider_key.rs (fields incl. telemetry_tags{kind,featured,branded_provider,pk_label,byo_label}, strip_headers default, reasoning_field), model.rs+schema.rs (Adapter enum, Model.provider pattern), dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml (ports :3001/:3000). External vendor hosts carry a "confirm against the vendor's current API reference" caveat.

Closes the 3 stale-doc items flagged in #438

provider-keys missing adapter; models.md stale provider enum; provider-compatibility pre-adapter framing — all fixed here.

🤖 Generated with Claude Code

Summary by CodeRabbit

Documentation

  • Clarified field definitions and constraints for model configuration (display_name, model_name, provider)
  • Expanded provider key documentation with additional configuration options and detailed setup guidance
  • Added comprehensive guide for integrating OpenAI-compatible upstream vendors
  • Introduced adapter-family-based compatibility reference for provider support
  • Published complete provider key schema documentation with examples
  • Enhanced navigation with new integration and reference guides

Review Change Stack

…mpat guide (#302 Phase H remainder)
Completes the remaining Phase H doc items, grounded in origin/main
crates (every field/validation verified against source):
NEW:
- reference/runtime-config-schema.md — complete ProviderKey JSON schema:
top-level fields (display_name/secret/api_base/provider/adapter/
telemetry_tags/request/response/strip_headers), the closed adapter
enum, telemetry_tags + request/response override sub-objects, with
validation rules and minimal/full examples.
- integration/upstream-openai-compat.md — onboard a public
OpenAI-compatible vendor (DeepSeek/Groq/Mistral/Together/Fireworks/
Perplexity) via the openai adapter; self-hosted vs Cloud; verification;
distinguished from byo-endpoint.md (private endpoints) and
openai-compatible-api.md (client-facing surface).
REWRITES (surgical — preserve existing accurate prose):
- configuration/provider-keys.md — add provider/adapter/telemetry_tags
to Current Fields + the create curl; add bedrock + azure-openai rows
to the api_base table (adapter-keyed); backlink the schema + adapter
+ upstream guides. Existing api_base behavior table + tolerance rules
preserved verbatim.
- configuration/models.md — FIX the stale claim that `provider` is a
6-value enum (openai/anthropic/google/deepseek/cohere/jina); it is a
free-form string matching ^[a-z0-9][a-z0-9._-]*$ (≤64). Add
model_name-is-upstream-id vs display_name-is-alias semantics.
- reference/provider-compatibility.md — reframe "Current Provider Enum"
around the 5 adapter families + a coverage matrix + per-family
limitations (Vertex non-Gemini not implemented; Bedrock /invoke vs
Converse; Azure dual-auth) + featured/non-featured note. Existing
compatibility-boundary + reading-guide sections preserved.
- index.md — add a "connect an upstream provider" nav block + 2
reference entries. Additive.
Verified against: provider_key.rs (fields/telemetry_tags/strip_headers/
reasoning_field), model.rs + schema.rs (Adapter enum, provider pattern),
dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml
(ports). External vendor hosts carry a "confirm against the vendor's
current API reference" caveat (not gateway behavior).
Also resolves the 3 stale-existing-doc items flagged during #438 review.
@coderabbitai

coderabbitaiBot commented May 29, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 7 minutes and 26 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: ad55ce95-897f-4342-895d-bb07f1c2b6e5

📥 Commits

Reviewing files that changed from the base of the PR and between a51d27f and 12ffb02.

📒 Files selected for processing (2)
  • docs/reference/provider-compatibility.md
  • docs/reference/runtime-config-schema.md
📝 Walkthrough

Walkthrough

This PR adds and refines comprehensive documentation for provider key configuration, adapter protocol families, and upstream vendor integration. It introduces a complete JSON schema reference for the ProviderKey resource, redefines field semantics, and provides an end-to-end guide for integrating OpenAI-compatible upstream vendors into AISIX AI Gateway.

Changes

Provider Configuration and Adapter Integration Documentation

Layer / File(s)Summary
Provider Key runtime configuration schema reference
docs/reference/runtime-config-schema.md
Complete ProviderKey JSON schema defining required (display_name, secret) and optional fields (provider, adapter, api_base, telemetry_tags, request, response, strip_headers), closed adapter enum with wire-shape mappings, nested override specifications, and backward compatibility notes with minimal/full example payloads.
Provider key configuration field documentation
docs/configuration/provider-keys.md
New optional fields (provider, adapter, telemetry_tags) and their dispatch-time/telemetry roles are documented; provider-key creation example now includes provider and adapter; api_base section expanded with canonical-forms table detailing adapter-family-specific rules for Bedrock and Azure OpenAI, plus guidance on when api_base must be set; related pages extended with schema, adapter families, BYO, and specialized upstream links.
Model field definitions and provider constraints
docs/configuration/models.md
display_name clarified as caller alias echoed in response.model; model_name clarified as upstream model identifier; provider redefined from fixed supported set to free-form vendor label with lowercase pattern, max-length constraints, and explanation of dispatch adapter/provider selection and metrics/log labeling role; adapter families link added to related pages.
Adapter family compatibility reference
docs/reference/provider-compatibility.md
Shifted from provider-enum to adapter-family-based compatibility boundary; introduces five closed adapter families (openai, anthropic, bedrock, vertex, azure-openai), documents endpoint-capability coverage matrix (chat completions, streaming, embeddings, images/audio/responses, rerank), per-family limitations (normalization gaps, routing, authentication), featured vs non-featured catalog providers, and updated related links.
OpenAI-compatible upstream vendor integration guide
docs/integration/upstream-openai-compat.md
New comprehensive guide covering when to use, distinction from BYO endpoint and client-facing OpenAI-compatible API, upstream configuration model (provider key + model), api_base requirement for non-openai vendors with vendor-to-api_base table, self-hosted setup steps (provider key creation, model mapping, caller API key with hashing, sample request), self-hosted vs cloud configuration guidance, verification checks (alias restoration, dispatch confirmation), limitations, and cross-navigation links.
Documentation index and navigation updates
docs/index.md
Added "I want to connect an upstream provider" subsection with links to adapter families, OpenAI-compatible vendor onboarding, BYO endpoint configuration, and specialized upstream integrations (Bedrock/Vertex/Azure); extended "Documentation Structure" list with adapter families and schema reference links.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes


Note

🎁 Summarized by CodeRabbit Free

Your organization has reached its limit of developer seats under the Pro Plan. For new users, CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please add seats to your subscription by visiting https://app.coderabbit.ai/login.If you believe this is a mistake and have available seats, please assign one to the pull request author through the subscription management page using the link above.

Comment @coderabbitai help to get the list of available commands and usage tips.

…er gating
Audit (no HIGH/MEDIUM) flagged two precision nuances; both fixed:
- runtime-config-schema.md: the "overrides are an on-disk shape, not
applied at request time" caveat was wrong for the self-hosted path.
Verified the `openai` + `azure-openai` bridges DO apply request
(param_renames/param_constraints/default_headers/default_body_fields)
and response (stream_done_marker/content_list_to_string/reasoning_field)
overrides at dispatch via prepare_outbound_body + extract_reasoning_field
(overrides.rs; bridge.rs:677-737). bedrock/vertex build native shapes
and don't apply them. What's unshipped is the Cloud control-plane block
that auto-populates them — so Cloud keys are empty, but a self-hosted
operator setting them directly gets them applied. Reworded accordingly.
- provider-compatibility.md: the image/audio/responses/embeddings gate
keys on the literal `provider: "openai"`, not the whole `openai`
adapter family (responses.rs:171). Added a note that an OpenAI-compatible
vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions
but is rejected on /v1/responses, images, and audio.
@moonming

Copy link
Copy Markdown
MemberAuthor

Independent doc-accuracy audit: clean — no HIGH, no MEDIUM.

A fresh cold-read agent verified all 7 files against crates/ source (in addition to the author's pre-push verification). Every field/type/default/cross-link/curl confirmed against provider_key.rs, schema.rs, dispatch.rs, the bridges, aisix-admin/lib.rs, and config.example.yaml.

Two LOW precision nuances were raised and both fixed in 12ffb02:

  1. Override consumption — the schema doc's "overrides are stored but not applied at request time" caveat was wrong for the self-hosted path. The openai + azure-openai bridges DO apply request/response overrides at dispatch (prepare_outbound_body + extract_reasoning_field); bedrock/vertex build native shapes and don't. What's unshipped is the Cloud control-plane block that auto-populates them. Reworded to scope it accurately (applied on openai/azure paths; Cloud doesn't auto-populate yet; self-hosted direct-set works).
  2. Literal-provider gating/v1/responses + images/audio key on the literal provider: "openai" (responses.rs:171), not the whole openai adapter family. Added a note that an OpenAI-compatible vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions but is rejected on those endpoints.

Merging on green CI.

@moonming
moonming merged commit ac719b5 into mainMay 29, 2026
7 checks passed
@moonming
moonming deleted the docs/phase-h-schema-rewrites branch May 29, 2026 03:23
Sign up for freeto 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

@moonming
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder) - #440

Merged
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites
May 29, 2026
Merged

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder)#440
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites

Conversation

@moonming

@moonmingmoonming commented May 29, 2026

Copy link
Copy Markdown
Member

Summary

Completes the remaining Phase H doc items (the #438 subset covered the adapter concept + BYO + 3 platform integration guides). Every claim grounded in origin/main crates.

New:

  • reference/runtime-config-schema.md — complete ProviderKey JSON schema: all top-level fields, the closed adapter enum, telemetry_tags + request/response overrides, validation rules, examples.
  • integration/upstream-openai-compat.md — onboard a public OpenAI-compatible vendor (DeepSeek/Groq/Mistral/…) via the openai adapter; self-hosted vs Cloud; distinguished from byo-endpoint.md + openai-compatible-api.md.

Rewrites (surgical):

  • configuration/provider-keys.md — add provider/adapter/telemetry_tags fields + curl + bedrock/azure-openai api_base rows + backlinks. Existing api_base table preserved.
  • configuration/models.mdfix stale provider 6-value-enum claim (it's free-form ^[a-z0-9][a-z0-9._-]*$, ≤64); add model_name-is-upstream-id semantics.
  • reference/provider-compatibility.md — reframe "Current Provider Enum" → 5 adapter families + coverage matrix + per-family limitations + featured note.
  • index.md — "connect an upstream provider" nav block + 2 reference entries.

Verified against source

provider_key.rs (fields incl. telemetry_tags{kind,featured,branded_provider,pk_label,byo_label}, strip_headers default, reasoning_field), model.rs+schema.rs (Adapter enum, Model.provider pattern), dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml (ports :3001/:3000). External vendor hosts carry a "confirm against the vendor's current API reference" caveat.

Closes the 3 stale-doc items flagged in #438

provider-keys missing adapter; models.md stale provider enum; provider-compatibility pre-adapter framing — all fixed here.

🤖 Generated with Claude Code

Summary by CodeRabbit

Documentation

  • Clarified field definitions and constraints for model configuration (display_name, model_name, provider)
  • Expanded provider key documentation with additional configuration options and detailed setup guidance
  • Added comprehensive guide for integrating OpenAI-compatible upstream vendors
  • Introduced adapter-family-based compatibility reference for provider support
  • Published complete provider key schema documentation with examples
  • Enhanced navigation with new integration and reference guides

Review Change Stack

…mpat guide (#302 Phase H remainder)
Completes the remaining Phase H doc items, grounded in origin/main
crates (every field/validation verified against source):
NEW:
- reference/runtime-config-schema.md — complete ProviderKey JSON schema:
top-level fields (display_name/secret/api_base/provider/adapter/
telemetry_tags/request/response/strip_headers), the closed adapter
enum, telemetry_tags + request/response override sub-objects, with
validation rules and minimal/full examples.
- integration/upstream-openai-compat.md — onboard a public
OpenAI-compatible vendor (DeepSeek/Groq/Mistral/Together/Fireworks/
Perplexity) via the openai adapter; self-hosted vs Cloud; verification;
distinguished from byo-endpoint.md (private endpoints) and
openai-compatible-api.md (client-facing surface).
REWRITES (surgical — preserve existing accurate prose):
- configuration/provider-keys.md — add provider/adapter/telemetry_tags
to Current Fields + the create curl; add bedrock + azure-openai rows
to the api_base table (adapter-keyed); backlink the schema + adapter
+ upstream guides. Existing api_base behavior table + tolerance rules
preserved verbatim.
- configuration/models.md — FIX the stale claim that `provider` is a
6-value enum (openai/anthropic/google/deepseek/cohere/jina); it is a
free-form string matching ^[a-z0-9][a-z0-9._-]*$ (≤64). Add
model_name-is-upstream-id vs display_name-is-alias semantics.
- reference/provider-compatibility.md — reframe "Current Provider Enum"
around the 5 adapter families + a coverage matrix + per-family
limitations (Vertex non-Gemini not implemented; Bedrock /invoke vs
Converse; Azure dual-auth) + featured/non-featured note. Existing
compatibility-boundary + reading-guide sections preserved.
- index.md — add a "connect an upstream provider" nav block + 2
reference entries. Additive.
Verified against: provider_key.rs (fields/telemetry_tags/strip_headers/
reasoning_field), model.rs + schema.rs (Adapter enum, provider pattern),
dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml
(ports). External vendor hosts carry a "confirm against the vendor's
current API reference" caveat (not gateway behavior).
Also resolves the 3 stale-existing-doc items flagged during #438 review.
@coderabbitai

coderabbitaiBot commented May 29, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 7 minutes and 26 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: ad55ce95-897f-4342-895d-bb07f1c2b6e5

📥 Commits

Reviewing files that changed from the base of the PR and between a51d27f and 12ffb02.

📒 Files selected for processing (2)
  • docs/reference/provider-compatibility.md
  • docs/reference/runtime-config-schema.md
📝 Walkthrough

Walkthrough

This PR adds and refines comprehensive documentation for provider key configuration, adapter protocol families, and upstream vendor integration. It introduces a complete JSON schema reference for the ProviderKey resource, redefines field semantics, and provides an end-to-end guide for integrating OpenAI-compatible upstream vendors into AISIX AI Gateway.

Changes

Provider Configuration and Adapter Integration Documentation

Layer / File(s)Summary
Provider Key runtime configuration schema reference
docs/reference/runtime-config-schema.md
Complete ProviderKey JSON schema defining required (display_name, secret) and optional fields (provider, adapter, api_base, telemetry_tags, request, response, strip_headers), closed adapter enum with wire-shape mappings, nested override specifications, and backward compatibility notes with minimal/full example payloads.
Provider key configuration field documentation
docs/configuration/provider-keys.md
New optional fields (provider, adapter, telemetry_tags) and their dispatch-time/telemetry roles are documented; provider-key creation example now includes provider and adapter; api_base section expanded with canonical-forms table detailing adapter-family-specific rules for Bedrock and Azure OpenAI, plus guidance on when api_base must be set; related pages extended with schema, adapter families, BYO, and specialized upstream links.
Model field definitions and provider constraints
docs/configuration/models.md
display_name clarified as caller alias echoed in response.model; model_name clarified as upstream model identifier; provider redefined from fixed supported set to free-form vendor label with lowercase pattern, max-length constraints, and explanation of dispatch adapter/provider selection and metrics/log labeling role; adapter families link added to related pages.
Adapter family compatibility reference
docs/reference/provider-compatibility.md
Shifted from provider-enum to adapter-family-based compatibility boundary; introduces five closed adapter families (openai, anthropic, bedrock, vertex, azure-openai), documents endpoint-capability coverage matrix (chat completions, streaming, embeddings, images/audio/responses, rerank), per-family limitations (normalization gaps, routing, authentication), featured vs non-featured catalog providers, and updated related links.
OpenAI-compatible upstream vendor integration guide
docs/integration/upstream-openai-compat.md
New comprehensive guide covering when to use, distinction from BYO endpoint and client-facing OpenAI-compatible API, upstream configuration model (provider key + model), api_base requirement for non-openai vendors with vendor-to-api_base table, self-hosted setup steps (provider key creation, model mapping, caller API key with hashing, sample request), self-hosted vs cloud configuration guidance, verification checks (alias restoration, dispatch confirmation), limitations, and cross-navigation links.
Documentation index and navigation updates
docs/index.md
Added "I want to connect an upstream provider" subsection with links to adapter families, OpenAI-compatible vendor onboarding, BYO endpoint configuration, and specialized upstream integrations (Bedrock/Vertex/Azure); extended "Documentation Structure" list with adapter families and schema reference links.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes


Note

🎁 Summarized by CodeRabbit Free

Your organization has reached its limit of developer seats under the Pro Plan. For new users, CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please add seats to your subscription by visiting https://app.coderabbit.ai/login.If you believe this is a mistake and have available seats, please assign one to the pull request author through the subscription management page using the link above.

Comment @coderabbitai help to get the list of available commands and usage tips.

…er gating
Audit (no HIGH/MEDIUM) flagged two precision nuances; both fixed:
- runtime-config-schema.md: the "overrides are an on-disk shape, not
applied at request time" caveat was wrong for the self-hosted path.
Verified the `openai` + `azure-openai` bridges DO apply request
(param_renames/param_constraints/default_headers/default_body_fields)
and response (stream_done_marker/content_list_to_string/reasoning_field)
overrides at dispatch via prepare_outbound_body + extract_reasoning_field
(overrides.rs; bridge.rs:677-737). bedrock/vertex build native shapes
and don't apply them. What's unshipped is the Cloud control-plane block
that auto-populates them — so Cloud keys are empty, but a self-hosted
operator setting them directly gets them applied. Reworded accordingly.
- provider-compatibility.md: the image/audio/responses/embeddings gate
keys on the literal `provider: "openai"`, not the whole `openai`
adapter family (responses.rs:171). Added a note that an OpenAI-compatible
vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions
but is rejected on /v1/responses, images, and audio.
@moonming

Copy link
Copy Markdown
MemberAuthor

Independent doc-accuracy audit: clean — no HIGH, no MEDIUM.

A fresh cold-read agent verified all 7 files against crates/ source (in addition to the author's pre-push verification). Every field/type/default/cross-link/curl confirmed against provider_key.rs, schema.rs, dispatch.rs, the bridges, aisix-admin/lib.rs, and config.example.yaml.

Two LOW precision nuances were raised and both fixed in 12ffb02:

  1. Override consumption — the schema doc's "overrides are stored but not applied at request time" caveat was wrong for the self-hosted path. The openai + azure-openai bridges DO apply request/response overrides at dispatch (prepare_outbound_body + extract_reasoning_field); bedrock/vertex build native shapes and don't. What's unshipped is the Cloud control-plane block that auto-populates them. Reworded to scope it accurately (applied on openai/azure paths; Cloud doesn't auto-populate yet; self-hosted direct-set works).
  2. Literal-provider gating/v1/responses + images/audio key on the literal provider: "openai" (responses.rs:171), not the whole openai adapter family. Added a note that an OpenAI-compatible vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions but is rejected on those endpoints.

Merging on green CI.

@moonming
moonming merged commit ac719b5 into mainMay 29, 2026
7 checks passed
@moonming
moonming deleted the docs/phase-h-schema-rewrites branch May 29, 2026 03:23
Sign up for freeto 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

@moonming
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder) - #440

Merged
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites
May 29, 2026
Merged

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder)#440
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites

Conversation

@moonming

@moonmingmoonming commented May 29, 2026

Copy link
Copy Markdown
Member

Summary

Completes the remaining Phase H doc items (the #438 subset covered the adapter concept + BYO + 3 platform integration guides). Every claim grounded in origin/main crates.

New:

  • reference/runtime-config-schema.md — complete ProviderKey JSON schema: all top-level fields, the closed adapter enum, telemetry_tags + request/response overrides, validation rules, examples.
  • integration/upstream-openai-compat.md — onboard a public OpenAI-compatible vendor (DeepSeek/Groq/Mistral/…) via the openai adapter; self-hosted vs Cloud; distinguished from byo-endpoint.md + openai-compatible-api.md.

Rewrites (surgical):

  • configuration/provider-keys.md — add provider/adapter/telemetry_tags fields + curl + bedrock/azure-openai api_base rows + backlinks. Existing api_base table preserved.
  • configuration/models.mdfix stale provider 6-value-enum claim (it's free-form ^[a-z0-9][a-z0-9._-]*$, ≤64); add model_name-is-upstream-id semantics.
  • reference/provider-compatibility.md — reframe "Current Provider Enum" → 5 adapter families + coverage matrix + per-family limitations + featured note.
  • index.md — "connect an upstream provider" nav block + 2 reference entries.

Verified against source

provider_key.rs (fields incl. telemetry_tags{kind,featured,branded_provider,pk_label,byo_label}, strip_headers default, reasoning_field), model.rs+schema.rs (Adapter enum, Model.provider pattern), dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml (ports :3001/:3000). External vendor hosts carry a "confirm against the vendor's current API reference" caveat.

Closes the 3 stale-doc items flagged in #438

provider-keys missing adapter; models.md stale provider enum; provider-compatibility pre-adapter framing — all fixed here.

🤖 Generated with Claude Code

Summary by CodeRabbit

Documentation

  • Clarified field definitions and constraints for model configuration (display_name, model_name, provider)
  • Expanded provider key documentation with additional configuration options and detailed setup guidance
  • Added comprehensive guide for integrating OpenAI-compatible upstream vendors
  • Introduced adapter-family-based compatibility reference for provider support
  • Published complete provider key schema documentation with examples
  • Enhanced navigation with new integration and reference guides

Review Change Stack

…mpat guide (#302 Phase H remainder)
Completes the remaining Phase H doc items, grounded in origin/main
crates (every field/validation verified against source):
NEW:
- reference/runtime-config-schema.md — complete ProviderKey JSON schema:
top-level fields (display_name/secret/api_base/provider/adapter/
telemetry_tags/request/response/strip_headers), the closed adapter
enum, telemetry_tags + request/response override sub-objects, with
validation rules and minimal/full examples.
- integration/upstream-openai-compat.md — onboard a public
OpenAI-compatible vendor (DeepSeek/Groq/Mistral/Together/Fireworks/
Perplexity) via the openai adapter; self-hosted vs Cloud; verification;
distinguished from byo-endpoint.md (private endpoints) and
openai-compatible-api.md (client-facing surface).
REWRITES (surgical — preserve existing accurate prose):
- configuration/provider-keys.md — add provider/adapter/telemetry_tags
to Current Fields + the create curl; add bedrock + azure-openai rows
to the api_base table (adapter-keyed); backlink the schema + adapter
+ upstream guides. Existing api_base behavior table + tolerance rules
preserved verbatim.
- configuration/models.md — FIX the stale claim that `provider` is a
6-value enum (openai/anthropic/google/deepseek/cohere/jina); it is a
free-form string matching ^[a-z0-9][a-z0-9._-]*$ (≤64). Add
model_name-is-upstream-id vs display_name-is-alias semantics.
- reference/provider-compatibility.md — reframe "Current Provider Enum"
around the 5 adapter families + a coverage matrix + per-family
limitations (Vertex non-Gemini not implemented; Bedrock /invoke vs
Converse; Azure dual-auth) + featured/non-featured note. Existing
compatibility-boundary + reading-guide sections preserved.
- index.md — add a "connect an upstream provider" nav block + 2
reference entries. Additive.
Verified against: provider_key.rs (fields/telemetry_tags/strip_headers/
reasoning_field), model.rs + schema.rs (Adapter enum, provider pattern),
dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml
(ports). External vendor hosts carry a "confirm against the vendor's
current API reference" caveat (not gateway behavior).
Also resolves the 3 stale-existing-doc items flagged during #438 review.
@coderabbitai

coderabbitaiBot commented May 29, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 7 minutes and 26 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: ad55ce95-897f-4342-895d-bb07f1c2b6e5

📥 Commits

Reviewing files that changed from the base of the PR and between a51d27f and 12ffb02.

📒 Files selected for processing (2)
  • docs/reference/provider-compatibility.md
  • docs/reference/runtime-config-schema.md
📝 Walkthrough

Walkthrough

This PR adds and refines comprehensive documentation for provider key configuration, adapter protocol families, and upstream vendor integration. It introduces a complete JSON schema reference for the ProviderKey resource, redefines field semantics, and provides an end-to-end guide for integrating OpenAI-compatible upstream vendors into AISIX AI Gateway.

Changes

Provider Configuration and Adapter Integration Documentation

Layer / File(s)Summary
Provider Key runtime configuration schema reference
docs/reference/runtime-config-schema.md
Complete ProviderKey JSON schema defining required (display_name, secret) and optional fields (provider, adapter, api_base, telemetry_tags, request, response, strip_headers), closed adapter enum with wire-shape mappings, nested override specifications, and backward compatibility notes with minimal/full example payloads.
Provider key configuration field documentation
docs/configuration/provider-keys.md
New optional fields (provider, adapter, telemetry_tags) and their dispatch-time/telemetry roles are documented; provider-key creation example now includes provider and adapter; api_base section expanded with canonical-forms table detailing adapter-family-specific rules for Bedrock and Azure OpenAI, plus guidance on when api_base must be set; related pages extended with schema, adapter families, BYO, and specialized upstream links.
Model field definitions and provider constraints
docs/configuration/models.md
display_name clarified as caller alias echoed in response.model; model_name clarified as upstream model identifier; provider redefined from fixed supported set to free-form vendor label with lowercase pattern, max-length constraints, and explanation of dispatch adapter/provider selection and metrics/log labeling role; adapter families link added to related pages.
Adapter family compatibility reference
docs/reference/provider-compatibility.md
Shifted from provider-enum to adapter-family-based compatibility boundary; introduces five closed adapter families (openai, anthropic, bedrock, vertex, azure-openai), documents endpoint-capability coverage matrix (chat completions, streaming, embeddings, images/audio/responses, rerank), per-family limitations (normalization gaps, routing, authentication), featured vs non-featured catalog providers, and updated related links.
OpenAI-compatible upstream vendor integration guide
docs/integration/upstream-openai-compat.md
New comprehensive guide covering when to use, distinction from BYO endpoint and client-facing OpenAI-compatible API, upstream configuration model (provider key + model), api_base requirement for non-openai vendors with vendor-to-api_base table, self-hosted setup steps (provider key creation, model mapping, caller API key with hashing, sample request), self-hosted vs cloud configuration guidance, verification checks (alias restoration, dispatch confirmation), limitations, and cross-navigation links.
Documentation index and navigation updates
docs/index.md
Added "I want to connect an upstream provider" subsection with links to adapter families, OpenAI-compatible vendor onboarding, BYO endpoint configuration, and specialized upstream integrations (Bedrock/Vertex/Azure); extended "Documentation Structure" list with adapter families and schema reference links.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes


Note

🎁 Summarized by CodeRabbit Free

Your organization has reached its limit of developer seats under the Pro Plan. For new users, CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please add seats to your subscription by visiting https://app.coderabbit.ai/login.If you believe this is a mistake and have available seats, please assign one to the pull request author through the subscription management page using the link above.

Comment @coderabbitai help to get the list of available commands and usage tips.

…er gating
Audit (no HIGH/MEDIUM) flagged two precision nuances; both fixed:
- runtime-config-schema.md: the "overrides are an on-disk shape, not
applied at request time" caveat was wrong for the self-hosted path.
Verified the `openai` + `azure-openai` bridges DO apply request
(param_renames/param_constraints/default_headers/default_body_fields)
and response (stream_done_marker/content_list_to_string/reasoning_field)
overrides at dispatch via prepare_outbound_body + extract_reasoning_field
(overrides.rs; bridge.rs:677-737). bedrock/vertex build native shapes
and don't apply them. What's unshipped is the Cloud control-plane block
that auto-populates them — so Cloud keys are empty, but a self-hosted
operator setting them directly gets them applied. Reworded accordingly.
- provider-compatibility.md: the image/audio/responses/embeddings gate
keys on the literal `provider: "openai"`, not the whole `openai`
adapter family (responses.rs:171). Added a note that an OpenAI-compatible
vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions
but is rejected on /v1/responses, images, and audio.
@moonming

Copy link
Copy Markdown
MemberAuthor

Independent doc-accuracy audit: clean — no HIGH, no MEDIUM.

A fresh cold-read agent verified all 7 files against crates/ source (in addition to the author's pre-push verification). Every field/type/default/cross-link/curl confirmed against provider_key.rs, schema.rs, dispatch.rs, the bridges, aisix-admin/lib.rs, and config.example.yaml.

Two LOW precision nuances were raised and both fixed in 12ffb02:

  1. Override consumption — the schema doc's "overrides are stored but not applied at request time" caveat was wrong for the self-hosted path. The openai + azure-openai bridges DO apply request/response overrides at dispatch (prepare_outbound_body + extract_reasoning_field); bedrock/vertex build native shapes and don't. What's unshipped is the Cloud control-plane block that auto-populates them. Reworded to scope it accurately (applied on openai/azure paths; Cloud doesn't auto-populate yet; self-hosted direct-set works).
  2. Literal-provider gating/v1/responses + images/audio key on the literal provider: "openai" (responses.rs:171), not the whole openai adapter family. Added a note that an OpenAI-compatible vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions but is rejected on those endpoints.

Merging on green CI.

@moonming
moonming merged commit ac719b5 into mainMay 29, 2026
7 checks passed
@moonming
moonming deleted the docs/phase-h-schema-rewrites branch May 29, 2026 03:23
Sign up for freeto 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

@moonming
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder) - #440

Merged
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites
May 29, 2026
Merged

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder)#440
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites

Conversation

@moonming

@moonmingmoonming commented May 29, 2026

Copy link
Copy Markdown
Member

Summary

Completes the remaining Phase H doc items (the #438 subset covered the adapter concept + BYO + 3 platform integration guides). Every claim grounded in origin/main crates.

New:

  • reference/runtime-config-schema.md — complete ProviderKey JSON schema: all top-level fields, the closed adapter enum, telemetry_tags + request/response overrides, validation rules, examples.
  • integration/upstream-openai-compat.md — onboard a public OpenAI-compatible vendor (DeepSeek/Groq/Mistral/…) via the openai adapter; self-hosted vs Cloud; distinguished from byo-endpoint.md + openai-compatible-api.md.

Rewrites (surgical):

  • configuration/provider-keys.md — add provider/adapter/telemetry_tags fields + curl + bedrock/azure-openai api_base rows + backlinks. Existing api_base table preserved.
  • configuration/models.mdfix stale provider 6-value-enum claim (it's free-form ^[a-z0-9][a-z0-9._-]*$, ≤64); add model_name-is-upstream-id semantics.
  • reference/provider-compatibility.md — reframe "Current Provider Enum" → 5 adapter families + coverage matrix + per-family limitations + featured note.
  • index.md — "connect an upstream provider" nav block + 2 reference entries.

Verified against source

provider_key.rs (fields incl. telemetry_tags{kind,featured,branded_provider,pk_label,byo_label}, strip_headers default, reasoning_field), model.rs+schema.rs (Adapter enum, Model.provider pattern), dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml (ports :3001/:3000). External vendor hosts carry a "confirm against the vendor's current API reference" caveat.

Closes the 3 stale-doc items flagged in #438

provider-keys missing adapter; models.md stale provider enum; provider-compatibility pre-adapter framing — all fixed here.

🤖 Generated with Claude Code

Summary by CodeRabbit

Documentation

  • Clarified field definitions and constraints for model configuration (display_name, model_name, provider)
  • Expanded provider key documentation with additional configuration options and detailed setup guidance
  • Added comprehensive guide for integrating OpenAI-compatible upstream vendors
  • Introduced adapter-family-based compatibility reference for provider support
  • Published complete provider key schema documentation with examples
  • Enhanced navigation with new integration and reference guides

Review Change Stack

…mpat guide (#302 Phase H remainder)
Completes the remaining Phase H doc items, grounded in origin/main
crates (every field/validation verified against source):
NEW:
- reference/runtime-config-schema.md — complete ProviderKey JSON schema:
top-level fields (display_name/secret/api_base/provider/adapter/
telemetry_tags/request/response/strip_headers), the closed adapter
enum, telemetry_tags + request/response override sub-objects, with
validation rules and minimal/full examples.
- integration/upstream-openai-compat.md — onboard a public
OpenAI-compatible vendor (DeepSeek/Groq/Mistral/Together/Fireworks/
Perplexity) via the openai adapter; self-hosted vs Cloud; verification;
distinguished from byo-endpoint.md (private endpoints) and
openai-compatible-api.md (client-facing surface).
REWRITES (surgical — preserve existing accurate prose):
- configuration/provider-keys.md — add provider/adapter/telemetry_tags
to Current Fields + the create curl; add bedrock + azure-openai rows
to the api_base table (adapter-keyed); backlink the schema + adapter
+ upstream guides. Existing api_base behavior table + tolerance rules
preserved verbatim.
- configuration/models.md — FIX the stale claim that `provider` is a
6-value enum (openai/anthropic/google/deepseek/cohere/jina); it is a
free-form string matching ^[a-z0-9][a-z0-9._-]*$ (≤64). Add
model_name-is-upstream-id vs display_name-is-alias semantics.
- reference/provider-compatibility.md — reframe "Current Provider Enum"
around the 5 adapter families + a coverage matrix + per-family
limitations (Vertex non-Gemini not implemented; Bedrock /invoke vs
Converse; Azure dual-auth) + featured/non-featured note. Existing
compatibility-boundary + reading-guide sections preserved.
- index.md — add a "connect an upstream provider" nav block + 2
reference entries. Additive.
Verified against: provider_key.rs (fields/telemetry_tags/strip_headers/
reasoning_field), model.rs + schema.rs (Adapter enum, provider pattern),
dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml
(ports). External vendor hosts carry a "confirm against the vendor's
current API reference" caveat (not gateway behavior).
Also resolves the 3 stale-existing-doc items flagged during #438 review.
@coderabbitai

coderabbitaiBot commented May 29, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 7 minutes and 26 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: ad55ce95-897f-4342-895d-bb07f1c2b6e5

📥 Commits

Reviewing files that changed from the base of the PR and between a51d27f and 12ffb02.

📒 Files selected for processing (2)
  • docs/reference/provider-compatibility.md
  • docs/reference/runtime-config-schema.md
📝 Walkthrough

Walkthrough

This PR adds and refines comprehensive documentation for provider key configuration, adapter protocol families, and upstream vendor integration. It introduces a complete JSON schema reference for the ProviderKey resource, redefines field semantics, and provides an end-to-end guide for integrating OpenAI-compatible upstream vendors into AISIX AI Gateway.

Changes

Provider Configuration and Adapter Integration Documentation

Layer / File(s)Summary
Provider Key runtime configuration schema reference
docs/reference/runtime-config-schema.md
Complete ProviderKey JSON schema defining required (display_name, secret) and optional fields (provider, adapter, api_base, telemetry_tags, request, response, strip_headers), closed adapter enum with wire-shape mappings, nested override specifications, and backward compatibility notes with minimal/full example payloads.
Provider key configuration field documentation
docs/configuration/provider-keys.md
New optional fields (provider, adapter, telemetry_tags) and their dispatch-time/telemetry roles are documented; provider-key creation example now includes provider and adapter; api_base section expanded with canonical-forms table detailing adapter-family-specific rules for Bedrock and Azure OpenAI, plus guidance on when api_base must be set; related pages extended with schema, adapter families, BYO, and specialized upstream links.
Model field definitions and provider constraints
docs/configuration/models.md
display_name clarified as caller alias echoed in response.model; model_name clarified as upstream model identifier; provider redefined from fixed supported set to free-form vendor label with lowercase pattern, max-length constraints, and explanation of dispatch adapter/provider selection and metrics/log labeling role; adapter families link added to related pages.
Adapter family compatibility reference
docs/reference/provider-compatibility.md
Shifted from provider-enum to adapter-family-based compatibility boundary; introduces five closed adapter families (openai, anthropic, bedrock, vertex, azure-openai), documents endpoint-capability coverage matrix (chat completions, streaming, embeddings, images/audio/responses, rerank), per-family limitations (normalization gaps, routing, authentication), featured vs non-featured catalog providers, and updated related links.
OpenAI-compatible upstream vendor integration guide
docs/integration/upstream-openai-compat.md
New comprehensive guide covering when to use, distinction from BYO endpoint and client-facing OpenAI-compatible API, upstream configuration model (provider key + model), api_base requirement for non-openai vendors with vendor-to-api_base table, self-hosted setup steps (provider key creation, model mapping, caller API key with hashing, sample request), self-hosted vs cloud configuration guidance, verification checks (alias restoration, dispatch confirmation), limitations, and cross-navigation links.
Documentation index and navigation updates
docs/index.md
Added "I want to connect an upstream provider" subsection with links to adapter families, OpenAI-compatible vendor onboarding, BYO endpoint configuration, and specialized upstream integrations (Bedrock/Vertex/Azure); extended "Documentation Structure" list with adapter families and schema reference links.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes


Note

🎁 Summarized by CodeRabbit Free

Your organization has reached its limit of developer seats under the Pro Plan. For new users, CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please add seats to your subscription by visiting https://app.coderabbit.ai/login.If you believe this is a mistake and have available seats, please assign one to the pull request author through the subscription management page using the link above.

Comment @coderabbitai help to get the list of available commands and usage tips.

…er gating
Audit (no HIGH/MEDIUM) flagged two precision nuances; both fixed:
- runtime-config-schema.md: the "overrides are an on-disk shape, not
applied at request time" caveat was wrong for the self-hosted path.
Verified the `openai` + `azure-openai` bridges DO apply request
(param_renames/param_constraints/default_headers/default_body_fields)
and response (stream_done_marker/content_list_to_string/reasoning_field)
overrides at dispatch via prepare_outbound_body + extract_reasoning_field
(overrides.rs; bridge.rs:677-737). bedrock/vertex build native shapes
and don't apply them. What's unshipped is the Cloud control-plane block
that auto-populates them — so Cloud keys are empty, but a self-hosted
operator setting them directly gets them applied. Reworded accordingly.
- provider-compatibility.md: the image/audio/responses/embeddings gate
keys on the literal `provider: "openai"`, not the whole `openai`
adapter family (responses.rs:171). Added a note that an OpenAI-compatible
vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions
but is rejected on /v1/responses, images, and audio.
@moonming

Copy link
Copy Markdown
MemberAuthor

Independent doc-accuracy audit: clean — no HIGH, no MEDIUM.

A fresh cold-read agent verified all 7 files against crates/ source (in addition to the author's pre-push verification). Every field/type/default/cross-link/curl confirmed against provider_key.rs, schema.rs, dispatch.rs, the bridges, aisix-admin/lib.rs, and config.example.yaml.

Two LOW precision nuances were raised and both fixed in 12ffb02:

  1. Override consumption — the schema doc's "overrides are stored but not applied at request time" caveat was wrong for the self-hosted path. The openai + azure-openai bridges DO apply request/response overrides at dispatch (prepare_outbound_body + extract_reasoning_field); bedrock/vertex build native shapes and don't. What's unshipped is the Cloud control-plane block that auto-populates them. Reworded to scope it accurately (applied on openai/azure paths; Cloud doesn't auto-populate yet; self-hosted direct-set works).
  2. Literal-provider gating/v1/responses + images/audio key on the literal provider: "openai" (responses.rs:171), not the whole openai adapter family. Added a note that an OpenAI-compatible vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions but is rejected on those endpoints.

Merging on green CI.

@moonming
moonming merged commit ac719b5 into mainMay 29, 2026
7 checks passed
@moonming
moonming deleted the docs/phase-h-schema-rewrites branch May 29, 2026 03:23
Sign up for freeto 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

@moonming
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder) - #440

Merged
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites
May 29, 2026
Merged

docs: provider-key schema + adapter-aware config rewrites + openai-compat guide (#302 Phase H remainder)#440
moonming merged 2 commits into
mainfrom
docs/phase-h-schema-rewrites

Conversation

@moonming

@moonmingmoonming commented May 29, 2026

Copy link
Copy Markdown
Member

Summary

Completes the remaining Phase H doc items (the #438 subset covered the adapter concept + BYO + 3 platform integration guides). Every claim grounded in origin/main crates.

New:

  • reference/runtime-config-schema.md — complete ProviderKey JSON schema: all top-level fields, the closed adapter enum, telemetry_tags + request/response overrides, validation rules, examples.
  • integration/upstream-openai-compat.md — onboard a public OpenAI-compatible vendor (DeepSeek/Groq/Mistral/…) via the openai adapter; self-hosted vs Cloud; distinguished from byo-endpoint.md + openai-compatible-api.md.

Rewrites (surgical):

  • configuration/provider-keys.md — add provider/adapter/telemetry_tags fields + curl + bedrock/azure-openai api_base rows + backlinks. Existing api_base table preserved.
  • configuration/models.mdfix stale provider 6-value-enum claim (it's free-form ^[a-z0-9][a-z0-9._-]*$, ≤64); add model_name-is-upstream-id semantics.
  • reference/provider-compatibility.md — reframe "Current Provider Enum" → 5 adapter families + coverage matrix + per-family limitations + featured note.
  • index.md — "connect an upstream provider" nav block + 2 reference entries.

Verified against source

provider_key.rs (fields incl. telemetry_tags{kind,featured,branded_provider,pk_label,byo_label}, strip_headers default, reasoning_field), model.rs+schema.rs (Adapter enum, Model.provider pattern), dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml (ports :3001/:3000). External vendor hosts carry a "confirm against the vendor's current API reference" caveat.

Closes the 3 stale-doc items flagged in #438

provider-keys missing adapter; models.md stale provider enum; provider-compatibility pre-adapter framing — all fixed here.

🤖 Generated with Claude Code

Summary by CodeRabbit

Documentation

  • Clarified field definitions and constraints for model configuration (display_name, model_name, provider)
  • Expanded provider key documentation with additional configuration options and detailed setup guidance
  • Added comprehensive guide for integrating OpenAI-compatible upstream vendors
  • Introduced adapter-family-based compatibility reference for provider support
  • Published complete provider key schema documentation with examples
  • Enhanced navigation with new integration and reference guides

Review Change Stack

…mpat guide (#302 Phase H remainder)
Completes the remaining Phase H doc items, grounded in origin/main
crates (every field/validation verified against source):
NEW:
- reference/runtime-config-schema.md — complete ProviderKey JSON schema:
top-level fields (display_name/secret/api_base/provider/adapter/
telemetry_tags/request/response/strip_headers), the closed adapter
enum, telemetry_tags + request/response override sub-objects, with
validation rules and minimal/full examples.
- integration/upstream-openai-compat.md — onboard a public
OpenAI-compatible vendor (DeepSeek/Groq/Mistral/Together/Fireworks/
Perplexity) via the openai adapter; self-hosted vs Cloud; verification;
distinguished from byo-endpoint.md (private endpoints) and
openai-compatible-api.md (client-facing surface).
REWRITES (surgical — preserve existing accurate prose):
- configuration/provider-keys.md — add provider/adapter/telemetry_tags
to Current Fields + the create curl; add bedrock + azure-openai rows
to the api_base table (adapter-keyed); backlink the schema + adapter
+ upstream guides. Existing api_base behavior table + tolerance rules
preserved verbatim.
- configuration/models.md — FIX the stale claim that `provider` is a
6-value enum (openai/anthropic/google/deepseek/cohere/jina); it is a
free-form string matching ^[a-z0-9][a-z0-9._-]*$ (≤64). Add
model_name-is-upstream-id vs display_name-is-alias semantics.
- reference/provider-compatibility.md — reframe "Current Provider Enum"
around the 5 adapter families + a coverage matrix + per-family
limitations (Vertex non-Gemini not implemented; Bedrock /invoke vs
Converse; Azure dual-auth) + featured/non-featured note. Existing
compatibility-boundary + reading-guide sections preserved.
- index.md — add a "connect an upstream provider" nav block + 2
reference entries. Additive.
Verified against: provider_key.rs (fields/telemetry_tags/strip_headers/
reasoning_field), model.rs + schema.rs (Adapter enum, provider pattern),
dispatch.rs (two-tier), aisix-admin/lib.rs (routes), config.example.yaml
(ports). External vendor hosts carry a "confirm against the vendor's
current API reference" caveat (not gateway behavior).
Also resolves the 3 stale-existing-doc items flagged during #438 review.
@coderabbitai

coderabbitaiBot commented May 29, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 7 minutes and 26 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: ad55ce95-897f-4342-895d-bb07f1c2b6e5

📥 Commits

Reviewing files that changed from the base of the PR and between a51d27f and 12ffb02.

📒 Files selected for processing (2)
  • docs/reference/provider-compatibility.md
  • docs/reference/runtime-config-schema.md
📝 Walkthrough

Walkthrough

This PR adds and refines comprehensive documentation for provider key configuration, adapter protocol families, and upstream vendor integration. It introduces a complete JSON schema reference for the ProviderKey resource, redefines field semantics, and provides an end-to-end guide for integrating OpenAI-compatible upstream vendors into AISIX AI Gateway.

Changes

Provider Configuration and Adapter Integration Documentation

Layer / File(s)Summary
Provider Key runtime configuration schema reference
docs/reference/runtime-config-schema.md
Complete ProviderKey JSON schema defining required (display_name, secret) and optional fields (provider, adapter, api_base, telemetry_tags, request, response, strip_headers), closed adapter enum with wire-shape mappings, nested override specifications, and backward compatibility notes with minimal/full example payloads.
Provider key configuration field documentation
docs/configuration/provider-keys.md
New optional fields (provider, adapter, telemetry_tags) and their dispatch-time/telemetry roles are documented; provider-key creation example now includes provider and adapter; api_base section expanded with canonical-forms table detailing adapter-family-specific rules for Bedrock and Azure OpenAI, plus guidance on when api_base must be set; related pages extended with schema, adapter families, BYO, and specialized upstream links.
Model field definitions and provider constraints
docs/configuration/models.md
display_name clarified as caller alias echoed in response.model; model_name clarified as upstream model identifier; provider redefined from fixed supported set to free-form vendor label with lowercase pattern, max-length constraints, and explanation of dispatch adapter/provider selection and metrics/log labeling role; adapter families link added to related pages.
Adapter family compatibility reference
docs/reference/provider-compatibility.md
Shifted from provider-enum to adapter-family-based compatibility boundary; introduces five closed adapter families (openai, anthropic, bedrock, vertex, azure-openai), documents endpoint-capability coverage matrix (chat completions, streaming, embeddings, images/audio/responses, rerank), per-family limitations (normalization gaps, routing, authentication), featured vs non-featured catalog providers, and updated related links.
OpenAI-compatible upstream vendor integration guide
docs/integration/upstream-openai-compat.md
New comprehensive guide covering when to use, distinction from BYO endpoint and client-facing OpenAI-compatible API, upstream configuration model (provider key + model), api_base requirement for non-openai vendors with vendor-to-api_base table, self-hosted setup steps (provider key creation, model mapping, caller API key with hashing, sample request), self-hosted vs cloud configuration guidance, verification checks (alias restoration, dispatch confirmation), limitations, and cross-navigation links.
Documentation index and navigation updates
docs/index.md
Added "I want to connect an upstream provider" subsection with links to adapter families, OpenAI-compatible vendor onboarding, BYO endpoint configuration, and specialized upstream integrations (Bedrock/Vertex/Azure); extended "Documentation Structure" list with adapter families and schema reference links.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes


Note

🎁 Summarized by CodeRabbit Free

Your organization has reached its limit of developer seats under the Pro Plan. For new users, CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please add seats to your subscription by visiting https://app.coderabbit.ai/login.If you believe this is a mistake and have available seats, please assign one to the pull request author through the subscription management page using the link above.

Comment @coderabbitai help to get the list of available commands and usage tips.

…er gating
Audit (no HIGH/MEDIUM) flagged two precision nuances; both fixed:
- runtime-config-schema.md: the "overrides are an on-disk shape, not
applied at request time" caveat was wrong for the self-hosted path.
Verified the `openai` + `azure-openai` bridges DO apply request
(param_renames/param_constraints/default_headers/default_body_fields)
and response (stream_done_marker/content_list_to_string/reasoning_field)
overrides at dispatch via prepare_outbound_body + extract_reasoning_field
(overrides.rs; bridge.rs:677-737). bedrock/vertex build native shapes
and don't apply them. What's unshipped is the Cloud control-plane block
that auto-populates them — so Cloud keys are empty, but a self-hosted
operator setting them directly gets them applied. Reworded accordingly.
- provider-compatibility.md: the image/audio/responses/embeddings gate
keys on the literal `provider: "openai"`, not the whole `openai`
adapter family (responses.rs:171). Added a note that an OpenAI-compatible
vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions
but is rejected on /v1/responses, images, and audio.
@moonming

Copy link
Copy Markdown
MemberAuthor

Independent doc-accuracy audit: clean — no HIGH, no MEDIUM.

A fresh cold-read agent verified all 7 files against crates/ source (in addition to the author's pre-push verification). Every field/type/default/cross-link/curl confirmed against provider_key.rs, schema.rs, dispatch.rs, the bridges, aisix-admin/lib.rs, and config.example.yaml.

Two LOW precision nuances were raised and both fixed in 12ffb02:

  1. Override consumption — the schema doc's "overrides are stored but not applied at request time" caveat was wrong for the self-hosted path. The openai + azure-openai bridges DO apply request/response overrides at dispatch (prepare_outbound_body + extract_reasoning_field); bedrock/vertex build native shapes and don't. What's unshipped is the Cloud control-plane block that auto-populates them. Reworded to scope it accurately (applied on openai/azure paths; Cloud doesn't auto-populate yet; self-hosted direct-set works).
  2. Literal-provider gating/v1/responses + images/audio key on the literal provider: "openai" (responses.rs:171), not the whole openai adapter family. Added a note that an OpenAI-compatible vendor (e.g. DeepSeek on the openai adapter) works on /v1/chat/completions but is rejected on those endpoints.

Merging on green CI.

@moonming
moonming merged commit ac719b5 into mainMay 29, 2026
7 checks passed
@moonming
moonming deleted the docs/phase-h-schema-rewrites branch May 29, 2026 03:23
Sign up for freeto 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

@moonming