docs(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470) - #384

Merged
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify
May 23, 2026
Merged

docs(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470)#384
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify

Conversation

@moonming

@moonmingmoonming commented May 23, 2026

Copy link
Copy Markdown
Member

Summary

The `Model` struct has two identifiers:

FieldRole
`display_name`Customer-facing alias the SDK sends in `POST /v1/chat/completions { model: ... }`
`model_name`Upstream id the LLM API expects (e.g. `"gpt-4o-mini-2024-08-06"`)

The field names alone don't make this obvious. Some other proxy gateways in the ecosystem use the name `model_name` to mean the opposite — i.e. the customer-facing alias — with a separate `model` sub-field for the upstream id. A reader who knows that convention from a neighbour project will get the AISIX struct backwards on first read.

This PR is a 14-line doc comment on `Model.model_name` (`crates/aisix-core/src/models/model.rs:220`) that explicitly calls out the convention reversal. Zero behaviour change, zero wire change, no test impact.

Why not just rename it?

Renaming `model_name` → `upstream_id` to remove the ambiguity is tracked at api7/AISIX-Cloud#470. It's a coordinated wire-format change that touches ai-gateway + cp-api + dashboard + ~110 test fixtures + PG column. Cost-vs-benefit isn't there today — the field is internal-only (no customer-facing surface), and a doc comment captures 80% of the clarity benefit at 1% of the migration cost.

The rename can ride along the next big wire revision; until then, the comment carries the disambiguation.

Test plan

  • `cargo check -p aisix-core` — clean (verified locally)
  • `cargo fmt --check` — applied (verified locally)
  • No new tests needed (doc-only change)

Closes the doc-clarity half of the audit finding on #302 A2/B8/M19 (Model rename). cp-api side has a companion 1-line doc comment landing as a separate PR in api7/AISIX-Cloud.

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for model identifier fields, clarifying upstream naming conventions and their distinction from customer-facing aliases.

Review Change Stack

#302 / AISIX-Cloud#470)
The Model struct has two identifiers — `display_name` (customer-facing
alias the chat client sends) and `model_name` (upstream id the LLM API
expects). The field NAMES alone do not make this obvious, and some
other proxy gateways in the ecosystem use `model_name` to mean the
opposite — i.e. the alias, with a separate `model` field for the
upstream id. A reader who knows that convention from a neighbour
project will get this backwards on first read.
Renaming the field to `upstream_id` to remove the ambiguity is tracked
at api7/AISIX-Cloud#470, but it's a coordinated wire-format change
across ai-gateway + cp-api + dashboard + ~110 test fixtures + PG
column. Not justified by the cost-vs-benefit today (see #470 audit
discussion).
This commit takes the cheap-and-correct path: a 14-line doc comment
on `Model.model_name` that explicitly names the convention reversal
so the next reader doesn't get tripped up. Zero behaviour change,
zero wire change, no test impact.
`cargo check -p aisix-core` clean. `cargo fmt` applied.
CopilotAI review requested due to automatic review settings May 23, 2026 01:40
@coderabbitai

coderabbitaiBot commented May 23, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've used your available PR reviews for now.

Your plan currently allows 3 reviews/hour. Refill in 14 minutes and 25 seconds.

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

⌛ How to resolve this issue?

After more review capacity refills, 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 have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: 5b2deabc-47d3-48aa-91eb-e020aa49b218

📥 Commits

Reviewing files that changed from the base of the PR and between 5c0fb3d and 5aa9ed1.

📒 Files selected for processing (1)
  • schemas/resources/model.schema.json
📝 Walkthrough

Walkthrough

The PR expands documentation for the Model.model_name field in the core model struct, clarifying that it represents the upstream model identifier sent to the provider. The updated doc comment includes example values, explains the naming convention distinction from display_name, and references a deferred rename plan.

Changes

Model field documentation clarification

Layer / File(s)Summary
Model.model_name field documentation
crates/aisix-core/src/models/model.rs
Model.model_name doc comment expanded with explicit upstream identifier contract description, example upstream ids, and clarification of naming convention ("footgun"), distinguishing it from customer-facing display_name. Deferred rename to upstream_id is documented.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 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.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates aisix-core documentation to clarify the semantic difference between Model.display_name (customer-facing alias used on gateway APIs) and Model.model_name (the upstream/provider-facing identifier), explicitly warning about the common convention mismatch with other gateways.

Changes:

  • Expanded the rustdoc comment on Model.model_name to describe its role and common confusion with other projects.
  • Added a NOTE explaining the “footgun” naming reversal vs other gateways and linked the longer-term rename tracking issue.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +220 to +223
/// Upstream model id sent to the provider — the literal string
/// the upstream LLM API expects in its `model` field
/// (e.g. `"gpt-4o"`, `"claude-sonnet-4-5"`,
/// `"gpt-4o-mini-2024-08-06"`). `None` for routing models.
…c expansion
The JsonSchema derive macro emits Rust doc comments as the schema's
`description` field. The longer doc on `Model.model_name` (previous
commit) expanded the schema's description string; the CI `schema drift
(resources)` job caught it and asked for the regenerated file to be
committed.
`cargo run -p aisix-core --bin dump-schema` regenerated all 8
resource schemas; only `model.schema.json` actually changed (the
others are unchanged because no other resource's docs were touched).
@moonming
moonming merged commit 550716d into mainMay 23, 2026
8 checks passed
@jarvis9443
jarvis9443 deleted the docs/model-upstream-id-clarify branch June 25, 2026 06:25
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.

2 participants

@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(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470) - #384

Merged
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify
May 23, 2026
Merged

docs(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470)#384
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify

Conversation

@moonming

@moonmingmoonming commented May 23, 2026

Copy link
Copy Markdown
Member

Summary

The `Model` struct has two identifiers:

FieldRole
`display_name`Customer-facing alias the SDK sends in `POST /v1/chat/completions { model: ... }`
`model_name`Upstream id the LLM API expects (e.g. `"gpt-4o-mini-2024-08-06"`)

The field names alone don't make this obvious. Some other proxy gateways in the ecosystem use the name `model_name` to mean the opposite — i.e. the customer-facing alias — with a separate `model` sub-field for the upstream id. A reader who knows that convention from a neighbour project will get the AISIX struct backwards on first read.

This PR is a 14-line doc comment on `Model.model_name` (`crates/aisix-core/src/models/model.rs:220`) that explicitly calls out the convention reversal. Zero behaviour change, zero wire change, no test impact.

Why not just rename it?

Renaming `model_name` → `upstream_id` to remove the ambiguity is tracked at api7/AISIX-Cloud#470. It's a coordinated wire-format change that touches ai-gateway + cp-api + dashboard + ~110 test fixtures + PG column. Cost-vs-benefit isn't there today — the field is internal-only (no customer-facing surface), and a doc comment captures 80% of the clarity benefit at 1% of the migration cost.

The rename can ride along the next big wire revision; until then, the comment carries the disambiguation.

Test plan

  • `cargo check -p aisix-core` — clean (verified locally)
  • `cargo fmt --check` — applied (verified locally)
  • No new tests needed (doc-only change)

Closes the doc-clarity half of the audit finding on #302 A2/B8/M19 (Model rename). cp-api side has a companion 1-line doc comment landing as a separate PR in api7/AISIX-Cloud.

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for model identifier fields, clarifying upstream naming conventions and their distinction from customer-facing aliases.

Review Change Stack

#302 / AISIX-Cloud#470)
The Model struct has two identifiers — `display_name` (customer-facing
alias the chat client sends) and `model_name` (upstream id the LLM API
expects). The field NAMES alone do not make this obvious, and some
other proxy gateways in the ecosystem use `model_name` to mean the
opposite — i.e. the alias, with a separate `model` field for the
upstream id. A reader who knows that convention from a neighbour
project will get this backwards on first read.
Renaming the field to `upstream_id` to remove the ambiguity is tracked
at api7/AISIX-Cloud#470, but it's a coordinated wire-format change
across ai-gateway + cp-api + dashboard + ~110 test fixtures + PG
column. Not justified by the cost-vs-benefit today (see #470 audit
discussion).
This commit takes the cheap-and-correct path: a 14-line doc comment
on `Model.model_name` that explicitly names the convention reversal
so the next reader doesn't get tripped up. Zero behaviour change,
zero wire change, no test impact.
`cargo check -p aisix-core` clean. `cargo fmt` applied.
CopilotAI review requested due to automatic review settings May 23, 2026 01:40
@coderabbitai

coderabbitaiBot commented May 23, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've used your available PR reviews for now.

Your plan currently allows 3 reviews/hour. Refill in 14 minutes and 25 seconds.

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

⌛ How to resolve this issue?

After more review capacity refills, 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 have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: 5b2deabc-47d3-48aa-91eb-e020aa49b218

📥 Commits

Reviewing files that changed from the base of the PR and between 5c0fb3d and 5aa9ed1.

📒 Files selected for processing (1)
  • schemas/resources/model.schema.json
📝 Walkthrough

Walkthrough

The PR expands documentation for the Model.model_name field in the core model struct, clarifying that it represents the upstream model identifier sent to the provider. The updated doc comment includes example values, explains the naming convention distinction from display_name, and references a deferred rename plan.

Changes

Model field documentation clarification

Layer / File(s)Summary
Model.model_name field documentation
crates/aisix-core/src/models/model.rs
Model.model_name doc comment expanded with explicit upstream identifier contract description, example upstream ids, and clarification of naming convention ("footgun"), distinguishing it from customer-facing display_name. Deferred rename to upstream_id is documented.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 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.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates aisix-core documentation to clarify the semantic difference between Model.display_name (customer-facing alias used on gateway APIs) and Model.model_name (the upstream/provider-facing identifier), explicitly warning about the common convention mismatch with other gateways.

Changes:

  • Expanded the rustdoc comment on Model.model_name to describe its role and common confusion with other projects.
  • Added a NOTE explaining the “footgun” naming reversal vs other gateways and linked the longer-term rename tracking issue.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +220 to +223
/// Upstream model id sent to the provider — the literal string
/// the upstream LLM API expects in its `model` field
/// (e.g. `"gpt-4o"`, `"claude-sonnet-4-5"`,
/// `"gpt-4o-mini-2024-08-06"`). `None` for routing models.
…c expansion
The JsonSchema derive macro emits Rust doc comments as the schema's
`description` field. The longer doc on `Model.model_name` (previous
commit) expanded the schema's description string; the CI `schema drift
(resources)` job caught it and asked for the regenerated file to be
committed.
`cargo run -p aisix-core --bin dump-schema` regenerated all 8
resource schemas; only `model.schema.json` actually changed (the
others are unchanged because no other resource's docs were touched).
@moonming
moonming merged commit 550716d into mainMay 23, 2026
8 checks passed
@jarvis9443
jarvis9443 deleted the docs/model-upstream-id-clarify branch June 25, 2026 06:25
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.

2 participants

@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(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470) - #384

Merged
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify
May 23, 2026
Merged

docs(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470)#384
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify

Conversation

@moonming

@moonmingmoonming commented May 23, 2026

Copy link
Copy Markdown
Member

Summary

The `Model` struct has two identifiers:

FieldRole
`display_name`Customer-facing alias the SDK sends in `POST /v1/chat/completions { model: ... }`
`model_name`Upstream id the LLM API expects (e.g. `"gpt-4o-mini-2024-08-06"`)

The field names alone don't make this obvious. Some other proxy gateways in the ecosystem use the name `model_name` to mean the opposite — i.e. the customer-facing alias — with a separate `model` sub-field for the upstream id. A reader who knows that convention from a neighbour project will get the AISIX struct backwards on first read.

This PR is a 14-line doc comment on `Model.model_name` (`crates/aisix-core/src/models/model.rs:220`) that explicitly calls out the convention reversal. Zero behaviour change, zero wire change, no test impact.

Why not just rename it?

Renaming `model_name` → `upstream_id` to remove the ambiguity is tracked at api7/AISIX-Cloud#470. It's a coordinated wire-format change that touches ai-gateway + cp-api + dashboard + ~110 test fixtures + PG column. Cost-vs-benefit isn't there today — the field is internal-only (no customer-facing surface), and a doc comment captures 80% of the clarity benefit at 1% of the migration cost.

The rename can ride along the next big wire revision; until then, the comment carries the disambiguation.

Test plan

  • `cargo check -p aisix-core` — clean (verified locally)
  • `cargo fmt --check` — applied (verified locally)
  • No new tests needed (doc-only change)

Closes the doc-clarity half of the audit finding on #302 A2/B8/M19 (Model rename). cp-api side has a companion 1-line doc comment landing as a separate PR in api7/AISIX-Cloud.

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for model identifier fields, clarifying upstream naming conventions and their distinction from customer-facing aliases.

Review Change Stack

#302 / AISIX-Cloud#470)
The Model struct has two identifiers — `display_name` (customer-facing
alias the chat client sends) and `model_name` (upstream id the LLM API
expects). The field NAMES alone do not make this obvious, and some
other proxy gateways in the ecosystem use `model_name` to mean the
opposite — i.e. the alias, with a separate `model` field for the
upstream id. A reader who knows that convention from a neighbour
project will get this backwards on first read.
Renaming the field to `upstream_id` to remove the ambiguity is tracked
at api7/AISIX-Cloud#470, but it's a coordinated wire-format change
across ai-gateway + cp-api + dashboard + ~110 test fixtures + PG
column. Not justified by the cost-vs-benefit today (see #470 audit
discussion).
This commit takes the cheap-and-correct path: a 14-line doc comment
on `Model.model_name` that explicitly names the convention reversal
so the next reader doesn't get tripped up. Zero behaviour change,
zero wire change, no test impact.
`cargo check -p aisix-core` clean. `cargo fmt` applied.
CopilotAI review requested due to automatic review settings May 23, 2026 01:40
@coderabbitai

coderabbitaiBot commented May 23, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've used your available PR reviews for now.

Your plan currently allows 3 reviews/hour. Refill in 14 minutes and 25 seconds.

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

⌛ How to resolve this issue?

After more review capacity refills, 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 have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: 5b2deabc-47d3-48aa-91eb-e020aa49b218

📥 Commits

Reviewing files that changed from the base of the PR and between 5c0fb3d and 5aa9ed1.

📒 Files selected for processing (1)
  • schemas/resources/model.schema.json
📝 Walkthrough

Walkthrough

The PR expands documentation for the Model.model_name field in the core model struct, clarifying that it represents the upstream model identifier sent to the provider. The updated doc comment includes example values, explains the naming convention distinction from display_name, and references a deferred rename plan.

Changes

Model field documentation clarification

Layer / File(s)Summary
Model.model_name field documentation
crates/aisix-core/src/models/model.rs
Model.model_name doc comment expanded with explicit upstream identifier contract description, example upstream ids, and clarification of naming convention ("footgun"), distinguishing it from customer-facing display_name. Deferred rename to upstream_id is documented.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 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.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates aisix-core documentation to clarify the semantic difference between Model.display_name (customer-facing alias used on gateway APIs) and Model.model_name (the upstream/provider-facing identifier), explicitly warning about the common convention mismatch with other gateways.

Changes:

  • Expanded the rustdoc comment on Model.model_name to describe its role and common confusion with other projects.
  • Added a NOTE explaining the “footgun” naming reversal vs other gateways and linked the longer-term rename tracking issue.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +220 to +223
/// Upstream model id sent to the provider — the literal string
/// the upstream LLM API expects in its `model` field
/// (e.g. `"gpt-4o"`, `"claude-sonnet-4-5"`,
/// `"gpt-4o-mini-2024-08-06"`). `None` for routing models.
…c expansion
The JsonSchema derive macro emits Rust doc comments as the schema's
`description` field. The longer doc on `Model.model_name` (previous
commit) expanded the schema's description string; the CI `schema drift
(resources)` job caught it and asked for the regenerated file to be
committed.
`cargo run -p aisix-core --bin dump-schema` regenerated all 8
resource schemas; only `model.schema.json` actually changed (the
others are unchanged because no other resource's docs were touched).
@moonming
moonming merged commit 550716d into mainMay 23, 2026
8 checks passed
@jarvis9443
jarvis9443 deleted the docs/model-upstream-id-clarify branch June 25, 2026 06:25
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.

2 participants

@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(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470) - #384

Merged
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify
May 23, 2026
Merged

docs(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470)#384
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify

Conversation

@moonming

@moonmingmoonming commented May 23, 2026

Copy link
Copy Markdown
Member

Summary

The `Model` struct has two identifiers:

FieldRole
`display_name`Customer-facing alias the SDK sends in `POST /v1/chat/completions { model: ... }`
`model_name`Upstream id the LLM API expects (e.g. `"gpt-4o-mini-2024-08-06"`)

The field names alone don't make this obvious. Some other proxy gateways in the ecosystem use the name `model_name` to mean the opposite — i.e. the customer-facing alias — with a separate `model` sub-field for the upstream id. A reader who knows that convention from a neighbour project will get the AISIX struct backwards on first read.

This PR is a 14-line doc comment on `Model.model_name` (`crates/aisix-core/src/models/model.rs:220`) that explicitly calls out the convention reversal. Zero behaviour change, zero wire change, no test impact.

Why not just rename it?

Renaming `model_name` → `upstream_id` to remove the ambiguity is tracked at api7/AISIX-Cloud#470. It's a coordinated wire-format change that touches ai-gateway + cp-api + dashboard + ~110 test fixtures + PG column. Cost-vs-benefit isn't there today — the field is internal-only (no customer-facing surface), and a doc comment captures 80% of the clarity benefit at 1% of the migration cost.

The rename can ride along the next big wire revision; until then, the comment carries the disambiguation.

Test plan

  • `cargo check -p aisix-core` — clean (verified locally)
  • `cargo fmt --check` — applied (verified locally)
  • No new tests needed (doc-only change)

Closes the doc-clarity half of the audit finding on #302 A2/B8/M19 (Model rename). cp-api side has a companion 1-line doc comment landing as a separate PR in api7/AISIX-Cloud.

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for model identifier fields, clarifying upstream naming conventions and their distinction from customer-facing aliases.

Review Change Stack

#302 / AISIX-Cloud#470)
The Model struct has two identifiers — `display_name` (customer-facing
alias the chat client sends) and `model_name` (upstream id the LLM API
expects). The field NAMES alone do not make this obvious, and some
other proxy gateways in the ecosystem use `model_name` to mean the
opposite — i.e. the alias, with a separate `model` field for the
upstream id. A reader who knows that convention from a neighbour
project will get this backwards on first read.
Renaming the field to `upstream_id` to remove the ambiguity is tracked
at api7/AISIX-Cloud#470, but it's a coordinated wire-format change
across ai-gateway + cp-api + dashboard + ~110 test fixtures + PG
column. Not justified by the cost-vs-benefit today (see #470 audit
discussion).
This commit takes the cheap-and-correct path: a 14-line doc comment
on `Model.model_name` that explicitly names the convention reversal
so the next reader doesn't get tripped up. Zero behaviour change,
zero wire change, no test impact.
`cargo check -p aisix-core` clean. `cargo fmt` applied.
CopilotAI review requested due to automatic review settings May 23, 2026 01:40
@coderabbitai

coderabbitaiBot commented May 23, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've used your available PR reviews for now.

Your plan currently allows 3 reviews/hour. Refill in 14 minutes and 25 seconds.

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

⌛ How to resolve this issue?

After more review capacity refills, 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 have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: 5b2deabc-47d3-48aa-91eb-e020aa49b218

📥 Commits

Reviewing files that changed from the base of the PR and between 5c0fb3d and 5aa9ed1.

📒 Files selected for processing (1)
  • schemas/resources/model.schema.json
📝 Walkthrough

Walkthrough

The PR expands documentation for the Model.model_name field in the core model struct, clarifying that it represents the upstream model identifier sent to the provider. The updated doc comment includes example values, explains the naming convention distinction from display_name, and references a deferred rename plan.

Changes

Model field documentation clarification

Layer / File(s)Summary
Model.model_name field documentation
crates/aisix-core/src/models/model.rs
Model.model_name doc comment expanded with explicit upstream identifier contract description, example upstream ids, and clarification of naming convention ("footgun"), distinguishing it from customer-facing display_name. Deferred rename to upstream_id is documented.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 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.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates aisix-core documentation to clarify the semantic difference between Model.display_name (customer-facing alias used on gateway APIs) and Model.model_name (the upstream/provider-facing identifier), explicitly warning about the common convention mismatch with other gateways.

Changes:

  • Expanded the rustdoc comment on Model.model_name to describe its role and common confusion with other projects.
  • Added a NOTE explaining the “footgun” naming reversal vs other gateways and linked the longer-term rename tracking issue.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +220 to +223
/// Upstream model id sent to the provider — the literal string
/// the upstream LLM API expects in its `model` field
/// (e.g. `"gpt-4o"`, `"claude-sonnet-4-5"`,
/// `"gpt-4o-mini-2024-08-06"`). `None` for routing models.
…c expansion
The JsonSchema derive macro emits Rust doc comments as the schema's
`description` field. The longer doc on `Model.model_name` (previous
commit) expanded the schema's description string; the CI `schema drift
(resources)` job caught it and asked for the regenerated file to be
committed.
`cargo run -p aisix-core --bin dump-schema` regenerated all 8
resource schemas; only `model.schema.json` actually changed (the
others are unchanged because no other resource's docs were touched).
@moonming
moonming merged commit 550716d into mainMay 23, 2026
8 checks passed
@jarvis9443
jarvis9443 deleted the docs/model-upstream-id-clarify branch June 25, 2026 06:25
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.

2 participants

@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(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470) - #384

Merged
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify
May 23, 2026
Merged

docs(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470)#384
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify

Conversation

@moonming

@moonmingmoonming commented May 23, 2026

Copy link
Copy Markdown
Member

Summary

The `Model` struct has two identifiers:

FieldRole
`display_name`Customer-facing alias the SDK sends in `POST /v1/chat/completions { model: ... }`
`model_name`Upstream id the LLM API expects (e.g. `"gpt-4o-mini-2024-08-06"`)

The field names alone don't make this obvious. Some other proxy gateways in the ecosystem use the name `model_name` to mean the opposite — i.e. the customer-facing alias — with a separate `model` sub-field for the upstream id. A reader who knows that convention from a neighbour project will get the AISIX struct backwards on first read.

This PR is a 14-line doc comment on `Model.model_name` (`crates/aisix-core/src/models/model.rs:220`) that explicitly calls out the convention reversal. Zero behaviour change, zero wire change, no test impact.

Why not just rename it?

Renaming `model_name` → `upstream_id` to remove the ambiguity is tracked at api7/AISIX-Cloud#470. It's a coordinated wire-format change that touches ai-gateway + cp-api + dashboard + ~110 test fixtures + PG column. Cost-vs-benefit isn't there today — the field is internal-only (no customer-facing surface), and a doc comment captures 80% of the clarity benefit at 1% of the migration cost.

The rename can ride along the next big wire revision; until then, the comment carries the disambiguation.

Test plan

  • `cargo check -p aisix-core` — clean (verified locally)
  • `cargo fmt --check` — applied (verified locally)
  • No new tests needed (doc-only change)

Closes the doc-clarity half of the audit finding on #302 A2/B8/M19 (Model rename). cp-api side has a companion 1-line doc comment landing as a separate PR in api7/AISIX-Cloud.

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for model identifier fields, clarifying upstream naming conventions and their distinction from customer-facing aliases.

Review Change Stack

#302 / AISIX-Cloud#470)
The Model struct has two identifiers — `display_name` (customer-facing
alias the chat client sends) and `model_name` (upstream id the LLM API
expects). The field NAMES alone do not make this obvious, and some
other proxy gateways in the ecosystem use `model_name` to mean the
opposite — i.e. the alias, with a separate `model` field for the
upstream id. A reader who knows that convention from a neighbour
project will get this backwards on first read.
Renaming the field to `upstream_id` to remove the ambiguity is tracked
at api7/AISIX-Cloud#470, but it's a coordinated wire-format change
across ai-gateway + cp-api + dashboard + ~110 test fixtures + PG
column. Not justified by the cost-vs-benefit today (see #470 audit
discussion).
This commit takes the cheap-and-correct path: a 14-line doc comment
on `Model.model_name` that explicitly names the convention reversal
so the next reader doesn't get tripped up. Zero behaviour change,
zero wire change, no test impact.
`cargo check -p aisix-core` clean. `cargo fmt` applied.
CopilotAI review requested due to automatic review settings May 23, 2026 01:40
@coderabbitai

coderabbitaiBot commented May 23, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've used your available PR reviews for now.

Your plan currently allows 3 reviews/hour. Refill in 14 minutes and 25 seconds.

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

⌛ How to resolve this issue?

After more review capacity refills, 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 have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: 5b2deabc-47d3-48aa-91eb-e020aa49b218

📥 Commits

Reviewing files that changed from the base of the PR and between 5c0fb3d and 5aa9ed1.

📒 Files selected for processing (1)
  • schemas/resources/model.schema.json
📝 Walkthrough

Walkthrough

The PR expands documentation for the Model.model_name field in the core model struct, clarifying that it represents the upstream model identifier sent to the provider. The updated doc comment includes example values, explains the naming convention distinction from display_name, and references a deferred rename plan.

Changes

Model field documentation clarification

Layer / File(s)Summary
Model.model_name field documentation
crates/aisix-core/src/models/model.rs
Model.model_name doc comment expanded with explicit upstream identifier contract description, example upstream ids, and clarification of naming convention ("footgun"), distinguishing it from customer-facing display_name. Deferred rename to upstream_id is documented.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 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.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates aisix-core documentation to clarify the semantic difference between Model.display_name (customer-facing alias used on gateway APIs) and Model.model_name (the upstream/provider-facing identifier), explicitly warning about the common convention mismatch with other gateways.

Changes:

  • Expanded the rustdoc comment on Model.model_name to describe its role and common confusion with other projects.
  • Added a NOTE explaining the “footgun” naming reversal vs other gateways and linked the longer-term rename tracking issue.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +220 to +223
/// Upstream model id sent to the provider — the literal string
/// the upstream LLM API expects in its `model` field
/// (e.g. `"gpt-4o"`, `"claude-sonnet-4-5"`,
/// `"gpt-4o-mini-2024-08-06"`). `None` for routing models.
…c expansion
The JsonSchema derive macro emits Rust doc comments as the schema's
`description` field. The longer doc on `Model.model_name` (previous
commit) expanded the schema's description string; the CI `schema drift
(resources)` job caught it and asked for the regenerated file to be
committed.
`cargo run -p aisix-core --bin dump-schema` regenerated all 8
resource schemas; only `model.schema.json` actually changed (the
others are unchanged because no other resource's docs were touched).
@moonming
moonming merged commit 550716d into mainMay 23, 2026
8 checks passed
@jarvis9443
jarvis9443 deleted the docs/model-upstream-id-clarify branch June 25, 2026 06:25
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.

2 participants

@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(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470) - #384

Merged
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify
May 23, 2026
Merged

docs(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470)#384
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify

Conversation

@moonming

@moonmingmoonming commented May 23, 2026

Copy link
Copy Markdown
Member

Summary

The `Model` struct has two identifiers:

FieldRole
`display_name`Customer-facing alias the SDK sends in `POST /v1/chat/completions { model: ... }`
`model_name`Upstream id the LLM API expects (e.g. `"gpt-4o-mini-2024-08-06"`)

The field names alone don't make this obvious. Some other proxy gateways in the ecosystem use the name `model_name` to mean the opposite — i.e. the customer-facing alias — with a separate `model` sub-field for the upstream id. A reader who knows that convention from a neighbour project will get the AISIX struct backwards on first read.

This PR is a 14-line doc comment on `Model.model_name` (`crates/aisix-core/src/models/model.rs:220`) that explicitly calls out the convention reversal. Zero behaviour change, zero wire change, no test impact.

Why not just rename it?

Renaming `model_name` → `upstream_id` to remove the ambiguity is tracked at api7/AISIX-Cloud#470. It's a coordinated wire-format change that touches ai-gateway + cp-api + dashboard + ~110 test fixtures + PG column. Cost-vs-benefit isn't there today — the field is internal-only (no customer-facing surface), and a doc comment captures 80% of the clarity benefit at 1% of the migration cost.

The rename can ride along the next big wire revision; until then, the comment carries the disambiguation.

Test plan

  • `cargo check -p aisix-core` — clean (verified locally)
  • `cargo fmt --check` — applied (verified locally)
  • No new tests needed (doc-only change)

Closes the doc-clarity half of the audit finding on #302 A2/B8/M19 (Model rename). cp-api side has a companion 1-line doc comment landing as a separate PR in api7/AISIX-Cloud.

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for model identifier fields, clarifying upstream naming conventions and their distinction from customer-facing aliases.

Review Change Stack

#302 / AISIX-Cloud#470)
The Model struct has two identifiers — `display_name` (customer-facing
alias the chat client sends) and `model_name` (upstream id the LLM API
expects). The field NAMES alone do not make this obvious, and some
other proxy gateways in the ecosystem use `model_name` to mean the
opposite — i.e. the alias, with a separate `model` field for the
upstream id. A reader who knows that convention from a neighbour
project will get this backwards on first read.
Renaming the field to `upstream_id` to remove the ambiguity is tracked
at api7/AISIX-Cloud#470, but it's a coordinated wire-format change
across ai-gateway + cp-api + dashboard + ~110 test fixtures + PG
column. Not justified by the cost-vs-benefit today (see #470 audit
discussion).
This commit takes the cheap-and-correct path: a 14-line doc comment
on `Model.model_name` that explicitly names the convention reversal
so the next reader doesn't get tripped up. Zero behaviour change,
zero wire change, no test impact.
`cargo check -p aisix-core` clean. `cargo fmt` applied.
CopilotAI review requested due to automatic review settings May 23, 2026 01:40
@coderabbitai

coderabbitaiBot commented May 23, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've used your available PR reviews for now.

Your plan currently allows 3 reviews/hour. Refill in 14 minutes and 25 seconds.

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

⌛ How to resolve this issue?

After more review capacity refills, 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 have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: 5b2deabc-47d3-48aa-91eb-e020aa49b218

📥 Commits

Reviewing files that changed from the base of the PR and between 5c0fb3d and 5aa9ed1.

📒 Files selected for processing (1)
  • schemas/resources/model.schema.json
📝 Walkthrough

Walkthrough

The PR expands documentation for the Model.model_name field in the core model struct, clarifying that it represents the upstream model identifier sent to the provider. The updated doc comment includes example values, explains the naming convention distinction from display_name, and references a deferred rename plan.

Changes

Model field documentation clarification

Layer / File(s)Summary
Model.model_name field documentation
crates/aisix-core/src/models/model.rs
Model.model_name doc comment expanded with explicit upstream identifier contract description, example upstream ids, and clarification of naming convention ("footgun"), distinguishing it from customer-facing display_name. Deferred rename to upstream_id is documented.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 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.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates aisix-core documentation to clarify the semantic difference between Model.display_name (customer-facing alias used on gateway APIs) and Model.model_name (the upstream/provider-facing identifier), explicitly warning about the common convention mismatch with other gateways.

Changes:

  • Expanded the rustdoc comment on Model.model_name to describe its role and common confusion with other projects.
  • Added a NOTE explaining the “footgun” naming reversal vs other gateways and linked the longer-term rename tracking issue.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +220 to +223
/// Upstream model id sent to the provider — the literal string
/// the upstream LLM API expects in its `model` field
/// (e.g. `"gpt-4o"`, `"claude-sonnet-4-5"`,
/// `"gpt-4o-mini-2024-08-06"`). `None` for routing models.
…c expansion
The JsonSchema derive macro emits Rust doc comments as the schema's
`description` field. The longer doc on `Model.model_name` (previous
commit) expanded the schema's description string; the CI `schema drift
(resources)` job caught it and asked for the regenerated file to be
committed.
`cargo run -p aisix-core --bin dump-schema` regenerated all 8
resource schemas; only `model.schema.json` actually changed (the
others are unchanged because no other resource's docs were touched).
@moonming
moonming merged commit 550716d into mainMay 23, 2026
8 checks passed
@jarvis9443
jarvis9443 deleted the docs/model-upstream-id-clarify branch June 25, 2026 06:25
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.

2 participants

@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(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470) - #384

Merged
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify
May 23, 2026
Merged

docs(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470)#384
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify

Conversation

@moonming

@moonmingmoonming commented May 23, 2026

Copy link
Copy Markdown
Member

Summary

The `Model` struct has two identifiers:

FieldRole
`display_name`Customer-facing alias the SDK sends in `POST /v1/chat/completions { model: ... }`
`model_name`Upstream id the LLM API expects (e.g. `"gpt-4o-mini-2024-08-06"`)

The field names alone don't make this obvious. Some other proxy gateways in the ecosystem use the name `model_name` to mean the opposite — i.e. the customer-facing alias — with a separate `model` sub-field for the upstream id. A reader who knows that convention from a neighbour project will get the AISIX struct backwards on first read.

This PR is a 14-line doc comment on `Model.model_name` (`crates/aisix-core/src/models/model.rs:220`) that explicitly calls out the convention reversal. Zero behaviour change, zero wire change, no test impact.

Why not just rename it?

Renaming `model_name` → `upstream_id` to remove the ambiguity is tracked at api7/AISIX-Cloud#470. It's a coordinated wire-format change that touches ai-gateway + cp-api + dashboard + ~110 test fixtures + PG column. Cost-vs-benefit isn't there today — the field is internal-only (no customer-facing surface), and a doc comment captures 80% of the clarity benefit at 1% of the migration cost.

The rename can ride along the next big wire revision; until then, the comment carries the disambiguation.

Test plan

  • `cargo check -p aisix-core` — clean (verified locally)
  • `cargo fmt --check` — applied (verified locally)
  • No new tests needed (doc-only change)

Closes the doc-clarity half of the audit finding on #302 A2/B8/M19 (Model rename). cp-api side has a companion 1-line doc comment landing as a separate PR in api7/AISIX-Cloud.

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for model identifier fields, clarifying upstream naming conventions and their distinction from customer-facing aliases.

Review Change Stack

#302 / AISIX-Cloud#470)
The Model struct has two identifiers — `display_name` (customer-facing
alias the chat client sends) and `model_name` (upstream id the LLM API
expects). The field NAMES alone do not make this obvious, and some
other proxy gateways in the ecosystem use `model_name` to mean the
opposite — i.e. the alias, with a separate `model` field for the
upstream id. A reader who knows that convention from a neighbour
project will get this backwards on first read.
Renaming the field to `upstream_id` to remove the ambiguity is tracked
at api7/AISIX-Cloud#470, but it's a coordinated wire-format change
across ai-gateway + cp-api + dashboard + ~110 test fixtures + PG
column. Not justified by the cost-vs-benefit today (see #470 audit
discussion).
This commit takes the cheap-and-correct path: a 14-line doc comment
on `Model.model_name` that explicitly names the convention reversal
so the next reader doesn't get tripped up. Zero behaviour change,
zero wire change, no test impact.
`cargo check -p aisix-core` clean. `cargo fmt` applied.
CopilotAI review requested due to automatic review settings May 23, 2026 01:40
@coderabbitai

coderabbitaiBot commented May 23, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've used your available PR reviews for now.

Your plan currently allows 3 reviews/hour. Refill in 14 minutes and 25 seconds.

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

⌛ How to resolve this issue?

After more review capacity refills, 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 have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: 5b2deabc-47d3-48aa-91eb-e020aa49b218

📥 Commits

Reviewing files that changed from the base of the PR and between 5c0fb3d and 5aa9ed1.

📒 Files selected for processing (1)
  • schemas/resources/model.schema.json
📝 Walkthrough

Walkthrough

The PR expands documentation for the Model.model_name field in the core model struct, clarifying that it represents the upstream model identifier sent to the provider. The updated doc comment includes example values, explains the naming convention distinction from display_name, and references a deferred rename plan.

Changes

Model field documentation clarification

Layer / File(s)Summary
Model.model_name field documentation
crates/aisix-core/src/models/model.rs
Model.model_name doc comment expanded with explicit upstream identifier contract description, example upstream ids, and clarification of naming convention ("footgun"), distinguishing it from customer-facing display_name. Deferred rename to upstream_id is documented.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 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.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates aisix-core documentation to clarify the semantic difference between Model.display_name (customer-facing alias used on gateway APIs) and Model.model_name (the upstream/provider-facing identifier), explicitly warning about the common convention mismatch with other gateways.

Changes:

  • Expanded the rustdoc comment on Model.model_name to describe its role and common confusion with other projects.
  • Added a NOTE explaining the “footgun” naming reversal vs other gateways and linked the longer-term rename tracking issue.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +220 to +223
/// Upstream model id sent to the provider — the literal string
/// the upstream LLM API expects in its `model` field
/// (e.g. `"gpt-4o"`, `"claude-sonnet-4-5"`,
/// `"gpt-4o-mini-2024-08-06"`). `None` for routing models.
…c expansion
The JsonSchema derive macro emits Rust doc comments as the schema's
`description` field. The longer doc on `Model.model_name` (previous
commit) expanded the schema's description string; the CI `schema drift
(resources)` job caught it and asked for the regenerated file to be
committed.
`cargo run -p aisix-core --bin dump-schema` regenerated all 8
resource schemas; only `model.schema.json` actually changed (the
others are unchanged because no other resource's docs were touched).
@moonming
moonming merged commit 550716d into mainMay 23, 2026
8 checks passed
@jarvis9443
jarvis9443 deleted the docs/model-upstream-id-clarify branch June 25, 2026 06:25
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.

2 participants

@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(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470) - #384

Merged
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify
May 23, 2026
Merged

docs(core): clarify Model.model_name is the upstream id (#302 / AISIX-Cloud#470)#384
moonming merged 2 commits into
mainfrom
docs/model-upstream-id-clarify

Conversation

@moonming

@moonmingmoonming commented May 23, 2026

Copy link
Copy Markdown
Member

Summary

The `Model` struct has two identifiers:

FieldRole
`display_name`Customer-facing alias the SDK sends in `POST /v1/chat/completions { model: ... }`
`model_name`Upstream id the LLM API expects (e.g. `"gpt-4o-mini-2024-08-06"`)

The field names alone don't make this obvious. Some other proxy gateways in the ecosystem use the name `model_name` to mean the opposite — i.e. the customer-facing alias — with a separate `model` sub-field for the upstream id. A reader who knows that convention from a neighbour project will get the AISIX struct backwards on first read.

This PR is a 14-line doc comment on `Model.model_name` (`crates/aisix-core/src/models/model.rs:220`) that explicitly calls out the convention reversal. Zero behaviour change, zero wire change, no test impact.

Why not just rename it?

Renaming `model_name` → `upstream_id` to remove the ambiguity is tracked at api7/AISIX-Cloud#470. It's a coordinated wire-format change that touches ai-gateway + cp-api + dashboard + ~110 test fixtures + PG column. Cost-vs-benefit isn't there today — the field is internal-only (no customer-facing surface), and a doc comment captures 80% of the clarity benefit at 1% of the migration cost.

The rename can ride along the next big wire revision; until then, the comment carries the disambiguation.

Test plan

  • `cargo check -p aisix-core` — clean (verified locally)
  • `cargo fmt --check` — applied (verified locally)
  • No new tests needed (doc-only change)

Closes the doc-clarity half of the audit finding on #302 A2/B8/M19 (Model rename). cp-api side has a companion 1-line doc comment landing as a separate PR in api7/AISIX-Cloud.

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for model identifier fields, clarifying upstream naming conventions and their distinction from customer-facing aliases.

Review Change Stack

#302 / AISIX-Cloud#470)
The Model struct has two identifiers — `display_name` (customer-facing
alias the chat client sends) and `model_name` (upstream id the LLM API
expects). The field NAMES alone do not make this obvious, and some
other proxy gateways in the ecosystem use `model_name` to mean the
opposite — i.e. the alias, with a separate `model` field for the
upstream id. A reader who knows that convention from a neighbour
project will get this backwards on first read.
Renaming the field to `upstream_id` to remove the ambiguity is tracked
at api7/AISIX-Cloud#470, but it's a coordinated wire-format change
across ai-gateway + cp-api + dashboard + ~110 test fixtures + PG
column. Not justified by the cost-vs-benefit today (see #470 audit
discussion).
This commit takes the cheap-and-correct path: a 14-line doc comment
on `Model.model_name` that explicitly names the convention reversal
so the next reader doesn't get tripped up. Zero behaviour change,
zero wire change, no test impact.
`cargo check -p aisix-core` clean. `cargo fmt` applied.
CopilotAI review requested due to automatic review settings May 23, 2026 01:40
@coderabbitai

coderabbitaiBot commented May 23, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@moonming, we couldn't start this review because you've used your available PR reviews for now.

Your plan currently allows 3 reviews/hour. Refill in 14 minutes and 25 seconds.

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

⌛ How to resolve this issue?

After more review capacity refills, 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 have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Free

Run ID: 5b2deabc-47d3-48aa-91eb-e020aa49b218

📥 Commits

Reviewing files that changed from the base of the PR and between 5c0fb3d and 5aa9ed1.

📒 Files selected for processing (1)
  • schemas/resources/model.schema.json
📝 Walkthrough

Walkthrough

The PR expands documentation for the Model.model_name field in the core model struct, clarifying that it represents the upstream model identifier sent to the provider. The updated doc comment includes example values, explains the naming convention distinction from display_name, and references a deferred rename plan.

Changes

Model field documentation clarification

Layer / File(s)Summary
Model.model_name field documentation
crates/aisix-core/src/models/model.rs
Model.model_name doc comment expanded with explicit upstream identifier contract description, example upstream ids, and clarification of naming convention ("footgun"), distinguishing it from customer-facing display_name. Deferred rename to upstream_id is documented.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 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.

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates aisix-core documentation to clarify the semantic difference between Model.display_name (customer-facing alias used on gateway APIs) and Model.model_name (the upstream/provider-facing identifier), explicitly warning about the common convention mismatch with other gateways.

Changes:

  • Expanded the rustdoc comment on Model.model_name to describe its role and common confusion with other projects.
  • Added a NOTE explaining the “footgun” naming reversal vs other gateways and linked the longer-term rename tracking issue.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +220 to +223
/// Upstream model id sent to the provider — the literal string
/// the upstream LLM API expects in its `model` field
/// (e.g. `"gpt-4o"`, `"claude-sonnet-4-5"`,
/// `"gpt-4o-mini-2024-08-06"`). `None` for routing models.
…c expansion
The JsonSchema derive macro emits Rust doc comments as the schema's
`description` field. The longer doc on `Model.model_name` (previous
commit) expanded the schema's description string; the CI `schema drift
(resources)` job caught it and asked for the regenerated file to be
committed.
`cargo run -p aisix-core --bin dump-schema` regenerated all 8
resource schemas; only `model.schema.json` actually changed (the
others are unchanged because no other resource's docs were touched).
@moonming
moonming merged commit 550716d into mainMay 23, 2026
8 checks passed
@jarvis9443
jarvis9443 deleted the docs/model-upstream-id-clarify branch June 25, 2026 06:25
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.

2 participants

@moonming