import os from dotenv import load_dotenv from typing import Dict, Any load_dotenv() class Config: """Configuration management for A2A agents.""" GPT_KEY = os.getenv("GPT_KEY") CLAUDE_API_KEY = os.getenv("CLAUDE_API_KEY") HF_KEY = os.getenv("HF_KEY") TAVILY_API_KEY = os.getenv("TAVILY_API_KEY") LANGSMITH_API_KEY = os.getenv("LANGSMITH_API_KEY") GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY") SCORER_URL = os.getenv("SCORER_URL", "https://agents-course-unit4-scoring.hf.space") LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO") def __init__(self): """Initialize config and ensure API keys are properly set.""" # Set ANTHROPIC_API_KEY environment variable if not already set if not os.getenv("ANTHROPIC_API_KEY") and self.CLAUDE_API_KEY: os.environ["ANTHROPIC_API_KEY"] = self.CLAUDE_API_KEY print(f"✅ Set ANTHROPIC_API_KEY from CLAUDE_API_KEY for Claude client compatibility") # Set OPENAI_API_KEY environment variable if not already set (for fallback tools) if not os.getenv("OPENAI_API_KEY") and self.GPT_KEY: os.environ["OPENAI_API_KEY"] = self.GPT_KEY print(f"✅ Set OPENAI_API_KEY from GPT_KEY for OpenAI client compatibility") # Set up LangSmith tracing if API key is available if self.LANGSMITH_API_KEY: os.environ["LANGCHAIN_TRACING_V2"] = "true" os.environ["LANGCHAIN_API_KEY"] = self.LANGSMITH_API_KEY os.environ["LANGCHAIN_PROJECT"] = "Grux-2.0-Agent-Claude" print(f"✅ LangSmith tracing enabled for project: Grux-2.0-Agent-Claude") # Ensure OpenAI API key is available under both names @property def OPENAI_API_KEY(self): """Get OpenAI API key - try OPENAI_API_KEY first, then GPT_KEY""" return os.getenv("OPENAI_API_KEY") or self.GPT_KEY # Model configurationscan you please locally run python and test the imports because this is getting frustrating GPT_MODEL = "gpt-4o" # A2A Protocol settings MAX_DISCUSSION_ROUNDS = 2 # Reduce from 5 to 2 for debugging CONSENSUS_THRESHOLD = 0.55 TIMEOUT_SECONDS = 300 # Performance optimizations AGENT_TIMEOUT_SECONDS = 15 # Reduce from 30 to 15 CONSENSUS_TIMEOUT_SECONDS = 180 # Reduce from 300 to 180 # Model-specific settings GPT_MAX_TOKENS = 256 # Reduce from 512 GEMMA_MAX_TOKENS = 256 # Retry settings MAX_RETRIES = 2 RETRY_DELAY = 1.0 # Caching ENABLE_RESPONSE_CACHE = True CACHE_TTL_SECONDS = 3600 @classmethod def validate(cls) -> bool: """Validate required environment variables.""" required = ["CLAUDE_API_KEY", "HF_KEY"] missing = [key for key in required if not getattr(cls, key)] if missing: raise ValueError(f"Missing required environment variables: {missing}") return True # Create config instance and ensure OpenAI API key is set config = Config()