diff --git a/docs.json b/docs.json
index c24f4a7..dad47e1 100644
--- a/docs.json
+++ b/docs.json
@@ -223,7 +223,8 @@
"pages": [
"v3/integrations/openai-sdk-python",
"v3/integrations/openai-sdk-typescript",
- "v3/integrations/langchain"
+ "v3/integrations/langchain",
+ "v3/integrations/pydantic-ai"
]
},
{
diff --git a/integration-logo/pydantic-ai-icondoc.svg b/integration-logo/pydantic-ai-icondoc.svg
new file mode 100644
index 0000000..95e725f
--- /dev/null
+++ b/integration-logo/pydantic-ai-icondoc.svg
@@ -0,0 +1,3 @@
+
diff --git a/v3/integrations/hermes.mdx b/v3/integrations/hermes.mdx
index 0f9f8c5..c85783d 100644
--- a/v3/integrations/hermes.mdx
+++ b/v3/integrations/hermes.mdx
@@ -15,7 +15,7 @@ import { TechArticleSchema } from "/snippets/TechArticleSchema.mdx";
proficiencyLevel="Intermediate"
keywords={["Eden AI", "AI API", "Hermes Agent", "Nous Research"]}
datePublished="2026-06-19T00:00:00Z"
- dateModified="2026-06-19T00:00:00Z"
+ dateModified="2026-07-16T00:00:00Z"
/>
Connect [Hermes Agent](https://hermes-agent.nousresearch.com) to Eden AI and run the self-hosted, persistent agent on 500+ models with automatic fallbacks and a single API key.
@@ -123,6 +123,51 @@ Hermes can fall back to a backup model when the primary one fails. Add a second
hermes fallback add
```
+## First-class provider plugin (optional)
+
+The setup above uses Hermes' generic `custom` provider, which is the fastest way to get running. For a **native `--provider eden-ai` experience** — so Eden AI shows up in `hermes model`, `hermes doctor`, and the setup wizard — install Eden AI as a **standalone model-provider plugin**. Drop a directory under `$HERMES_HOME/plugins/model-providers/eden-ai/`, with no changes to the Hermes repo:
+
+
+{/* skip-test */}
+```python __init__.py
+from providers import register_provider
+from providers.base import ProviderProfile
+
+eden_ai = ProviderProfile(
+ name="eden-ai",
+ aliases=("edenai",),
+ display_name="Eden AI",
+ description="Eden AI — 500+ models via one OpenAI-compatible API (EU/GDPR)",
+ signup_url="https://app.edenai.run",
+ env_vars=("EDENAI_API_KEY",),
+ base_url="https://api.edenai.run/v3",
+ auth_type="api_key",
+ default_aux_model="mistral/mistral-small-2603",
+ fallback_models=(
+ "anthropic/claude-sonnet-5",
+ "openai/gpt-5.5",
+ "mistral/mistral-small-2603",
+ ),
+)
+
+register_provider(eden_ai)
+```
+
+```yaml plugin.yaml
+name: eden-ai
+kind: model-provider
+version: 1.0.0
+description: Eden AI — 500+ models via one OpenAI-compatible API (EU/GDPR)
+author: Eden AI
+```
+
+
+Hermes then auto-wires credential resolution, the `--provider eden-ai` flag, the `hermes model` picker (models fetched from `{base_url}/models`), and the `hermes doctor` health check. Select it with:
+
+```bash
+hermes chat --provider eden-ai
+```
+
## Troubleshooting
### `401` / `Custom token not found`
diff --git a/v3/integrations/pydantic-ai.mdx b/v3/integrations/pydantic-ai.mdx
new file mode 100644
index 0000000..7c55515
--- /dev/null
+++ b/v3/integrations/pydantic-ai.mdx
@@ -0,0 +1,205 @@
+---
+title: "Pydantic AI"
+icon: "/integration-logo/pydantic-ai-icondoc.svg"
+description: "Use Pydantic AI with Eden AI to build type-safe agents on 500+ AI models through one API."
+---
+
+import { TechArticleSchema } from "/snippets/TechArticleSchema.mdx";
+
+
+
+Use Pydantic AI with Eden AI to build type-safe agents on 500+ AI models through one API.
+
+## Overview
+
+Pydantic AI is a type-safe, structured-output agent framework for Python. It works with any OpenAI-compatible endpoint through `OpenAIChatModel` + `OpenAIProvider`, so you can point it at Eden AI's V3 API and access models from OpenAI, Anthropic, Google, Cohere, Meta, and more — behind one key, with EU-based, GDPR-aligned inference.
+
+## Installation
+
+
+```bash pip
+pip install pydantic-ai
+```
+
+```bash poetry
+poetry add pydantic-ai
+```
+
+
+
+## Quick Start
+
+Point Pydantic AI's OpenAI model at Eden AI:
+
+
+{/* skip-test */}
+```python Python
+from pydantic_ai import Agent
+from pydantic_ai.models.openai import OpenAIChatModel
+from pydantic_ai.providers.openai import OpenAIProvider
+
+model = OpenAIChatModel(
+ "openai/gpt-5.5",
+ provider=OpenAIProvider(
+ api_key="YOUR_EDEN_AI_API_KEY", # Get from https://app.edenai.run
+ base_url="https://api.edenai.run/v3",
+ ),
+)
+
+agent = Agent(model)
+result = agent.run_sync("Hello! How are you?")
+print(result.output)
+```
+
+
+## Available Models
+
+Access models from multiple providers using the `provider/model` format:
+
+**OpenAI**
+- `openai/gpt-5.5`
+- `openai/gpt-5-mini`
+
+**Anthropic**
+- `anthropic/claude-sonnet-5`
+- `anthropic/claude-opus-4-8`
+- `anthropic/claude-haiku-4-5`
+
+**Google**
+- `google/gemini-2.5-pro`
+- `google/gemini-3.5-flash`
+
+**Mistral**
+- `mistral/mistral-large-2512`
+- `mistral/mistral-small-2603`
+
+## Structured Output
+
+Pydantic AI's signature feature works unchanged — define a Pydantic `output_type` and the agent returns a validated object, whichever Eden AI model you choose:
+
+
+{/* skip-test */}
+```python Python
+from pydantic import BaseModel
+from pydantic_ai import Agent
+from pydantic_ai.models.openai import OpenAIChatModel
+from pydantic_ai.providers.openai import OpenAIProvider
+
+class City(BaseModel):
+ name: str
+ country: str
+ population: int
+
+model = OpenAIChatModel(
+ "anthropic/claude-sonnet-5",
+ provider=OpenAIProvider(
+ api_key="YOUR_EDEN_AI_API_KEY",
+ base_url="https://api.edenai.run/v3",
+ ),
+)
+
+agent = Agent(model, output_type=City)
+result = agent.run_sync("Tell me about the capital of France.")
+print(result.output) # City(name='Paris', country='France', population=...)
+```
+
+
+## Multi-Turn Conversations
+
+Keep conversation history across runs with `message_history`:
+
+
+{/* skip-test */}
+```python Python
+from pydantic_ai import Agent
+from pydantic_ai.models.openai import OpenAIChatModel
+from pydantic_ai.providers.openai import OpenAIProvider
+
+model = OpenAIChatModel(
+ "anthropic/claude-sonnet-5",
+ provider=OpenAIProvider(
+ api_key="YOUR_EDEN_AI_API_KEY",
+ base_url="https://api.edenai.run/v3",
+ ),
+)
+agent = Agent(model, system_prompt="You are a helpful assistant.")
+
+result = agent.run_sync("What is the capital of France?")
+print(result.output)
+
+# Continue the conversation with prior context
+result = agent.run_sync(
+ "What's its population?",
+ message_history=result.all_messages(),
+)
+print(result.output)
+```
+
+
+## Error Handling
+
+
+{/* skip-test */}
+```python Python
+from pydantic_ai import Agent
+from pydantic_ai.models.openai import OpenAIChatModel
+from pydantic_ai.providers.openai import OpenAIProvider
+from pydantic_ai.exceptions import ModelHTTPError, UnexpectedModelBehavior
+
+model = OpenAIChatModel(
+ "openai/gpt-5.5",
+ provider=OpenAIProvider(
+ api_key="YOUR_EDEN_AI_API_KEY",
+ base_url="https://api.edenai.run/v3",
+ ),
+)
+agent = Agent(model)
+
+try:
+ result = agent.run_sync("Hello!")
+ print(result.output)
+except ModelHTTPError as e:
+ print(f"Model HTTP error (auth, rate limit, bad request): {e}")
+except UnexpectedModelBehavior as e:
+ print(f"Unexpected model behavior: {e}")
+```
+
+
+## Environment Variables
+
+
+```bash .env
+EDEN_AI_API_KEY=your_api_key_here
+```
+
+{/* skip-test */}
+```python Python
+import os
+from pydantic_ai.models.openai import OpenAIChatModel
+from pydantic_ai.providers.openai import OpenAIProvider
+
+model = OpenAIChatModel(
+ "openai/gpt-5.5",
+ provider=OpenAIProvider(
+ api_key=os.getenv("EDEN_AI_API_KEY"),
+ base_url="https://api.edenai.run/v3",
+ ),
+)
+```
+
+
+## Next Steps
+
+- [Chat Completions](/v3/llms/chat-completions) - Core LLM endpoint
+- [List LLM Models](/v3/llms/listing-models) - Browse available providers and models
+- [OpenAI SDK (Python)](/v3/integrations/openai-sdk-python) - Direct SDK usage