haiku.rag/haiku_rag_slim/haiku/rag/converters/__init__.py
Yiorgis Gozadinos e8f00fcff4
Make get_config the only configuration lookup
haiku.rag.config exported two configuration instances: the lazy _config
behind get_config/set_config, and Config, loaded at import time. Nothing
linked them, and eleven signatures captured Config as a default argument,
so set_config could not reach the factories, the client, the store or the
MCP server. reranking/base.py went further and snapshotted the configured
reranker name into a class attribute at import.

Config is removed. Internal defaults are config: AppConfig | None = None,
resolved through get_config() per call. RerankerBase._model is None and
CohereReranker takes its model name as an argument, like every other
reranker.

The suite patched attributes on Config while production read the instance
get_config() returns, a different object, so those patches were no-ops
waiting to happen. They now go through get_config().
2026-08-19 14:43:40 +03:00

32 lines
1.1 KiB
Python

"""Document converter abstraction for haiku.rag."""
from haiku.rag.config import AppConfig, get_config
from haiku.rag.converters.base import DocumentConverter
__all__ = ["DocumentConverter", "get_converter"]
def get_converter(config: AppConfig | None = None) -> DocumentConverter:
"""Get a document converter instance based on configuration.
Args:
config: Configuration to use. Defaults to the current global config.
Returns:
DocumentConverter instance configured according to the config.
Raises:
ValueError: If the converter provider is not recognized.
"""
config = config if config is not None else get_config()
if config.processing.converter == "docling-local":
from haiku.rag.converters.docling_local import DoclingLocalConverter
return DoclingLocalConverter(config)
if config.processing.converter == "docling-serve":
from haiku.rag.converters.docling_serve import DoclingServeConverter
return DoclingServeConverter(config)
raise ValueError(f"Unsupported converter provider: {config.processing.converter}")