Files
leocrm/app/plugins/builtins/unified_search/contracts.py
T

43 lines
1.6 KiB
Python
Raw Normal View History

2026-07-25 21:03:46 +02:00
"""Unified Search plugin contract — public interface for cross-plugin access."""
from __future__ import annotations
from app.plugins.builtins.contracts import get_contract_registry
from app.plugins.builtins.unified_search.base_provider import BaseSearchProvider
2026-07-25 21:03:46 +02:00
from app.plugins.builtins.unified_search.embedding import generate_embedding
from app.plugins.builtins.unified_search.provider_registry import get_search_registry
from app.plugins.builtins.unified_search.query_understanding import llm_analyze_query
from app.plugins.builtins.unified_search.search_engine import find_similar_all_types, hybrid_search
2026-07-25 21:03:46 +02:00
class UnifiedSearchContract:
"""Public contract for the unified_search plugin."""
contract_name = "unified_search"
2026-07-25 21:03:46 +02:00
generate_embedding = staticmethod(generate_embedding)
hybrid_search = staticmethod(hybrid_search)
find_similar_all_types = staticmethod(find_similar_all_types)
get_search_registry = staticmethod(get_search_registry)
llm_analyze_query = staticmethod(llm_analyze_query)
BaseSearchProvider = BaseSearchProvider
2026-07-25 21:03:46 +02:00
# ─── self-registration ───
_contract = UnifiedSearchContract()
get_contract_registry().register("unified_search", _contract)
# Backward-compatible local accessor
2026-07-25 21:03:46 +02:00
_contract_instance: UnifiedSearchContract | None = None
def get_contract() -> UnifiedSearchContract:
global _contract_instance
if _contract_instance is None:
_contract_instance = UnifiedSearchContract()
return _contract_instance
__all__ = ["UnifiedSearchContract", "generate_embedding", "hybrid_search", "find_similar_all_types", "get_search_registry", "BaseSearchProvider"]