File size: 1,021 Bytes
60d8fe7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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),
        )