zuplo 7.8.23 → 7.8.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/docs/ai-gateway/azure-ai.mdx +6 -6
  2. package/docs/ai-gateway/bedrock-mantle.mdx +4 -4
  3. package/docs/ai-gateway/bedrock-runtime.mdx +9 -9
  4. package/docs/ai-gateway/integrations/ai-sdk.mdx +2 -2
  5. package/docs/ai-gateway/integrations/claude-code.mdx +3 -3
  6. package/docs/ai-gateway/integrations/claude-desktop.mdx +2 -2
  7. package/docs/ai-gateway/integrations/codex.mdx +4 -4
  8. package/docs/ai-gateway/integrations/github-copilot.mdx +4 -4
  9. package/docs/ai-gateway/integrations/goose.mdx +3 -3
  10. package/docs/ai-gateway/integrations/langchain.mdx +3 -3
  11. package/docs/ai-gateway/integrations/openai.mdx +3 -3
  12. package/docs/ai-gateway/universal-api.mdx +3 -3
  13. package/docs/ai-gateway/usage-limits.mdx +1 -1
  14. package/docs/ai-gateway/vertex-ai.mdx +1 -1
  15. package/docs/dedicated/akamai/ai-powered-applications.mdx +3 -3
  16. package/docs/policies/_index.md +11 -10
  17. package/docs/policies/{akamai-ai-firewall-v2-inbound → ai-gateway-akamai-firewall-inbound}/doc.md +2 -2
  18. package/docs/policies/{akamai-ai-firewall-v2-inbound → ai-gateway-akamai-firewall-inbound}/schema.json +5 -6
  19. package/docs/policies/{ai-gateway-auth-v2-inbound → ai-gateway-auth-inbound}/doc.md +4 -4
  20. package/docs/policies/{ai-gateway-auth-v2-inbound → ai-gateway-auth-inbound}/schema.json +5 -6
  21. package/docs/policies/{ai-gateway-configuration-executor-v2-inbound → ai-gateway-configuration-executor-inbound}/doc.md +16 -16
  22. package/docs/policies/{ai-gateway-configuration-executor-v2-inbound → ai-gateway-configuration-executor-inbound}/schema.json +5 -6
  23. package/docs/policies/{ai-gateway-configuration-loader-v2-inbound → ai-gateway-configuration-loader-inbound}/doc.md +4 -4
  24. package/docs/policies/{ai-gateway-configuration-loader-v2-inbound → ai-gateway-configuration-loader-inbound}/schema.json +5 -6
  25. package/docs/policies/ai-gateway-dlp-inbound/schema.json +0 -1
  26. package/docs/policies/{ai-gateway-fallback-model-v2-inbound → ai-gateway-fallback-model-inbound}/doc.md +2 -2
  27. package/docs/policies/{ai-gateway-fallback-model-v2-inbound → ai-gateway-fallback-model-inbound}/schema.json +5 -6
  28. package/docs/policies/{galileo-tracing-v2-inbound → ai-gateway-galileo-tracing-inbound}/doc.md +2 -2
  29. package/docs/policies/{galileo-tracing-v2-inbound → ai-gateway-galileo-tracing-inbound}/schema.json +5 -6
  30. package/docs/policies/ai-gateway-internal-only-inbound/schema.json +0 -1
  31. package/docs/policies/{ai-gateway-metering-v2-inbound → ai-gateway-metering-inbound}/schema.json +5 -6
  32. package/docs/policies/{ai-gateway-model-filtering-v2-inbound → ai-gateway-model-filtering-inbound}/doc.md +6 -4
  33. package/docs/policies/{ai-gateway-model-filtering-v2-inbound → ai-gateway-model-filtering-inbound}/schema.json +5 -6
  34. package/docs/policies/ai-gateway-model-override-inbound/doc.md +154 -0
  35. package/docs/policies/ai-gateway-model-override-inbound/intro.md +5 -0
  36. package/docs/policies/ai-gateway-model-override-inbound/schema.json +126 -0
  37. package/docs/policies/{comet-opik-tracing-v2-inbound → ai-gateway-opik-tracing-inbound}/doc.md +2 -2
  38. package/docs/policies/{comet-opik-tracing-v2-inbound → ai-gateway-opik-tracing-inbound}/schema.json +5 -6
  39. package/docs/policies/{ai-gateway-semantic-cache-v2-inbound → ai-gateway-semantic-cache-inbound}/schema.json +4 -5
  40. package/docs/policies/ai-gateway-smart-router-inbound/doc.md +2 -2
  41. package/docs/policies/ai-gateway-smart-router-inbound/schema.json +0 -1
  42. package/package.json +5 -5
  43. /package/docs/policies/{akamai-ai-firewall-v2-inbound → ai-gateway-akamai-firewall-inbound}/intro.md +0 -0
  44. /package/docs/policies/{ai-gateway-auth-v2-inbound → ai-gateway-auth-inbound}/intro.md +0 -0
  45. /package/docs/policies/{ai-gateway-configuration-executor-v2-inbound → ai-gateway-configuration-executor-inbound}/intro.md +0 -0
  46. /package/docs/policies/{ai-gateway-configuration-loader-v2-inbound → ai-gateway-configuration-loader-inbound}/intro.md +0 -0
  47. /package/docs/policies/{ai-gateway-fallback-model-v2-inbound → ai-gateway-fallback-model-inbound}/intro.md +0 -0
  48. /package/docs/policies/{galileo-tracing-v2-inbound → ai-gateway-galileo-tracing-inbound}/intro.md +0 -0
  49. /package/docs/policies/{ai-gateway-metering-v2-inbound → ai-gateway-metering-inbound}/doc.md +0 -0
  50. /package/docs/policies/{ai-gateway-metering-v2-inbound → ai-gateway-metering-inbound}/intro.md +0 -0
  51. /package/docs/policies/{ai-gateway-model-filtering-v2-inbound → ai-gateway-model-filtering-inbound}/intro.md +0 -0
  52. /package/docs/policies/{comet-opik-tracing-v2-inbound → ai-gateway-opik-tracing-inbound}/intro.md +0 -0
  53. /package/docs/policies/{ai-gateway-semantic-cache-v2-inbound → ai-gateway-semantic-cache-inbound}/doc.md +0 -0
  54. /package/docs/policies/{ai-gateway-semantic-cache-v2-inbound → ai-gateway-semantic-cache-inbound}/intro.md +0 -0
@@ -143,7 +143,7 @@ Two things they need. Send **`store: true`** on the create, since your resource
143
143
  serves them only for a response it kept. And because these requests carry no
144
144
  body, there is no `model` in them for the gateway to route on—it uses the app's
145
145
  first configured completions model instead, so the app needs a
146
- [Model Filtering](../policies/ai-gateway-model-filtering-v2-inbound.mdx) policy
146
+ [Model Filtering](../policies/ai-gateway-model-filtering-inbound.mdx) policy
147
147
  whose completions allow list **starts with an OpenAI-compatible Azure
148
148
  deployment**. Without one the gateway answers `400`, asking for preselected
149
149
  routing, before reaching Azure.
@@ -556,10 +556,10 @@ Azure's Responses API model list—an embedding deployment always fails this way
556
556
  response, or listed its input items. Those requests carry no body, so there is
557
557
  no `model` for the gateway to route on and it falls back to the app's first
558
558
  configured completions model. Add a
559
- [Model Filtering](../policies/ai-gateway-model-filtering-v2-inbound.mdx) policy
560
- to the app with an **OpenAI-compatible** Azure deployment first in its
561
- completions allow list. A Claude deployment in that slot still fails, since
562
- Claude doesn't serve Responses.
559
+ [Model Filtering](../policies/ai-gateway-model-filtering-inbound.mdx) policy to
560
+ the app with an **OpenAI-compatible** Azure deployment first in its completions
561
+ allow list. A Claude deployment in that slot still fails, since Claude doesn't
562
+ serve Responses.
563
563
 
564
564
  **A model in the picker fails at request time.** The picker lists the full Azure
565
565
  catalog, but a model only works once you deploy it in your resource, and model
@@ -594,5 +594,5 @@ Pass `baseURL` set to your app's URL plus `/v1`—see
594
594
  endpoint, and understand when changes deploy.
595
595
  - [AI Gateway Apps](./apps.mdx)—create the apps that call your Azure-backed
596
596
  models.
597
- - [Model Filtering policy](../policies/ai-gateway-model-filtering-v2-inbound.mdx)—control
597
+ - [Model Filtering policy](../policies/ai-gateway-model-filtering-inbound.mdx)—control
598
598
  which models each app can call.
@@ -253,9 +253,9 @@ Two Mantle-specific notes on them:
253
253
  - The management operations carry no request body, so the gateway can't read a
254
254
  model from the request. They work on apps whose
255
255
  [policy chain](./policy-chains.mdx) includes a
256
- [Model Filtering](../policies/ai-gateway-model-filtering-v2-inbound.mdx)
257
- policy with an allow list (the gateway routes them with the first listed
258
- model); without one they fail with a `400` error.
256
+ [Model Filtering](../policies/ai-gateway-model-filtering-inbound.mdx) policy
257
+ with an allow list (the gateway routes them with the first listed model);
258
+ without one they fail with a `400` error.
259
259
  - Whether `DELETE` succeeds is a permission of your Bedrock API key (the
260
260
  `bedrock-mantle:DeleteInference` action in AWS IAM—see
261
261
  [AWS's Bedrock Mantle documentation](https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-mantle.html)).
@@ -343,5 +343,5 @@ Use another provider for embeddings.
343
343
  region, and understand when changes deploy.
344
344
  - [AI Gateway Apps](./apps.mdx)—create the apps that call your Mantle-backed
345
345
  models.
346
- - [Model Filtering policy](../policies/ai-gateway-model-filtering-v2-inbound.mdx)—control
346
+ - [Model Filtering policy](../policies/ai-gateway-model-filtering-inbound.mdx)—control
347
347
  which models each app can call.
@@ -254,14 +254,14 @@ gateway parses, so a policy that reads the body applies its `onUnknownShape`
254
254
  setting instead. Each policy's default follows from its job: a guardrail fails
255
255
  closed, while an observer or an optimization fails open.
256
256
 
257
- | Policy | On Bedrock Runtime routes |
258
- | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
259
- | [Authentication](../policies/ai-gateway-auth-v2-inbound.mdx) | Works. Reads the app key from `Authorization: Bearer` |
260
- | [Model Filtering](../policies/ai-gateway-model-filtering-v2-inbound.mdx) | Works. Refuses a model outside the allow list before any AWS call |
261
- | [Metering and budgets](../policies/ai-gateway-metering-v2-inbound.mdx) | Works. Meters tokens and cost on all four operations, streamed or not |
262
- | [DLP](../policies/ai-gateway-dlp-inbound.mdx) and content guardrails | **Blocks by default.** The gateway can't read these bodies, so the policy denies the request. Set `onUnknownShape` to `skip` to forward it uninspected |
263
- | [Galileo](../policies/galileo-tracing-v2-inbound.mdx) and [Comet Opik](../policies/comet-opik-tracing-v2-inbound.mdx) tracing | **Skipped by default.** The request goes through untraced. Set `onUnknownShape` to `deny` to make a trace a hard requirement |
264
- | Semantic Cache | Skipped |
257
+ | Policy | On Bedrock Runtime routes |
258
+ | --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
259
+ | [Authentication](../policies/ai-gateway-auth-inbound.mdx) | Works. Reads the app key from `Authorization: Bearer` |
260
+ | [Model Filtering](../policies/ai-gateway-model-filtering-inbound.mdx) | Works. Refuses a model outside the allow list before any AWS call |
261
+ | [Metering and budgets](../policies/ai-gateway-metering-inbound.mdx) | Works. Meters tokens and cost on all four operations, streamed or not |
262
+ | [DLP](../policies/ai-gateway-dlp-inbound.mdx) and content guardrails | **Blocks by default.** The gateway can't read these bodies, so the policy denies the request. Set `onUnknownShape` to `skip` to forward it uninspected |
263
+ | [Galileo](../policies/ai-gateway-galileo-tracing-inbound.mdx) and [Comet Opik](../policies/ai-gateway-opik-tracing-inbound.mdx) tracing | **Skipped by default.** The request goes through untraced. Set `onUnknownShape` to `deny` to make a trace a hard requirement |
264
+ | Semantic Cache | Skipped |
265
265
 
266
266
  The table lists every policy the gateway supports on these routes. It audits the
267
267
  chain and refuses any other policy, such as a custom policy, Smart Router, or
@@ -325,5 +325,5 @@ native paths.
325
325
  - [Managing Providers](./managing-providers.mdx)—edit models, keys, and the
326
326
  region, and understand when changes deploy.
327
327
  - [AI Gateway Apps](./apps.mdx)—create the apps that call your models.
328
- - [Model Filtering policy](../policies/ai-gateway-model-filtering-v2-inbound.mdx)—control
328
+ - [Model Filtering policy](../policies/ai-gateway-model-filtering-inbound.mdx)—control
329
329
  which models each app can call.
@@ -45,8 +45,8 @@ Models are referenced as `providerName/model`, where `providerName` is the
45
45
  provider name configured in your gateway. By default an app can reach any model
46
46
  offered by the providers configured for the Zuplo project. To limit it to a
47
47
  curated set, add the
48
- [Model Filtering](../../policies/ai-gateway-model-filtering-v2-inbound.mdx)
49
- policy to the app—it applies separate rules to completions (`generateText`,
48
+ [Model Filtering](../../policies/ai-gateway-model-filtering-inbound.mdx) policy
49
+ to the app—it applies separate rules to completions (`generateText`,
50
50
  `streamText`) and embeddings (`embed`), and rejects a capability it doesn't
51
51
  configure.
52
52
 
@@ -59,7 +59,7 @@ project. Add the block for your approach, then restart Claude Code.
59
59
  [`modelOverrides`](https://code.claude.com/docs/en/model-config#override-model-ids-per-version)
60
60
  maps exact IDs; the `/model` picker can select either.
61
61
  - The app's
62
- [Model Filtering](../../policies/ai-gateway-model-filtering-v2-inbound.mdx)
62
+ [Model Filtering](../../policies/ai-gateway-model-filtering-inbound.mdx)
63
63
  policy controls which models the app can use.
64
64
 
65
65
  ## Use a provider key
@@ -133,8 +133,8 @@ In the **JSON** editor:
133
133
 
134
134
  - The provider still needs an API key to save. Passthrough requests never use
135
135
  it. Apps without passthrough and every
136
- [Fallback Model](../../policies/ai-gateway-fallback-model-v2-inbound.mdx)
137
- target do. If nothing uses it, a placeholder value works.
136
+ [Fallback Model](../../policies/ai-gateway-fallback-model-inbound.mdx) target
137
+ do. If nothing uses it, a placeholder value works.
138
138
  - The Portal playground sends the app key as `Authorization: Bearer`, so it
139
139
  can't call a passthrough app. Test from Claude Code.
140
140
  - Do not set `ANTHROPIC_AUTH_TOKEN` or `ANTHROPIC_API_KEY`, in the settings file
@@ -93,8 +93,8 @@ The first entry is the picker default. Include a Haiku-tier model: Claude
93
93
  Desktop runs background and sub-agent tasks on a small, fast model.
94
94
 
95
95
  The app's
96
- [Model Filtering](../../policies/ai-gateway-model-filtering-v2-inbound.mdx)
97
- policy controls which models the app can use.
96
+ [Model Filtering](../../policies/ai-gateway-model-filtering-inbound.mdx) policy
97
+ controls which models the app can use.
98
98
 
99
99
  ## Verify
100
100
 
@@ -108,8 +108,8 @@ On the team's [policy template](../policy-templates.mdx), or on the app's
108
108
  `401 Invalid Authorization Scheme`.
109
109
 
110
110
  The provider still needs an API key saved. Passthrough requests never use it;
111
- [Fallback Model](../../policies/ai-gateway-fallback-model-v2-inbound.mdx)
112
- targets do. A placeholder value works if nothing else uses it.
111
+ [Fallback Model](../../policies/ai-gateway-fallback-model-inbound.mdx) targets
112
+ do. A placeholder value works if nothing else uses it.
113
113
 
114
114
  ### Rules
115
115
 
@@ -138,8 +138,8 @@ Codex warns that it has no metadata for a prefixed model name. Requests still
138
138
  succeed.
139
139
 
140
140
  The app's
141
- [Model Filtering](../../policies/ai-gateway-model-filtering-v2-inbound.mdx)
142
- policy controls which models the app can use.
141
+ [Model Filtering](../../policies/ai-gateway-model-filtering-inbound.mdx) policy
142
+ controls which models the app can use.
143
143
 
144
144
  ## Verify
145
145
 
@@ -132,8 +132,8 @@ Three lines carry the integration:
132
132
  key, use **Chat: Manage Language Models**.
133
133
  - **`requestHeaders`** sends the key as `Authorization: Bearer <key>`, the
134
134
  header the gateway's
135
- [Authentication policy](../../policies/ai-gateway-auth-v2-inbound.mdx) reads.
136
- VS Code's default header depends on the API type, so set it on every model.
135
+ [Authentication policy](../../policies/ai-gateway-auth-inbound.mdx) reads. VS
136
+ Code's default header depends on the API type, so set it on every model.
137
137
  - **`apiType`** and the `url` path select the API the model speaks: `responses`
138
138
  for OpenAI's reasoning models such as GPT-5.x, `messages` for Claude through
139
139
  the gateway's native Messages passthrough, and `chat-completions` with a
@@ -146,8 +146,8 @@ Save the file and pick a model from the chat model picker.
146
146
 
147
147
  Chat and agent requests, on both surfaces. Copilot's inline code completions
148
148
  stay on GitHub's infrastructure. The app's
149
- [Model Filtering](../../policies/ai-gateway-model-filtering-v2-inbound.mdx)
150
- policy decides which models Copilot may use.
149
+ [Model Filtering](../../policies/ai-gateway-model-filtering-inbound.mdx) policy
150
+ decides which models Copilot may use.
151
151
 
152
152
  ## Troubleshooting
153
153
 
@@ -66,9 +66,9 @@ configuration approaches depending on which version you choose.
66
66
  :::note
67
67
 
68
68
  The app's
69
- [Model Filtering](../../policies/ai-gateway-model-filtering-v2-inbound.mdx)
70
- policy controls which models the app may use, so the model you enter here must
71
- be one that policy allows.
69
+ [Model Filtering](../../policies/ai-gateway-model-filtering-inbound.mdx) policy
70
+ controls which models the app may use, so the model you enter here must be one
71
+ that policy allows.
72
72
 
73
73
  :::
74
74
 
@@ -77,6 +77,6 @@ Always name the model as `providerName/model`, where `providerName` is the
77
77
  provider name configured in your gateway. The gateway needs the prefix to know
78
78
  which provider to route to, and a request with no model, or a model without that
79
79
  prefix, gets a `400`. Adding the
80
- [Model Filtering](../../policies/ai-gateway-model-filtering-v2-inbound.mdx)
81
- policy restricts an app to certain models, and an allow list also supplies a
82
- default so requests may omit the model.
80
+ [Model Filtering](../../policies/ai-gateway-model-filtering-inbound.mdx) policy
81
+ restricts an app to certain models, and an allow list also supplies a default so
82
+ requests may omit the model.
@@ -45,9 +45,9 @@ Always name the model as `providerName/model`, where `providerName` is the
45
45
  provider name configured in your gateway. The gateway needs the prefix to know
46
46
  which provider to route to, and a request with no model, or a model without that
47
47
  prefix, gets a `400`. Adding the
48
- [Model Filtering](../../policies/ai-gateway-model-filtering-v2-inbound.mdx)
49
- policy restricts an app to certain models, and an allow list also supplies a
50
- default so requests may omit the model.
48
+ [Model Filtering](../../policies/ai-gateway-model-filtering-inbound.mdx) policy
49
+ restricts an app to certain models, and an allow list also supplies a default so
50
+ requests may omit the model.
51
51
 
52
52
  ```typescript
53
53
  import OpenAI from "openai";
@@ -55,9 +55,9 @@ console.log(response.choices[0].message.content);
55
55
  :::tip
56
56
 
57
57
  If the app's
58
- [Model Filtering](../policies/ai-gateway-model-filtering-v2-inbound.mdx) policy
59
- has an allow list, a request that omits `model` uses the first model in the
60
- list—so clients that can't set a model still work.
58
+ [Model Filtering](../policies/ai-gateway-model-filtering-inbound.mdx) policy has
59
+ an allow list, a request that omits `model` uses the first model in the list—so
60
+ clients that can't set a model still work.
61
61
 
62
62
  :::
63
63
 
@@ -185,7 +185,7 @@ it during that period still counts. Expressions are also case-sensitive:
185
185
 
186
186
  To configure budgets in JSON, use the `budgetRules` option in **Budgets and
187
187
  Costs**. For the available options, see the
188
- [Budgets and Costs policy reference](../policies/ai-gateway-metering-v2-inbound.mdx).
188
+ [Budgets and Costs policy reference](../policies/ai-gateway-metering-inbound.mdx).
189
189
 
190
190
  This rule set budgets each user, each organization, and the app as a whole:
191
191
 
@@ -516,5 +516,5 @@ on `/v1/chat/completions`—see [Call the models](#call-the-models).
516
516
  location, and the project, and understand when changes deploy.
517
517
  - [AI Gateway Apps](./apps.mdx)—create the apps that call your Vertex-backed
518
518
  models.
519
- - [Model Filtering policy](../policies/ai-gateway-model-filtering-v2-inbound.mdx)—control
519
+ - [Model Filtering policy](../policies/ai-gateway-model-filtering-inbound.mdx)—control
520
520
  which models each app can call.
@@ -146,7 +146,7 @@ For more information, see the
146
146
 
147
147
  ## AI Firewall Protection
148
148
 
149
- The [Akamai AI Firewall](../../policies/akamai-ai-firewall-v2-inbound.mdx)
149
+ The [Akamai AI Firewall](../../policies/ai-gateway-akamai-firewall-inbound.mdx)
150
150
  provides enterprise-grade security for AI interactions:
151
151
 
152
152
  - **Prompt injection defense** - Detects and blocks attempts to manipulate the
@@ -220,7 +220,7 @@ Deployment options include:
220
220
  Akamai Connected Cloud
221
221
  - [MCP Server Handler](../../handlers/mcp-server.mdx) - Technical documentation
222
222
  for MCP server configuration
223
- - [Akamai AI Firewall](../../policies/akamai-ai-firewall-v2-inbound.mdx) - AI
224
- security policy configuration
223
+ - [Akamai AI Firewall](../../policies/ai-gateway-akamai-firewall-inbound.mdx) -
224
+ AI security policy configuration
225
225
  - [Zuplo AI Gateway](../../ai-gateway/overview.mdx) - Overview of AI Gateway
226
226
  capabilities
@@ -4,14 +4,15 @@
4
4
  | --- | --- | --- | --- |
5
5
  | set-query-params-inbound | Add or Set Query Parameters | Adds or sets query parameters on the incoming request. | api-gateway |
6
6
  | set-headers-inbound | Add or Set Request Headers | Adds or sets headers on the incoming request. | api-gateway |
7
- | ai-gateway-auth-v2-inbound | AI Gateway Authentication | Authenticates requests to an AI Gateway endpoint with application API keys. Add this policy to an application's `inboundPolicyChain` to require a key for that app only, or place it on the route before the configuration executor to require a key for every application on the route. The policies that follow can read the authenticated application from `request.user` (`sub` is the application name, `data` its metadata), and the application's AI Gateway configuration takes effect for the request. Use `authHeader` and `authScheme` when clients send their app key somewhere other than the default `Authorization: Bearer` header. Enable `credentialPassthrough`, with the application key in a separate header, to forward the caller's `Authorization` header to the primary provider as its credential. When the matched route captures an `app_id` path parameter (platform catch-all `/:app_id/(.*)`), this policy also requires the stored configuration ID to match the URL (adding `config_` for `/a`). It returns 403 on mismatch. On a User App route (`/u/{app_id}`), only a personal API key issued for that User App authenticates. `request.user.sub` is then the key owner's user ID. An application API key on a User App route, or a personal API key on any other route, returns 403. Validation results are cached for `cacheTtlSeconds`, so a revoked key stops working within that window. | ai-gateway |
8
- | ai-gateway-configuration-executor-v2-inbound | AI Gateway Configuration Executor | Loads the app configuration for the request (when auth or the configuration loader has not already), runs the inbound policy chain from that configuration, and enforces limits inherited from parent teams or the gateway root. Place this policy on AI Gateway routes after optional authentication and optional `ai-gateway-configuration-loader-v2-inbound`. When either of those already populated the app-configuration channel, this policy reuses it. Otherwise it loads the configuration with the route's `app_id` path parameter. Applications select from policies pre-declared by the gateway. Applications without a `inboundPolicyChain`, or with an empty chain, run no application-selected policies. Entry options replace the declaration's options as a complete object; omit them to inherit the declaration, including environment-backed credentials. Each occurrence receives a private deep copy of its entry options, so a policy mutating its options cannot corrupt the cached app configuration. | ai-gateway |
9
- | ai-gateway-configuration-loader-v2-inbound | AI Gateway Configuration Loader | Loads the AI Gateway app configuration for the request into the request-scoped channel and does nothing else. Place this policy on AI Gateway routes before `ai-gateway-configuration-executor-v2-inbound` when you want configuration loading separated from chain execution. When `ai-gateway-auth-v2-inbound` already populated the channel, this policy reuses it. Otherwise it loads the configuration with the route's `app_id` path parameter. If this policy is omitted, the configuration executor still loads configuration itself before running the application chain. | ai-gateway |
10
- | ai-gateway-fallback-model-v2-inbound | AI Gateway Fallback Model | Adds failure and quota fallbacks to an existing AI Gateway model selection. Place this policy after AI Gateway Model Filtering. It never creates a model selection, so a misplaced policy cannot bypass filtering. | ai-gateway |
11
- | ai-gateway-metering-v2-inbound | AI Gateway Metering | Meters AI Gateway usage and enforces limits configured by the application. The authentication policy must run before this policy so the app configuration id is available for meter storage and analytics. | ai-gateway |
12
- | ai-gateway-model-filtering-v2-inbound | AI Gateway Model Filtering | Matches AI Gateway requests against curated allow lists or open block lists, then stores the winning model reference for the route handler. | ai-gateway |
13
- | ai-gateway-semantic-cache-v2-inbound | AI Gateway Semantic Cache | AI Gateway Semantic Cache policy. This inbound policy looks up the semantic cache on entry and, on a miss, registers a response-sending hook to write the upstream response back into the cache. Caching parameters (semanticTolerance, expirationSecondsTtl, namespace, recentMessageCount) come from the policy options, and presence in the route's chain is what enables it. An id from the authenticated app configuration always provides the cache namespace so application-supplied options cannot cross tenant partitions. The cache key covers the system prompt plus the last `recentMessageCount` messages (default 1) — applied when storing and when matching — so multi-turn conversations can hit entries cached from earlier, shorter ones. Cache outcomes are reported on the response via the RFC 9211 `Cache-Status` header under the cache name `zp-aigw-sem-cache` (hit: `zp-aigw-sem-cache; hit; detail="similarity=0.93"`; miss: `zp-aigw-sem-cache; fwd=miss; stored`). Responses also include the `x-ai-gateway-cache: HIT\|MISS` and `x-ai-gateway-cache-similarity` headers. | ai-gateway |
14
- | akamai-ai-firewall-v2-inbound | Akamai AI Firewall | Akamai AI Firewall Inbound Policy | ai-gateway |
7
+ | ai-gateway-auth-inbound | AI Gateway Authentication | Authenticates requests to an AI Gateway endpoint with application API keys. Add this policy to an application's `inboundPolicyChain` to require a key for that app only, or place it on the route before the configuration executor to require a key for every application on the route. The policies that follow can read the authenticated application from `request.user` (`sub` is the application name, `data` its metadata), and the application's AI Gateway configuration takes effect for the request. Use `authHeader` and `authScheme` when clients send their app key somewhere other than the default `Authorization: Bearer` header. Enable `credentialPassthrough`, with the application key in a separate header, to forward the caller's `Authorization` header to the primary provider as its credential. When the matched route captures an `app_id` path parameter (platform catch-all `/:app_id/(.*)`), this policy also requires the stored configuration ID to match the URL (adding `config_` for `/a`). It returns 403 on mismatch. On a User App route (`/u/{app_id}`), only a personal API key issued for that User App authenticates. `request.user.sub` is then the key owner's user ID. An application API key on a User App route, or a personal API key on any other route, returns 403. Validation results are cached for `cacheTtlSeconds`, so a revoked key stops working within that window. | ai-gateway |
8
+ | ai-gateway-configuration-executor-inbound | AI Gateway Configuration Executor | Loads the app configuration for the request (when auth or the configuration loader has not already), runs the inbound policy chain from that configuration, and enforces limits inherited from parent teams or the gateway root. Place this policy on AI Gateway routes after optional authentication and optional `ai-gateway-configuration-loader-v2-inbound`. When either of those already populated the app-configuration channel, this policy reuses it. Otherwise it loads the configuration with the route's `app_id` path parameter. Applications select from policies pre-declared by the gateway. Applications without a `inboundPolicyChain`, or with an empty chain, run no application-selected policies. Entry options replace the declaration's options as a complete object; omit them to inherit the declaration, including environment-backed credentials. Each occurrence receives a private deep copy of its entry options, so a policy mutating its options cannot corrupt the cached app configuration. | ai-gateway |
9
+ | ai-gateway-configuration-loader-inbound | AI Gateway Configuration Loader | Loads the AI Gateway app configuration for the request into the request-scoped channel and does nothing else. Place this policy on AI Gateway routes before `ai-gateway-configuration-executor-v2-inbound` when you want configuration loading separated from chain execution. When `ai-gateway-auth-v2-inbound` already populated the channel, this policy reuses it. Otherwise it loads the configuration with the route's `app_id` path parameter. If this policy is omitted, the configuration executor still loads configuration itself before running the application chain. | ai-gateway |
10
+ | ai-gateway-fallback-model-inbound | AI Gateway Fallback Model | Adds failure and quota fallbacks to an existing AI Gateway model selection. Place this policy after AI Gateway Model Filtering. It never creates a model selection, so a misplaced policy cannot bypass filtering. | ai-gateway |
11
+ | ai-gateway-metering-inbound | AI Gateway Metering | Meters AI Gateway usage and enforces limits configured by the application. The authentication policy must run before this policy so the app configuration id is available for meter storage and analytics. | ai-gateway |
12
+ | ai-gateway-model-filtering-inbound | AI Gateway Model Filtering | Matches AI Gateway requests against curated allow lists or open block lists, then stores the winning model reference for the route handler. | ai-gateway |
13
+ | ai-gateway-model-override-inbound | AI Gateway Model Override | Forces one model for every request, or supplies a default model when a request omits one, then stores that selection for the AI Gateway handler. An earlier policy's model selection is never overwritten, so a custom routing policy placed before this one stays authoritative. | ai-gateway |
14
+ | ai-gateway-semantic-cache-inbound | AI Gateway Semantic Cache | AI Gateway Semantic Cache policy. This inbound policy looks up the semantic cache on entry and, on a miss, registers a response-sending hook to write the upstream response back into the cache. Caching parameters (semanticTolerance, expirationSecondsTtl, namespace, recentMessageCount) come from the policy options, and presence in the route's chain is what enables it. An id from the authenticated app configuration always provides the cache namespace so application-supplied options cannot cross tenant partitions. The cache key covers the system prompt plus the last `recentMessageCount` messages (default 1) — applied when storing and when matching — so multi-turn conversations can hit entries cached from earlier, shorter ones. Cache outcomes are reported on the response via the RFC 9211 `Cache-Status` header under the cache name `zp-aigw-sem-cache` (hit: `zp-aigw-sem-cache; hit; detail="similarity=0.93"`; miss: `zp-aigw-sem-cache; fwd=miss; stored`). Responses also include the `x-ai-gateway-cache: HIT\|MISS` and `x-ai-gateway-cache-similarity` headers. | ai-gateway |
15
+ | ai-gateway-akamai-firewall-inbound | Akamai AI Firewall | Akamai AI Firewall Inbound Policy | ai-gateway |
15
16
  | akamai-firewall-for-ai-outbound | Akamai Firewall for AI | Inspects each upstream response with Akamai's Firewall for AI detect API and replaces the response with a `403 Forbidden` if Akamai returns a `deny` rule. Useful behind AI-powered APIs to filter unsafe completions, sensitive data exposure, and toxic content before they reach the client. The body, headers, URL, and query string sent to Akamai are configurable; by default only the response body is captured. Bodies are read from a clone so the client still receives the original. | api-gateway |
16
17
  | akamai-firewall-for-ai-inbound | Akamai Firewall for AI | Inspects each incoming request with Akamai's Firewall for AI detect API and blocks the request if Akamai returns a `deny` rule. Useful in front of AI-powered APIs to filter prompt injection, jailbreaks, and other unsafe inputs before they reach the model. The body, headers, URL, and query string sent to Akamai are configurable; by default only the request body is captured. Bodies are read from a clone so the upstream handler still sees the original. | api-gateway |
17
18
  | amberflo-metering-inbound | Amberflo Metering / Billing | Amberflo is a usage metering and billing service. This policy allows you to send metering calls for each API to their meter ingest endpoint. | api-gateway |
@@ -30,7 +31,7 @@
30
31
  | clear-headers-inbound | Clear Request Headers | Removes all headers from the incoming request except for those in the exclude list. | api-gateway |
31
32
  | clear-headers-outbound | Clear Response Headers | Removes all headers from the response except for those in the exclude list. | api-gateway |
32
33
  | clerk-jwt-auth-inbound | Clerk JWT Auth | Authenticate users using Clerk issued JWT tokens. | api-gateway |
33
- | comet-opik-tracing-v2-inbound | Comet Opik Tracing | Comet Opik Tracing Inbound Policy | ai-gateway |
34
+ | ai-gateway-opik-tracing-inbound | Comet Opik Tracing | Comet Opik Tracing Inbound Policy | ai-gateway |
34
35
  | complex-rate-limit-inbound | Complex Rate Limiting | The Complex Rate Limiting policy is an advanced rate limiting policy that let's you set rate limits based on custom counters (not just requests) | api-gateway |
35
36
  | composite-inbound | Composite Inbound (Group Policies) | Creates a composite, or group policy - composed of other inbound policies. For reuse across routes. | api-gateway |
36
37
  | composite-outbound | Composite Outbound (Group Policies) | Creates a composite, or group policy - composed of other outbound policies. For reuse across routes. | api-gateway |
@@ -43,7 +44,7 @@
43
44
  | ai-gateway-internal-only-inbound | Ensure Gateway Internal Invocation Only | Accepts only requests that this gateway made itself with `context.invokeRoute`, and rejects every request that arrived over the network with `403 Forbidden`. Use it in place of AI Gateway Authentication on an application that is only ever called by other routes and policies on the same gateway, such as the classifier application behind the Smart Router or Prompt Injection Protection policies. Those calls never leave the gateway, so an API key on them protects nothing. This policy asserts the one thing that matters: the request originated inside the deployment. The check reads `context.parentContext`, which the runtime sets only on the child context that `context.invokeRoute` creates. A client cannot supply it through a header, the URL, or the body. The policy has no options, makes no network calls, reads no body, and leaves `request.user` unset. | ai-gateway |
44
45
  | firebase-jwt-inbound | Firebase JWT Auth | Authenticate users using Firebase issued JWT tokens. | api-gateway |
45
46
  | formdata-to-json-inbound | Form Data to JSON | Converts form data in the incoming request to JSON. | api-gateway |
46
- | galileo-tracing-v2-inbound | Galileo Tracing | Galileo Tracing Inbound Policy | ai-gateway |
47
+ | ai-gateway-galileo-tracing-inbound | Galileo Tracing | Galileo Tracing Inbound Policy | ai-gateway |
47
48
  | geo-filter-inbound | Geo-location filtering | Block requests based on geo-location parameters: country, region code, and ASN | api-gateway |
48
49
  | graphql-analytics-outbound | GraphQL Analytics | Reports GraphQL errors returned in response bodies to Zuplo's GraphQL analytics. GraphQL servers following the standard Apollo / graphql-yoga pattern return `200 OK` with an `errors[]` array in the body when an operation fails, which HTTP-level analytics alone report as a success — add this policy to a GraphQL route and failed operations show up as failures on the GraphQL dashboard, classified by error type. Each error in `errors[]` is classified from its `extensions.code` following the Apollo Server conventions (`GRAPHQL_PARSE_FAILED` → `syntax`, `GRAPHQL_VALIDATION_FAILED` → `validation`, `UNAUTHENTICATED` / `FORBIDDEN` → `auth`, timeout codes → `timeout`); custom codes can be mapped with `errorCodeClassification`, and anything unrecognized falls back to `defaultErrorClass` (`resolver`). Optionally set `logErrors` to also write a structured warning per errored response. The policy reads up to `maxScanBytes` of the body (128 KiB by default, 5 MiB maximum), scanning it for the `errors` token; a response larger than that is treated as error-free. When the token is found and the body fits, it is parsed and its errors reported. The response always passes through unchanged — the body is read from a clone, and any internal failure is swallowed so reporting can never break the request. The route must be marked `x-graphql: true` in `routes.oas.json` (which enables GraphQL analytics for the route); without the marker the policy logs a warning and does nothing. | api-gateway |
49
50
  | graphql-cache-inbound | GraphQL Cache | Caches GraphQL query responses at the edge so identical queries are served without a round-trip to the origin. Unlike CDN caching that keys on the raw request body, this policy parses the GraphQL document and normalizes it before hashing: insignificant whitespace, field formatting, and fragment layout are collapsed, and variable object keys are sorted. Two requests that are semantically identical therefore share a cache entry even when their bodies differ byte-for-byte. There is no query size or nesting-depth limit. Only `query` operations are cached. Mutations, subscriptions, malformed documents, and non-JSON bodies are forwarded to the origin untouched. Cache hits and misses are reported on the `x-cache` response header, with a short key fingerprint on `x-cache-key`. To avoid serving one user's data to another, requests carrying an `authorization` or `cookie` header are not cached by default. Use `cacheKeyHeaders` to opt into caching them: each listed header's value is included in the cache key, so distinct credentials get distinct cache entries. | api-gateway |
@@ -18,9 +18,9 @@ by default, include it in the team's policy template.
18
18
  ```json
19
19
  {
20
20
  "name": "akamai-ai-firewall-v2-inbound",
21
- "policyType": "akamai-ai-firewall-v2",
21
+ "policyType": "ai-gateway-akamai-firewall",
22
22
  "handler": {
23
- "export": "AkamaiAIFirewallV2InboundPolicy",
23
+ "export": "AIGatewayAkamaiFirewallInboundPolicy",
24
24
  "module": "$import(@zuplo/runtime)",
25
25
  "options": {
26
26
  "configurationId": "your-configuration-id",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft-07/schema",
3
- "$id": "https://cdn.zuplo.com/policies/runtime/schemas/akamai-ai-firewall-v2-inbound.json",
3
+ "$id": "https://cdn.zuplo.com/policies/runtime/schemas/ai-gateway-akamai-firewall-inbound.json",
4
4
  "type": "object",
5
5
  "title": "Akamai AI Firewall",
6
6
  "isDeprecated": false,
@@ -10,7 +10,7 @@
10
10
  "isBeta": false,
11
11
  "isHidden": false,
12
12
  "requiresAI": true,
13
- "policyType": "akamai-ai-firewall-v2",
13
+ "policyType": "ai-gateway-akamai-firewall",
14
14
  "products": ["ai-gateway"],
15
15
  "description": "Akamai AI Firewall Inbound Policy",
16
16
  "deprecatedMessage": "",
@@ -22,7 +22,7 @@
22
22
  "required": ["export", "module", "options"],
23
23
  "properties": {
24
24
  "export": {
25
- "const": "AkamaiAIFirewallV2InboundPolicy",
25
+ "const": "AIGatewayAkamaiFirewallInboundPolicy",
26
26
  "description": "The name of the exported type"
27
27
  },
28
28
  "module": {
@@ -30,8 +30,7 @@
30
30
  "description": "The module containing the policy"
31
31
  },
32
32
  "options": {
33
- "x-zuplo-policy-type": "akamai-ai-firewall-v2",
34
- "title": "AkamaiAIFirewallPolicyOptions",
33
+ "title": "AIGatewayAkamaiFirewallInboundPolicyOptions",
35
34
  "type": "object",
36
35
  "description": "The options for the Akamai AI Firewall policy.",
37
36
  "examples": [
@@ -123,7 +122,7 @@
123
122
  },
124
123
  "examples": [
125
124
  {
126
- "export": "AkamaiAIFirewallV2InboundPolicy",
125
+ "export": "AIGatewayAkamaiFirewallInboundPolicy",
127
126
  "module": "$import(@zuplo/runtime)",
128
127
  "options": {
129
128
  "configurationId": "$env(AKAMAI_AI_FIREWALL_CONFIGURATION_ID)",
@@ -25,9 +25,9 @@ Declare the policy in `config/policies.json`:
25
25
  "policies": [
26
26
  {
27
27
  "name": "ai-gateway-auth-v2-inbound",
28
- "policyType": "ai-gateway-auth-v2",
28
+ "policyType": "ai-gateway-auth",
29
29
  "handler": {
30
- "export": "AIGatewayAuthV2InboundPolicy",
30
+ "export": "AIGatewayAuthInboundPolicy",
31
31
  "module": "$import(@zuplo/runtime)",
32
32
  "options": {
33
33
  "cacheTtlSeconds": 60
@@ -128,9 +128,9 @@ empty string when the header contains only the key:
128
128
  ```json
129
129
  {
130
130
  "name": "ai-gateway-auth-v2-inbound",
131
- "policyType": "ai-gateway-auth-v2",
131
+ "policyType": "ai-gateway-auth",
132
132
  "handler": {
133
- "export": "AIGatewayAuthV2InboundPolicy",
133
+ "export": "AIGatewayAuthInboundPolicy",
134
134
  "module": "$import(@zuplo/runtime)",
135
135
  "options": {
136
136
  "authHeader": "x-api-key",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft-07/schema",
3
- "$id": "https://cdn.zuplo.com/policies/runtime/schemas/ai-gateway-auth-v2-inbound.json",
3
+ "$id": "https://cdn.zuplo.com/policies/runtime/schemas/ai-gateway-auth-inbound.json",
4
4
  "type": "object",
5
5
  "title": "AI Gateway Authentication",
6
6
  "isDeprecated": false,
@@ -10,7 +10,7 @@
10
10
  "isBeta": false,
11
11
  "isHidden": false,
12
12
  "requiresAI": true,
13
- "policyType": "ai-gateway-auth-v2",
13
+ "policyType": "ai-gateway-auth",
14
14
  "products": ["ai-gateway"],
15
15
  "description": "Authenticates requests to an AI Gateway endpoint with application API keys.\n\nAdd this policy to an application's `inboundPolicyChain` to require a key for that app only, or place it on the route before the configuration executor to require a key for every application on the route. The policies that follow can read the authenticated application from `request.user` (`sub` is the application name, `data` its metadata), and the application's AI Gateway configuration takes effect for the request. Use `authHeader` and `authScheme` when clients send their app key somewhere other than the default `Authorization: Bearer` header. Enable `credentialPassthrough`, with the application key in a separate header, to forward the caller's `Authorization` header to the primary provider as its credential.\n\nWhen the matched route captures an `app_id` path parameter (platform catch-all `/:app_id/(.*)`), this policy also requires the stored configuration ID to match the URL (adding `config_` for `/a`). It returns 403 on mismatch.\n\nOn a User App route (`/u/{app_id}`), only a personal API key issued for that User App authenticates. `request.user.sub` is then the key owner's user ID. An application API key on a User App route, or a personal API key on any other route, returns 403. Validation results are cached for `cacheTtlSeconds`, so a revoked key stops working within that window.",
16
16
  "deprecatedMessage": "",
@@ -22,7 +22,7 @@
22
22
  "required": ["export", "module", "options"],
23
23
  "properties": {
24
24
  "export": {
25
- "const": "AIGatewayAuthV2InboundPolicy",
25
+ "const": "AIGatewayAuthInboundPolicy",
26
26
  "description": "The name of the exported type"
27
27
  },
28
28
  "module": {
@@ -30,8 +30,7 @@
30
30
  "description": "The module containing the policy"
31
31
  },
32
32
  "options": {
33
- "x-zuplo-policy-type": "ai-gateway-auth-v2",
34
- "title": "AIGatewayAuthV2InboundPolicyOptions",
33
+ "title": "AIGatewayAuthInboundPolicyOptions",
35
34
  "type": "object",
36
35
  "description": "The options for this policy.",
37
36
  "additionalProperties": false,
@@ -86,7 +85,7 @@
86
85
  },
87
86
  "examples": [
88
87
  {
89
- "export": "AIGatewayAuthV2InboundPolicy",
88
+ "export": "AIGatewayAuthInboundPolicy",
90
89
  "module": "$import(@zuplo/runtime)",
91
90
  "options": {
92
91
  "cacheTtlSeconds": 10,
@@ -75,9 +75,9 @@ chooses the policies it needs in its `inboundPolicyChain`:
75
75
  "policies": [
76
76
  {
77
77
  "name": "ai-gateway-auth-v2-inbound",
78
- "policyType": "ai-gateway-auth-v2",
78
+ "policyType": "ai-gateway-auth",
79
79
  "handler": {
80
- "export": "AIGatewayAuthV2InboundPolicy",
80
+ "export": "AIGatewayAuthInboundPolicy",
81
81
  "module": "$import(@zuplo/runtime)",
82
82
  "options": {
83
83
  "cacheTtlSeconds": 60
@@ -86,9 +86,9 @@ chooses the policies it needs in its `inboundPolicyChain`:
86
86
  },
87
87
  {
88
88
  "name": "ai-gateway-configuration-loader-v2-inbound",
89
- "policyType": "ai-gateway-configuration-loader-v2",
89
+ "policyType": "ai-gateway-configuration-loader",
90
90
  "handler": {
91
- "export": "AIGatewayConfigurationLoaderV2InboundPolicy",
91
+ "export": "AIGatewayConfigurationLoaderInboundPolicy",
92
92
  "module": "$import(@zuplo/runtime)",
93
93
  "options": {
94
94
  "cacheTtlSeconds": 60
@@ -97,9 +97,9 @@ chooses the policies it needs in its `inboundPolicyChain`:
97
97
  },
98
98
  {
99
99
  "name": "ai-gateway-configuration-executor-v2-inbound",
100
- "policyType": "ai-gateway-configuration-executor-v2",
100
+ "policyType": "ai-gateway-configuration-executor",
101
101
  "handler": {
102
- "export": "AIGatewayConfigurationExecutorV2InboundPolicy",
102
+ "export": "AIGatewayConfigurationExecutorInboundPolicy",
103
103
  "module": "$import(@zuplo/runtime)",
104
104
  "options": {
105
105
  "cacheTtlSeconds": 60
@@ -108,18 +108,18 @@ chooses the policies it needs in its `inboundPolicyChain`:
108
108
  },
109
109
  {
110
110
  "name": "ai-gateway-metering-v2-inbound",
111
- "policyType": "ai-gateway-metering-v2",
111
+ "policyType": "ai-gateway-metering",
112
112
  "handler": {
113
- "export": "AIGatewayMeteringV2InboundPolicy",
113
+ "export": "AIGatewayMeteringInboundPolicy",
114
114
  "module": "$import(@zuplo/runtime)",
115
115
  "options": {}
116
116
  }
117
117
  },
118
118
  {
119
119
  "name": "ai-gateway-model-filtering-v2-inbound",
120
- "policyType": "ai-gateway-model-filtering-v2",
120
+ "policyType": "ai-gateway-model-filtering",
121
121
  "handler": {
122
- "export": "AIGatewayModelFilteringV2InboundPolicy",
122
+ "export": "AIGatewayModelFilteringInboundPolicy",
123
123
  "module": "$import(@zuplo/runtime)",
124
124
  "options": {
125
125
  "models": {
@@ -132,9 +132,9 @@ chooses the policies it needs in its `inboundPolicyChain`:
132
132
  },
133
133
  {
134
134
  "name": "ai-gateway-fallback-model-v2-inbound",
135
- "policyType": "ai-gateway-fallback-model-v2",
135
+ "policyType": "ai-gateway-fallback-model",
136
136
  "handler": {
137
- "export": "AIGatewayFallbackModelV2InboundPolicy",
137
+ "export": "AIGatewayFallbackModelInboundPolicy",
138
138
  "module": "$import(@zuplo/runtime)",
139
139
  "options": {
140
140
  "models": {
@@ -148,9 +148,9 @@ chooses the policies it needs in its `inboundPolicyChain`:
148
148
  },
149
149
  {
150
150
  "name": "ai-gateway-semantic-cache-v2-inbound",
151
- "policyType": "ai-gateway-semantic-cache-v2",
151
+ "policyType": "ai-gateway-semantic-cache",
152
152
  "handler": {
153
- "export": "AIGatewaySemanticCacheV2InboundPolicy",
153
+ "export": "AIGatewaySemanticCacheInboundPolicy",
154
154
  "module": "$import(@zuplo/runtime)",
155
155
  "options": {
156
156
  "semanticTolerance": 0.4,
@@ -366,8 +366,8 @@ distinct value gets its own budget.
366
366
 
367
367
  The expression grammar, the selectable properties, what a value must be, and
368
368
  what happens when an expression does not resolve are documented once, on the
369
- [AI Gateway Metering](/docs/policies/ai-gateway-metering-v2-inbound) policy
370
- page. The same grammar applies here.
369
+ [AI Gateway Metering](/docs/policies/ai-gateway-metering-inbound) policy page.
370
+ The same grammar applies here.
371
371
 
372
372
  Two things are specific to application configuration. A policy that sets a value
373
373
  an expression reads must run before Semantic Cache, which can answer without
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft-07/schema",
3
- "$id": "https://cdn.zuplo.com/policies/runtime/schemas/ai-gateway-configuration-executor-v2-inbound.json",
3
+ "$id": "https://cdn.zuplo.com/policies/runtime/schemas/ai-gateway-configuration-executor-inbound.json",
4
4
  "type": "object",
5
5
  "title": "AI Gateway Configuration Executor",
6
6
  "isDeprecated": false,
@@ -10,7 +10,7 @@
10
10
  "isBeta": false,
11
11
  "isHidden": false,
12
12
  "requiresAI": true,
13
- "policyType": "ai-gateway-configuration-executor-v2",
13
+ "policyType": "ai-gateway-configuration-executor",
14
14
  "products": ["ai-gateway"],
15
15
  "description": "Loads the app configuration for the request (when auth or the configuration loader has not already), runs the inbound policy chain from that configuration, and enforces limits inherited from parent teams or the gateway root.\n\nPlace this policy on AI Gateway routes after optional authentication and optional `ai-gateway-configuration-loader-v2-inbound`. When either of those already populated the app-configuration channel, this policy reuses it. Otherwise it loads the configuration with the route's `app_id` path parameter. Applications select from policies pre-declared by the gateway. Applications without a `inboundPolicyChain`, or with an empty chain, run no application-selected policies. Entry options replace the declaration's options as a complete object; omit them to inherit the declaration, including environment-backed credentials. Each occurrence receives a private deep copy of its entry options, so a policy mutating its options cannot corrupt the cached app configuration.",
16
16
  "deprecatedMessage": "",
@@ -22,7 +22,7 @@
22
22
  "required": ["export", "module", "options"],
23
23
  "properties": {
24
24
  "export": {
25
- "const": "AIGatewayConfigurationExecutorV2InboundPolicy",
25
+ "const": "AIGatewayConfigurationExecutorInboundPolicy",
26
26
  "description": "The name of the exported type"
27
27
  },
28
28
  "module": {
@@ -30,8 +30,7 @@
30
30
  "description": "The module containing the policy"
31
31
  },
32
32
  "options": {
33
- "x-zuplo-policy-type": "ai-gateway-configuration-executor-v2",
34
- "title": "AIGatewayConfigurationExecutorV2InboundPolicyOptions",
33
+ "title": "AIGatewayConfigurationExecutorInboundPolicyOptions",
35
34
  "type": "object",
36
35
  "description": "Options for loading each application's AI Gateway configuration and running its inbound policy chain.",
37
36
  "additionalProperties": false,
@@ -48,7 +47,7 @@
48
47
  },
49
48
  "examples": [
50
49
  {
51
- "export": "AIGatewayConfigurationExecutorV2InboundPolicy",
50
+ "export": "AIGatewayConfigurationExecutorInboundPolicy",
52
51
  "module": "$import(@zuplo/runtime)",
53
52
  "options": {
54
53
  "cacheTtlSeconds": 10