| | """Configuration settings for FreeRAG.""" |
| |
|
| | from dataclasses import dataclass, field |
| | from pathlib import Path |
| |
|
| |
|
| | @dataclass |
| | class ModelConfig: |
| | """LLM model configuration.""" |
| | repo_id: str = "bartowski/Phi-3.5-mini-instruct-GGUF" |
| | filename: str = "Phi-3.5-mini-instruct-Q4_K_M.gguf" |
| | n_ctx: int = 4096 |
| | n_threads: int = 4 |
| | max_tokens: int = 512 |
| | temperature: float = 0.7 |
| | verbose: bool = False |
| |
|
| |
|
| | @dataclass |
| | class EmbeddingConfig: |
| | """Embedding model configuration.""" |
| | model_name: str = "all-MiniLM-L6-v2" |
| | device: str = "cpu" |
| |
|
| |
|
| | @dataclass |
| | class VectorStoreConfig: |
| | """Vector store configuration.""" |
| | collection_name: str = "freerag_documents" |
| | persist_directory: str = "./chroma_db" |
| | top_k: int = 3 |
| |
|
| |
|
| | @dataclass |
| | class ChunkingConfig: |
| | """Text chunking configuration.""" |
| | chunk_size: int = 500 |
| | chunk_overlap: int = 50 |
| |
|
| |
|
| | @dataclass |
| | class Config: |
| | """Main configuration container.""" |
| | model: ModelConfig = field(default_factory=ModelConfig) |
| | embedding: EmbeddingConfig = field(default_factory=EmbeddingConfig) |
| | vectorstore: VectorStoreConfig = field(default_factory=VectorStoreConfig) |
| | chunking: ChunkingConfig = field(default_factory=ChunkingConfig) |
| | data_directory: str = "./data" |
| | |
| | @classmethod |
| | def default(cls) -> "Config": |
| | """Create default configuration.""" |
| | return cls() |
| | |
| | def ensure_directories(self) -> None: |
| | """Ensure required directories exist.""" |
| | Path(self.data_directory).mkdir(parents=True, exist_ok=True) |
| | Path(self.vectorstore.persist_directory).mkdir(parents=True, exist_ok=True) |
| |
|