Configuring LLM Providers (Anthropic, Google, Ollama) for Code-Graph-RAG Orchestration
Set environment variables in ORCHESTRATOR_* and CYPHER_* namespaces, then let codebase_rag/config.py validate and instantiate the appropriate provider from anthropic, google, or ollama.
Code‑Graph‑RAG from vitali87/code-graph-rag is a flexible retrieval‑augmented generation system that lets you plug in any LLM following the pydantic‑ai contract. The orchestrator—the model that generates Cypher queries, prompts, and reasoning logic—is driven by a small, declarative configuration layer. This guide explains how to configure Anthropic, Google (GLA or Vertex), and Ollama providers for both orchestration and Cypher generation.
Provider Selection via Environment Variables
All provider configuration flows through the Pydantic settings class in codebase_rag/config.py【/codebase_rag/config.py†L166-L173】. The system recognizes these variable namespaces:
| Variable | Purpose | Example Values |
|---|---|---|
ORCHESTRATOR_PROVIDER |
Provider for the main reasoning LLM | anthropic, google, ollama |
ORCHESTRATOR_MODEL |
Model identifier | claude-3-5-sonnet, gemini-2.5-pro, llama3.2 |
ORCHESTRATOR_API_KEY |
API key for cloud providers | sk-ant-..., AIza... |
ORCHESTRATOR_ENDPOINT |
Base URL for local/custom endpoints | http://localhost:11434/v1 |
ORCHESTRATOR_PROVIDER_TYPE |
Google subtype (gla or vertex) |
gla, vertex |
ORCHESTRATOR_PROJECT_ID / ORCHESTRATOR_REGION |
Required for Vertex AI | my-project, us-central1 |
ORCHESTRATOR_SERVICE_ACCOUNT_FILE |
GCP service account path | /path/to/sa.json |
A parallel CYPHER_* namespace exists for the Cypher‑generation model. The validator enforces required fields per provider—for example, Anthropic demands an API key while Vertex requires a project ID.
Provider Implementations in providers/base.py
The concrete provider classes inherit from the abstract ModelProvider in codebase_rag/providers/base.py. Each implements create_model() to return a pydantic‑ai compatible instance.
AnthropicProvider
AnthropicProvider wraps pydantic_ai.models.anthropic.AnthropicModel and requires api_key. It constructs the model with AnthropicModelSettings【/codebase_rag/providers/base.py†L190-L219】.
# Required: ORCHESTRATOR_API_KEY
ORCHESTRATOR_PROVIDER=anthropic
ORCHESTRATOR_MODEL=claude-3-5-sonnet
GoogleProvider
GoogleProvider supports two sub‑types controlled by GoogleProviderType defined in codebase_rag/constants/providers.py【/codebase_rag/constants/providers.py†L36-L45】:
gla– Google LLM API viaPydanticGoogleProvidervertex– Vertex AI viaGoogleCloudProvider
Both paths inject GoogleModelSettings【/codebase_rag/providers/base.py†L70-L125】.
# Google LLM API (GLA)
ORCHESTRATOR_PROVIDER=google
ORCHESTRATOR_PROVIDER_TYPE=gla
ORCHESTRATOR_MODEL=gemini-2.5-pro
ORCHESTRATOR_API_KEY=AIza...
# Vertex AI
ORCHESTRATOR_PROVIDER=google
ORCHESTRATOR_PROVIDER_TYPE=vertex
ORCHESTRATOR_MODEL=gemini-2.5-pro
ORCHESTRATOR_PROJECT_ID=my-project
ORCHESTRATOR_REGION=us-central1
ORCHESTRATOR_SERVICE_ACCOUNT_FILE=/path/to/sa.json
OllamaProvider
OllamaProvider is a lightweight local provider. The endpoint defaults to settings.ollama_endpoint (see the property in config.py【/codebase_rag/config.py†L191-L197】) but can be overridden. On initialization, it validates reachability via check_ollama_running【/codebase_rag/providers/base.py†L168-L178】【/codebase_rag/providers/base.py†L354-L357】.
ORCHESTRATOR_PROVIDER=ollama
ORCHESTRATOR_MODEL=llama3.2
ORCHESTRATOR_ENDPOINT=http://localhost:11434/v1
All providers are registered in a mapping so get_provider() resolves strings like "anthropic" or "ollama" to the correct class【/codebase_rag/providers/base.py†L302-L304】.
Orchestrator Wiring in main.py
During startup, codebase_rag/main.py loads the active configuration:
from codebase_rag import settings, cs
orchestrator_cfg = settings.active_orchestrator_config
It then materializes the LLM:
model = orchestrator_cfg.provider.create_model(
orchestrator_cfg.model_id,
endpoint=orchestrator_cfg.endpoint,
)
The resulting model passes to codebase_rag/services/llm.py, which calls model.generate(...) per query. Provider initialization failures raise LLMGenerationError with the original exception preserved【/codebase_rag/services/llm.py†L182-L190】.
Mixing Providers for Cost Optimization
Code‑Graph‑RAG allows different providers for orchestrator and Cypher. A typical hybrid setup pairs a capable cloud model for reasoning with a local Ollama instance for cheap Cypher generation:
ORCHESTRATOR_PROVIDER=google
ORCHESTRATOR_MODEL=gemini-2.5-pro
ORCHESTRATOR_API_KEY=YOUR_GOOGLE_KEY
ORCHESTRATOR_PROVIDER_TYPE=gla
CYPHER_PROVIDER=ollama
CYPHER_MODEL=llama3.2
CYPHER_ENDPOINT=http://localhost:11434/v1
The test suite tests/test_provider_configuration.py validates these mixed configurations【/codebase_rag/tests/test_provider_configuration.py†L17-L38】.
Programmatic Configuration
Bypass environment variables by constructing ModelConfig directly and invoking _update_single_model_setting:
from codebase_rag.config import ModelConfig, cs
from codebase_rag.main import _update_single_model_setting
# Anthropic orchestrator
_update_single_model_setting(
cs.ModelRole.ORCHESTRATOR,
ModelConfig(
provider="anthropic",
model_id="claude-3-5-sonnet",
api_key="sk-ant-test-key"
)
)
# Ollama for Cypher
_update_single_model_setting(
cs.ModelRole.CYPHER,
ModelConfig(
provider="ollama",
model_id="llama3.2",
endpoint="http://localhost:11434/v1"
)
)
Complete Configuration Examples
Minimal Anthropic Setup
ORCHESTRATOR_PROVIDER=anthropic
ORCHESTRATOR_MODEL=claude-3-5-sonnet
ORCHESTRATOR_API_KEY=sk-ant-test-key
python -m codebase_rag.main query "Find all functions that call process_data"
Google Vertex AI
ORCHESTRATOR_PROVIDER=google
ORCHESTRATOR_MODEL=gemini-2.5-pro
ORCHESTRATOR_PROVIDER_TYPE=vertex
ORCHESTRATOR_PROJECT_ID=my-gcp-project
ORCHESTRATOR_REGION=us-central1
ORCHESTRATOR_SERVICE_ACCOUNT_FILE=/path/to/sa.json
from codebase_rag.main import run_query
result = run_query("Show the call graph for DataLoader.load")
print(result)
Ollama-Only Cypher Generation
CYPHER_PROVIDER=ollama
CYPHER_MODEL=llama3.2
CYPHER_ENDPOINT=http://localhost:11434/v1
from codebase_rag.main import run_query
result = run_query("List all tables that store user profiles", cypher_role="cypher")
print(result.cypher) # generated locally
Summary
- Configuration hub:
codebase_rag/config.pydefinesORCHESTRATOR_*andCYPHER_*variables with Pydantic validation【/codebase_rag/config.py†L166-L173】 - Provider implementations:
AnthropicProvider,GoogleProvider, andOllamaProviderlive incodebase_rag/providers/base.py【/codebase_rag/providers/base.py†L70-L219】 - Google sub‑types:
GoogleProviderTypeenum selects GLA versus Vertex【/codebase_rag/constants/providers.py†L36-L45】 - Mixed deployments: Cloud orchestrator + local Cypher provider validated in
tests/test_provider_configuration.py【/codebase_rag/tests/test_provider_configuration.py†L17-L38】 - Programmatic control:
ModelConfig+_update_single_model_settingbypasses environment variables entirely
Frequently Asked Questions
What happens if I omit ORCHESTRATOR_API_KEY for Anthropic?
The Pydantic validator in codebase_rag/config.py raises a validation error at startup because AnthropicProvider.create_model() requires the key to instantiate AnthropicModel【/codebase_rag/providers/base.py†L190-L219】.
Can I use the same Ollama endpoint for both orchestrator and Cypher?
Yes. Set both ORCHESTRATOR_PROVIDER=ollama and CYPHER_PROVIDER=ollama with identical or separate *_ENDPOINT values. The provider performs reachability checks via check_ollama_running【/codebase_rag/providers/base.py†L354-L357】.
How do I switch between Google GLA and Vertex?
Set ORCHESTRATOR_PROVIDER_TYPE=gla for the standard Google LLM API (API key only) or vertex for Vertex AI (requires project ID, region, and optionally a service account file)【/codebase_rag/constants/providers.py†L36-L45】.
Is there a default fallback provider?
No explicit default is hard-coded. If environment variables are absent, the Pydantic settings class raises validation errors. For testing, the internal test suite uses explicit ModelConfig construction to avoid environment dependencies【/codebase_rag/tests/test_provider_configuration.py†L17-L38】.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →