Grux3 / src /utils /config.py
BladeSzaSza's picture
feat: working local agent with test cases passing
d61265e
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()