Point your agents at any OpenAI-compatible endpoint with environment variables
Configure where your agents send LLM requests using environment variables, with automatic provider-specific routing for major LLM providers.
from praisonaiagents import Agentagent = Agent(name="assistant", llm="anthropic/claude-sonnet-4-6")agent.start("Draft a release note for today's deploy.")
The user sets MODEL_NAME and provider keys; PraisonAI resolves the OpenAI-compatible endpoint before the agent runs.
As of PraisonAI 4.6.106, the endpoint resolver is available directly from praisonai-code:
from praisonai_code.llm.env import LLMEndpoint, resolve_llm_endpoint
The legacy path from praisonai.llm.env import ... still works via a sys.modules shim — both resolve to the same object.
import osfrom praisonaiagents import Agentif not os.getenv("OPENAI_API_KEY"): raise EnvironmentError("Set OPENAI_API_KEY in your environment")agent = Agent( name="Research Assistant", instructions="You are a helpful research assistant")result = agent.start("Explain quantum computing in simple terms")
2
Use Anthropic directly
No base URL needed - automatic provider routing:
import osfrom praisonaiagents import Agentos.environ["MODEL_NAME"] = "anthropic/claude-3-5-sonnet"if not os.getenv("ANTHROPIC_API_KEY"): raise EnvironmentError("Set ANTHROPIC_API_KEY in your environment")agent = Agent( name="Claude Assistant", instructions="You are Claude, an AI assistant")result = agent.start("What makes you different from other AI models?")
3
Use Groq for fast inference
High-speed inference with automatic routing:
import osfrom praisonaiagents import Agentos.environ["MODEL_NAME"] = "groq/llama3-70b"if not os.getenv("GROQ_API_KEY"): raise EnvironmentError("Set GROQ_API_KEY in your environment")agent = Agent( name="Fast Assistant", instructions="You are a speed-optimized assistant")result = agent.start("Generate a quick summary of machine learning")
4
Use Google Gemini
Access Google’s latest models directly:
import osfrom praisonaiagents import Agentos.environ["MODEL_NAME"] = "google/gemini-1.5-pro"if not os.getenv("GOOGLE_API_KEY"): raise EnvironmentError("Set GOOGLE_API_KEY in your environment")agent = Agent( name="Gemini Assistant", instructions="You are powered by Google Gemini")result = agent.start("Analyze this complex dataset")
If you set MODEL_NAME=anthropic/claude-3-5-sonnet, you do not need to set OPENAI_BASE_URL — the right base URL is picked automatically.
Model prefix
API key env var
Default base URL
anthropic/
ANTHROPIC_API_KEY
https://api.anthropic.com/v1
google/
GOOGLE_API_KEY
https://generativelanguage.googleapis.com/v1beta
gemini/
GEMINI_API_KEY
https://generativelanguage.googleapis.com/v1beta
groq/
GROQ_API_KEY
https://api.groq.com/openai/v1
cohere/
COHERE_API_KEY
https://api.cohere.ai/v1
openrouter/
OPENROUTER_API_KEY
https://openrouter.ai/api/v1
ollama/
OLLAMA_API_KEY
http://localhost:11434/v1
no prefix match
OPENAI_API_KEY
https://api.openai.com/v1
Provider keys do not cross-fallback. If you use anthropic/claude-3-5-sonnet and only OPENAI_API_KEY is set, the call has no credentials. This is a security fix, not a bug — it prevents accidental credential exposure.
export OPENAI_BASE_URL="https://corporate-proxy.company.com/v1"export OPENAI_API_KEY="${OPENAI_API_KEY:?Set OPENAI_API_KEY in your shell}"export MODEL_NAME="gpt-4"python your_agent.py
import osfrom praisonaiagents import Agent# Configure corporate proxyos.environ["OPENAI_BASE_URL"] = "https://corporate-proxy.company.com/v1"if not os.getenv("OPENAI_API_KEY"): raise EnvironmentError("Set OPENAI_API_KEY in your environment")os.environ["MODEL_NAME"] = "gpt-4"agent = Agent( name="Corporate Assistant", instructions="You are using a corporate OpenAI proxy")result = agent.start("Generate a business report")
export MODEL_NAME="anthropic/claude-3-5-sonnet"export ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY:?Set ANTHROPIC_API_KEY in your shell}"python your_agent.py
import osfrom praisonaiagents import Agentos.environ["MODEL_NAME"] = "anthropic/claude-3-5-sonnet"if not os.getenv("ANTHROPIC_API_KEY"): raise EnvironmentError("Set ANTHROPIC_API_KEY in your environment")agent = Agent( name="Anthropic Assistant", instructions="You are powered by Claude")result = agent.start("Write a thoughtful analysis")
export MODEL_NAME="groq/llama3-70b"export GROQ_API_KEY="${GROQ_API_KEY:?Set GROQ_API_KEY in your shell}"python your_agent.py
import osfrom praisonaiagents import Agentos.environ["MODEL_NAME"] = "groq/llama3-70b"if not os.getenv("GROQ_API_KEY"): raise EnvironmentError("Set GROQ_API_KEY in your environment")agent = Agent( name="Speed Assistant", instructions="You provide fast responses")result = agent.start("Quick summary of quantum physics")
export MODEL_NAME="google/gemini-1.5-pro"export GOOGLE_API_KEY="${GOOGLE_API_KEY:?Set GOOGLE_API_KEY in your shell}"python your_agent.py
import osfrom praisonaiagents import Agentos.environ["MODEL_NAME"] = "google/gemini-1.5-pro"if not os.getenv("GOOGLE_API_KEY"): raise EnvironmentError("Set GOOGLE_API_KEY in your environment")agent = Agent( name="Gemini Assistant", instructions="You are powered by Google Gemini")result = agent.start("Analyze this complex problem")
export OPENAI_BASE_URL="https://your-litellm-proxy/v1"export OPENAI_API_KEY="${OPENAI_API_KEY:?Set OPENAI_API_KEY in your shell}"export MODEL_NAME="azure/gpt-4"python your_agent.py
import osfrom praisonaiagents import Agent# Configure LiteLLM for Azureos.environ["OPENAI_BASE_URL"] = "https://your-litellm-proxy/v1"if not os.getenv("OPENAI_API_KEY"): raise EnvironmentError("Set OPENAI_API_KEY in your environment")os.environ["MODEL_NAME"] = "azure/gpt-4"agent = Agent( name="Azure Assistant", instructions="You are using Azure OpenAI via LiteLLM")result = agent.start("Analyze this data")
OPENAI_BASE_URL is the standard OpenAI SDK environment variable and has the highest precedence. Use this for all new configurations rather than the legacy OPENAI_API_BASE.
Empty string ≠ unset
An empty string value is skipped during resolution, and the next variable in precedence order is tried. To disable a variable, unset it completely rather than setting it to an empty string.
# This skips OPENAI_BASE_URL and tries OPENAI_API_BASEexport OPENAI_BASE_URL=""export OPENAI_API_BASE="https://proxy.com/v1"# This uses OPENAI_BASE_URLunset OPENAI_BASE_URLexport OPENAI_API_BASE="https://proxy.com/v1"
Use .env files for local dev
Create a .env file in your project root for local development:
# .envOPENAI_BASE_URL=http://localhost:11434/v1MODEL_NAME=llama3# OPENAI_API_KEY not needed for Ollama
Load it in your Python code:
from dotenv import load_dotenvload_dotenv()from praisonaiagents import Agent# Environment variables are now loaded
Realtime/WebSocket endpoints
For realtime features, WebSocket URLs are auto-derived from HTTP URLs. The system automatically:
Converts https:// to wss://
Strips /v1 suffix to avoid /v1/v1/realtime
Appends the appropriate realtime path
You only need to set OPENAI_BASE_URL - the realtime endpoint is handled automatically.
C7 note: As of PR #2550, the tool-discovery pipeline (tool_resolver), safe loader (_safe_loader), framework probes (_framework_availability), and plugin registry (tool_registry) also moved to praisonai_code — completing the same C7 arc as LLM config. See Tool Discovery Order and Local Tools Loading.