feat: compare pages, quant, master keys KB - #2946
Conversation
Kilo Code, DevPass Code, MCP, and OpenCode Desktop guides fell back to the OpenCode logo in their opengraph images. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012JBMzhmjPuTkrDGYnUAJUQ
Adds an optional quantization field to provider mappings, populated for the fp8-suffixed Novita mappings, and renders it next to the context size on model provider cards. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012JBMzhmjPuTkrDGYnUAJUQ
Z AI's consumer training policy showed Unknown; their privacy policy states data is not used for training. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012JBMzhmjPuTkrDGYnUAJUQ
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012JBMzhmjPuTkrDGYnUAJUQ
Two new competitor comparison pages positioning LLM Gateway as cloud-neutral: both clouds stay available as built-in providers (BYOK, 0% markup) while the gateway adds cross-cloud routing, failover, caching, and unified analytics. Linked from the footer and sitemap, with FAQPage JSON-LD via CompareFaq. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012JBMzhmjPuTkrDGYnUAJUQ
|
Images automagically compressed by Calibre's image-actions ✨ Compression reduced images by 66.2%, saving 172.2 KB.
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (2)
WalkthroughThis PR adds a Master Keys documentation page, two new comparison landing pages for AWS Bedrock and Azure AI Foundry with navigation updates, new guide OG-image icons, and quantization metadata that flows through model schemas, data, and UI display. ChangesMaster Keys Documentation
Compare Landing Pages
Guide OG Image Icons
Model Quantization Metadata
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Images automagically compressed by Calibre's image-actions ✨ Compression reduced images by 6%, saving 1.6 KB.
3 images did not require optimisation. |
There was a problem hiding this comment.
Actionable comments posted: 2
♻️ Duplicate comments (2)
apps/ui/src/components/landing/comparison-azure-foundry.tsx (2)
238-258: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winFeature rows need responsive grid breakpoints for mobile.
Same issue as
comparison-bedrock.tsx— feature rows usegrid-cols-3without a mobile breakpoint, while the header usesgrid-cols-1 md:grid-cols-3.📱 Proposed fix
- className="grid grid-cols-3 gap-4 p-6 border-b border-border/50 hover:bg-muted/30 transition-colors" + className="grid grid-cols-1 md:grid-cols-3 gap-4 p-6 border-b border-border/50 hover:bg-muted/30 transition-colors"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/ui/src/components/landing/comparison-azure-foundry.tsx` around lines 238 - 258, The feature row layout in the category.features map uses a fixed three-column grid, which breaks on mobile. Update the row container in comparison-azure-foundry.tsx to match the responsive pattern used by the header and comparison-bedrock.tsx by starting as a single column on small screens and switching to three columns at the md breakpoint. Keep the existing content structure and renderFeatureValue usage intact.
278-285: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick winAdd
asChildtoButtoncomponents wrapping link elements.Same issue as
comparison-bedrock.tsx— withoutasChild,Buttonrenders a<button>containing an<a>, creating nested interactive elements and invalid HTML.♿ Proposed fix
- <Button size="lg" className="bg-primary hover:bg-primary/90"> - <AuthLink href="/signup">Start Free with LLM Gateway</AuthLink> - </Button> - <Button size="lg" variant="outline"> - <Link href="/pricing">View Pricing Details</Link> - </Button> + <Button asChild size="lg" className="bg-primary hover:bg-primary/90"> + <AuthLink href="/signup">Start Free with LLM Gateway</AuthLink> + </Button> + <Button asChild size="lg" variant="outline"> + <Link href="/pricing">View Pricing Details</Link> + </Button>🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/ui/src/components/landing/comparison-azure-foundry.tsx` around lines 278 - 285, The Button wrappers in comparison-azure-foundry are rendering link components inside a button element, which creates invalid nested interactive markup. Update the two Button usages in the landing comparison section to use asChild so the AuthLink and Link components become the clickable root, matching the pattern used in comparison-bedrock and avoiding a button containing an anchor.
🧹 Nitpick comments (1)
apps/ui/src/components/landing/comparison-azure-foundry.tsx (1)
131-294: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy liftConsider extracting a shared comparison component.
ComparisonBedrockandComparisonAzureFoundryare structurally identical — samerenderFeatureValue, same layout, same CTA pattern. Only the data array and competitor icon/label differ. A sharedComparisonTablecomponent parameterized by{ data, competitorIcon, competitorName, competitorSubtitle, competitorPrice }would eliminate ~160 lines of duplication and prevent drift (as seen with theasChildand grid issues affecting both files identically).🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/ui/src/components/landing/comparison-azure-foundry.tsx` around lines 131 - 294, Extract the duplicated comparison UI in ComparisonAzureFoundry into a shared ComparisonTable component, since this file and ComparisonBedrock currently repeat the same renderFeatureValue logic, layout, and CTA structure. Move the common section/grid/table/button rendering into the shared component and pass in the varying pieces as props, such as data, competitorIcon, competitorName, competitorSubtitle, and competitorPrice. Then update ComparisonAzureFoundry to use the shared component so the identical markup no longer drifts across both comparison screens.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/ui/src/components/landing/comparison-bedrock.tsx`:
- Around line 278-285: The `HeroCompare`-style link buttons in
`comparison-bedrock.tsx` are rendering nested interactive elements because
`Button` wraps `AuthLink` and `Link` without `asChild`. Update both `Button`
usages in this section to use `asChild` so the link component becomes the button
element, matching the existing `HeroCompare` pattern and avoiding a `<button>`
inside an `<a>`.
- Around line 238-258: The feature rows in the comparison grid are using a fixed
three-column layout, which squeezes the title/description on mobile. Update the
row container in comparison-bedrock.tsx to match the header’s responsive pattern
by using a single-column layout on ছোট screens and switching to three columns at
the md breakpoint, and keep the first column span/visibility behavior aligned
with the header and feature cells in the feature mapping render.
---
Duplicate comments:
In `@apps/ui/src/components/landing/comparison-azure-foundry.tsx`:
- Around line 238-258: The feature row layout in the category.features map uses
a fixed three-column grid, which breaks on mobile. Update the row container in
comparison-azure-foundry.tsx to match the responsive pattern used by the header
and comparison-bedrock.tsx by starting as a single column on small screens and
switching to three columns at the md breakpoint. Keep the existing content
structure and renderFeatureValue usage intact.
- Around line 278-285: The Button wrappers in comparison-azure-foundry are
rendering link components inside a button element, which creates invalid nested
interactive markup. Update the two Button usages in the landing comparison
section to use asChild so the AuthLink and Link components become the clickable
root, matching the pattern used in comparison-bedrock and avoiding a button
containing an anchor.
---
Nitpick comments:
In `@apps/ui/src/components/landing/comparison-azure-foundry.tsx`:
- Around line 131-294: Extract the duplicated comparison UI in
ComparisonAzureFoundry into a shared ComparisonTable component, since this file
and ComparisonBedrock currently repeat the same renderFeatureValue logic,
layout, and CTA structure. Move the common section/grid/table/button rendering
into the shared component and pass in the varying pieces as props, such as data,
competitorIcon, competitorName, competitorSubtitle, and competitorPrice. Then
update ComparisonAzureFoundry to use the shared component so the identical
markup no longer drifts across both comparison screens.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: f38db362-b09f-46c3-8da9-4a58ee546586
⛔ Files ignored due to path filters (4)
apps/docs/public/learn/master-keys-create-dark.pngis excluded by!**/*.pngapps/docs/public/learn/master-keys-create-light.pngis excluded by!**/*.pngapps/docs/public/learn/master-keys-dark.pngis excluded by!**/*.pngapps/docs/public/learn/master-keys-light.pngis excluded by!**/*.png
📒 Files selected for processing (17)
apps/docs/content/learn/index.mdxapps/docs/content/learn/master-keys.mdxapps/docs/content/learn/meta.jsonapps/ui/src/app/compare/aws-bedrock/page.tsxapps/ui/src/app/compare/azure-ai-foundry/page.tsxapps/ui/src/app/guides/[slug]/opengraph-image.tsxapps/ui/src/app/sitemap.tsapps/ui/src/components/landing/comparison-azure-foundry.tsxapps/ui/src/components/landing/comparison-bedrock.tsxapps/ui/src/components/landing/footer.tsxapps/ui/src/components/models/adapt-model.tsapps/ui/src/components/models/model-card.tsxapps/ui/src/lib/fetch-models.tspackages/models/src/models.tspackages/models/src/models/alibaba.tspackages/models/src/models/meta.tspackages/models/src/providers.ts
Feature rows now collapse to one column on mobile like the header, and CTA buttons use asChild to avoid nesting links inside buttons. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012JBMzhmjPuTkrDGYnUAJUQ
|
Addressed CodeRabbit findings in 28862ab:
|
|
CI status: everything is green except the |
…2956) Adds quantization to Novita provider mappings in packages/models/src/models/alibaba.ts, per theopenco#2946. Checked every Novita mapping in this file against Novita's own model detail pages. Added the field only where precision was explicitly stated, no inference from model names. fp8: [qwen3-235b-a22b-instruct-2507](https://novita.ai/models/model-detail/qwen-qwen3-235b-a22b-instruct-2507) [qwen3-235b-a22b-thinking-2507](https://novita.ai/models/model-detail/qwen-qwen3-235b-a22b-thinking-2507) [qwen3-coder-480b-a35b-instruct](https://novita.ai/models/model-detail/qwen-qwen3-coder-480b-a35b-instruct) [qwen3-coder-30b-a3b-instruct](https://novita.ai/models/model-detail/qwen-qwen3-coder-30b-a3b-instruct) [qwen3-max](https://novita.ai/models/model-detail/qwen-qwen3-max) bf16: [qwen3-next-80b-a3b-instruct](https://novita.ai/models/model-detail/qwen-qwen3-next-80b-a3b-instruct) [qwen3-vl-30b-a3b-instruct](https://novita.ai/models/model-detail/qwen-qwen3-vl-30b-a3b-instruct) Left unchanged, remaining Novita mappings in this file (including the "Thinking" variants of the two entries above) had no reliably re-checkable quantization page at time of this PR, so left as-is rather than include an unverifiable claim. Ran pnpm format; only this file changed. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Updated several Alibaba-hosted model entries with quantization settings, improving support for newer Qwen 3 variants. * Added optimized settings for select instruction, coding, thinking, and vision models, including larger model variants. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Ismail Ghallou <ismai23l@hotmail.com>
Adds quantization to Novita provider mappings in packages/models/src/models/meta.ts, per theopenco#2946. Checked every Novita mapping in this file against Novita's own model detail pages. Added the field only where precision was explicitly stated, no inference from model names. [llama-3.1-8b-instruct](https://novita.ai/models/model-detail/meta-llama-llama-3.1-8b-instruct) → fp8 [llama-3.3-70b-instruct](https://novita.ai/models/model-detail/meta-llama-llama-3.3-70b-instruct) → bf16 [llama-4-scout-17b-16e-instruct](https://novita.ai/models/model-detail/meta-llama-llama-4-scout-17b-16e-instruct) → bf16 [llama-3.2-3b-instruct](https://novita.ai/models/model-detail/meta-llama-llama-3.2-3b-instruct) → bf16 Left unchanged, llama-3-8b-instruct and llama-3-70b-instruct no longer exist on Novita's site (404 on their model page), likely retired from their catalog. Ran pnpm format; only this file changed. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added quantization details to several model listings, including updated support for select Llama models. * Improved model metadata so compatible variants can be identified more accurately during selection. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
…nousresearch, zai) (theopenco#2965) Closes out Novita quantization coverage across google.ts, nousresearch.ts, and zai.ts, per theopenco#2946. Checked every remaining Novita mapping in these files against Novita's own model detail pages. Added the field only where precision was explicitly stated, no inference from model names. Google: [gemma-4-31b-it](https://novita.ai/models/model-detail/google-gemma-4-31b-it) → bf16 [gemma-4-26b-a4b-it](https://novita.ai/models/model-detail/google-gemma-4-26b-a4b-it) → bf16 NousResearch: [hermes-2-pro-llama-3-8b](https://novita.ai/models/model-detail/nousresearch-hermes-2-pro-llama-3-8b) → fp16 Zai: [glm-5.1](https://novita.ai/models/model-detail/zai-org-glm-5.1) → fp8 [glm-5](https://novita.ai/models/model-detail/zai-org-glm-5) → fp8 [glm-4.5v](https://novita.ai/models/model-detail/zai-org-glm-4.5v) → fp8 [glm-4.7](https://novita.ai/models/model-detail/zai-org-glm-4.7) → fp8 [glm-4.6](https://novita.ai/models/model-detail/zai-org-glm-4.6) → bf16 [glm-4.6v](https://novita.ai/models/model-detail/zai-org-glm-4.6v) → bf16 With this PR, every Novita mapping across the catalog with a publicly stated quantization value now has it set. Ran pnpm format; only these 3 files changed.
…#2964) Adds quantization to Novita provider mappings in packages/models/src/models/moonshot.ts, per theopenco#2946. Checked every Novita mapping in this file against Novita's own model detail pages. Added the field only where precision was explicitly stated — no inference from model names. [kimi-k2-instruct](https://novita.ai/models/model-detail/moonshotai-kimi-k2-instruct) → fp8 Left unchanged — kimi-k2.6 shows Quantization as - on Novita's own page (explicitly unstated), so left out rather than guess. Ran pnpm format; only this file changed.
…2963) Adds quantization to Novita provider mappings in packages/models/src/models/minimax.ts, per theopenco#2946. Checked every Novita mapping in this file against Novita's own model detail pages. Added the field only where precision was explicitly stated, no inference from model names. [minimax-m2.7](https://novita.ai/models/model-detail/minimax-minimax-m2.7) → fp8 [minimax-m2.5](https://novita.ai/models/model-detail/minimax-minimax-m2.5) → fp8 [minimax-m2.1](https://novita.ai/models/model-detail/minimax-minimax-m2.1) → fp8 Ran pnpm format; only this file changed. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Updated model availability settings for three MiniMax variants so they use the correct optimized format with the Novita provider. * Improved consistency across supported MiniMax model options, which may help prevent selection or compatibility issues. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
…#2962) Adds quantization to Novita provider mappings in packages/models/src/models/deepseek.ts, per theopenco#2946. Checked every Novita mapping in this file against Novita's own model detail pages. Added the field only where precision was explicitly stated — no inference from model names. [deepseek-v3.2](https://novita.ai/models/model-detail/deepseek-deepseek-v3.2) → fp8 [deepseek-v4-flash](https://novita.ai/models/model-detail/deepseek-deepseek-v4-flash) → fp8 Ran pnpm format; only this file changed. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Updated two model provider configurations to include the correct quantization setting, improving compatibility and consistency for affected DeepSeek model options. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Adds quantization to Nebius provider mappings across the catalog, per theopenco#2946. Checked every Nebius mapping against Nebius Token Factory's model catalog. Added the field only where the endpoint details panel explicitly showed a "Quantization" value. Confirmed: [Qwen3-235B-A22B-Instruct-2507](https://tokenfactory.nebius.com/endpoints?search=Qwen3-235B-A22B-Instruct-2507&modals=endpoint-details&model-id=Qwen/Qwen3-235B-A22B-Instruct-2507) → fp8 [Qwen3-32B](https://tokenfactory.nebius.com/endpoints?search=Qwen3-32B&modals=endpoint-details&model-id=Qwen/Qwen3-32B) → fp8 [Qwen2.5-VL-72B-Instruct](https://tokenfactory.nebius.com/endpoints?search=Qwen2.5-VL-72B-Instruct&modals=endpoint-details&model-id=Qwen/Qwen2.5-VL-72B-Instruct) → fp8 [Qwen3-30B-A3B-Instruct-2507](https://tokenfactory.nebius.com/endpoints?search=Qwen3-30B-A3B-Instruct-2507&modals=endpoint-details&model-id=Qwen/Qwen3-30B-A3B-Instruct-2507) → fp8 [Qwen3-Next-80B-A3B-Thinking](https://tokenfactory.nebius.com/endpoints?search=Qwen3-Next-80B-A3B-Thinking&modals=endpoint-details&model-id=Qwen/Qwen3-Next-80B-A3B-Thinking) → fp8 [Qwen3.5-397B-A17B](https://tokenfactory.nebius.com/endpoints?search=Qwen3.5-397B-A17B&modals=endpoint-details&model-id=Qwen/Qwen3.5-397B-A17B) → fp4 [Llama-3_1-Nemotron-Ultra-253B-v1](https://tokenfactory.nebius.com/endpoints?search=Llama-3_1-Nemotron-Ultra-253B-v1&modals=endpoint-details&model-id=nvidia/Llama-3_1-Nemotron-Ultra-253B-v1) → fp8 [Llama-3.3-70B-Instruct](https://tokenfactory.nebius.com/endpoints?search=Llama-3.3-70B-Instruct&modals=endpoint-details&model-id=meta-llama/Llama-3.3-70B-Instruct) → fp8 [gpt-oss-120b](https://tokenfactory.nebius.com/endpoints?search=gpt-oss-120b&modals=endpoint-details&model-id=openai/gpt-oss-120b) → fp4 [MiniMax-M2.5](https://tokenfactory.nebius.com/endpoints?search=MiniMax-M2.5&modals=endpoint-details&model-id=MiniMaxAI/MiniMax-M2.5) → fp4 [gemma-3-27b-it](https://tokenfactory.nebius.com/endpoints?search=gemma-3-27b-it&modals=endpoint-details&model-id=google/gemma-3-27b-it) → fp8 <details> <summary>Checked but not currently listed on Nebius (20, left unchanged)</summary> QwQ-32B Qwen3-235B-A22B-Thinking-2507 Qwen3-14B Qwen3-30B-A3B Qwen2.5-Coder-7B-fast Qwen2.5-32B-Instruct Qwen2.5-72B-Instruct Qwen2-VL-72B-Instruct Qwen3-Coder-480B-A35B-Instruct Qwen3-Coder-30B-A3B-Instruct Qwen3-30B-A3B-Thinking-2507 DeepSeek-V3 DeepSeek-R1-0528 DeepSeek-V3.2 Meta-Llama-3.1-8B-Instruct Meta-Llama-3.1-405B-Instruct Kimi-K2-Instruct Kimi-K2.5 GLM-5 Hermes-3-Llama-405B </details> Ran pnpm format; only these 5 files changed. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Model Updates** * Added explicit quantization metadata for supported model variants across Alibaba, Google, Meta, MiniMax, and OpenAI providers. * Identified FP8 and FP4 configurations for improved model capability and compatibility reporting. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Summary
Batch of marketing/content improvements:
1. Guide OG image logos fixed
/guides/kilo-code,/guides/devpass-code,/guides/mcp, and/guides/opencode-desktopfell back to the OpenCode logo in their opengraph images. Added the Kilo Code, DevPass Code (LLM Gateway mark), and MCP icons and mapped OpenCode Desktop to the OpenCode icon. Verified by rendering each OG image locally.2. Quantization on model pages
quantizationfield (fp8,bf16, …) onProviderModelMappingin@llmgateway/models— only set where the provider explicitly documents serving precision.Quant: FP8next to the context size on provider cards (verified on/models/qwen3-235b-a22b-fp8).3. Z AI data policy
consumerTraining: null → false— the provider page now shows Consumer Training: No instead of Unknown. Models unit tests pass (42/42).4. Master Keys knowledge base page
The dashboard's Master Keys page had no page in the docs Knowledge base. Added
learn/master-keys.mdx(nav + index entries) with fresh light/dark screenshots of the key list and create dialog, captured from the seeded enterprise org at the same 1440px/collapsed-sidebar style as the existing KB screenshots.5. Compare pages: AWS Bedrock & Azure AI Foundry
New
/compare/aws-bedrockand/compare/azure-ai-foundrypages following the existing compare-page pattern (hero, feature table, FAQ with FAQPage JSON-LD), reusing the existingAWSBedrockIcon/AzureIconprovider logos in the comparison cards. Positioning: both clouds remain built-in providers (BYOK, 0% markup) — LLM Gateway adds cloud-neutrality, cross-cloud failover, caching, and unified analytics on top. Claims verified against current reality (OpenAI models are GA on Bedrock, Claude is GA in Foundry — differentiation rests on lock-in, routing, and open source instead of catalog gaps). Added to sitemap and footer.Test plan
pnpm build— all 17 tasks passpnpm formatpackages/models) — 42/42🤖 Generated with Claude Code
https://claude.ai/code/session_012JBMzhmjPuTkrDGYnUAJUQ
Summary by CodeRabbit