Commit 6275b599 authored by Jan Reimes's avatar Jan Reimes
Browse files

Fix: Use singleton for embedding and summary operations

Changed generate_embeddings() and query_embeddings() in embeddings.py to use
AiServiceContainer singleton instead of creating new EmbeddingsManager instances.
This ensures the embedding model is loaded once and reused across all documents.

Changed summarize_document() in summarize.py to use AiServiceContainer
for storage instead of creating new AiStorage instance when storage is None.

These changes eliminate the 'Loading weights' progress bar that was appearing
for every document processed. The model is now loaded once at startup.

Also updated docstrings to mark 'storage' parameter as deprecated since
singleton is now used.
parent a8c73d3b
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -344,13 +344,16 @@ def generate_embeddings(
    Args:
        document_id: Document identifier.
        markdown: Markdown content to embed.
        storage: Optional storage instance.
        storage: Optional storage instance (deprecated, uses singleton now).
        workspace: Optional workspace scope (defaults to "default").

    Returns:
        List of DocumentChunk objects with embeddings.
    """
    manager = EmbeddingsManager(storage=storage)
    from tdoc_crawler.ai.container import AiServiceContainer

    container = AiServiceContainer.get_instance()
    manager = container.get_embeddings_manager()
    return manager.generate_embeddings(document_id, markdown, workspace)


@@ -369,7 +372,11 @@ def query_embeddings(
    Returns:
        List of (DocumentChunk, score) tuples.
    """
    return EmbeddingsManager().query_embeddings(query, workspace, top_k)
    from tdoc_crawler.ai.container import AiServiceContainer

    container = AiServiceContainer.get_instance()
    manager = container.get_embeddings_manager()
    return manager.query_embeddings(query, workspace, top_k)


__all__ = [
+5 −2
Original line number Diff line number Diff line
@@ -209,16 +209,19 @@ def summarize_document(
    Args:
        document_id: Document identifier.
        markdown: Markdown content.
        storage: Optional storage instance.
        storage: Optional storage instance (deprecated, uses singleton now).
        workspace: Optional workspace scope (defaults to "default").

    Returns:
        DocumentSummary object.
    """
    from tdoc_crawler.ai.container import AiServiceContainer

    config = _get_ai_config()

    if storage is None:
        storage = AiStorage(config.ai_cache_dir)  # type: ignore[arg-type]
        container = AiServiceContainer.get_instance()
        storage = container.get_ai_storage()

    normalized_workspace = normalize_workspace_name(workspace)