from dataclasses import dataclass from app.config import Settings from app.pipeline.embedder import SentenceTransformerEmbedder from app.pipeline.generator import HuggingFaceGenerator from app.pipeline.vector_store import FaissDocumentStore @dataclass class AppState: settings: Settings embedder: SentenceTransformerEmbedder generator: HuggingFaceGenerator vector_store: FaissDocumentStore @classmethod def from_settings(cls, settings: Settings) -> "AppState": data_dir = settings.data_dir data_dir.mkdir(parents=True, exist_ok=True) embedder = SentenceTransformerEmbedder(settings.embedding_model) return cls( settings=settings, embedder=embedder, generator=HuggingFaceGenerator( api_key=settings.hf_api_key, model=settings.generation_model, timeout_seconds=settings.hf_timeout_seconds, ), vector_store=FaissDocumentStore(data_dir=data_dir), )