""" Application settings loaded from environment variables. This module handles loading and validation of environment variables for the Likable application. """ import os from dotenv import load_dotenv # Load environment variables from .env file load_dotenv() class Settings: """Application settings loaded from environment variables.""" def __init__(self): """Initialize settings from environment variables.""" self.model_id: str = os.getenv("MODEL_ID", "Qwen/Qwen2.5-Coder-32B-Instruct") self.api_base_url: str | None = os.getenv("API_BASE_URL") self.api_key: str | None = os.getenv("API_KEY") # Application Settings self.gradio_host: str = os.getenv("GRADIO_HOST", "127.0.0.1") self.gradio_port: int = int(os.getenv("GRADIO_PORT", "7860")) self.gradio_debug: bool = os.getenv("GRADIO_DEBUG", "false").lower() == "true" # Validate critical settings self._validate() def _validate(self): """Validate critical settings and provide helpful error messages.""" if not self.api_key: print("⚠️ Warning: API_KEY not set in environment variables.") print(" The agent may not work without a valid API key.") print(" Set it in your .env file or as an environment variable.") print() def get_model_config(self) -> dict: """Get model configuration for the agent.""" config = {"model_id": self.model_id, "api_key": self.api_key} if self.api_base_url: config["api_base_url"] = self.api_base_url if self.api_key: config["api_key"] = self.api_key return config def get_gradio_config(self) -> dict: """Get Gradio launch configuration.""" return { "server_name": self.gradio_host, "server_port": self.gradio_port, "debug": self.gradio_debug, } def __repr__(self) -> str: """String representation of settings (excluding sensitive data).""" return f"""Settings( model_id='{self.model_id}', api_key={'***' if self.api_key else 'None'}, api_base_url='{self.api_base_url}', gradio_host='{self.gradio_host}', gradio_port={self.gradio_port}, gradio_debug={self.gradio_debug} )""" # Global settings instance settings = Settings() # Convenience functions for backward compatibility def get_api_key() -> str | None: """Get API key.""" return settings.api_key def get_model_id() -> str: """Get model ID.""" return settings.model_id if __name__ == "__main__": print("Current Settings:") print("=" * 50) print(settings) print() print("Model Config:") print(settings.get_model_config()) print() print("Gradio Config:") print(settings.get_gradio_config())