CoolFace
Apppublic

RohanExploit/Meta-hackathon

sourceHugging Faceupdated 5mo agoView on Hugging Face
0likes
config.py101 linesDownload Raw Back to pipeline
1"""Centralized configuration for the RAG pipeline.2 3All model names, API keys, and tuning constants live here.4Reads from environment variables with sensible defaults for local dev.5"""6 7import os8from dataclasses import dataclass, field9 10 11@dataclass(frozen=True)12class GroqConfig:13    """Groq cloud API settings."""14 15    api_key: str = field(16        default_factory=lambda: os.getenv("GROQ_API_KEY", "")17    )18    base_url: str = "https://api.groq.com/openai/v1"19 20    # ── Model registry ──────────────────────────────────────────────21    guard_model: str = "llama-guard-3-8b"22    router_model: str = "llama-3.1-8b-instant"23    reranker_model: str = "llama-3.3-70b-versatile"24    generator_model: str = "llama-3.3-70b-versatile"25 26 27@dataclass(frozen=True)28class OllamaConfig:29    """Local Ollama (optional fallback for router)."""30 31    base_url: str = field(32        default_factory=lambda: os.getenv("OLLAMA_BASE_URL", "http://localhost:11434")33    )34    router_model: str = field(35        default_factory=lambda: os.getenv("OLLAMA_ROUTER_MODEL", "qwen2.5-coder:7b")36    )37 38 39@dataclass(frozen=True)40class EmbeddingConfig:41    """Local HuggingFace embedding settings."""42 43    model_name: str = "sentence-transformers/all-MiniLM-L6-v2"44    device: str = "cpu"45 46 47@dataclass(frozen=True)48class RetrieverConfig:49    """FAISS retrieval tuning knobs."""50 51    faiss_index_path: str = field(52        default_factory=lambda: os.getenv("FAISS_INDEX_PATH", "./vectorstore")53    )54    dense_top_k: int = 20          # Stage 1: over-fetch from FAISS55    rerank_top_k: int = 5          # Stage 2: keep after LLM reranking56    rerank_min_score: float = 0.3  # Floor for relevance score (0-1)57 58 59@dataclass(frozen=True)60class IngestConfig:61    """Semantic chunking settings for the ingestion pipeline."""62 63    breakpoint_threshold_type: str = "percentile"64    breakpoint_threshold_amount: float = 85.0  # Higher = fewer, larger chunks65 66 67@dataclass(frozen=True)68class PipelineConfig:69    """Top-level config bundle."""70 71    groq: GroqConfig = field(default_factory=GroqConfig)72    ollama: OllamaConfig = field(default_factory=OllamaConfig)73    embedding: EmbeddingConfig = field(default_factory=EmbeddingConfig)74    retriever: RetrieverConfig = field(default_factory=RetrieverConfig)75    ingest: IngestConfig = field(default_factory=IngestConfig)76 77    # Routing preferences78    use_ollama_router: bool = field(79        default_factory=lambda: os.getenv("USE_OLLAMA_ROUTER", "false").lower() == "true"80    )81 82    # Async concurrency limit83    max_concurrent_llm_calls: int = 484 85    # Environment server URL (for the retail env)86    env_base_url: str = field(87        default_factory=lambda: os.getenv("ENV_BASE_URL", "http://127.0.0.1:8000")88    )89 90 91# ── Singleton ────────────────────────────────────────────────────────92_config: PipelineConfig | None = None93 94 95def get_config() -> PipelineConfig:96    """Return the pipeline config singleton."""97    global _config98    if _config is None:99        _config = PipelineConfig()100    return _config101