Skip to content

Commit 6a6b1c6

Browse files
smakoshclaudesteebchen
authored
feat: compare pages, quant, master keys KB (#2946)
## Summary Batch of marketing/content improvements: ### 1. Guide OG image logos fixed `/guides/kilo-code`, `/guides/devpass-code`, `/guides/mcp`, and `/guides/opencode-desktop` fell 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 - New optional `quantization` field (`fp8`, `bf16`, …) on `ProviderModelMapping` in `@llmgateway/models` — only set where the provider explicitly documents serving precision. - Populated for the five fp8-suffixed Novita mappings (Qwen3 fp8 family + Llama 4 Maverick fp8). - Model pages now show `Quant: FP8` next 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-bedrock` and `/compare/azure-ai-foundry` pages following the existing compare-page pattern (hero, feature table, FAQ with FAQPage JSON-LD), reusing the existing `AWSBedrockIcon`/`AzureIcon` provider 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 - [x] `pnpm build` — all 17 tasks pass - [x] `pnpm format` - [x] Models unit tests (`packages/models`) — 42/42 - [x] Verified OG images, model page quant, zai provider page, and both compare pages in local dev 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_012JBMzhmjPuTkrDGYnUAJUQ <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added “LLM Gateway vs AWS Bedrock” and “LLM Gateway vs Azure AI Foundry” comparison pages. * Added a new “Master Keys” documentation page and linked it in the learning section. * **Bug Fixes** * Model cards now show quantization details when available. * **Documentation** * Updated navigation/footer/sitemap and enhanced guide image/icon support for additional guide types. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Luca Steeb <contact@luca-steeb.com>
1 parent ef91273 commit 6a6b1c6

21 files changed

Lines changed: 984 additions & 7 deletions

File tree

apps/docs/content/learn/index.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ These pages apply to your entire organization:
3535
- [**Org Preferences**](/learn/org-preferences) — Organization name and billing details
3636
- [**Team**](/learn/team) — Manage team members and roles
3737
- [**Member Analytics**](/learn/member-analytics) — Per-member cost and usage breakdowns (Enterprise)
38+
- [**Master Keys**](/learn/master-keys) — Provision projects and API keys programmatically (Enterprise)
3839
- [**Audit Logs**](/learn/audit-logs) — Complete history of organization actions
3940

4041
## Playground
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
---
2+
title: Master Keys
3+
description: Provision projects and API keys programmatically with org-scoped master keys
4+
icon: KeyRound
5+
---
6+
7+
import { Callout } from "fumadocs-ui/components/callout";
8+
import { ThemedImage } from "@/components/themed-image";
9+
10+
The Master Keys page lets you create and manage org-scoped bearer tokens for the `/v1/master/*` API — so your own backend can provision projects, gateway API keys, and IAM rules programmatically, without going through the dashboard.
11+
12+
<ThemedImage alt="Master Keys" basePath="/learn/master-keys" />
13+
14+
<Callout type="info">
15+
Master Keys are available on the [**Enterprise
16+
plan**](https://llmgateway.io/enterprise). Contact us at contact@llmgateway.io
17+
to enable them for your organization.
18+
</Callout>
19+
20+
## Creating a Master Key
21+
22+
Click **Create Master Key**, give the key a descriptive name (for example, "Provisioning backend"), and click create.
23+
24+
<ThemedImage
25+
alt="Create Master Key dialog"
26+
basePath="/learn/master-keys-create"
27+
/>
28+
29+
<Callout type="warning">
30+
The plain token (prefixed `llmgmk_`) is shown **only once** at creation time.
31+
Copy it immediately and store it securely — only an HMAC-SHA256 hash is kept
32+
in the database.
33+
</Callout>
34+
35+
## Key List
36+
37+
Each master key in the list shows:
38+
39+
| Field | Description |
40+
| -------------- | ------------------------------------------------------ |
41+
| **Name** | The description you gave the key |
42+
| **Master Key** | Masked form of the token, for identification |
43+
| **Status** | Active or inactive |
44+
| **Created** | When the key was created |
45+
| **Created By** | The team member who created it |
46+
| **Last Used** | Timestamp of the key's most recent `/v1/master/*` call |
47+
48+
## Managing Keys
49+
50+
Use the actions menu on each row to:
51+
52+
- **Activate / Deactivate** — Temporarily suspend a key without deleting it. Inactive keys receive a 401 on every request.
53+
- **Delete** — Permanently revoke the key. Any system using it immediately loses access to the `/v1/master/*` API.
54+
55+
Every create, delete, and status change is recorded in your organization's [audit log](/learn/audit-logs).
56+
57+
## Limits
58+
59+
Each organization can have up to **10 active master keys**. A usage bar above the list shows how many you've used; contact us if you need more.
60+
61+
## Using a Master Key
62+
63+
Master keys authenticate against the programmatic provisioning API:
64+
65+
```bash
66+
curl https://internal.llmgateway.io/v1/master/projects \
67+
-H "Authorization: Bearer llmgmk_..."
68+
```
69+
70+
See the [Master Keys feature documentation](/features/master-keys) for the full endpoint reference, including project management, gateway API key provisioning, and IAM rules.

apps/docs/content/learn/meta.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"team",
2626
"org-analytics",
2727
"member-analytics",
28+
"master-keys",
2829
"audit-logs",
2930
"playground",
3031
"playground-group",
21.9 KB
Loading
18.7 KB
Loading
19.9 KB
Loading
25.7 KB
Loading
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import { CompareFaq } from "@/components/compare/compare-faq";
2+
import { HeroCompare } from "@/components/compare/hero-compare";
3+
import { ComparisonBedrock } from "@/components/landing/comparison-bedrock";
4+
import Footer from "@/components/landing/footer";
5+
6+
import type { CompareFaqItem } from "@/components/compare/compare-faq";
7+
8+
const bedrockFaqs: CompareFaqItem[] = [
9+
{
10+
question: "Is LLM Gateway a good AWS Bedrock alternative?",
11+
answer:
12+
"Yes — if you want frontier models without committing to one cloud. LLM Gateway puts 200+ models from 40+ providers behind a single OpenAI-compatible API, with automatic routing, failover, caching, and per-request cost analytics. It's fully open source (AGPLv3) and self-hostable, so nothing ties you to a hyperscaler.",
13+
},
14+
{
15+
question: "Can I keep using AWS Bedrock with LLM Gateway?",
16+
answer:
17+
"Yes. AWS Bedrock is a built-in LLM Gateway provider. Bring your own AWS credentials and route Bedrock traffic through the gateway with 0% markup — you keep your AWS commitments and compliance posture while gaining cross-provider failover, caching, and unified analytics on top.",
18+
},
19+
{
20+
question: "Doesn't Bedrock already have OpenAI and Anthropic models?",
21+
answer:
22+
"It does — Bedrock hosts OpenAI's frontier models and Anthropic's Claude family, among others. But the catalog is limited to what AWS hosts: there's no Google Gemini and no fast independent hosts like Groq or Cerebras. LLM Gateway routes across all of them, including Bedrock itself, from one API.",
23+
},
24+
{
25+
question: "How does pricing compare to AWS Bedrock?",
26+
answer:
27+
"Bedrock bills model-provider rates through your AWS account. LLM Gateway charges the same provider rates with a flat 5% platform fee on credits — or 0% when you bring your own provider keys, including AWS credentials. Self-hosting the open-source gateway is free.",
28+
},
29+
{
30+
question: "How hard is it to migrate from Bedrock to LLM Gateway?",
31+
answer:
32+
"Minimal effort. LLM Gateway exposes an OpenAI-compatible API, so most apps switch by changing the base URL and API key. There's no IAM policy work, model-access requests, or region planning — sign up, create a key, and every supported model is available immediately.",
33+
},
34+
];
35+
36+
export default function CompareBedrockPage() {
37+
return (
38+
<div className="min-h-screen bg-white text-black dark:bg-black dark:text-white">
39+
<main>
40+
<HeroCompare
41+
content={{
42+
heading: "Looking Beyond AWS Bedrock?",
43+
description:
44+
"Bedrock gives you the models AWS hosts. LLM Gateway gives you every major lab and cloud — including Bedrock itself — behind one open-source, OpenAI-compatible API with automatic routing and failover.",
45+
badges: [
46+
"Cloud-Neutral",
47+
"Fully Open Source",
48+
"Cross-Cloud Failover",
49+
"Bedrock Built In",
50+
],
51+
cta: {
52+
primary: {
53+
text: "Start for Free",
54+
href: "/signup",
55+
},
56+
secondary: {
57+
text: "View Documentation",
58+
href: "https://docs.llmgateway.io",
59+
external: true,
60+
},
61+
},
62+
}}
63+
/>
64+
<ComparisonBedrock />
65+
<CompareFaq
66+
heading="LLM Gateway vs AWS Bedrock"
67+
description="Common questions about using LLM Gateway alongside or instead of Amazon Bedrock."
68+
faqs={bedrockFaqs}
69+
/>
70+
</main>
71+
<Footer />
72+
</div>
73+
);
74+
}
75+
76+
export async function generateMetadata() {
77+
return {
78+
title: "LLM Gateway vs AWS Bedrock — The Cloud-Neutral Alternative",
79+
description:
80+
"Compare LLM Gateway and Amazon Bedrock: 40+ providers behind one OpenAI-compatible API vs an AWS-hosted catalog. Keep Bedrock as a provider with 0% markup and add cross-cloud failover, caching, and cost analytics.",
81+
openGraph: {
82+
title: "LLM Gateway vs AWS Bedrock - Feature Comparison",
83+
description:
84+
"Compare LLM Gateway's cloud-neutral, open-source platform against Amazon Bedrock's AWS-hosted model catalog. Route to Bedrock and 40+ other providers from one API.",
85+
type: "website",
86+
},
87+
twitter: {
88+
card: "summary_large_image",
89+
title: "LLM Gateway vs AWS Bedrock - Feature Comparison",
90+
description:
91+
"Compare LLM Gateway's cloud-neutral, open-source platform against Amazon Bedrock's AWS-hosted model catalog. Route to Bedrock and 40+ other providers from one API.",
92+
},
93+
};
94+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import { CompareFaq } from "@/components/compare/compare-faq";
2+
import { HeroCompare } from "@/components/compare/hero-compare";
3+
import { ComparisonAzureFoundry } from "@/components/landing/comparison-azure-foundry";
4+
import Footer from "@/components/landing/footer";
5+
6+
import type { CompareFaqItem } from "@/components/compare/compare-faq";
7+
8+
const foundryFaqs: CompareFaqItem[] = [
9+
{
10+
question: "Is LLM Gateway a good Azure AI Foundry alternative?",
11+
answer:
12+
"Yes — if you want frontier models without committing to one cloud. LLM Gateway puts 200+ models from 40+ providers behind a single OpenAI-compatible API, with automatic routing, failover, caching, and per-request cost analytics. It's fully open source (AGPLv3) and self-hostable, and there are no deployments or TPM quotas to manage.",
13+
},
14+
{
15+
question: "Can I keep using Azure with LLM Gateway?",
16+
answer:
17+
"Yes. Azure OpenAI and Azure AI Foundry are built-in LLM Gateway providers. Bring your Azure credentials and route your Azure traffic through the gateway with 0% markup — you keep your Microsoft agreements and compliance posture while gaining cross-provider failover, caching, and unified analytics on top.",
18+
},
19+
{
20+
question: "Doesn't Foundry already have OpenAI and Claude models?",
21+
answer:
22+
"It does — Foundry hosts OpenAI's models and Anthropic's Claude family, among a large Azure-hosted catalog. But everything runs inside Azure: there's no Google Gemini and no fast independent hosts like Groq or Cerebras, and each model needs a deployment with quota. LLM Gateway routes across all of them, including Azure itself, from one API with no provisioning.",
23+
},
24+
{
25+
question: "How does pricing compare to Azure AI Foundry?",
26+
answer:
27+
"Foundry bills model rates through your Azure subscription, with provisioned-throughput (PTU) reservations for guaranteed capacity. LLM Gateway charges the same provider rates with a flat 5% platform fee on credits — or 0% when you bring your own provider keys, including Azure credentials. Self-hosting the open-source gateway is free.",
28+
},
29+
{
30+
question: "How hard is it to migrate from Azure AI Foundry to LLM Gateway?",
31+
answer:
32+
"Minimal effort. LLM Gateway exposes an OpenAI-compatible API, so most apps switch by changing the base URL and API key. There are no resources to create, models to deploy, or regional quotas to plan — sign up, create a key, and every supported model is available immediately.",
33+
},
34+
];
35+
36+
export default function CompareAzureFoundryPage() {
37+
return (
38+
<div className="min-h-screen bg-white text-black dark:bg-black dark:text-white">
39+
<main>
40+
<HeroCompare
41+
content={{
42+
heading: "Looking Beyond Azure AI Foundry?",
43+
description:
44+
"Foundry gives you the models Azure hosts — after you create resources, deployments, and quotas. LLM Gateway gives you every major lab and cloud — including Azure itself — behind one open-source, OpenAI-compatible API. No provisioning required.",
45+
badges: [
46+
"Cloud-Neutral",
47+
"Fully Open Source",
48+
"No Deployments or Quotas",
49+
"Azure Built In",
50+
],
51+
cta: {
52+
primary: {
53+
text: "Start for Free",
54+
href: "/signup",
55+
},
56+
secondary: {
57+
text: "View Documentation",
58+
href: "https://docs.llmgateway.io",
59+
external: true,
60+
},
61+
},
62+
}}
63+
/>
64+
<ComparisonAzureFoundry />
65+
<CompareFaq
66+
heading="LLM Gateway vs Azure AI Foundry"
67+
description="Common questions about using LLM Gateway alongside or instead of Azure AI Foundry."
68+
faqs={foundryFaqs}
69+
/>
70+
</main>
71+
<Footer />
72+
</div>
73+
);
74+
}
75+
76+
export async function generateMetadata() {
77+
return {
78+
title: "LLM Gateway vs Azure AI Foundry — The Cloud-Neutral Alternative",
79+
description:
80+
"Compare LLM Gateway and Azure AI Foundry: 40+ providers behind one OpenAI-compatible API vs an Azure-hosted catalog with deployments and quotas. Keep Azure as a provider with 0% markup and add cross-cloud failover, caching, and cost analytics.",
81+
openGraph: {
82+
title: "LLM Gateway vs Azure AI Foundry - Feature Comparison",
83+
description:
84+
"Compare LLM Gateway's cloud-neutral, open-source platform against Azure AI Foundry's Azure-hosted model catalog. Route to Azure and 40+ other providers from one API.",
85+
type: "website",
86+
},
87+
twitter: {
88+
card: "summary_large_image",
89+
title: "LLM Gateway vs Azure AI Foundry - Feature Comparison",
90+
description:
91+
"Compare LLM Gateway's cloud-neutral, open-source platform against Azure AI Foundry's Azure-hosted model catalog. Route to Azure and 40+ other providers from one API.",
92+
},
93+
};
94+
}

apps/ui/src/app/guides/[slug]/opengraph-image.tsx

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,11 +261,66 @@ const MimoCodeIcon = () => (
261261
</svg>
262262
);
263263

264+
// Kilo Code Icon
265+
const KiloCodeIcon = () => (
266+
<svg
267+
xmlns="http://www.w3.org/2000/svg"
268+
viewBox="0 0 24 24"
269+
fill="none"
270+
width={100}
271+
height={100}
272+
>
273+
<path
274+
d="M6 3v18M6 12l6-6M6 12l6 6M12 6l6 6-6 6"
275+
stroke="#ffffff"
276+
strokeWidth="2"
277+
strokeLinecap="round"
278+
strokeLinejoin="round"
279+
/>
280+
</svg>
281+
);
282+
283+
// DevPass Code Icon (LLM Gateway logo mark)
284+
const DevPassCodeIcon = () => (
285+
<svg
286+
xmlns="http://www.w3.org/2000/svg"
287+
viewBox="0 0 218 232"
288+
fill="none"
289+
width={100}
290+
height={100}
291+
>
292+
<path
293+
d="M218 59.4686c0-4.1697-2.351-7.9813-6.071-9.8441L119.973 3.58361s2.926 3.32316 2.926 7.01529V218.833c0 4.081-2.926 7.016-2.926 7.016l15.24-7.468c2.964-2.232 7.187-7.443 7.438-16.006.293-9.976.61-84.847.732-121.0353.487-3.6678 4.096-11.0032 14.63-11.0032 10.535 0 29.262 5.1348 37.309 7.7022 2.439.7336 7.608 4.1812 8.779 12.1036 1.17 7.9223.975 59.0507.731 83.6247 0 2.445.137 7.069 6.653 7.069 6.515 0 6.515-7.069 6.515-7.069V59.4686Z"
294+
fill="#ffffff"
295+
/>
296+
<path
297+
d="M149.235 86.323c0-5.5921 5.132-9.7668 10.589-8.6132l31.457 6.6495c4.061.8585 6.967 4.4207 6.967 8.5824v81.9253c0 5.868 5.121 9.169 5.121 9.169l-51.9-12.658c-1.311-.32-2.234-1.498-2.234-2.852V86.323ZM99.7535 1.15076c7.2925-3.60996 15.8305 1.71119 15.8305 9.86634V220.983c0 8.155-8.538 13.476-15.8305 9.866L6.11596 184.496C2.37105 182.642 0 178.818 0 174.63v-17.868l49.7128 19.865c4.0474 1.617 8.4447-1.372 8.4449-5.741 0-2.66-1.6975-5.022-4.2142-5.863L0 146.992v-14.305l40.2756 7.708c3.9656.759 7.6405-2.289 7.6405-6.337 0-3.286-2.4628-6.048-5.7195-6.413L0 122.917V108.48l78.5181-3.014c4.1532-.16 7.4381-3.582 7.4383-7.7498 0-4.6256-4.0122-8.2229-8.5964-7.7073L0 98.7098V82.4399l53.447-17.8738c2.3764-.7948 3.9791-3.0254 3.9792-5.5374 0-4.0961-4.0978-6.9185-7.9106-5.4486L0 72.6695V57.3696c.0000304-4.1878 2.37107-8.0125 6.11596-9.8664L99.7535 1.15076Z"
298+
fill="#ffffff"
299+
/>
300+
</svg>
301+
);
302+
303+
// Model Context Protocol Icon
304+
const McpIcon = () => (
305+
<svg
306+
xmlns="http://www.w3.org/2000/svg"
307+
viewBox="0 0 24 24"
308+
fill="#ffffff"
309+
fillRule="evenodd"
310+
width={100}
311+
height={100}
312+
>
313+
<path d="M15.688 2.343a2.588 2.588 0 00-3.61 0l-9.626 9.44a.863.863 0 01-1.203 0 .823.823 0 010-1.18l9.626-9.44a4.313 4.313 0 016.016 0 4.116 4.116 0 011.204 3.54 4.3 4.3 0 013.609 1.18l.05.05a4.115 4.115 0 010 5.9l-8.706 8.537a.274.274 0 000 .393l1.788 1.754a.823.823 0 010 1.18.863.863 0 01-1.203 0l-1.788-1.753a1.92 1.92 0 010-2.754l8.706-8.538a2.47 2.47 0 000-3.54l-.05-.049a2.588 2.588 0 00-3.607-.003l-7.172 7.034-.002.002-.098.097a.863.863 0 01-1.204 0 .823.823 0 010-1.18l7.273-7.133a2.47 2.47 0 00-.003-3.537z" />
314+
<path d="M14.485 4.703a.823.823 0 000-1.18.863.863 0 00-1.204 0l-7.119 6.982a4.115 4.115 0 000 5.9 4.314 4.314 0 006.016 0l7.12-6.982a.823.823 0 000-1.18.863.863 0 00-1.204 0l-7.119 6.982a2.588 2.588 0 01-3.61 0 2.47 2.47 0 010-3.54l7.12-6.982z" />
315+
</svg>
316+
);
317+
264318
// Map slugs to their icons
265319
function getIconForGuide(slug: string) {
266320
const iconMap: Record<string, () => React.JSX.Element> = {
267321
"claude-code": AnthropicIcon,
268322
opencode: OpenCodeIcon,
323+
"opencode-desktop": OpenCodeIcon,
269324
cursor: CursorIcon,
270325
cline: ClineIcon,
271326
n8n: N8nIcon,
@@ -278,6 +333,9 @@ function getIconForGuide(slug: string) {
278333
pi: PiIcon,
279334
"kimi-code": KimiIcon,
280335
mimocode: MimoCodeIcon,
336+
"kilo-code": KiloCodeIcon,
337+
"devpass-code": DevPassCodeIcon,
338+
mcp: McpIcon,
281339
};
282340

283341
return iconMap[slug] || OpenCodeIcon; // Default to OpenCode icon

0 commit comments

Comments
 (0)