Spaces:
Sleeping
Sleeping
| """ | |
| Configuration management for SLM Code Engine | |
| """ | |
| from pathlib import Path | |
| from typing import Optional | |
| from pydantic_settings import BaseSettings | |
| from pydantic import Field | |
| class Settings(BaseSettings): | |
| """Application settings with environment variable support""" | |
| # API Configuration | |
| api_host: str = Field(default="0.0.0.0", env="API_HOST") | |
| api_port: int = Field(default=8000, env="API_PORT") | |
| api_workers: int = Field(default=1, env="API_WORKERS") | |
| debug: bool = Field(default=True, env="DEBUG") | |
| # Groq Configuration | |
| groq_api_key: Optional[str] = Field(default=None, env="GROQ_API_KEY") | |
| # Localization | |
| language: str = Field( | |
| default="en", | |
| env="LANGUAGE", | |
| description="Language for responses (e.g., 'en', 'fr')", | |
| ) | |
| # Project paths | |
| project_root: Path = Path(__file__).parent.parent.parent | |
| models_dir: Path = Field(default_factory=lambda: Path(__file__).parent.parent.parent / "models") | |
| data_dir: Path = Field(default_factory=lambda: Path(__file__).parent.parent.parent / "data") | |
| cache_dir: Path = Field(default_factory=lambda: Path(__file__).parent.parent.parent / "data" / "cache") | |
| # Models Configuration | |
| starcoder_model: str = Field(default="phi-2.Q4_K_M.gguf", env="STARCODER_MODEL") | |
| codet5_model: str = Field(default="codet5-small", env="CODET5_MODEL") | |
| embedding_model: str = Field(default="all-MiniLM-L6-v2", env="EMBEDDING_MODEL") | |
| # Model inference settings | |
| max_tokens: int = Field(default=2048, env="MAX_TOKENS") | |
| temperature: float = Field(default=0.2, env="TEMPERATURE") | |
| n_ctx: int = Field(default=4096, env="N_CTX") # Context window | |
| n_threads: Optional[int] = Field(default=None, env="N_THREADS") # CPU threads | |
| # Database | |
| db_path: Path = Field(default_factory=lambda: Path(__file__).parent.parent.parent / "data" / "usage.db") | |
| # Sandbox Configuration | |
| sandbox_enabled: bool = Field(default=True, env="SANDBOX_ENABLED") | |
| sandbox_timeout: int = Field(default=30, env="SANDBOX_TIMEOUT") # seconds | |
| sandbox_memory_limit: str = Field(default="512m", env="SANDBOX_MEMORY_LIMIT") | |
| # Orchestrator Configuration | |
| router_threshold: float = Field(default=0.7, env="ROUTER_THRESHOLD") # Confidence threshold | |
| enable_automata_first: bool = Field(default=True, env="ENABLE_AUTOMATA_FIRST") | |
| enable_automata_first: bool = Field(default=True, env="ENABLE_AUTOMATA_FIRST") | |
| enable_rag: bool = Field(default=True, env="ENABLE_RAG") # Enable RAG context enrichment | |
| enable_distillation: bool = Field(default=True, env="ENABLE_DISTILLATION") # Enable data collection | |
| # Logging | |
| log_level: str = Field(default="INFO", env="LOG_LEVEL") | |
| log_file: Optional[Path] = Field(default=None, env="LOG_FILE") | |
| class Config: | |
| # Look for .env in project root | |
| env_file = str(Path(__file__).parent.parent.parent / ".env") | |
| env_file_encoding = "utf-8" | |
| case_sensitive = False | |
| extra = "ignore" # Ignore extra fields in .env | |
| def __init__(self, **kwargs): | |
| super().__init__(**kwargs) | |
| # Ensure directories exist | |
| self.models_dir.mkdir(parents=True, exist_ok=True) | |
| self.data_dir.mkdir(parents=True, exist_ok=True) | |
| self.cache_dir.mkdir(parents=True, exist_ok=True) | |
| def starcoder_path(self) -> Path: | |
| """Get full path to StarCoder model (currently using Phi-2)""" | |
| return self.models_dir / "phi-2" / self.starcoder_model | |
| def codet5_path(self) -> Path: | |
| """Get full path to CodeT5 model""" | |
| return self.models_dir / "codet5-small" | |
| # Global settings instance | |
| settings = Settings() | |