From 0e4b63d3823fb0955e8ec1d1735d9cc25fb14676 Mon Sep 17 00:00:00 2001 From: eddieogola Date: Sun, 1 Mar 2026 19:00:14 +0300 Subject: [PATCH 1/5] feat: add tzafon models --- docs.json | 95 +++++++++++-------- models/providers/gateways/tzafon/overview.mdx | 61 ++++++++++++ .../gateways/tzafon/usage/basic-stream.mdx | 23 +++++ .../providers/gateways/tzafon/usage/basic.mdx | 21 ++++ .../gateways/tzafon/usage/tool-use.mdx | 20 ++++ reference/models/tzafon.mdx | 21 ++++ 6 files changed, 201 insertions(+), 40 deletions(-) create mode 100644 models/providers/gateways/tzafon/overview.mdx create mode 100644 models/providers/gateways/tzafon/usage/basic-stream.mdx create mode 100644 models/providers/gateways/tzafon/usage/basic.mdx create mode 100644 models/providers/gateways/tzafon/usage/tool-use.mdx create mode 100644 reference/models/tzafon.mdx diff --git a/docs.json b/docs.json index 974e620fc..d9de4fb6a 100644 --- a/docs.json +++ b/docs.json @@ -1807,6 +1807,20 @@ ] } ] + }, + { + "group": "Tzafon", + "pages": [ + "models/providers/gateways/tzafon/overview", + { + "group": "Usage", + "pages": [ + "models/providers/gateways/tzafon/usage/basic", + "models/providers/gateways/tzafon/usage/basic-stream", + "models/providers/gateways/tzafon/usage/tool-use" + ] + } + ] } ] }, @@ -6519,11 +6533,11 @@ "examples/tools/tool-hooks/tool-hook-in-toolkit-with-state", "examples/tools/tool-hooks/tool-hook-in-toolkit-with-state-nested", "examples/tools/tool-hooks/tool-hooks-in-toolkit-nested" - ] - }, - { + ] + }, + { "group": "Handling Tool Errors", - "pages": [ + "pages": [ "examples/tools/exceptions/overview", "examples/tools/exceptions/retry-tool-call", "examples/tools/exceptions/retry-tool-call-from-post-hook", @@ -6542,32 +6556,32 @@ "examples/tools/tool-decorator/cache-tool-calls", "examples/tools/tool-decorator/stop-after-tool-call" ] - }, - { + }, + { "group": "MCP", - "pages": [ + "pages": [ "examples/tools/mcp/overview", - { + { "group": "MCP Toolbox", - "pages": [ + "pages": [ "examples/tools/mcp/mcp-toolbox-demo/overview", "examples/tools/mcp/mcp-toolbox-demo/agent", "examples/tools/mcp/mcp-toolbox-demo/agent-os", "examples/tools/mcp/mcp-toolbox-demo/hotel-management-typesafe", "examples/tools/mcp/mcp-toolbox-demo/hotel-management-workflows" - ] - }, - { + ] + }, + { "group": "Dynamic Headers", - "pages": [ + "pages": [ "examples/tools/mcp/dynamic-headers/overview", "examples/tools/mcp/dynamic-headers/client", "examples/tools/mcp/dynamic-headers/server" - ] - }, - { + ] + }, + { "group": "Local Server", - "pages": [ + "pages": [ "examples/tools/mcp/local-server/overview", "examples/tools/mcp/local-server/client", "examples/tools/mcp/local-server/server" @@ -6885,11 +6899,11 @@ "examples/agent-os/dbs/surreal-db/run", "examples/agent-os/dbs/surreal-db/teams", "examples/agent-os/dbs/surreal-db/workflows" - ] - }, - { - "group": "Integrations", - "pages": [ + ] + }, + { + "group": "Integrations", + "pages": [ "examples/agent-os/integrations/overview", "examples/agent-os/integrations/shopify-demo" ] @@ -7048,7 +7062,7 @@ "examples/agent-os/tracing/dbs/basic-agent-with-sqlite", "examples/agent-os/tracing/tracing-with-multi-db-and-tracing-flag", "examples/agent-os/tracing/tracing-with-multi-db-scenario" - ] + ] }, { "group": "Workflow", @@ -7130,20 +7144,20 @@ "examples/reasoning/models/openai/reasoning-summary", "examples/reasoning/models/vertex-ai/basic-reasoning-stream", "examples/reasoning/models/xai/reasoning-effort" - ] - }, - { - "group": "Teams", - "pages": [ + ] + }, + { + "group": "Teams", + "pages": [ "examples/reasoning/teams/overview", "examples/reasoning/teams/finance-team-chain-of-thought", "examples/reasoning/teams/knowledge-tool-team", "examples/reasoning/teams/reasoning-finance-team" ] }, - { + { "group": "Tools", - "pages": [ + "pages": [ "examples/reasoning/tools/overview", "examples/reasoning/tools/azure-openai-reasoning-tools", "examples/reasoning/tools/capture-reasoning-content-knowledge-tools", @@ -7488,6 +7502,7 @@ "reference/models/perplexity", "reference/models/requesty", "reference/models/together", + "reference/models/tzafon", "reference/models/xai", "reference/models/vercel", "reference/models/bedrock", @@ -7757,9 +7772,9 @@ "reference-api/schema/database/migrate-database" ] }, - { + { "group": "Components", - "pages": [ + "pages": [ "reference-api/schema/components/list-components", "reference-api/schema/components/create-component", "reference-api/schema/components/get-component", @@ -7772,17 +7787,17 @@ "reference-api/schema/components/update-draft-config", "reference-api/schema/components/get-current-config", "reference-api/schema/components/set-current-config-version" - ] - }, - { + ] + }, + { "group": "Registry", - "pages": [ + "pages": [ "reference-api/schema/registry/list-registry" - ] - }, - { + ] + }, + { "group": "Schedules", - "pages": [ + "pages": [ "reference-api/schema/schedules/list-schedules", "reference-api/schema/schedules/create-schedule", "reference-api/schema/schedules/get-schedule", diff --git a/models/providers/gateways/tzafon/overview.mdx b/models/providers/gateways/tzafon/overview.mdx new file mode 100644 index 000000000..fb55a1b8c --- /dev/null +++ b/models/providers/gateways/tzafon/overview.mdx @@ -0,0 +1,61 @@ +--- +title: Tzafon +sidebarTitle: Overview +description: Use Tzafon models with Agno agents. +--- + +Tzafon provides OpenAI-compatible API endpoints for its language models. +See their documentation [here](https://docs.tzafon.ai/core-concepts/chat-completions). + +Available models include `tzafon.sm-1` and `tzafon.northstar-cua-fast`. + +## Authentication + +Set your `TZAFON_API_KEY` environment variable. Get your key from the [Tzafon developer dashboard](https://tzafon.ai/developer). + + + +```bash Mac +export TZAFON_API_KEY=*** +``` + +```bash Windows +setx TZAFON_API_KEY *** +``` + + + +## Example + +Use `Tzafon` with your `Agent`: + + + +```python agent.py +from agno.agent import Agent +from agno.models.tzafon import Tzafon + +agent = Agent( + model=Tzafon(id="tzafon.sm-1"), + markdown=True +) + +# Print the response in the terminal +agent.print_response("Share a 2 sentence horror story.") +``` + + + + View more examples [here](/models/providers/gateways/tzafon/usage/basic-stream). + +## Params + +| Parameter | Type | Default | Description | +| ------------ | ------------------ | --------------------------------------------- | --------------------------------------------------------------------- | +| `id` | `str` | `"tzafon.sm-1"` | The id of the Tzafon model to use | +| `name` | `str` | `"Tzafon"` | The name of the model | +| `provider` | `str` | `"Tzafon"` | The provider of the model | +| `api_key` | `Optional[str]` | `None` | The API key for Tzafon (defaults to TZAFON_API_KEY env var) | +| `base_url` | `str` | `"https://api.tzafon.ai/v1"` | The base URL for the Tzafon API | + +`Tzafon` also supports the params of [OpenAI](/reference/models/openai). diff --git a/models/providers/gateways/tzafon/usage/basic-stream.mdx b/models/providers/gateways/tzafon/usage/basic-stream.mdx new file mode 100644 index 000000000..8459d0589 --- /dev/null +++ b/models/providers/gateways/tzafon/usage/basic-stream.mdx @@ -0,0 +1,23 @@ +--- +title: Basic Streaming Agent +sidebarTitle: Basic Stream +description: Create a basic streaming Agno agent using Tzafon. +--- + +```python cookbook/90_models/tzafon/basic_stream.py +from typing import Iterator +from agno.agent import Agent, RunOutputEvent +from agno.models.tzafon import Tzafon + +agent = Agent( + model=Tzafon(id="tzafon.sm-1"), markdown=True +) + +# Get the response in a variable +# run_response: Iterator[RunOutputEvent] = agent.run("Share a 2 sentence horror story", stream=True) +# for chunk in run_response: +# print(chunk.content) + +# Print the response in the terminal +agent.print_response("Share a 2 sentence horror story", stream=True) +``` diff --git a/models/providers/gateways/tzafon/usage/basic.mdx b/models/providers/gateways/tzafon/usage/basic.mdx new file mode 100644 index 000000000..dd6f39ac4 --- /dev/null +++ b/models/providers/gateways/tzafon/usage/basic.mdx @@ -0,0 +1,21 @@ +--- +title: Basic Agent +sidebarTitle: Basic +description: Create a basic Agno agent using Tzafon. +--- + +```python cookbook/90_models/tzafon/basic.py +from agno.agent import Agent, RunOutput +from agno.models.tzafon import Tzafon + +agent = Agent( + model=Tzafon(id="tzafon.sm-1"), markdown=True +) + +# Get the response in a variable +# run: RunOutput = agent.run("Share a 2 sentence horror story") +# print(run.content) + +# Print the response in the terminal +agent.print_response("Share a 2 sentence horror story") +``` diff --git a/models/providers/gateways/tzafon/usage/tool-use.mdx b/models/providers/gateways/tzafon/usage/tool-use.mdx new file mode 100644 index 000000000..0c755ead5 --- /dev/null +++ b/models/providers/gateways/tzafon/usage/tool-use.mdx @@ -0,0 +1,20 @@ +--- +title: Agent with Tools +sidebarTitle: Tool Use +description: Use Tzafon with tool-equipped Agno agents. +--- + +```python cookbook/90_models/tzafon/tool_use.py +"""Run `uv pip install ddgs` to install dependencies.""" + +from agno.agent import Agent +from agno.models.tzafon import Tzafon +from agno.tools.websearch import WebSearchTools + +agent = Agent( + model=Tzafon(id="tzafon.sm-1"), + tools=[WebSearchTools()], + markdown=True, +) +agent.print_response("Whats happening in France?") +``` diff --git a/reference/models/tzafon.mdx b/reference/models/tzafon.mdx new file mode 100644 index 000000000..318557219 --- /dev/null +++ b/reference/models/tzafon.mdx @@ -0,0 +1,21 @@ +--- +title: Tzafon +sidebarTitle: Tzafon +--- + +The Tzafon model provides access to Tzafon's language models. + +## Parameters + +| Parameter | Type | Default | Description | +| ------------ | ------------------ | --------------------------------------------- | --------------------------------------------------------------------- | +| `id` | `str` | `"tzafon.sm-1"` | The id of the Tzafon model to use | +| `name` | `str` | `"Tzafon"` | The name of the model | +| `provider` | `str` | `"Tzafon"` | The provider of the model | +| `api_key` | `Optional[str]` | `None` | The API key for Tzafon (defaults to TZAFON_API_KEY env var) | +| `base_url` | `str` | `"https://api.tzafon.ai/v1"` | The base URL for the Tzafon API | +| `retries` | `int` | `0` | Number of retries to attempt before raising a ModelProviderError | +| `delay_between_retries` | `int` | `1` | Delay between retries, in seconds | +| `exponential_backoff` | `bool` | `False` | If True, the delay between retries is doubled each time | + +Tzafon extends the OpenAI-compatible interface and supports most parameters from OpenAI. From 4bb376dfca8516bb1a8183c9f71c4f610b350d60 Mon Sep 17 00:00:00 2001 From: eddieogola Date: Sun, 1 Mar 2026 21:46:54 +0300 Subject: [PATCH 2/5] feat: Add Tzafon model provider card to the model index documentation. --- models/providers/model-index.mdx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/models/providers/model-index.mdx b/models/providers/model-index.mdx index aea2858b0..20f32e581 100644 --- a/models/providers/model-index.mdx +++ b/models/providers/model-index.mdx @@ -361,6 +361,14 @@ Agno supports the following model providers organized by category: > SiliconFlow model provider. + + Tzafon AI models integration. + Date: Tue, 31 Mar 2026 23:07:40 +0300 Subject: [PATCH 3/5] Format JSON for better readability --- docs.json | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/docs.json b/docs.json index 1cb6225b9..c638400e6 100644 --- a/docs.json +++ b/docs.json @@ -9,7 +9,13 @@ }, "favicon": "/favicon.png", "contextual": { - "options": ["copy", "mcp", "cursor", "chatgpt", "claude"] + "options": [ + "copy", + "mcp", + "cursor", + "chatgpt", + "claude" + ] }, "logo": { "light": "/logo/black.svg", @@ -74,7 +80,9 @@ "groups": [ { "group": "Overview", - "pages": ["index"] + "pages": [ + "index" + ] } ] }, @@ -83,7 +91,10 @@ "groups": [ { "group": "Get Started", - "pages": ["introduction", "first-agent"] + "pages": [ + "introduction", + "first-agent" + ] }, { "group": "Basics", @@ -481,11 +492,15 @@ }, { "group": "Supabase", - "pages": ["database/providers/supabase/overview"] + "pages": [ + "database/providers/supabase/overview" + ] }, { "group": "Neon", - "pages": ["database/providers/neon/overview"] + "pages": [ + "database/providers/neon/overview" + ] }, "database/providers/selecting-tables" ] @@ -2115,7 +2130,9 @@ "sessions/metrics/team", { "group": "Usage", - "pages": ["sessions/metrics/usage/team-metrics"] + "pages": [ + "sessions/metrics/usage/team-metrics" + ] } ] }, @@ -2228,7 +2245,10 @@ { "group": "Context Compression", "tag": "BETA", - "pages": ["compression/overview", "compression/token-counting"] + "pages": [ + "compression/overview", + "compression/token-counting" + ] }, { "group": "Dependency Injection", @@ -2346,7 +2366,9 @@ }, { "group": "Ollama", - "pages": ["reasoning/usage/models/ollama/ollama"] + "pages": [ + "reasoning/usage/models/ollama/ollama" + ] }, { "group": "OpenAI", @@ -2464,7 +2486,9 @@ }, { "group": "Files", - "pages": ["multimodal/agent/usage/file-input-for-tool"] + "pages": [ + "multimodal/agent/usage/file-input-for-tool" + ] } ] }, From 4611eb720a805a756808ac01b1c7ab5040fa48ba Mon Sep 17 00:00:00 2001 From: eddieogola <39475602+eddieogola@users.noreply.github.com> Date: Tue, 31 Mar 2026 23:08:26 +0300 Subject: [PATCH 4/5] Fix formatting in docs.json for contextual options --- docs.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs.json b/docs.json index c638400e6..77b431658 100644 --- a/docs.json +++ b/docs.json @@ -10,10 +10,10 @@ "favicon": "/favicon.png", "contextual": { "options": [ - "copy", - "mcp", + "copy", + "mcp", "cursor", - "chatgpt", + "chatgpt", "claude" ] }, From c7162585430164e3ab85757e90adeb1b99bf5dbd Mon Sep 17 00:00:00 2001 From: eddieogola <39475602+eddieogola@users.noreply.github.com> Date: Tue, 31 Mar 2026 23:19:05 +0300 Subject: [PATCH 5/5] Fix formatting issues in docs.json --- docs.json | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/docs.json b/docs.json index 77b431658..461450f68 100644 --- a/docs.json +++ b/docs.json @@ -12,7 +12,7 @@ "options": [ "copy", "mcp", - "cursor", + "cursor", "chatgpt", "claude" ] @@ -92,7 +92,7 @@ { "group": "Get Started", "pages": [ - "introduction", + "introduction", "first-agent" ] }, @@ -2246,7 +2246,7 @@ "group": "Context Compression", "tag": "BETA", "pages": [ - "compression/overview", + "compression/overview", "compression/token-counting" ] }, @@ -3804,11 +3804,15 @@ }, { "group": "Supabase", - "pages": ["database/providers/supabase/overview"] + "pages": [ + "database/providers/supabase/overview" + ] }, { "group": "Neon", - "pages": ["database/providers/neon/overview"] + "pages": [ + "database/providers/neon/overview" + ] }, "database/providers/selecting-tables" ] @@ -4090,7 +4094,9 @@ { "group": "Culture", "tag": "experimental", - "pages": ["culture/overview"] + "pages": [ + "culture/overview" + ] }, "custom-logging" ] @@ -4124,7 +4130,9 @@ "pages": [ { "group": "Memory", - "pages": ["integrations/memory/memori"] + "pages": [ + "integrations/memory/memori" + ] }, { "group": "Discord Bot", @@ -4146,13 +4154,17 @@ "integrations/testing/overview", { "group": "Usage", - "pages": ["integrations/testing/usage/basic"] + "pages": [ + "integrations/testing/usage/basic" + ] } ] }, { "group": "Governance", - "pages": ["integrations/governance/agentsystems-notary"] + "pages": [ + "integrations/governance/agentsystems-notary" + ] } ] }, @@ -4161,7 +4173,9 @@ "pages": [ { "group": "Agno v2 Migration", - "pages": ["other/v2-migration", "other/v2-changelog"] + "pages": [ + "other/v2-migration", + "other/v2-changelog"] }, "other/database-migrations", "other/workflows-migration"