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.
- package/docs/ai-gateway/azure-ai.mdx +6 -6
- package/docs/ai-gateway/bedrock-mantle.mdx +4 -4
- package/docs/ai-gateway/bedrock-runtime.mdx +9 -9
- package/docs/ai-gateway/integrations/ai-sdk.mdx +2 -2
- package/docs/ai-gateway/integrations/claude-code.mdx +3 -3
- package/docs/ai-gateway/integrations/claude-desktop.mdx +2 -2
- package/docs/ai-gateway/integrations/codex.mdx +4 -4
- package/docs/ai-gateway/integrations/github-copilot.mdx +4 -4
- package/docs/ai-gateway/integrations/goose.mdx +3 -3
- package/docs/ai-gateway/integrations/langchain.mdx +3 -3
- package/docs/ai-gateway/integrations/openai.mdx +3 -3
- package/docs/ai-gateway/universal-api.mdx +3 -3
- package/docs/ai-gateway/usage-limits.mdx +1 -1
- package/docs/ai-gateway/vertex-ai.mdx +1 -1
- package/docs/dedicated/akamai/ai-powered-applications.mdx +3 -3
- package/docs/policies/_index.md +11 -10
- package/docs/policies/{akamai-ai-firewall-v2-inbound → ai-gateway-akamai-firewall-inbound}/doc.md +2 -2
- package/docs/policies/{akamai-ai-firewall-v2-inbound → ai-gateway-akamai-firewall-inbound}/schema.json +5 -6
- package/docs/policies/{ai-gateway-auth-v2-inbound → ai-gateway-auth-inbound}/doc.md +4 -4
- package/docs/policies/{ai-gateway-auth-v2-inbound → ai-gateway-auth-inbound}/schema.json +5 -6
- package/docs/policies/{ai-gateway-configuration-executor-v2-inbound → ai-gateway-configuration-executor-inbound}/doc.md +16 -16
- package/docs/policies/{ai-gateway-configuration-executor-v2-inbound → ai-gateway-configuration-executor-inbound}/schema.json +5 -6
- package/docs/policies/{ai-gateway-configuration-loader-v2-inbound → ai-gateway-configuration-loader-inbound}/doc.md +4 -4
- package/docs/policies/{ai-gateway-configuration-loader-v2-inbound → ai-gateway-configuration-loader-inbound}/schema.json +5 -6
- package/docs/policies/ai-gateway-dlp-inbound/schema.json +0 -1
- package/docs/policies/{ai-gateway-fallback-model-v2-inbound → ai-gateway-fallback-model-inbound}/doc.md +2 -2
- package/docs/policies/{ai-gateway-fallback-model-v2-inbound → ai-gateway-fallback-model-inbound}/schema.json +5 -6
- package/docs/policies/{galileo-tracing-v2-inbound → ai-gateway-galileo-tracing-inbound}/doc.md +2 -2
- package/docs/policies/{galileo-tracing-v2-inbound → ai-gateway-galileo-tracing-inbound}/schema.json +5 -6
- package/docs/policies/ai-gateway-internal-only-inbound/schema.json +0 -1
- package/docs/policies/{ai-gateway-metering-v2-inbound → ai-gateway-metering-inbound}/schema.json +5 -6
- package/docs/policies/{ai-gateway-model-filtering-v2-inbound → ai-gateway-model-filtering-inbound}/doc.md +6 -4
- package/docs/policies/{ai-gateway-model-filtering-v2-inbound → ai-gateway-model-filtering-inbound}/schema.json +5 -6
- package/docs/policies/ai-gateway-model-override-inbound/doc.md +154 -0
- package/docs/policies/ai-gateway-model-override-inbound/intro.md +5 -0
- package/docs/policies/ai-gateway-model-override-inbound/schema.json +126 -0
- package/docs/policies/{comet-opik-tracing-v2-inbound → ai-gateway-opik-tracing-inbound}/doc.md +2 -2
- package/docs/policies/{comet-opik-tracing-v2-inbound → ai-gateway-opik-tracing-inbound}/schema.json +5 -6
- package/docs/policies/{ai-gateway-semantic-cache-v2-inbound → ai-gateway-semantic-cache-inbound}/schema.json +4 -5
- package/docs/policies/ai-gateway-smart-router-inbound/doc.md +2 -2
- package/docs/policies/ai-gateway-smart-router-inbound/schema.json +0 -1
- package/package.json +5 -5
- /package/docs/policies/{akamai-ai-firewall-v2-inbound → ai-gateway-akamai-firewall-inbound}/intro.md +0 -0
- /package/docs/policies/{ai-gateway-auth-v2-inbound → ai-gateway-auth-inbound}/intro.md +0 -0
- /package/docs/policies/{ai-gateway-configuration-executor-v2-inbound → ai-gateway-configuration-executor-inbound}/intro.md +0 -0
- /package/docs/policies/{ai-gateway-configuration-loader-v2-inbound → ai-gateway-configuration-loader-inbound}/intro.md +0 -0
- /package/docs/policies/{ai-gateway-fallback-model-v2-inbound → ai-gateway-fallback-model-inbound}/intro.md +0 -0
- /package/docs/policies/{galileo-tracing-v2-inbound → ai-gateway-galileo-tracing-inbound}/intro.md +0 -0
- /package/docs/policies/{ai-gateway-metering-v2-inbound → ai-gateway-metering-inbound}/doc.md +0 -0
- /package/docs/policies/{ai-gateway-metering-v2-inbound → ai-gateway-metering-inbound}/intro.md +0 -0
- /package/docs/policies/{ai-gateway-model-filtering-v2-inbound → ai-gateway-model-filtering-inbound}/intro.md +0 -0
- /package/docs/policies/{comet-opik-tracing-v2-inbound → ai-gateway-opik-tracing-inbound}/intro.md +0 -0
- /package/docs/policies/{ai-gateway-semantic-cache-v2-inbound → ai-gateway-semantic-cache-inbound}/doc.md +0 -0
- /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-
|
|
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-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
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-
|
|
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-
|
|
257
|
-
|
|
258
|
-
|
|
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-
|
|
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
|
|
258
|
-
|
|
|
259
|
-
| [Authentication](../policies/ai-gateway-auth-
|
|
260
|
-
| [Model Filtering](../policies/ai-gateway-model-filtering-
|
|
261
|
-
| [Metering and budgets](../policies/ai-gateway-metering-
|
|
262
|
-
| [DLP](../policies/ai-gateway-dlp-inbound.mdx) and content guardrails
|
|
263
|
-
| [Galileo](../policies/galileo-tracing-
|
|
264
|
-
| Semantic Cache
|
|
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-
|
|
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-
|
|
49
|
-
|
|
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-
|
|
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-
|
|
137
|
-
|
|
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-
|
|
97
|
-
|
|
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-
|
|
112
|
-
|
|
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-
|
|
142
|
-
|
|
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-
|
|
136
|
-
|
|
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-
|
|
150
|
-
|
|
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-
|
|
70
|
-
|
|
71
|
-
|
|
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-
|
|
81
|
-
|
|
82
|
-
|
|
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-
|
|
49
|
-
|
|
50
|
-
|
|
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-
|
|
59
|
-
|
|
60
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
package/docs/policies/_index.md
CHANGED
|
@@ -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-
|
|
8
|
-
| ai-gateway-configuration-executor-
|
|
9
|
-
| ai-gateway-configuration-loader-
|
|
10
|
-
| ai-gateway-fallback-model-
|
|
11
|
-
| ai-gateway-metering-
|
|
12
|
-
| ai-gateway-model-filtering-
|
|
13
|
-
| ai-gateway-
|
|
14
|
-
|
|
|
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
|
-
|
|
|
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-
|
|
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 |
|
package/docs/policies/{akamai-ai-firewall-v2-inbound → ai-gateway-akamai-firewall-inbound}/doc.md
RENAMED
|
@@ -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-
|
|
21
|
+
"policyType": "ai-gateway-akamai-firewall",
|
|
22
22
|
"handler": {
|
|
23
|
-
"export": "
|
|
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-
|
|
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-
|
|
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": "
|
|
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
|
-
"
|
|
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": "
|
|
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
|
|
28
|
+
"policyType": "ai-gateway-auth",
|
|
29
29
|
"handler": {
|
|
30
|
-
"export": "
|
|
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
|
|
131
|
+
"policyType": "ai-gateway-auth",
|
|
132
132
|
"handler": {
|
|
133
|
-
"export": "
|
|
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-
|
|
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
|
|
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": "
|
|
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
|
-
"
|
|
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": "
|
|
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
|
|
78
|
+
"policyType": "ai-gateway-auth",
|
|
79
79
|
"handler": {
|
|
80
|
-
"export": "
|
|
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
|
|
89
|
+
"policyType": "ai-gateway-configuration-loader",
|
|
90
90
|
"handler": {
|
|
91
|
-
"export": "
|
|
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
|
|
100
|
+
"policyType": "ai-gateway-configuration-executor",
|
|
101
101
|
"handler": {
|
|
102
|
-
"export": "
|
|
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
|
|
111
|
+
"policyType": "ai-gateway-metering",
|
|
112
112
|
"handler": {
|
|
113
|
-
"export": "
|
|
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
|
|
120
|
+
"policyType": "ai-gateway-model-filtering",
|
|
121
121
|
"handler": {
|
|
122
|
-
"export": "
|
|
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
|
|
135
|
+
"policyType": "ai-gateway-fallback-model",
|
|
136
136
|
"handler": {
|
|
137
|
-
"export": "
|
|
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
|
|
151
|
+
"policyType": "ai-gateway-semantic-cache",
|
|
152
152
|
"handler": {
|
|
153
|
-
"export": "
|
|
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-
|
|
370
|
-
|
|
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-
|
|
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
|
|
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": "
|
|
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
|
-
"
|
|
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": "
|
|
50
|
+
"export": "AIGatewayConfigurationExecutorInboundPolicy",
|
|
52
51
|
"module": "$import(@zuplo/runtime)",
|
|
53
52
|
"options": {
|
|
54
53
|
"cacheTtlSeconds": 10
|