# Environment Configuration Examples # ==== Development (Ollama only) ==== export OLLAMA_HOST="http://localhost:11434" export DEFAULT_LLM_PROVIDER="ollama" # ==== Production with OpenAI ==== export OPENAI_API_KEY="sk-your-openai-key-here" export DEFAULT_LLM_PROVIDER="openai" # ==== Production with Anthropic ==== export ANTHROPIC_API_KEY="sk-ant-your-anthropic-key-here" export DEFAULT_LLM_PROVIDER="anthropic" # ==== Production with multiple providers ==== export OPENAI_API_KEY="sk-your-openai-key-here" export ANTHROPIC_API_KEY="sk-ant-your-anthropic-key-here" export GEMINI_API_KEY="your-gemini-key-here" export OLLAMA_HOST="http://ollama-server:11434" export DEFAULT_LLM_PROVIDER="openai" # ==== Docker Compose Example ==== # docker-compose.yml version: '3.8' services: api: build: . ports: - "8000:8000" environment: - OPENAI_API_KEY=${OPENAI_API_KEY} - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - DEFAULT_LLM_PROVIDER=openai depends_on: - ollama ollama: image: ollama/ollama ports: - "11434:11434" volumes: - ollama_data:/root/.ollama environment: - OLLAMA_HOST=0.0.0.0 volumes: ollama_data: # ==== Kubernetes ConfigMap ==== apiVersion: v1 kind: ConfigMap metadata: name: llm-config data: DEFAULT_LLM_PROVIDER: "openai" OLLAMA_HOST: "http://ollama-service:11434" --- apiVersion: v1 kind: Secret metadata: name: llm-secrets type: Opaque stringData: OPENAI_API_KEY: "sk-your-key-here" ANTHROPIC_API_KEY: "sk-ant-your-key-here" # ==== Python configuration example ==== # config.py import os from llm_proxy import get_llm, LLMProvider def configure_llm_for_environment(): """Configure LLM based on deployment environment""" llm = get_llm() # Development: Use Ollama if os.getenv('ENVIRONMENT') == 'development': llm.configure_provider(LLMProvider.OLLAMA, host='http://localhost:11434') llm.set_default_provider(LLMProvider.OLLAMA) # Staging: Use OpenAI with rate limiting elif os.getenv('ENVIRONMENT') == 'staging': llm.configure_provider(LLMProvider.OPENAI, api_key=os.getenv('OPENAI_API_KEY'), max_retries=3, timeout=30) llm.set_default_provider(LLMProvider.OPENAI) # Production: Use multiple providers with fallback elif os.getenv('ENVIRONMENT') == 'production': # Primary: Anthropic llm.configure_provider(LLMProvider.ANTHROPIC, api_key=os.getenv('ANTHROPIC_API_KEY')) # Fallback: OpenAI llm.configure_provider(LLMProvider.OPENAI, api_key=os.getenv('OPENAI_API_KEY')) # Set primary provider llm.set_default_provider(LLMProvider.ANTHROPIC) # ==== Usage Examples ==== # Example 1: Basic usage with default provider async def basic_example(): llm = get_llm() response = await llm.chat( model="gpt-4", messages=[{"role": "user", "content": "Hello!"}] ) print(response.content) # Example 2: Specify provider explicitly async def provider_specific_example(): llm = get_llm() # Use OpenAI specifically response = await llm.chat( model="gpt-4", messages=[{"role": "user", "content": "Hello!"}], provider=LLMProvider.OPENAI ) # Use Anthropic specifically response2 = await llm.chat( model="claude-3-sonnet-20240229", messages=[{"role": "user", "content": "Hello!"}], provider=LLMProvider.ANTHROPIC ) # Example 3: Streaming with provider fallback async def streaming_with_fallback(): llm = get_llm() try: async for chunk in llm.chat( model="claude-3-sonnet-20240229", messages=[{"role": "user", "content": "Write a story"}], provider=LLMProvider.ANTHROPIC, stream=True ): print(chunk.content, end='', flush=True) except Exception as e: print(f"Primary provider failed: {e}") # Fallback to OpenAI async for chunk in llm.chat( model="gpt-4", messages=[{"role": "user", "content": "Write a story"}], provider=LLMProvider.OPENAI, stream=True ): print(chunk.content, end='', flush=True) # Example 4: Load balancing between providers import random async def load_balanced_request(): llm = get_llm() available_providers = [LLMProvider.OPENAI, LLMProvider.ANTHROPIC] # Simple random load balancing provider = random.choice(available_providers) # Adjust model based on provider model_mapping = { LLMProvider.OPENAI: "gpt-4", LLMProvider.ANTHROPIC: "claude-3-sonnet-20240229" } response = await llm.chat( model=model_mapping[provider], messages=[{"role": "user", "content": "Hello!"}], provider=provider ) print(f"Response from {provider.value}: {response.content}") # ==== FastAPI Startup Configuration ==== from fastapi import FastAPI app = FastAPI() @app.on_event("startup") async def startup_event(): """Configure LLM providers on application startup""" configure_llm_for_environment() # Verify configuration llm = get_llm() print(f"Configured providers: {[p.value for p in llm._initialized_providers]}") print(f"Default provider: {llm.default_provider.value}")