diff --git a/docs.json b/docs.json index cd6ad57..144d1df 100644 --- a/docs.json +++ b/docs.json @@ -38,7 +38,7 @@ "destination": "/introduction/why-edgee" } ], - + "fonts": { "heading": { "family": "Sentient-Variable", @@ -59,42 +59,43 @@ "tab": "AI Gateway", "icon": "sparkles", "groups": [ - { - "group": "Introduction", - "pages": [ - "introduction", - "introduction/why-edgee", - "introduction/faq" - ] - }, - { - "group": "Quickstart", - "pages": [ - "quickstart/index", - "quickstart/account-creation", - "quickstart/api-key", - "quickstart/sdk" - ] - }, - { - "group": "Features", - "pages": [ - "features/overview", - "features/token-compression", - "features/observability" - ] - }, - { - "group": "Integrations", - "pages": [ - "integrations/claude-code", - "integrations/anthropic-sdk", - "integrations/openai-sdk", - "integrations/opencode", - "integrations/langchain" - ] - } + { + "group": "Introduction", + "pages": [ + "introduction", + "introduction/why-edgee", + "introduction/faq" + ] + }, + { + "group": "Quickstart", + "pages": [ + "quickstart/index", + "quickstart/account-creation", + "quickstart/api-key", + "quickstart/sdk" ] + }, + { + "group": "Features", + "pages": [ + "features/overview", + "features/token-compression", + "features/observability", + "features/edge-tools" + ] + }, + { + "group": "Integrations", + "pages": [ + "integrations/claude-code", + "integrations/anthropic-sdk", + "integrations/openai-sdk", + "integrations/opencode", + "integrations/langchain" + ] + } + ] }, { "tab": "SDKs", @@ -149,28 +150,25 @@ ] } ] - } + } ] }, { "tab": "API Reference", "icon": "terminal", - + "groups": [ { "group": "Introduction", "pages": [ - "api-reference/index", - "api-reference/authentication", - "api-reference/errors" - ] - }, + "api-reference/index", + "api-reference/authentication", + "api-reference/errors" + ] + }, { "group": "Endpoints", - "pages": [ - "api-reference/chat-completion", - "api-reference/models" - ] + "pages": ["api-reference/chat-completion", "api-reference/models"] } ] }, @@ -184,10 +182,7 @@ "groups": [ { "group": "Introduction", - "pages": [ - "proxy/overview", - "proxy/privacy" - ] + "pages": ["proxy/overview", "proxy/privacy"] }, { "group": "Get Started", @@ -430,9 +425,7 @@ }, { "group": "Unique ID", - "pages": [ - "proxy/components/identity/first-id" - ] + "pages": ["proxy/components/identity/first-id"] } ] }, @@ -442,15 +435,11 @@ "pages": [ { "group": "Bot Protection", - "pages": [ - "proxy/components/security/datadome" - ] + "pages": ["proxy/components/security/datadome"] }, { "group": "IP Blocking", - "pages": [ - "proxy/components/security/crowdsec" - ] + "pages": ["proxy/components/security/crowdsec"] } ] } @@ -538,4 +527,4 @@ } ] } -} \ No newline at end of file +} diff --git a/features/edge-tools.mdx b/features/edge-tools.mdx new file mode 100644 index 0000000..a1ba5c0 --- /dev/null +++ b/features/edge-tools.mdx @@ -0,0 +1,49 @@ +--- +title: Edge Tools +description: Run shared tools at the edge so your LLM calls have real capabilities without hard-coding tool glue everywhere. +icon: zap +--- + +Edge Tools let you give your LLM calls real capabilities without re-implementing tool glue across every service. **Shared tools** are common capabilities that Edgee runs at the edge (e.g. common primitives). + +## Why Edge Tools? + +- **Less application glue** — Define tools once at the gateway instead of re-implementing them across services. +- **Lower latency** — Execute tools closer to users and providers to reduce round-trips. +- **Stronger control** — Centralize permissions, audit logs, and safety policies for tool execution. + +Your app calls Edgee; when a model requests tool execution, Edgee runs the shared tool at the edge, applies policies, and returns the result. Observability captures the full trace. + +## How to activate Edge Tools + +1. In the [Edgee Console](https://www.edgee.cloud), open your organization and go to **Tools**. +2. For each tool you want to use, **Activate for organization**. This makes the tool available via the API for that organization. +3. Optionally enable **hydration** so the gateway automatically injects the tool definitions into requests: + - **Hydrate for entire org** — The gateway adds the tool definitions to every request from the organization, so the model can call these tools without your client sending tool definitions. + - **Hydrate for specific API keys** — Only inject the tools for selected API keys (useful when only some keys should see Edge Tools). + + +Tools configuration page showing Current time tool with Activate for organization and Hydrate for all org calls toggles + + + +Hydrating adds tool definitions to every request, which increases context size and therefore costs more (more input tokens per call). Enable only for requests where the model needs to call Edge Tools. + + +If you don’t enable hydration, you can still pass the tool definitions yourself in each request (the tool names are `edgee_current_time` and `edgee_generate_uuid`). When the model calls one of them, the gateway executes it at the edge and returns the result. + +## Available tools + +These shared tools are available today. All Edge Tools use the `edgee_` prefix. + +- **`edgee_current_time`** — Get the current date and time in a given timezone (IANA name). Defaults to UTC if not provided. + Parameters: `timezone` (optional string) — IANA timezone, e.g. `America/New_York`, `Europe/London`, `Asia/Tokyo`. + +- **`edgee_generate_uuid`** — Generate a random UUID (v4). + Parameters: None. + +Example: if the model calls `edgee_current_time` with `{"timezone": "Europe/Paris"}`, the gateway returns the current time in Paris. If the model calls `edgee_generate_uuid`, the gateway returns a new UUID. + +## Relation to function calling + +The [SDK tools documentation](/sdk/typescript/tools) describes how to pass **tools** (function definitions) in each request so the model can request calls — that’s **client-side** function calling. **Edge Tools** are shared tools that run **at the gateway**, so you don’t have to run and wire every tool in your own backend. diff --git a/features/overview.mdx b/features/overview.mdx index 8253ad2..967c62c 100644 --- a/features/overview.mdx +++ b/features/overview.mdx @@ -35,6 +35,10 @@ These are the core capabilities we're designing the gateway around: Configurable logging and retention, plus provider-side ZDR where available. + + + Run shared tools at the edge so LLM calls have real capabilities without hard-coding tool glue everywhere. + ## What to expect (right now) diff --git a/images/activate-edge-tools.png b/images/activate-edge-tools.png new file mode 100644 index 0000000..f2880bd Binary files /dev/null and b/images/activate-edge-tools.png differ diff --git a/package-lock.json b/package-lock.json index 1a08bb4..53eb8c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,7 @@ "packages": { "": { "dependencies": { - "mintlify": "^4.2.314" + "mintlify": "^4.2.315" } }, "node_modules/@alcalzone/ansi-tokenize": { @@ -982,18 +982,18 @@ } }, "node_modules/@mintlify/cli": { - "version": "4.0.918", - "resolved": "https://registry.npmjs.org/@mintlify/cli/-/cli-4.0.918.tgz", - "integrity": "sha512-JwHE7Uhhog4xqbQmduuETZyWth/avASbGdDB1h9RhsprgIb7W8FR80YRRzUCCLUwz10M/dgqEaBEyr3/+RvKvg==", + "version": "4.0.919", + "resolved": "https://registry.npmjs.org/@mintlify/cli/-/cli-4.0.919.tgz", + "integrity": "sha512-7zVYxDV/KteLlphmy7zGLUIQek1jFM1Lt7DPo1LVAUR3S8gYp35MopJLkR/o7WrpVVZnyZAYdmkEs/cbiCBQBw==", "license": "Elastic-2.0", "dependencies": { "@inquirer/prompts": "7.9.0", - "@mintlify/common": "1.0.697", - "@mintlify/link-rot": "3.0.856", - "@mintlify/models": "0.0.262", - "@mintlify/prebuild": "1.0.833", - "@mintlify/previewing": "4.0.889", - "@mintlify/validation": "0.1.576", + "@mintlify/common": "1.0.698", + "@mintlify/link-rot": "3.0.857", + "@mintlify/models": "0.0.263", + "@mintlify/prebuild": "1.0.834", + "@mintlify/previewing": "4.0.890", + "@mintlify/validation": "0.1.577", "adm-zip": "0.5.16", "chalk": "5.2.0", "color": "4.2.3", @@ -1018,16 +1018,16 @@ } }, "node_modules/@mintlify/common": { - "version": "1.0.697", - "resolved": "https://registry.npmjs.org/@mintlify/common/-/common-1.0.697.tgz", - "integrity": "sha512-xZ/arB2O60ncw+VPQg4jHqaY8huY2fhSTWvbSKSoJZyK+P7asMWXzNBCt0H6vcRf1rine4D2srlCA4ymCHnDHg==", + "version": "1.0.698", + "resolved": "https://registry.npmjs.org/@mintlify/common/-/common-1.0.698.tgz", + "integrity": "sha512-CicjlATkONn6ARR55J6JY+tUmSof3zjZKb708RYv3yG3qQdMB2/g0+FvQXkk2dsPgq105J5dFb/n2+vYuiEsHA==", "license": "ISC", "dependencies": { "@asyncapi/parser": "3.4.0", "@mintlify/mdx": "^3.0.4", - "@mintlify/models": "0.0.262", + "@mintlify/models": "0.0.263", "@mintlify/openapi-parser": "^0.0.8", - "@mintlify/validation": "0.1.576", + "@mintlify/validation": "0.1.577", "@sindresorhus/slugify": "2.2.0", "@types/mdast": "4.0.4", "acorn": "8.11.2", @@ -1456,16 +1456,16 @@ } }, "node_modules/@mintlify/link-rot": { - "version": "3.0.856", - "resolved": "https://registry.npmjs.org/@mintlify/link-rot/-/link-rot-3.0.856.tgz", - "integrity": "sha512-4BFxaEJSqJtPM31zV+BD+bbXMnGWxYrtSa8ve3qFx7uSj1WYMVJ4Ag//xybmuzxPGlAN8vla8WXoLkz/6/gp3A==", + "version": "3.0.857", + "resolved": "https://registry.npmjs.org/@mintlify/link-rot/-/link-rot-3.0.857.tgz", + "integrity": "sha512-ThNzzt4qzs0G88l7VJ3GqTHRUGhtDftydWQrxvm2v/eTUO9mjFkJZ1UZcp0/NYZgEOi2eLLHSns5B+PVlow5LA==", "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.697", - "@mintlify/prebuild": "1.0.833", - "@mintlify/previewing": "4.0.889", + "@mintlify/common": "1.0.698", + "@mintlify/prebuild": "1.0.834", + "@mintlify/previewing": "4.0.890", "@mintlify/scraping": "4.0.522", - "@mintlify/validation": "0.1.576", + "@mintlify/validation": "0.1.577", "fs-extra": "11.1.0", "unist-util-visit": "4.1.2" }, @@ -1536,9 +1536,9 @@ } }, "node_modules/@mintlify/models": { - "version": "0.0.262", - "resolved": "https://registry.npmjs.org/@mintlify/models/-/models-0.0.262.tgz", - "integrity": "sha512-9JNwnx1AtasQi3eP3yh/ffNgAB5ZS17jSE0IPa38QzBn4eMXoLvNQscPlhBp9krAYHpnOWm8VN0G5rV9lsgXvA==", + "version": "0.0.263", + "resolved": "https://registry.npmjs.org/@mintlify/models/-/models-0.0.263.tgz", + "integrity": "sha512-Hfu0CfCkZ0Rpsvc5CBX3JDA0bqDWJ16T7ukoj/y5KltWhrukEPOl9/QR1zG/ScdXDwdOm3Zn5QQDT3GLbL0tnQ==", "license": "Elastic-2.0", "dependencies": { "axios": "1.13.2", @@ -1583,15 +1583,15 @@ } }, "node_modules/@mintlify/prebuild": { - "version": "1.0.833", - "resolved": "https://registry.npmjs.org/@mintlify/prebuild/-/prebuild-1.0.833.tgz", - "integrity": "sha512-RAnnVDplb1pdY1VzZDoJPd+unRKs0QJo/rrzMPw3ytf69iOS+Z3Ao00CSLPJm3ZQ65HOj0XFZ5qIfJHaoT6jpA==", + "version": "1.0.834", + "resolved": "https://registry.npmjs.org/@mintlify/prebuild/-/prebuild-1.0.834.tgz", + "integrity": "sha512-JEdLMiKp9AygNpyEP2OuBJi9dzH34o8o57E55vlUrhQ6I/Po3Ww0yNQYH5wQ6bZM+tVX2ugJjKMclFURBfYMaw==", "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.697", + "@mintlify/common": "1.0.698", "@mintlify/openapi-parser": "^0.0.8", - "@mintlify/scraping": "4.0.558", - "@mintlify/validation": "0.1.576", + "@mintlify/scraping": "4.0.559", + "@mintlify/validation": "0.1.577", "chalk": "5.3.0", "favicons": "7.2.0", "front-matter": "4.0.2", @@ -1605,12 +1605,12 @@ } }, "node_modules/@mintlify/prebuild/node_modules/@mintlify/scraping": { - "version": "4.0.558", - "resolved": "https://registry.npmjs.org/@mintlify/scraping/-/scraping-4.0.558.tgz", - "integrity": "sha512-CR8CBwrdcr4pQ3EHCLjuK0oet0Ag4Samwqpha3fGZ3FYad2Kaq1ZON7x89GosO4DiZTGQksBv2A9gpOVs0vpzg==", + "version": "4.0.559", + "resolved": "https://registry.npmjs.org/@mintlify/scraping/-/scraping-4.0.559.tgz", + "integrity": "sha512-xowugtpLPQacXLqdSB+X85Ug1uxbJMkWa8IzO8CiyJN9kcx1EIG9Ydxn0JJhyENETR3jd1VLKzIMvLXFeGAzZA==", "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.697", + "@mintlify/common": "1.0.698", "@mintlify/openapi-parser": "^0.0.8", "fs-extra": "11.1.1", "hast-util-to-mdast": "10.1.0", @@ -1786,14 +1786,14 @@ } }, "node_modules/@mintlify/previewing": { - "version": "4.0.889", - "resolved": "https://registry.npmjs.org/@mintlify/previewing/-/previewing-4.0.889.tgz", - "integrity": "sha512-SvVM+lzkDK2LM6G/d5mKMpIA1Kf3nlLzRhwJLDLdI01+Hq2uzKmyQvmWGWc4vqTTIZwTSNiYumbEzaMbzJx9uA==", + "version": "4.0.890", + "resolved": "https://registry.npmjs.org/@mintlify/previewing/-/previewing-4.0.890.tgz", + "integrity": "sha512-A8QeRFQ9dCsZJQgr6GCzSSrI+zlNm4dSlYUBDjPDkYI92uKmZO95maAKiXaWPKGQfjeIf8YYbP3n+k4QE+gpgg==", "license": "Elastic-2.0", "dependencies": { - "@mintlify/common": "1.0.697", - "@mintlify/prebuild": "1.0.833", - "@mintlify/validation": "0.1.576", + "@mintlify/common": "1.0.698", + "@mintlify/prebuild": "1.0.834", + "@mintlify/validation": "0.1.577", "better-opn": "3.0.2", "chalk": "5.2.0", "chokidar": "3.5.3", @@ -2433,13 +2433,13 @@ } }, "node_modules/@mintlify/validation": { - "version": "0.1.576", - "resolved": "https://registry.npmjs.org/@mintlify/validation/-/validation-0.1.576.tgz", - "integrity": "sha512-w3QWe2X2gj6oqA0jCTQialxIQz/ki+6ud0V0Y+gKAlLH5UsoIqBFCrXjFYZZLkBt/Md6wnNmADH71gjLh4481w==", + "version": "0.1.577", + "resolved": "https://registry.npmjs.org/@mintlify/validation/-/validation-0.1.577.tgz", + "integrity": "sha512-tecysj9oeTc0SHz1ro/oaqMLwEpJw/K8oqoDWULgOfBcDPeG6uKNMe2NiLyVZLZUMxsywFKOJFRkF/8mTbJcHQ==", "license": "Elastic-2.0", "dependencies": { "@mintlify/mdx": "^3.0.4", - "@mintlify/models": "0.0.262", + "@mintlify/models": "0.0.263", "arktype": "2.1.27", "js-yaml": "4.1.0", "lcm": "0.0.3", @@ -9557,12 +9557,12 @@ } }, "node_modules/mintlify": { - "version": "4.2.314", - "resolved": "https://registry.npmjs.org/mintlify/-/mintlify-4.2.314.tgz", - "integrity": "sha512-G7KSCSkPyNq377ooSSQomggCDWsDoEeG+SyB1K2eKW5sH0SnSKyaCdPYxMLJF05+lGgYGSmPJ3mGqgqQC64/Rg==", + "version": "4.2.315", + "resolved": "https://registry.npmjs.org/mintlify/-/mintlify-4.2.315.tgz", + "integrity": "sha512-G2P7C5TAjayZF2WqrF+2Ya/yfIQSswS605YaBlXMlMCL4lFmqt4POPCowkg4OnojgAIm44JaBohYjhsDJqlMZA==", "license": "Elastic-2.0", "dependencies": { - "@mintlify/cli": "4.0.918" + "@mintlify/cli": "4.0.919" }, "bin": { "mint": "index.js", @@ -12091,7 +12091,7 @@ "version": "6.1.15", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", - "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "license": "ISC", "dependencies": { "chownr": "^2.0.0", diff --git a/package.json b/package.json index 45ccb81..12b27c4 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,6 @@ "links": "mintlify broken-links" }, "dependencies": { - "mintlify": "^4.2.314" + "mintlify": "^4.2.315" } }