import os from pathlib import Path # Base directory BASE_DIR = Path(__file__).parent # API Configuration API_TITLE = "Automated Consensus Analysis API" API_VERSION = "1.0.0" API_DESCRIPTION = """ ## Automated Consensus Analysis for Peer Reviews This API provides comprehensive analysis of peer review disagreements using: - **LLM-based critique extraction** (Gemini 2.5 Flash Lite via OpenRouter) - **Disagreement detection** between reviewers - **Search-augmented evidence retrieval** (Semantic Scholar, arXiv, Google Scholar, Tavily) - **AI-powered disagreement resolution** (DeepSeek-R1 via OpenRouter) - **Meta-review generation** ### Features: - ✅ Full pipeline or individual stage execution - ✅ Rate limiting and queue management - ✅ Progress tracking - ✅ JSON and form data support """ # Rate Limiting MAX_REQUESTS_PER_MINUTE = int(os.getenv("MAX_REQUESTS_PER_MINUTE", "10")) MAX_CONCURRENT_TASKS = int(os.getenv("MAX_CONCURRENT_TASKS", "3")) QUEUE_MAX_SIZE = int(os.getenv("QUEUE_MAX_SIZE", "20")) # Model Configuration (all via OpenRouter) GEMINI_MODEL = os.getenv("GEMINI_MODEL", "google/gemini-2.5-flash-lite") DEEPSEEK_MODEL = os.getenv("DEEPSEEK_MODEL", "deepseek/deepseek-r1") # API Keys (from HF Spaces secrets) OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY") TAVILY_API_KEY = os.getenv("TAVILY_API_KEY") SERPAPI_API_KEY = os.getenv("SERPAPI_API_KEY") # Retry Configuration MAX_RETRIES = int(os.getenv("MAX_RETRIES", "5")) BASE_RETRY_WAIT = int(os.getenv("BASE_RETRY_WAIT", "2")) # Timeout Configuration REQUEST_TIMEOUT = int(os.getenv("REQUEST_TIMEOUT", "300")) # 5 minutes SEARCH_TIMEOUT = int(os.getenv("SEARCH_TIMEOUT", "60")) # 1 minute # Logging LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO") def validate_environment(): """ Validate that all required environment variables are set Raises: ValueError: If required variables are missing """ required_vars = { "OPENROUTER_API_KEY": OPENROUTER_API_KEY, "TAVILY_API_KEY": TAVILY_API_KEY, } missing = [var for var, value in required_vars.items() if not value] if missing: raise ValueError( f"Missing required environment variables: {', '.join(missing)}\n" f"Please set them in HuggingFace Spaces secrets." ) # Validate on import try: validate_environment() except ValueError as e: print(f"⚠️ Configuration Warning: {e}")