from dataclasses import dataclass, field from pathlib import Path from typing import List @dataclass(frozen=True) class OllamaConfig: """Configuration for Ollama client.""" chat_model: str embedding_model: str base_url: str system_prompt: str # TODO: Update this to be a passed in value temperature: float = field(default=0.7) @dataclass(frozen=True) class ReviewConfig: """Complete configuration for ReviewLlama.""" paths: List[Path] ollama: OllamaConfig base_branch: str def create_ollama_config( model: str, server_url: str, system_prompt: str, temperature=0.7, embedding_model="nomic-embed-text", ) -> OllamaConfig: """Create OllamaConfig with validated parameters.""" return OllamaConfig( chat_model=model, embedding_model=embedding_model, base_url=server_url, system_prompt=system_prompt, temperature=temperature, ) def create_review_config( paths: List[Path], ollama_config: OllamaConfig, base_branch: str ) -> ReviewConfig: """Create complete ReviewConfig from validated components.""" return ReviewConfig(paths=paths, ollama=ollama_config, base_branch=base_branch) def create_config_from_vars( paths: List[Path], model: str, server_url: str, system_prompt: str, base_branch: str, ): ollama_config = OllamaConfig( chat_model=model, base_url=server_url, system_prompt=system_prompt ) return create_review_config(paths, ollama_config, base_branch)