slm-code-engine / backend /app /config.py
vienoux's picture
Upload folder using huggingface_hub
f9adcbf verified
"""
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)
@property
def starcoder_path(self) -> Path:
"""Get full path to StarCoder model (currently using Phi-2)"""
return self.models_dir / "phi-2" / self.starcoder_model
@property
def codet5_path(self) -> Path:
"""Get full path to CodeT5 model"""
return self.models_dir / "codet5-small"
# Global settings instance
settings = Settings()