Resolved provider selection. Attributes track the *user-requested* provider, not the runtime fallback (the provider implementations decide whether to fall back to hash / mock when credentials are missing).
| 26 | |
| 27 | @dataclass(frozen=True) |
| 28 | class ProviderConfig: |
| 29 | """Resolved provider selection. |
| 30 | |
| 31 | Attributes track the *user-requested* provider, not the runtime fallback |
| 32 | (the provider implementations decide whether to fall back to hash / mock |
| 33 | when credentials are missing). |
| 34 | """ |
| 35 | |
| 36 | llm_provider: str |
| 37 | llm_model: str |
| 38 | embed_provider: str |
| 39 | embed_model: str |
| 40 | embed_dimensions: int |
| 41 | |
| 42 | def describe(self) -> str: |
| 43 | return ( |
| 44 | f"llm={self.llm_provider}:{self.llm_model} " |
| 45 | f"embed={self.embed_provider}:{self.embed_model}({self.embed_dimensions})" |
| 46 | ) |
| 47 | |
| 48 | |
| 49 | _DEFAULT_LLM_MODEL: dict[str, str] = { |
no outgoing calls
no test coverage detected