From d181efd79c78ad7fe3e9a9b030920195fc3aba92 Mon Sep 17 00:00:00 2001 From: Diana <75819066+cloudjumpercat@users.noreply.github.com> Date: Fri, 16 Oct 2026 17:12:02 -0500 Subject: [PATCH 1/5] First draft of install how to, hopefully a ruby fix for hyphenated product versions Signed-off-by: Diana <75819066+cloudjumpercat@users.noreply.github.com> --- app/_how-tos/ai-gateway/docker-compose.md | 161 ++++++++++++++++++++++ app/_plugins/generators/site_data.rb | 15 +- 2 files changed, 167 insertions(+), 9 deletions(-) create mode 100644 app/_how-tos/ai-gateway/docker-compose.md diff --git a/app/_how-tos/ai-gateway/docker-compose.md b/app/_how-tos/ai-gateway/docker-compose.md new file mode 100644 index 00000000000..eccb7a5a31b --- /dev/null +++ b/app/_how-tos/ai-gateway/docker-compose.md @@ -0,0 +1,161 @@ +--- +title: Install {{site.ai_gateway}} 2.x on-prem using Docker Compose +content_type: how_to +permalink: /ai-gateway/install/docker/ +description: Use Docker Compose to install {{site.ai_gateway}} 2.x on self-managed {{site.base_gateway}} +products: + - ai-gateway + +works_on: + - on-prem + +min_version: + ai-gateway: '2.2' + +tldr: + q: How do I install {{site.ai_gateway}} 2.x on-prem using Docker Compose? + a: "Create the example Docker Compose file and run `docker compose up -d`." + +prereqs: + skip_product: true + inline: + - title: Docker Compose + content: | + This guide requires [Docker](https://docs.docker.com/get-started/get-docker/) installed on your system. + +cleanup: + inline: + - title: Destroy the {{site.ai_gateway}} containers + include_content: cleanup/products/docker + icon_url: /assets/icons/ai-gateway.svg + +related_resources: + - text: Configure {{site.ai_gateway}} on-prem + url: /ai-gateway/configure-on-prem/ + - text: Install {{site.base_gateway}} using Docker Compose + url: /gateway/install/docker/ + +automated_tests: false +--- + +## Set up the Docker Compose file + +Run the following command to create `docker-compose.yml`: + + +```bash +cat < docker-compose.yml + +networks: + kong: + name: kong + driver: bridge + +# Image used by every Kong service in this file +x-kong-image: &kong-image + image: kong/kong-ai-gateway:{{ site.data.ai_gateway_latest.version }} + +# Common environment variables used by Kong services (migrations and gateway) +x-kong-db-config: &kong-db-config + KONG_DATABASE: postgres # Use Postgres as the backing database + KONG_PG_HOST: db # Hostname of the Postgres service + KONG_PG_DATABASE: kong # Name of the database to connect to + KONG_PG_USER: kong # Database username + KONG_PG_PASSWORD: kong # Database password + KONG_PASSWORD: password # Admin GUI password (required for RBAC) + KONG_LICENSE_DATA: "\${KONG_LICENSE_DATA}" # Kong Enterprise license passed via environment variable + +x-kong-container-common: &kong-container-common + healthcheck: + test: [ "CMD", "kong", "health" ] + interval: 3s + timeout: 3s + retries: 10 + start_period: 3s + restart: on-failure + tmpfs: + - /tmp + +services: + + db: + image: postgres:13 + networks: + - kong + environment: + POSTGRES_DB: kong + POSTGRES_USER: kong + POSTGRES_PASSWORD: kong + healthcheck: # Ensure the DB is ready before starting dependent services + test: [ "CMD", "pg_isready", "-U", "kong" ] + interval: 5s + timeout: 5s + retries: 10 + restart: on-failure + + kong-migrations: + <<: *kong-image + networks: + - kong + command: "kong migrations bootstrap" + depends_on: + db: + condition: service_healthy # Wait until Postgres is up and healthy + environment: + <<: *kong-db-config + + kong-gateway: + <<: [ *kong-container-common, *kong-image ] + deploy: + replicas: 1 + mem_limit: 2g + cpus: 4 + networks: + - kong + user: "\${KONG_USER:-kong}" + ports: + - 8000:8000 # Proxy HTTP + - 8443:8443 # Proxy HTTPS + - 8001:8001 # Admin API + - 8002:8002 # Kong Manager (Admin GUI) + - 8003:8003 # Dev Portal GUI + - 8004:8004 # Dev Portal API + depends_on: + db: + condition: service_healthy + kong-migrations: + condition: service_completed_successfully # Start only after bootstrap has succeeded + environment: + <<: *kong-db-config + KONG_ANONYMOUS_REPORTS: "off" + KONG_PROXY_LISTEN: "0.0.0.0:8000,0.0.0.0:8443 ssl" + KONG_ADMIN_LISTEN: "0.0.0.0:8001" + KONG_ADMIN_GUI_LISTEN: "0.0.0.0:8002" + KONG_PORTAL_GUI_LISTEN: "0.0.0.0:8003" + KONG_PORTAL_API_LISTEN: "0.0.0.0:8004" + KONG_LOG_LEVEL: "debug" + KONG_PLUGINS: "bundled" +EOF +``` + + +## Start {{site.ai_gateway}} + +Set your Enterprise license in the `KONG_LICENSE_DATA` environment variable, then start the containers: + +```sh +export KONG_LICENSE_DATA='' +docker compose up -d +``` + +## Validate + +You can validate {{site.ai_gateway}} is running using cURL against the Admin API: + +{% control_plane_request %} +url: '' +method: GET +status_code: 200 +{% endcontrol_plane_request %} + +This will return an `HTTP/1.1 200 OK` response. diff --git a/app/_plugins/generators/site_data.rb b/app/_plugins/generators/site_data.rb index aa653d990d7..c0e3d57948d 100644 --- a/app/_plugins/generators/site_data.rb +++ b/app/_plugins/generators/site_data.rb @@ -26,17 +26,14 @@ def search_filters(site) } end - def product_latest_release(site) # rubocop:disable Metrics/AbcSize - products = site.data['products'].map do |p| - p[0].gsub('-', '_') - end - - products.each do |product| - releases = site.data.dig('products', product, 'releases') + def product_latest_release(site) + site.data['products'].each_key do |slug| + releases = site.data.dig('products', slug, 'releases') next if releases.nil? - site.data["#{product}_latest"] = releases.detect { |r| r['latest'] } - site.data["#{product}_releases"] = releases + key = slug.gsub('-', '_') + site.data["#{key}_latest"] = releases.detect { |r| r['latest'] } + site.data["#{key}_releases"] = releases end end From ee4a5bb948d32118ad774af6b00eefa9df2ef397 Mon Sep 17 00:00:00 2001 From: Fabian Rodriguez Date: Mon, 19 Oct 2026 17:42:09 +0200 Subject: [PATCH 2/5] test(aigw): add spec for SiteDataGenerator#product_latest_release The hyphenated-slug bug fixed in this PR had no test coverage. Covers non-hyphenated slugs, hyphenated slugs (ai_gateway_latest), and products without releases. --- .../app/_plugins/generators/site_data_spec.rb | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 spec/app/_plugins/generators/site_data_spec.rb diff --git a/spec/app/_plugins/generators/site_data_spec.rb b/spec/app/_plugins/generators/site_data_spec.rb new file mode 100644 index 00000000000..2454e8ebfc8 --- /dev/null +++ b/spec/app/_plugins/generators/site_data_spec.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +require_relative '../../../spec_helper' +require_relative '../../../../app/_plugins/generators/site_data' + +RSpec.describe Jekyll::SiteDataGenerator do + subject(:generator) { described_class.new } + + describe '#product_latest_release' do + let(:site) { instance_double(Jekyll::Site, data: data) } + + let(:data) do + { + 'products' => { + 'gateway' => { + 'releases' => [ + { 'release' => '3.9', 'latest' => true }, + { 'release' => '3.8' } + ] + }, + 'ai-gateway' => { + 'releases' => [ + { 'release' => '2.2', 'version' => '2.2.0', 'latest' => true }, + { 'release' => '2.1', 'version' => '2.1.0' } + ] + }, + 'insomnia' => {} + } + } + end + + it 'sets the latest release for a non-hyphenated product slug' do + generator.product_latest_release(site) + + expect(site.data['gateway_latest']).to eq({ 'release' => '3.9', 'latest' => true }) + expect(site.data['gateway_releases']).to eq(data['products']['gateway']['releases']) + end + + it 'sets the latest release for a hyphenated product slug, keyed with underscores' do + generator.product_latest_release(site) + + expect(site.data['ai_gateway_latest']).to eq({ 'release' => '2.2', 'version' => '2.2.0', 'latest' => true }) + expect(site.data['ai_gateway_releases']).to eq(data['products']['ai-gateway']['releases']) + end + + it 'does not set latest/releases keys for a product with no releases' do + generator.product_latest_release(site) + + expect(site.data).not_to have_key('insomnia_latest') + expect(site.data).not_to have_key('insomnia_releases') + end + end +end From 333c122e90c21cbe42cd9e463dfbf5c6d19f9324 Mon Sep 17 00:00:00 2001 From: Diana <75819066+cloudjumpercat@users.noreply.github.com> Date: Tue, 20 Oct 2026 11:54:57 -0500 Subject: [PATCH 3/5] finish install guide draft, update files that talk about on prem and AIGW 2.x Signed-off-by: Diana <75819066+cloudjumpercat@users.noreply.github.com> --- .../ai-gateway-migration-review/SKILL.md | 13 ++- .claude/skills/aigw-doc-resources/SKILL.md | 7 +- .claude/skills/feature-docs-from-prd/SKILL.md | 7 +- app/_how-tos/ai-gateway/docker-compose.md | 98 ++++++++++++++++++- app/_indices/ai-gateway.yaml | 3 + app/_landing_pages/ai-gateway.yaml | 3 + app/ai-gateway/configure-on-prem.md | 4 + 7 files changed, 126 insertions(+), 9 deletions(-) diff --git a/.claude/skills/ai-gateway-migration-review/SKILL.md b/.claude/skills/ai-gateway-migration-review/SKILL.md index 5f5b1178e5d..1663635c1ef 100644 --- a/.claude/skills/ai-gateway-migration-review/SKILL.md +++ b/.claude/skills/ai-gateway-migration-review/SKILL.md @@ -56,7 +56,8 @@ Every v2 AI Gateway page must have this exact frontmatter shape for these fields products: - ai-gateway # Only ai-gateway, no other products works_on: - - konnect # Only konnect, no on-prem + - konnect # Entities/Policies are always authored in Konnect + - on-prem # Add this only for pages about consuming that config on self-hosted Gateway via deck ai sync/ai2kong (see configure-on-prem.md) tools: - kongctl # Optional field. If it exists, must be only kongctl or only konnect-api min_version: @@ -67,8 +68,8 @@ Prefer `kongctl` over `konnect-api` when both would work — it's what every rea Flag any deviation: - `products` containing anything other than `ai-gateway` -- `works_on` containing `on-prem` or anything other than `konnect` -- `tools` containing `deck`, `admin-api`, or a mix of `kongctl` and `konnect-api` on the same page +- `works_on` containing anything other than `konnect` and `on-prem`. `konnect` alone is correct for pages about authoring entities/Policies (there's no on-prem UI or API for that). `on-prem` should only be added alongside `konnect` for pages about running that same 2.x config on self-hosted Gateway (install guides, `configure-on-prem.md`-style conversion content) — flag `on-prem` with `konnect` missing, since on-prem AIGW 2.x still starts from a Konnect-authored entity file. +- `tools` containing `deck`, `admin-api`, or a mix of `kongctl` and `konnect-api` on the same page. Exception: on-prem-focused pages (`configure-on-prem.md`, `docker-compose.md`) legitimately use `deck` for the `ai2kong`/`ai sync`/`ai dump` conversion workflow — don't flag `deck` there. - Missing or wrong `min_version` (must be `ai-gateway: '2.0'`) #### `content_type` on AI Policy pages @@ -136,9 +137,11 @@ This should be replaced with a corresponding AI Policy include (e.g. under `_inc Example codeblocks in how-to guides should use `{% konnect_api_request %}` rather than raw curl or deck commands where they're making API calls. Flag any `curl` commands or `deck` commands in example steps that should be `{% konnect_api_request %}` blocks. -### Konnect-only deployments +### On-prem deployments -v2 AI Gateway is Konnect-only. Flag any references to on-premises deployments, self-hosted Kong Gateway, or any instructions that only apply to on-prem. +v2 AI Gateway entities/Policies are always authored in Konnect, and the majority of content is treated as Konnect-first. However, a select few pages discuss running the same 2.x entity/Policy configuration on self-hosted Gateway via `deck ai sync` or `deck file ai2kong`. These are legitimate on-prem references and should not be flagged. + +On-prem deployments pass the 2.x entity/Policy configuration through `deck ai sync` or `deck file ai2kong` to convert it into a 3.x compatible format that can be applied to a self-hosted 2.x AI Gateway. ### Kong Gateway → AI Gateway diff --git a/.claude/skills/aigw-doc-resources/SKILL.md b/.claude/skills/aigw-doc-resources/SKILL.md index affa77e6f25..e0b080ff90d 100644 --- a/.claude/skills/aigw-doc-resources/SKILL.md +++ b/.claude/skills/aigw-doc-resources/SKILL.md @@ -27,9 +27,14 @@ Anything under a `v1/` path — `app/_how-tos/ai-gateway/v1/`, behavior, and never assume its config shape (plugin fields, IDs, entity names) carries over unchanged to v2. It's migration source material only. -v2 is Konnect-only (no on-prem data planes) and uses **Policies**, not +v2 is Konnect-first (primarily documents the Konnect experience) and uses **Policies**, not **Plugins**, for anything AI-specific (AI Proxy / AI Proxy Advanced / AI A2A Proxy / AI MCP Proxy are the only exceptions — those stay plugins in v2 too). +Self-hosted Gateway can +also run that same 2.x config but is documented sparingly: install 2.x on-prem (`docker-compose.md`) and +apply the entity file with `deck ai sync`, which converts 2.x entities to 3.x plugins +under the hood. See `app/ai-gateway/configure-on-prem.md` for the conversion +workflow and entity→plugin mapping. ## 2. Docs repo map diff --git a/.claude/skills/feature-docs-from-prd/SKILL.md b/.claude/skills/feature-docs-from-prd/SKILL.md index e17a79338f9..3858dc6de16 100644 --- a/.claude/skills/feature-docs-from-prd/SKILL.md +++ b/.claude/skills/feature-docs-from-prd/SKILL.md @@ -31,11 +31,16 @@ adding a `skills` capability to the AI Gateway `AIGatewayModelAPI`, from `Kong/platform-api#3398` and its PRD). Expect to extend it as more PRDs come through with shapes this version hasn't seen yet. -## Scope: AI Gateway 2.0 on Konnect only — Policies, not plugins +## Scope: AI Gateway 2.0 on Konnect first — Policies, not plugins This skill documents **AI Gateway 2.0 on Konnect**. That product surface uses **Policies** (`app/_ai_gateway_policies//index.md`), not self-hosted Gateway **plugins** (`app/_kong_plugins//`). +Self-hosted AI Gateway 2.x on-prem is possible, but should be documented sparingly. +This can run the 2.x config via `deck ai sync`/`deck file +ai2kong` conversion (see `app/ai-gateway/configure-on-prem.md`). That +conversion path doesn't change where a new Policy gets documented: still +`app/_ai_gateway_policies/`, never `app/_kong_plugins/`. Even when the underlying implementation PR is a `kong-ee` plugin (new Lua schema, `kong/plugins//`, a `changelog/unreleased/kong-aigw/*.yml` diff --git a/app/_how-tos/ai-gateway/docker-compose.md b/app/_how-tos/ai-gateway/docker-compose.md index eccb7a5a31b..ada428ae3c6 100644 --- a/app/_how-tos/ai-gateway/docker-compose.md +++ b/app/_how-tos/ai-gateway/docker-compose.md @@ -141,10 +141,14 @@ EOF ## Start {{site.ai_gateway}} -Set your Enterprise license in the `KONG_LICENSE_DATA` environment variable, then start the containers: +Set your Enterprise license in the `KONG_LICENSE_DATA` environment variable: ```sh -export KONG_LICENSE_DATA='' +export KONG_LICENSE_DATA='YOUR LICENSE DATA' +``` + +Then, start the containers: +```sh docker compose up -d ``` @@ -159,3 +163,93 @@ status_code: 200 {% endcontrol_plane_request %} This will return an `HTTP/1.1 200 OK` response. + +## Configure your on-prem {{site.ai_gateway}} 2.x + +For {{site.ai_gateway}} 2.x running on-prem, you'll use {{site.ai_gateway}} 2.x decK configuration files and `deck ai sync` to apply them. +`deck ai sync` converts the {{site.ai_gateway}} 2.x AI entities and policies into compatible {{site.base_gateway}} 3.x configuration with plugins, Services, and Routes. + +You can convert any `kongctl` {{site.ai_gateway}} 2.x configuration to decK by removing the fields that only apply to a {{site.konnect_short_name}}-managed control plane: + +* Drop each entity's `ref` field. +* Drop each entity's `ai_gateway: !lookup {id: ...}` field. On-prem, there's only one {{site.ai_gateway}}, so entities don't need to reference one by ID. +* Rename the top-level entity collections from their `kongctl` names (`ai_gateway_model_providers`, `ai_gateway_models`, and so on) to their decK names (`model_providers`, `models`). See [Configure {{site.ai_gateway}} on-prem](/ai-gateway/configure-on-prem/) for the full set of entity names decK expects. +* Add `protocols: [http, https]` under `config.route` on each AI Model. The {{site.ai_gateway}} entity schema defaults to both protocols, but that default isn't carried through by `deck ai sync`/`deck file ai2kong`'s conversion, so the generated Route ends up with {{site.base_gateway}}'s own https-only default instead. + +See [{{site.ai_gateway}} 2.x concepts](/ai-gateway/ai-gateway-v2-concepts/) for how the entity model maps to the underlying {{site.base_gateway}} primitives. + +For example, here's the [AI Model Provider and AI Model from the {{site.ai_gateway}} get started guide](/ai-gateway/get-started/) written as a decK configuration file instead of a `kongctl` one. Set the `DECK_OPENAI_API_KEY` environment variable to your OpenAI API key, then apply the file with `deck ai sync`: + +```sh +export DECK_OPENAI_API_KEY='Bearer YOUR OPENAI API KEY' +``` + +{:.info} +> This example substitutes `$DECK_OPENAI_API_KEY` directly into the YAML using the shell, instead of decK's own `{% raw %}${{ env "..." }}{% endraw %}` templating. That templating is the documented way to avoid hardcoding secrets (see [Managing sensitive data](/deck/gateway/sensitive-data/)), but it doesn't resolve when a {{site.ai_gateway}} 2.x entity file is applied with `deck ai sync`/`deck file ai2kong`: the literal, unresolved string ends up in the generated plugin config instead of the real key. + + +```sh +cat < + +{:.info} +> This example omits `--kong-addr`, since it defaults to `http://localhost:8001`, which is already where this Docker Compose file exposes the Admin API. If your {{site.ai_gateway}} isn't reachable at that address, or needs authentication, see [Configuring on-prem authentication](/deck/gateway/configuration/). + +### Validate your configuration + +Send a chat request to verify your setup: + +```sh +curl -X POST "http://localhost:8000/v1/chat/completions" \ + --no-progress-meter --fail-with-body \ + -H "Accept: application/json" \ + -H "Content-Type: application/json" \ + -H "Authorization: $DECK_OPENAI_API_KEY" \ + --json '{ + "messages": [ + { + "role": "user", + "content": "Say this is a test!" + } + ], + "model": "my-gpt-4o" + }' +``` diff --git a/app/_indices/ai-gateway.yaml b/app/_indices/ai-gateway.yaml index 05620b4d6ab..9fb74d7e1be 100644 --- a/app/_indices/ai-gateway.yaml +++ b/app/_indices/ai-gateway.yaml @@ -12,6 +12,9 @@ sections: - title: "Get started with {{site.ai_gateway}}" description: Set up your first {{site.ai_gateway}} instance and start proxying requests to LLM providers. url: /ai-gateway/get-started/ + - title: "Install {{site.ai_gateway}} on-prem" + description: Install {{site.ai_gateway}} 2.x on self-managed {{site.base_gateway}} using Docker Compose. + url: /ai-gateway/install/docker/ - path: /ai-gateway/architecture/ - title: "{{site.ai_gateway}} capabilities" description: Learn about the core capabilities of {{site.ai_gateway}}. diff --git a/app/_landing_pages/ai-gateway.yaml b/app/_landing_pages/ai-gateway.yaml index 4a129ce766c..22adb0825a9 100644 --- a/app/_landing_pages/ai-gateway.yaml +++ b/app/_landing_pages/ai-gateway.yaml @@ -68,6 +68,9 @@ rows: content: | To set up {{site.ai_gateway}} using the {{site.konnect_short_name}} UI, sign in to your Konnect account at [cloud.konghq.com](https://cloud.konghq.com/), then navigate to **{{site.ai_gateway}}** and click **New {{site.ai_gateway}}**. + - title: On-Prem + content: | + See [Install {{site.ai_gateway}} 2.x on-prem using Docker Compose](/ai-gateway/install/docker/) for full setup instructions. - columns: - blocks: - type: card diff --git a/app/ai-gateway/configure-on-prem.md b/app/ai-gateway/configure-on-prem.md index d9a00012c02..f0232849b9a 100644 --- a/app/ai-gateway/configure-on-prem.md +++ b/app/ai-gateway/configure-on-prem.md @@ -37,6 +37,10 @@ related_resources: url: /plugins/ai-a2a-proxy/ --- +{:.success} +> **Setting up a new {{site.ai_gateway}} 2.x on-prem?**
+> See [Install {{site.ai_gateway}} 2.x on-prem using Docker Compose](/ai-gateway/install/docker/) to get {{site.ai_gateway}} 2.x installed first, then use this guide to configure it. + The existing {{site.ai_gateway}} documentation follows the {{site.konnect_short_name}} model: AI Models, AI Model Providers, AI MCP Servers, AI Agents, and more, that you configure in {{site.konnect_short_name}}. See [{{site.ai_gateway}} entities](/ai-gateway/entities/) for the full list. Self-hosted {{site.base_gateway}} doesn't have these objects. This page shows you how to configure the same capabilities with AI plugins on [Services](/gateway/entities/service/) and [Routes](/gateway/entities/route/). There are two ways to bridge that gap: From 0c1e647ec8b23143436964e9cfd5396345e7d2e8 Mon Sep 17 00:00:00 2001 From: Diana <75819066+cloudjumpercat@users.noreply.github.com> Date: Wed, 21 Oct 2026 20:47:44 -0500 Subject: [PATCH 4/5] remove protocols note since it functions the same as routes default --- app/_how-tos/ai-gateway/docker-compose.md | 1 - 1 file changed, 1 deletion(-) diff --git a/app/_how-tos/ai-gateway/docker-compose.md b/app/_how-tos/ai-gateway/docker-compose.md index ada428ae3c6..58845e297b7 100644 --- a/app/_how-tos/ai-gateway/docker-compose.md +++ b/app/_how-tos/ai-gateway/docker-compose.md @@ -174,7 +174,6 @@ You can convert any `kongctl` {{site.ai_gateway}} 2.x configuration to decK by r * Drop each entity's `ref` field. * Drop each entity's `ai_gateway: !lookup {id: ...}` field. On-prem, there's only one {{site.ai_gateway}}, so entities don't need to reference one by ID. * Rename the top-level entity collections from their `kongctl` names (`ai_gateway_model_providers`, `ai_gateway_models`, and so on) to their decK names (`model_providers`, `models`). See [Configure {{site.ai_gateway}} on-prem](/ai-gateway/configure-on-prem/) for the full set of entity names decK expects. -* Add `protocols: [http, https]` under `config.route` on each AI Model. The {{site.ai_gateway}} entity schema defaults to both protocols, but that default isn't carried through by `deck ai sync`/`deck file ai2kong`'s conversion, so the generated Route ends up with {{site.base_gateway}}'s own https-only default instead. See [{{site.ai_gateway}} 2.x concepts](/ai-gateway/ai-gateway-v2-concepts/) for how the entity model maps to the underlying {{site.base_gateway}} primitives. From 0bc74977604eb62ed9ce59018ce2bedd1e67d90e Mon Sep 17 00:00:00 2001 From: Diana <75819066+cloudjumpercat@users.noreply.github.com> Date: Wed, 21 Oct 2026 21:22:41 -0500 Subject: [PATCH 5/5] Apply batched suggestions from code review Co-authored-by: kong-ksai[bot] <313415923+kong-ksai[bot]@users.noreply.github.com> --- .claude/skills/ai-gateway-migration-review/SKILL.md | 2 +- app/_landing_pages/ai-gateway.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.claude/skills/ai-gateway-migration-review/SKILL.md b/.claude/skills/ai-gateway-migration-review/SKILL.md index 1663635c1ef..cfd16042fa0 100644 --- a/.claude/skills/ai-gateway-migration-review/SKILL.md +++ b/.claude/skills/ai-gateway-migration-review/SKILL.md @@ -68,7 +68,7 @@ Prefer `kongctl` over `konnect-api` when both would work — it's what every rea Flag any deviation: - `products` containing anything other than `ai-gateway` -- `works_on` containing anything other than `konnect` and `on-prem`. `konnect` alone is correct for pages about authoring entities/Policies (there's no on-prem UI or API for that). `on-prem` should only be added alongside `konnect` for pages about running that same 2.x config on self-hosted Gateway (install guides, `configure-on-prem.md`-style conversion content) — flag `on-prem` with `konnect` missing, since on-prem AIGW 2.x still starts from a Konnect-authored entity file. +- `works_on` containing anything other than `konnect` and `on-prem`. `konnect` alone is correct for pages about authoring entities/Policies (there's no on-prem UI or API for that). Pages about running that config on self-hosted Gateway set `on-prem` alone (`docker-compose.md`, `configure-on-prem.md`); add `konnect` only when the page also covers the Konnect workflow. - `tools` containing `deck`, `admin-api`, or a mix of `kongctl` and `konnect-api` on the same page. Exception: on-prem-focused pages (`configure-on-prem.md`, `docker-compose.md`) legitimately use `deck` for the `ai2kong`/`ai sync`/`ai dump` conversion workflow — don't flag `deck` there. - Missing or wrong `min_version` (must be `ai-gateway: '2.0'`) diff --git a/app/_landing_pages/ai-gateway.yaml b/app/_landing_pages/ai-gateway.yaml index 22adb0825a9..837dabee759 100644 --- a/app/_landing_pages/ai-gateway.yaml +++ b/app/_landing_pages/ai-gateway.yaml @@ -70,7 +70,7 @@ rows: then navigate to **{{site.ai_gateway}}** and click **New {{site.ai_gateway}}**. - title: On-Prem content: | - See [Install {{site.ai_gateway}} 2.x on-prem using Docker Compose](/ai-gateway/install/docker/) for full setup instructions. + See [Install {{site.ai_gateway}} 2.x on-prem using Docker Compose](/ai-gateway/install/docker/). - columns: - blocks: - type: card