Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,8 @@
"v3/integrations/langchain",
"v3/integrations/pydantic-ai",
"v3/integrations/aisuite",
"v3/integrations/haystack"
"v3/integrations/haystack",
"v3/integrations/atomic-agents"
]
},
{
Expand All @@ -235,7 +236,8 @@
"expanded": false,
"pages": [
"v3/integrations/bifrost",
"v3/integrations/lynkr"
"v3/integrations/lynkr",
"v3/integrations/open-connector"
]
},
{
Expand Down Expand Up @@ -267,7 +269,8 @@
"expanded": false,
"pages": [
"v3/integrations/librechat",
"v3/integrations/open-webui"
"v3/integrations/open-webui",
"v3/integrations/deeptutor"
]
},
{
Expand Down
11 changes: 11 additions & 0 deletions integration-logo/atomic-agents-icondoc.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions integration-logo/deeptutor-icondoc.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions integration-logo/open-connector-icondoc.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
128 changes: 128 additions & 0 deletions v3/integrations/atomic-agents.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
---
title: "Atomic Agents"
icon: "/integration-logo/atomic-agents-icondoc.svg"
description: "Use Atomic Agents with Eden AI to build agents on 500+ AI models through an OpenAI-compatible, Instructor-powered interface."
---

import { TechArticleSchema } from "/snippets/TechArticleSchema.mdx";

<TechArticleSchema
title={"Atomic Agents"}
description={"Use Atomic Agents with Eden AI to build agents on 500+ AI models through an OpenAI-compatible, Instructor-powered interface."}
path="v3/integrations/atomic-agents"
articleSection="AI Frameworks"
about={"Agent Framework Integration"}
proficiencyLevel="Intermediate"
keywords={["Eden AI", "AI API", "Atomic Agents", "Python", "Instructor"]}
datePublished="2026-07-27T00:00:00Z"
dateModified="2026-07-27T00:00:00Z"
/>

Use Atomic Agents with Eden AI to build agents on 500+ AI models through an OpenAI-compatible, Instructor-powered interface.

## Overview

[Atomic Agents](https://github.com/Eigenwise/atomic-agents) is a lightweight, modular Python framework for building AI agents on composable, schema-driven building blocks (via [Instructor](https://github.com/instructor-ai/instructor) and Pydantic). Atomic Agents works with Eden AI out of the box through its existing OpenAI-compatible client, so your agents reach models from OpenAI, Anthropic, Google, Mistral and more behind one key, with EU-based, GDPR-aligned inference.

Check warning on line 25 in v3/integrations/atomic-agents.mdx

View check run for this annotation

Mintlify / Mintlify Validation (edenai) - vale-spellcheck

v3/integrations/atomic-agents.mdx#L25

Did you really mean 'composable'?

Check warning on line 25 in v3/integrations/atomic-agents.mdx

View check run for this annotation

Mintlify / Mintlify Validation (edenai) - vale-spellcheck

v3/integrations/atomic-agents.mdx#L25

Did you really mean 'Pydantic'?

## Installation

Eden AI reuses the OpenAI client and Instructor that Atomic Agents already relies on:

<CodeGroup>
```bash pip
pip install atomic-agents openai instructor

Check warning on line 33 in v3/integrations/atomic-agents.mdx

View check run for this annotation

Mintlify / Mintlify Validation (edenai) - vale-spellcheck

v3/integrations/atomic-agents.mdx#L33

Did you really mean 'openai'?
```

```bash poetry
poetry add atomic-agents openai instructor
```
</CodeGroup>

## Quick Start

Wrap an OpenAI client pointed at Eden AI with Instructor — the same pattern used for any other OpenAI-compatible provider — and pass it to your agent:

<CodeGroup>
```bash .env
EDENAI_API_KEY=your_api_key_here
```
Comment on lines +46 to +48

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use consistent token placeholders across the integration guides.

These examples use your_api_key_here without distinguishing production credentials from sandbox credentials.

  • v3/integrations/atomic-agents.mdx#L46-L48: use api_token for the production .env example.
  • v3/integrations/atomic-agents.mdx#L119-L121: apply the same production/sandbox token naming.
  • v3/integrations/open-connector.mdx#L44-L47: replace the JSON placeholder with an explicit api_token or sandbox_api_token.
  • v3/integrations/open-connector.mdx#L89-L92: apply the same token naming to the update example.

As per coding guidelines, V3 examples must distinguish production api_token from testing sandbox_api_token.

📍 Affects 2 files
  • v3/integrations/atomic-agents.mdx#L46-L48 (this comment)
  • v3/integrations/atomic-agents.mdx#L119-L121
  • v3/integrations/open-connector.mdx#L44-L47
  • v3/integrations/open-connector.mdx#L89-L92
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@v3/integrations/atomic-agents.mdx` around lines 46 - 48, Use consistent V3
token placeholders in all four examples: in v3/integrations/atomic-agents.mdx
lines 46-48 and 119-121, use api_token for production and sandbox_api_token for
testing; in v3/integrations/open-connector.mdx lines 44-47 and 89-92, replace
generic JSON placeholders with the corresponding explicit api_token or
sandbox_api_token names.

Source: Coding guidelines


{/* skip-test */}
```python Python
import os
import instructor
from openai import OpenAI
from atomic_agents.agents.base_agent import BaseAgent, BaseAgentConfig

client = instructor.from_openai(
OpenAI(
base_url="https://api.edenai.run/v3",
api_key=os.getenv("EDENAI_API_KEY"),
)
)

agent = BaseAgent(
config=BaseAgentConfig(
client=client,
model="anthropic/claude-sonnet-5", # <provider>/<model>
)
)

response = agent.run(agent.input_schema(chat_message="Hello! How are you?"))
print(response.chat_message)
Comment on lines +51 to +72

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
python -m pip install -U atomic-agents openai instructor
python - <<'PY'
from inspect import signature
from atomic_agents import AtomicAgent, AgentConfig, BasicChatInputSchema

assert "config" in signature(AtomicAgent).parameters
assert "chat_message" in signature(BasicChatInputSchema).parameters
PY

Repository: edenai/docs

Length of output: 312


🌐 Web query:

atomic-agents latest API AtomicAgent AgentConfig BasicChatInputSchema BaseAgentConfig

💡 Result:

Atomic Agents is a lightweight, modular Python framework designed for building agentic AI pipelines and applications [1][2]. It leverages Pydantic for data validation and schema serialization, and is built on top of the Instructor library to support various LLM providers (e.g., OpenAI, Anthropic, Gemini, Ollama) [1][3][2]. Key Components and Definitions: AtomicAgent The AtomicAgent class is the core component for constructing AI agents [4][5]. It manages chat interactions, history, system prompts, and responses from language models [4][5]. It is instantiated with a configuration object and expects both an input schema and an output schema (typically via generic type parameters: AtomicAgent[InputSchema, OutputSchema]) [6][7]. AgentConfig AgentConfig is a Pydantic model that provides the configuration for an AtomicAgent [4][8]. It includes essential parameters such as the Instructor client, the LLM model identifier, optional history management (ChatHistory), and a system prompt generator [4][8]. As of recent updates (v2.0+), it no longer requires the explicit inclusion of input or output schemas, which are now handled at the agent class level [7]. BasicChatInputSchema BasicChatInputSchema is a standard input schema that inherits from BaseIOSchema [8][7]. It provides a default structure for user input in chat-based agents, typically containing a chat_message field [8]. BaseAgentConfig (Legacy) BaseAgentConfig is a deprecated class [7]. In earlier versions of the framework, it served the role now filled by AgentConfig [7]. Users upgrading from older versions must migrate to AgentConfig [7]. For reference, the framework also includes several other key classes such as ChatHistory (for memory management) and BaseIOSchema (the base class for all input/output schemas) [4][9][7]. The framework's architecture was significantly updated in version 2.0, with deprecated legacy names (like BaseAgent, BaseAgentConfig, etc.) being replaced by the current structures mentioned above [7]. [4][1][8][7]

Citations:


🌐 Web query:

git clone github.com/eigenwise/atomic-agents BaseAgent InputSchema quickstart

💡 Result:

To get started with Atomic Agents, you can clone the main repository using the following command: git clone https://github.com/eigenwise/atomic-agents.git The Atomic Agents framework is designed to be a lightweight and modular system for building AI agents, built on top of Instructor and Pydantic [1][2]. Regarding the use of BaseAgent and InputSchema in your quickstart, Atomic Agents primarily utilizes the AtomicAgent class, which takes input and output schemas defined as Pydantic models [3][4]. Below is a standard pattern for creating an agent with custom schemas: from pydantic import Field from atomic_agents import AtomicAgent, AgentConfig, BaseIOSchema # 1. Define your schemas inheriting from BaseIOSchema class MyInputSchema(BaseIOSchema): query: str = Field(..., description="The user's query.") class MyOutputSchema(BaseIOSchema): response: str = Field(..., description="The agent's response.") # 2. Configure and initialize the agent agent = AtomicAgent[MyInputSchema, MyOutputSchema]( config=AgentConfig( client=your_instructor_client, model="gpt-4o", # or your preferred model #... other config options like system_prompt_generator or history)) # 3. Run the agent input_data = MyInputSchema(query="Hello, agent!") result = agent.run(input_data) print(result.response) Key resources for your quickstart include: - Official Documentation: https://eigenwise.github.io/atomic-agents/ [1] - GitHub Repository: https://github.com/eigenwise/atomic-agents [5] - Example directory: Check the atomic-examples folder in the repository for various implementations, including basic chatbots and custom schemas [5][2]. Note: Ensure you have installed the core library via pip install atomic-agents and any specific provider SDKs (e.g., openai, anthropic) required for your chosen model [1][6].

Citations:


🌐 Web query:

eigenwise atomic-agents BasicChatInputSchema chat_message quickstart

💡 Result:

In the Atomic Agents framework, BasicChatInputSchema is the default input schema used for standard agent interactions [1][2]. It is defined as a Pydantic model that inherits from BaseIOSchema and contains a single required field, chat_message, which captures the user's input [1][2]. To use it in a quickstart context, you typically instantiate an AtomicAgent with BasicChatInputSchema (and a corresponding output schema, such as BasicChatOutputSchema) as type parameters, then pass an instance of the schema to the agent's run method [3][4]. Quickstart Example: import instructor import openai from atomic_agents import AtomicAgent, AgentConfig, BasicChatInputSchema, BasicChatOutputSchema from atomic_agents.context import ChatHistory # 1. Setup client = instructor.from_openai(openai.OpenAI) history = ChatHistory # 2. Initialize Agent agent = AtomicAgent[BasicChatInputSchema, BasicChatOutputSchema]( config=AgentConfig( client=client, model="gpt-5-mini", history=history)) # 3. Use BasicChatInputSchema to send a message user_message = "Tell me about quantum computing" response = agent.run(BasicChatInputSchema(chat_message=user_message)) print(response.chat_message) Key Implementation Details: - The schema is designed for simple, chat-based interactions [1][2]. - You can access the agent's expected input schema via agent.input_schema [5]. - For more complex interactions, you can define custom schemas inheriting from BaseIOSchema and replace BasicChatInputSchema in the agent definition [6].

Citations:


🌐 Web query:

atomic-agents github BaseAgentConfig BaseAgent removed deprecated

💡 Result:

In the atomic-agents library, the classes BaseAgent and BaseAgentConfig were deprecated and subsequently removed in version 2.0.0 as part of a major refactor [1][2]. The following replacements should be used: - BaseAgent has been renamed to AtomicAgent [3][1]. - BaseAgentConfig has been renamed to AgentConfig [3][1]. Additionally, the library underwent significant structural changes in version 2.0.0, including: - Simplification of import paths by eliminating the.lib directory [3][2]. - Renaming of other related classes, such as BaseAgentInputSchema to BasicChatInputSchema and AgentMemory to ChatHistory [1]. - Updates to how schemas are specified; for example, they are now typically handled via generic type parameters (e.g., AtomicAgent[InputSchema, OutputSchema]), and input_schema and output_schema fields have been removed from the configuration object [1]. Users migrating to v2.0.0 or later should consult the official UPGRADE_DOC.md in the repository for a complete list of breaking changes and migration steps [1].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Locate and inspect the referenced atomic agents documentation snippet(s).
wd="$(pwd)"
if [ -z "$wd" ]; then
  printf 'PWD unavailable\n'
  exit 0
fi

printf 'Tracked candidates for atomic-agents.mdx:\n'
git ls-files | grep -E '(^|/)atomic-agents\.mdx$|atomic-agents' || true

printf '\nFile excerpt for v3/integrations/atomic-agents.mdx:\n'
if [ -f v3/integrations/atomic-agents.mdx ]; then
  wc -l v3/integrations/atomic-agents.mdx
  sed -n '1,130p' v3/integrations/atomic-agents.mdx | cat -n
else
  echo 'v3/integrations/atomic-agents.mdx not found'
fi

printf '\nSearch for BaseAgent/BaseAgentConfig/input_schema usage:\n'
rg -n "BaseAgent|BaseAgentConfig|input_schema\\(|AtomicAgent|AgentConfig|BasicChatInputSchema|atomic-agents" v3/integrations/atomic-agents.mdx 2>/dev/null || true

Repository: edenai/docs

Length of output: 6230


Update the Atomic Agents snippets to the current API.

The installed atomic-agents package uses AtomicAgent, AgentConfig, and BasicChatInputSchema; BaseAgent/BaseAgentConfig are from the deprecated API, and agent.input_schema(...)/AtomicAgent.input_schema(...) are not the call form shown in the current docs.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@v3/integrations/atomic-agents.mdx` around lines 51 - 72, Update the Atomic
Agents example to use the current AtomicAgent, AgentConfig, and
BasicChatInputSchema symbols instead of BaseAgent and BaseAgentConfig. Construct
the agent with the current configuration API, and invoke run using a
BasicChatInputSchema instance rather than agent.input_schema(...), preserving
the existing client, model, and response flow.

```
</CodeGroup>

Both Instructor `TOOLS` and `JSON` modes work unchanged with Eden AI.

## Switching models

Change the `model` string on `BaseAgentConfig` to reach any Eden AI model — no per-provider SDKs, no code changes:

Check warning on line 80 in v3/integrations/atomic-agents.mdx

View check run for this annotation

Mintlify / Mintlify Validation (edenai) - vale-spellcheck

v3/integrations/atomic-agents.mdx#L80

Did you really mean 'SDKs'?

<CodeGroup>
{/* skip-test */}
```python Python
for model in [
"openai/gpt-5.5",
"anthropic/claude-sonnet-5",
"mistral/mistral-large-2512",
]:
agent = BaseAgent(config=BaseAgentConfig(client=client, model=model))
response = agent.run(agent.input_schema(chat_message="Write a haiku about the sea."))
print(model, "->", response.chat_message)
```
</CodeGroup>

## Available Models

Use the `provider/model` format for any Eden AI model:

**OpenAI**
- `openai/gpt-5.5`
- `openai/gpt-5-mini`

**Anthropic**
- `anthropic/claude-sonnet-5`
- `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`

## Environment Variables

<CodeGroup>
```bash .env
EDENAI_API_KEY=your_api_key_here
```
</CodeGroup>

## Next Steps

- [aisuite](/v3/integrations/aisuite) - Another OpenAI-style multi-provider interface
- [Chat Completions](/v3/llms/chat-completions) - Core LLM endpoint
- [List LLM Models](/v3/llms/listing-models) - Browse available providers and models
94 changes: 94 additions & 0 deletions v3/integrations/deeptutor.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
---
title: "DeepTutor"
icon: "/integration-logo/deeptutor-icondoc.svg"
description: "Use DeepTutor with Eden AI to run your self-hosted study and research app on 500+ AI models through one API."
---

import { TechArticleSchema } from "/snippets/TechArticleSchema.mdx";

<TechArticleSchema
title={"DeepTutor"}
description={"Use DeepTutor with Eden AI to run your self-hosted study and research app on 500+ AI models through one API."}
path="v3/integrations/deeptutor"
articleSection="Chat UI"
about={"AI Study & Research App Integration"}
proficiencyLevel="Beginner"
keywords={["Eden AI", "AI API", "DeepTutor", "RAG", "Study"]}
datePublished="2026-07-27T00:00:00Z"
dateModified="2026-07-27T00:00:00Z"
/>

Use DeepTutor with Eden AI to run your self-hosted study and research app on 500+ AI models through one API.

## Overview

[DeepTutor](https://github.com/HKUDS/DeepTutor) is a self-hosted AI study and research app — chat, quizzes, and RAG knowledge bases. Eden AI is registered as a **built-in gateway provider** in DeepTutor's model registry, so your whole instance can run on models from OpenAI, Anthropic, Google, Mistral and more behind one key, with EU-based, GDPR-aligned inference.

## Installation

<CodeGroup>
```bash pip
mkdir -p my-deeptutor && cd my-deeptutor

Check warning on line 31 in v3/integrations/deeptutor.mdx

View check run for this annotation

Mintlify / Mintlify Validation (edenai) - vale-spellcheck

v3/integrations/deeptutor.mdx#L31

Did you really mean 'mkdir'?
pip install -U deeptutor
```
</CodeGroup>

## Quick Start

Select Eden AI as the LLM provider when the setup wizard prompts for one:

<CodeGroup>
```bash Terminal
deeptutor init # prompts for LLM provider / base URL / API key / model

Check warning on line 42 in v3/integrations/deeptutor.mdx

View check run for this annotation

Mintlify / Mintlify Validation (edenai) - vale-spellcheck

v3/integrations/deeptutor.mdx#L42

Did you really mean 'deeptutor'?
deeptutor start # starts backend + frontend

Check warning on line 43 in v3/integrations/deeptutor.mdx

View check run for this annotation

Mintlify / Mintlify Validation (edenai) - vale-spellcheck

v3/integrations/deeptutor.mdx#L43

Did you really mean 'deeptutor'?
```
</CodeGroup>

Open the frontend URL printed in the terminal (default `http://127.0.0.1:3782`). Already running an instance? Add or change the provider later from **Settings → Models** in the web UI instead of re-running `init` — DeepTutor auto-detects Eden AI from the base URL.

## Configuration

DeepTutor's provider registry stores the profile in `data/user/settings/model_catalog.json`:

| Field | Value |
|---|---|
| Provider | `edenai` |
| Base URL | `https://api.edenai.run/v3` |
| API key | `EDENAI_API_KEY` |
| Model | `provider/model`, e.g. `anthropic/claude-sonnet-5` |
Comment on lines +51 to +58

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
tmp="$(mktemp -d)"
git clone --depth 1 https://github.com/HKUDS/DeepTutor.git "$tmp/DeepTutor"
rg -n 'project-root.*\.env|model_catalog|Settings.*Models|dotenv' "$tmp/DeepTutor/README.md"

Repository: edenai/docs

Length of output: 2012


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the relevant v3/deeptutor MDX sections and search the docs repo for DeepTutor EDENAI references.
if [ -f v3/integrations/deeptutor.mdx ]; then
  echo "== v3/integrations/deeptutor.mdx relevant lines =="
  sed -n '40,95p' v3/integrations/deeptutor.mdx | nl -ba -v40
else
  echo "missing v3/integrations/deeptutor.mdx"
fi

echo "== .env/EDENAI/model_catalog mentions =="
rg -n 'EDENAI_API_KEY|Environment Variables|model_catalog\.json|deep.*tutor|deeptutor|DeepTutor|\.env' .

Repository: edenai/docs

Length of output: 240


🏁 Script executed:

#!/bin/bash
set -euo pipefail

pwd
printf '\n== file exists? ==\n'
test -f v3/integrations/deeptutor.mdx && echo present || echo missing

printf '\n== v3/integrations/deeptutor.mdx relevant lines =="\n'
if test -f v3/integrations/deeptutor.mdx; then
  sed -n '40,95p' v3/integrations/deeptutor.mdx | awk '{printf "%5d  %s\n", NR+39, $0}'
fi

printf '\n== deep tutor/env/model catalog mentions in current repo =="\n'
rg -n 'EDENAI_API_KEY|Environment Variables|model_catalog\.json|deep.*tutor|deeptutor|DeepTutor|\.env' . || true

Repository: edenai/docs

Length of output: 13674


Remove the unused .env instructions for DeepTutor.

DeepTutor configures the EDTN AI key through deeptutor init or Settings → Models, stores it in data/user/settings/model_catalog.json, and treats project-root .env as unused configuration. Replace the EDENAI_API_KEY table value and the environment-variable block with a concise instruction to configure and save the Eden AI provider in Settings.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@v3/integrations/deeptutor.mdx` around lines 51 - 58, Update the DeepTutor
provider configuration section to remove the EDENAI_API_KEY table entry and any
project-root .env environment-variable instructions. Replace them with a concise
instruction directing users to configure and save the Eden AI provider through
deeptutor init or Settings → Models, preserving the existing provider and model
details.

Source: Coding guidelines


## Available Models

Use the `provider/model` format for any Eden AI model:

**OpenAI**
- `openai/gpt-5.5`
- `openai/gpt-5-mini`

**Anthropic**
- `anthropic/claude-sonnet-5`
- `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`

## Environment Variables

<CodeGroup>
```bash .env
EDENAI_API_KEY=your_api_key_here
```
</CodeGroup>

DeepTutor reads this key itself once the Eden AI provider is configured — it does not need to be exported manually in most setups (the Settings UI writes it into `model_catalog.json`).

## Next Steps

- [Open WebUI](/v3/integrations/open-webui) - Another self-hosted chat interface
- [Chat Completions](/v3/llms/chat-completions) - Core LLM endpoint
- [List LLM Models](/v3/llms/listing-models) - Browse available providers and models
100 changes: 100 additions & 0 deletions v3/integrations/open-connector.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
---
title: "open-connector"
icon: "/integration-logo/open-connector-icondoc.svg"
description: "Use open-connector with Eden AI to expose 500+ AI models through a self-hosted gateway with SDK, CLI, MCP and HTTP access."
---

import { TechArticleSchema } from "/snippets/TechArticleSchema.mdx";

<TechArticleSchema
title={"open-connector"}
description={"Use open-connector with Eden AI to expose 500+ AI models through a self-hosted gateway with SDK, CLI, MCP and HTTP access."}
path="v3/integrations/open-connector"
articleSection="AI Gateway"
about={"LLM Gateway Integration"}
proficiencyLevel="Intermediate"
keywords={["Eden AI", "AI API", "open-connector", "LLM Gateway", "MCP"]}
datePublished="2026-07-27T00:00:00Z"
dateModified="2026-07-27T00:00:00Z"
/>

Use open-connector with Eden AI to expose 500+ AI models through a self-hosted gateway with SDK, CLI, MCP and HTTP access.

## Overview

[open-connector](https://github.com/oomol-lab/open-connector) is an open-source gateway connecting 1000+ SaaS providers to AI agents via SDK, CLI, MCP and HTTP. Eden AI ships as a **built-in connector**, so any agent wired through open-connector reaches models from OpenAI, Anthropic, Google, Mistral and more behind one key, with EU-based, GDPR-aligned inference and per-request cost visibility.

## Installation

open-connector is a self-hosted gateway, distributed as a Docker image:

<CodeGroup>
```bash Docker
docker compose up
```
</CodeGroup>

This pulls `ghcr.io/oomol-lab/open-connector:latest` and serves the console and API at `http://localhost:3000`.
Comment on lines +29 to +37

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
tmp="$(mktemp -d)"
git clone --depth 1 https://github.com/oomol-lab/open-connector.git "$tmp/open-connector"
test -f "$tmp/open-connector/docker-compose.yml"

Repository: edenai/docs

Length of output: 202


🏁 Script executed:

#!/bin/bash
set -e

echo "== target file section =="
sed -n '1,80p' v3/integrations/open-connector.mdx | cat -n

echo
echo "== repository files mentioning open-connector docker compose =="
rg -n "open-connector|docker-compose|compose" v3/integrations/open-connector.mdx . -g '!node_modules' -g '!dist' || true

Repository: edenai/docs

Length of output: 10015


Make the Docker quick start runnable from a clean checkout.

docker compose up depends on the upstream repository’s docker-compose.yml, but this doc does not tell readers to clone github.com/oomol-lab/open-connector first, so the shown command is not self-contained.

Proposed fix
+git clone --depth 1 https://github.com/oomol-lab/open-connector.git
+cd open-connector
 docker compose up
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
open-connector is a self-hosted gateway, distributed as a Docker image:
<CodeGroup>
```bash Docker
docker compose up
```
</CodeGroup>
This pulls `ghcr.io/oomol-lab/open-connector:latest` and serves the console and API at `http://localhost:3000`.
open-connector is a self-hosted gateway, distributed as a Docker image:
<CodeGroup>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@v3/integrations/open-connector.mdx` around lines 29 - 37, Add the
prerequisite repository checkout step before the Docker quick-start command,
instructing readers to clone the upstream open-connector repository and change
into its directory. Keep the existing docker compose up command and image/URL
details unchanged.


## Quick Start

Store your Eden AI key as a connection credential, then call the `edenai` service:

<CodeGroup>
```bash Add credential
curl -s -X PUT http://localhost:3000/api/connections/edenai \
-H 'content-type: application/json' \
-d '{"authType":"api_key","values":{"apiKey":"your_api_key_here"}}'
```

```bash Call Eden AI
curl -s -X POST http://localhost:3000/v1/actions/edenai.create_chat_completion \
-H 'content-type: application/json' \
-d '{
"input": {
"model": "openai/gpt-5.5",
"messages": [{"role": "user", "content": "Hello! How are you?"}]
}
}'
Comment on lines +41 to +58

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
curl -fsS http://localhost:3000/openapi.json | jq '.components.securitySchemes'
curl -fsS http://localhost:3000/api/providers/edenai | jq .

Repository: edenai/docs

Length of output: 247


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== repo files =="
git ls-files | sed -n '1,120p'

echo "== target file excerpt =="
if [ -f v3/integrations/open-connector.mdx ]; then
  nl -ba v3/integrations/open-connector.mdx | sed -n '1,140p'
else
  fd -a 'open-connector\.mdx' . | sed -n '1,20p'
fi

echo "== docs/credentials.md excerpt if present =="
if [ -f docs/credentials.md ]; then
  nl -ba docs/credentials.md | sed -n '1,240p'
else
  fd -a 'credentials\.md' . | sed -n '1,20p'
fi

echo "== mentions of OOMOL_CONNECT_ENCRYPTION_KEY =="
rg -n "OOMOL_CONNECT_ENCRYPTION_KEY|encryption|credential|api_key|authType|Authorization:" . -g '!node_modules' -g '!dist' -g '!build' | sed -n '1,260p'

Repository: edenai/docs

Length of output: 4296


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== target file excerpt =="
if [ -f v3/integrations/open-connector.mdx ]; then
  cat -n v3/integrations/open-connector.mdx | sed -n '1,160p'
else
  echo "v3/integrations/open-connector.mdx not found"
  fd -a 'open-connector\.mdx' . 2>/dev/null || true
fi

echo "== docs/credentials.md excerpt if present =="
if [ -f docs/credentials.md ]; then
  cat -n docs/credentials.md | sed -n '1,260p'
else
  fd -a 'credentials\.md' . 2>/dev/null | while read -r f; do echo "--- $f"; cat -n "$f" | sed -n '1,120p'; done
fi

echo "== repository-wide mentions =="
rg -n "OOMOL_CONNECT_ENCRYPTION_KEY|encryption|credential|authType|Authorization: Bearer|Bearer <api_key>|Bearer"| || true

echo "== api connection/provider/action examples in v3 integrations =="
cat -n v3/integrations/open-connector.mdx | sed -n '1,160p' | rg -n "connections|edenai|api/|v1/actions|Authorization|bearer|secret|auth" -C 3 || true

Repository: edenai/docs

Length of output: 4467


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== repository-wide relevant mentions =="
rg -n "OOMOL_CONNECT_ENCRYPTION_KEY|encryption|credential|authType|Authorization: Bearer|Bearer <api_key>|Bearer" . || true

echo "== API docs endpoint examples =="
rg -n "Authorization: Bearer <api_key>|Bearer <api_key>|security|Bearer" api-reference v3 -g '*.mdx' -g '*.json' | sed -n '1,120p'

Repository: edenai/docs

Length of output: 29506


🌐 Web query:

open-connector OOMOL_CONNECT_ENCRYPTION_KEY credentials SQLite

💡 Result:

In OOMOL OpenConnector, the OOMOL_CONNECT_ENCRYPTION_KEY environment variable is used to enable AES-256-GCM encryption for sensitive data stored in the runtime database, such as SQLite [1][2]. When this key is configured, the system encrypts provider credentials, OAuth client configuration, and completed idempotent Action response payloads at rest [1][2]. If OOMOL_CONNECT_ENCRYPTION_KEY is not set, these items are stored in plaintext within the SQLite database [1][3]. In such cases, the runtime will issue a startup warning, and you should treat the SQLite database file as a sensitive, unprotected store [1][4]. Key management and usage details include: - External Storage: The OpenConnector runtime does not store the encryption key itself [1][3]. You are responsible for managing it securely using a secret manager or vault [3][5]. - Irrecoverability: If the encryption key is lost, any records encrypted with that key cannot be recovered [1][5]. - Key Rotation: You can rotate the encryption key by using the runtime:data rotate-key command, providing both the current (OOMOL_CONNECT_ENCRYPTION_KEY) and the new (OOMOL_CONNECT_NEW_ENCRYPTION_KEY) keys [1][6]. - Metadata: Even with encryption enabled, certain data remains unencrypted as metadata, including idempotency key hashes, request fingerprints, claim states, and timestamps [1][2].

Citations:


Document OpenConnector auth and credential-at-rest safeguards.

The example omits the required bearer auth for the /api credential write and /v1/actions call, so the credential flow will fail in authenticated deployments. Add ADMIN_BEARER_TOKEN for the connection update and Authorization: Bearer <api_token> on the action call, plus the OOMOL_CONNECT_ENCRYPTION_KEY setup or a local-only demo scope. Apply the same auth context at the second credential example too.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@v3/integrations/open-connector.mdx` around lines 41 - 58, Update the
OpenConnector documentation examples to include the required authentication
headers: use ADMIN_BEARER_TOKEN for the /api connection credential update and
Authorization: Bearer <api_token> for the /v1/actions call. Document
OOMOL_CONNECT_ENCRYPTION_KEY setup or explicitly scope the example to local-only
use, and apply the same authentication and credential-safety guidance to the
second credential example.

```
</CodeGroup>

The base URL (`https://api.edenai.run/v3`) is built into the connector — no extra configuration needed. The response includes the standard OpenAI-compatible fields plus a top-level `cost` field with the Eden AI billed cost.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
curl -fsS http://localhost:3000/v1/actions/edenai.create_chat_completion \
  -H "Authorization: Bearer ${OOMOL_CONNECT_RUNTIME_TOKEN}" \
  -H 'content-type: application/json' \
  -d '{"input":{"model":"openai/gpt-5.5","messages":[{"role":"user","content":"Hello"}]}}' |
  jq '{top_level_cost: .cost, nested_cost: .data.cost, nested_choices: .data.choices}'

Repository: edenai/docs

Length of output: 198


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== file context =="
sed -n '1,140p' v3/integrations/open-connector.mdx 2>/dev/null || true

echo
echo "== search open-connector/docs runtime api references =="
rg -n "data.cost|choices|success|message|data|meta|open-connector|edenai.create_chat_completion|create_chat_completion|runtime-api" . --glob '!node_modules' --glob '!dist' --glob '!build' --glob '!coverage' | head -200

Repository: edenai/docs

Length of output: 24432


🌐 Web query:

github oomol-lab open-connector docs/runtime-api.md response envelope success message data meta

💡 Result:

In the oomol-lab/open-connector project, the HTTP Runtime API (endpoints under /v1) utilizes a uniform JSON response envelope for its communication [1][2]. When a request is successful, the server returns a JSON response containing specific fields, including data and meta [3][4]. Based on the SDK implementation and test cases, the standard structure of this successful response envelope typically includes: data: The actual payload or result of the action or API call [3][5][6][4]. message: A human-readable status message (often "OK" for successful operations) [5][6][4]. meta: An object containing metadata regarding the request execution, which commonly includes [5][6][4]: - executionId: A server-assigned identifier for the specific execution [5][6][4]. - actionId: The identifier of the action being performed [5][6][4]. The SDK's executeRaw method explicitly maps these envelope fields into a RawResult object [6][4]. In contrast, the standard execute method returns the data field directly to the caller [5][4]. If a request fails, the server emits a different structure, generally { error: { code, message } }, which the SDK middleware maps to maintain consistency across the connector client [3][5].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
import urllib.request
urls = [
    "https://raw.githubusercontent.com/oomol-lab/open-connector/main/docs/runtime-api.md",
    "https://raw.githubusercontent.com/oomol-lab/open-connector/main/docs/runtime-api.md",
]
for url in urls[:1]:
    with urllib.request.urlopen(url, timeout=20) as r:
        text = r.read().decode("utf-8")
    start = text.find("## Runtime API")
    end = text.find("## SDK", start)
    section = text[start:end] if end != -1 else text[start:start+1600]
    print(section)
PY

echo
echo "== fetch open-connector repo runtime-api markdown excerpt =="
curl -fsS https://raw.githubusercontent.com/oomol-lab/open-connector/main/docs/runtime-api.md | sed -n '1,260p'

Repository: edenai/docs

Length of output: 2435


🌐 Web query:

"github.com/oomol-lab/open-connector" "data" "choices" "cost" "/v1/actions/edenai.create_chat_completion"

💡 Result:

The path /v1/actions/edenai.create_chat_completion refers to a specific Action within the OpenConnector ecosystem, which is an open-source gateway for connecting AI agents to various SaaS providers [1][2]. Regarding "data choices" and "cost": 1. Data Choices: OpenConnector acts as a mediator for API calls [3]. When using an action like edenai.create_chat_completion, the runtime handles the routing of your request to the Eden AI API [4][5]. The specific "data choices"—such as the model selection, message history, and other parameters—are defined by the schema of the Eden AI Chat Completions API [6][7]. OpenConnector exposes these through its generated OpenAPI specification, allowing you to inspect the required and optional inputs (e.g., model, messages, temperature) directly from the runtime's generated /openapi.json or through the Web Console [1][4]. 2. Cost: OpenConnector itself is an open-source gateway software [1][2] and does not inherently charge for executing actions. However, the cost of calling edenai.create_chat_completion depends entirely on your subscription or usage plan with Eden AI [7][8]. Because OpenConnector simply proxies these requests to the provider [4][5], any financial costs, rate limits, or data usage fees are governed by your direct agreement with Eden AI [7]. For technical implementation, you can call this action using the Connector SDK, the oo CLI, or by making a direct HTTP POST request to the /v1/actions/edenai.create_chat_completion endpoint on your OpenConnector runtime [1][9][4]. Ensure your runtime is configured with the necessary Eden AI credentials (usually an API key) in the Web Console, as the runtime maintains credential isolation [4][2][10].

Citations:


Describe the OpenConnector response envelope correctly.

OpenConnector /v1 responses wrap the payload in data, so the OpenAI-compatible completion fields and Eden AI cost in this SDK/API call should be documented under data, not as top-level fields.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@v3/integrations/open-connector.mdx` at line 62, Update the OpenConnector
response description to state that `/v1` responses wrap the payload in a
top-level `data` field, with the OpenAI-compatible completion fields and Eden AI
`cost` documented inside `data` rather than at the response root.


## Available Models

The `edenai` service exposes `edenai.list_models` and `edenai.create_chat_completion`. Use the `provider/model` format for any Eden AI model:

**OpenAI**
- `openai/gpt-5.5`
- `openai/gpt-5-mini`

**Anthropic**
- `anthropic/claude-sonnet-5`
- `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`

## Credentials

Unlike most integrations, open-connector stores the Eden AI key as a **connection credential** through its API rather than an environment variable:

<CodeGroup>
```bash Update credential
curl -s -X PUT http://localhost:3000/api/connections/edenai \
-H 'content-type: application/json' \
-d '{"authType":"api_key","values":{"apiKey":"your_api_key_here"}}'
```
</CodeGroup>

## Next Steps

- [Lynkr](/v3/integrations/lynkr) - Another self-hosted LLM gateway
- [Bifrost](/v3/integrations/bifrost) - Custom-provider LLM gateway
- [Chat Completions](/v3/llms/chat-completions) - Core LLM endpoint
Loading