Skip to content

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

ProviderClassInstall extraBest for
OpenAIOpenAIProviderpip install purple8-graph[openai]Production, highest quality
AnthropicAnthropicProviderpip install purple8-graph[anthropic]Long-context, safety-focused
Google GeminiGeminiProviderpip install purple8-graph[google]Multimodal, Google Cloud
MistralMistralProviderpip install purple8-graph[mistral]Cost-effective, European data residency
CohereCohereProviderpip install purple8-graph[cohere]RAG-optimised reranking
OllamaOllamaProviderOllama server running locallyOffline, private, no API cost

OpenAI

python
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,
)
bash
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

python
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,
)
bash
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

python
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",
)
bash
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

python
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",
)
bash
MISTRAL_API_KEY=...

Supported models: mistral-large-latest, mistral-small-latest, codestral-latest
Embedding models: mistral-embed (1024-dim)


Cohere

python
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
)
bash
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)

python
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
)
bash
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=llama3.1

Prerequisites: Install Ollama and pull your model:

bash
ollama pull llama3.1
ollama pull nomic-embed-text

Ollama 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:

python
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 5xx

Using a provider for embeddings only

Any provider can be used purely for embedding generation, without LLM calls:

python
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

ScenarioRecommendation
Production, highest quality AI advisor decisionsOpenAI gpt-4o
Very long audit trails (>50 stages)Anthropic Claude 3.5 Sonnet (200K context)
Google Cloud deploymentGemini 1.5 Pro
European data residency requiredMistral
Best hybrid search rerankingCohere command-r-plus + rerank-english-v3.0
Air-gapped / regulated / no internetOllama + llama3.1
Cost-optimised, high volumeGemini 1.5 Flash or Mistral Small

Purple8 Graph is proprietary software. All rights reserved.