LLM Providers
Purple8 Graph integrates with six LLM providers for JourneyAIAdvisor, SchemaDetector, and embedding generation. All providers implement the same LLMProvider interface — you can swap them with a one-line change.
Quick reference
| Provider | Class | Install extra | Best for |
|---|---|---|---|
| OpenAI | OpenAIProvider | pip install purple8-graph[openai] | Production, highest quality |
| Anthropic | AnthropicProvider | pip install purple8-graph[anthropic] | Long-context, safety-focused |
| Google Gemini | GeminiProvider | pip install purple8-graph[google] | Multimodal, Google Cloud |
| Mistral | MistralProvider | pip install purple8-graph[mistral] | Cost-effective, European data residency |
| Cohere | CohereProvider | pip install purple8-graph[cohere] | RAG-optimised reranking |
| Ollama | OllamaProvider | Ollama server running locally | Offline, private, no API cost |
OpenAI
from purple8_graph.genai import OpenAIProvider
provider = OpenAIProvider(
api_key="sk-...", # or set OPENAI_API_KEY env var
model="gpt-4o", # default: gpt-4o
embedding_model="text-embedding-3-small", # default
temperature=0.1,
max_tokens=1024,
)OPENAI_API_KEY=sk-...Supported models: gpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-3.5-turbo, o1, o1-mini
Embedding models: text-embedding-3-small (1536-dim), text-embedding-3-large (3072-dim), text-embedding-ada-002 (1536-dim)
Anthropic
from purple8_graph.genai import AnthropicProvider
provider = AnthropicProvider(
api_key="sk-ant-...", # or set ANTHROPIC_API_KEY env var
model="claude-3-5-sonnet-20241022", # default
max_tokens=1024,
)ANTHROPIC_API_KEY=sk-ant-...Supported models: claude-3-5-sonnet-20241022, claude-3-5-haiku-20241022, claude-3-opus-20240229
Long context
Claude 3.5 Sonnet supports a 200K token context window — useful when JourneyAIAdvisor needs to reason over a very long audit trail.
Google Gemini
from purple8_graph.genai import GeminiProvider
provider = GeminiProvider(
api_key="AIza...", # or set GOOGLE_API_KEY env var
model="gemini-1.5-pro", # default
embedding_model="models/text-embedding-004",
)GOOGLE_API_KEY=AIza...Supported models: gemini-1.5-pro, gemini-1.5-flash, gemini-2.0-flash
Embedding models: models/text-embedding-004 (768-dim)
Mistral
from purple8_graph.genai import MistralProvider
provider = MistralProvider(
api_key="...", # or set MISTRAL_API_KEY env var
model="mistral-large-latest", # default
embedding_model="mistral-embed",
)MISTRAL_API_KEY=...Supported models: mistral-large-latest, mistral-small-latest, codestral-latest
Embedding models: mistral-embed (1024-dim)
Cohere
from purple8_graph.genai import CohereProvider
provider = CohereProvider(
api_key="...", # or set COHERE_API_KEY env var
model="command-r-plus", # default
embedding_model="embed-english-v3.0",
rerank_model="rerank-english-v3.0", # optional, used in hybrid search
)COHERE_API_KEY=...Supported models: command-r-plus, command-r, command
Embedding models: embed-english-v3.0 (1024-dim), embed-multilingual-v3.0 (1024-dim)
Reranking: Cohere's reranker can be used as the final stage of hybrid search — set reranker=provider when calling db.hybrid.search.
Ollama (local / offline)
from purple8_graph.genai import OllamaProvider
provider = OllamaProvider(
base_url="http://localhost:11434", # default
model="llama3.1",
embedding_model="nomic-embed-text", # or all-minilm, mxbai-embed-large
)OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=llama3.1Prerequisites: Install Ollama and pull your model:
ollama pull llama3.1
ollama pull nomic-embed-textOllama runs fully offline — no API keys, no outbound network calls, no data leaves your machine. Ideal for air-gapped deployments and regulated environments.
Multi-provider fallback
MultiProvider tries providers in order, falling back on rate-limit or error:
from purple8_graph.genai import MultiProvider, OpenAIProvider, AnthropicProvider
provider = MultiProvider([
OpenAIProvider(api_key="sk-..."),
AnthropicProvider(api_key="sk-ant-..."),
])
# Falls back to Anthropic if OpenAI returns a 429 or 5xxUsing a provider for embeddings only
Any provider can be used purely for embedding generation, without LLM calls:
from purple8_graph import GraphEngine
from purple8_graph.genai import OpenAIProvider
engine = GraphEngine("./data")
provider = OpenAIProvider(api_key="sk-...", embedding_model="text-embedding-3-small")
# Add a node with an auto-generated embedding
node_id = engine.add_node(
"Document",
{"title": "Introduction to graph databases", "body": "..."},
)
engine.add_embedding(
node_id,
provider.embed("Introduction to graph databases"),
)Choosing a provider
| Scenario | Recommendation |
|---|---|
| Production, highest quality AI advisor decisions | OpenAI gpt-4o |
| Very long audit trails (>50 stages) | Anthropic Claude 3.5 Sonnet (200K context) |
| Google Cloud deployment | Gemini 1.5 Pro |
| European data residency required | Mistral |
| Best hybrid search reranking | Cohere command-r-plus + rerank-english-v3.0 |
| Air-gapped / regulated / no internet | Ollama + llama3.1 |
| Cost-optimised, high volume | Gemini 1.5 Flash or Mistral Small |