src/databao_context_engine/llm/factory.py (49 lines of code) (raw):

from databao_context_engine.llm.config import OllamaConfig from databao_context_engine.llm.descriptions.ollama import OllamaDescriptionProvider from databao_context_engine.llm.embeddings.ollama import OllamaEmbeddingProvider from databao_context_engine.llm.install import resolve_ollama_bin from databao_context_engine.llm.runtime import OllamaRuntime from databao_context_engine.llm.service import OllamaService def _create_ollama_service_common( *, host: str, port: int, ensure_ready: bool, ) -> OllamaService: bin_path = resolve_ollama_bin() config = OllamaConfig(host=host, port=port, bin_path=bin_path) service = OllamaService(config) if ensure_ready: runtime = OllamaRuntime(config=config, service=service) runtime.start_and_await(timeout=120) return service def create_ollama_service( *, host: str = "127.0.0.1", port: int = 11434, ensure_ready: bool = True, ) -> OllamaService: return _create_ollama_service_common( host=host, port=port, ensure_ready=ensure_ready, ) def create_ollama_embedding_provider( service: OllamaService, *, model_id: str = "nomic-embed-text:v1.5", dim: int = 768, pull_if_needed: bool = True, ) -> OllamaEmbeddingProvider: if pull_if_needed: service.pull_model_if_needed(model=model_id, timeout=900) return OllamaEmbeddingProvider(service=service, model_id=model_id, dim=dim) def create_ollama_description_provider( service: OllamaService, *, model_id: str = "llama3.2:1b", pull_if_needed: bool = True, ): if pull_if_needed: service.pull_model_if_needed(model=model_id, timeout=900) return OllamaDescriptionProvider(service=service, model_id=model_id)