Initial SQL-only 1C adapter baseline
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
sys.path.insert(0, str(ROOT / "scripts"))
|
||||
|
||||
import search_1c_semantic_cache as semantic_search # noqa: E402
|
||||
|
||||
|
||||
def test_search_semantic_cache_sends_query_embedding_and_validation(monkeypatch) -> None:
|
||||
seen: dict = {}
|
||||
|
||||
def fake_adapter_call(adapter_url: str, method: str, payload: dict, *, timeout_seconds: int = 180) -> dict:
|
||||
seen["adapter_url"] = adapter_url
|
||||
seen["method"] = method
|
||||
seen["payload"] = payload
|
||||
return {
|
||||
"status": "ok",
|
||||
"matches": [
|
||||
{
|
||||
"document_id": "doc-1",
|
||||
"score": 0.9,
|
||||
"match_by": "vector_embedding",
|
||||
"object": {"kind": "Template", "name": "ПФ_MXL"},
|
||||
"cache": {"embedding_model": "local-hashing-v1", "vector_status": "embedded"},
|
||||
}
|
||||
],
|
||||
}
|
||||
|
||||
monkeypatch.setattr(semantic_search, "adapter_call", fake_adapter_call)
|
||||
|
||||
result = semantic_search.search_semantic_cache(
|
||||
adapter_url="http://adapter/rpc",
|
||||
base_id="upo_test",
|
||||
query="ОбластьШапка",
|
||||
kind="Template",
|
||||
limit=3,
|
||||
dimensions=12,
|
||||
validate_candidates=True,
|
||||
validation_limit=2,
|
||||
)
|
||||
|
||||
assert result["status"] == "ok"
|
||||
assert result["client_embedding"]["dimensions"] == 12
|
||||
assert seen["method"] == "semantic.cache.search"
|
||||
assert seen["payload"]["base_id"] == "upo_test"
|
||||
assert seen["payload"]["query"] == "ОбластьШапка"
|
||||
assert seen["payload"]["kind"] == "Template"
|
||||
assert seen["payload"]["limit"] == 3
|
||||
assert seen["payload"]["validate_candidates"] is True
|
||||
assert seen["payload"]["validation_limit"] == 2
|
||||
assert isinstance(seen["payload"]["query_embedding"], list)
|
||||
assert len(seen["payload"]["query_embedding"]) == 12
|
||||
|
||||
|
||||
def test_search_semantic_cache_can_embed_pending_before_search(monkeypatch) -> None:
|
||||
calls: list[str] = []
|
||||
|
||||
def fake_embed_pending_semantic_cache(**kwargs) -> dict:
|
||||
calls.append("embed")
|
||||
assert kwargs["base_id"] == "upo_test"
|
||||
assert kwargs["kind"] == "Template"
|
||||
assert kwargs["limit"] == 7
|
||||
assert kwargs["batch_size"] == 3
|
||||
return {"status": "ok", "counts": {"pending": 1, "processed": 1, "stored": 1}, "embedding": {"model": "local-hashing-v1"}}
|
||||
|
||||
def fake_adapter_call(adapter_url: str, method: str, payload: dict, *, timeout_seconds: int = 180) -> dict:
|
||||
calls.append(method)
|
||||
return {"status": "ok", "matches": []}
|
||||
|
||||
monkeypatch.setattr(semantic_search, "embed_pending_semantic_cache", fake_embed_pending_semantic_cache)
|
||||
monkeypatch.setattr(semantic_search, "adapter_call", fake_adapter_call)
|
||||
|
||||
result = semantic_search.search_semantic_cache(
|
||||
adapter_url="http://adapter/rpc",
|
||||
base_id="upo_test",
|
||||
query="ОбластьШапка",
|
||||
kind="Template",
|
||||
dimensions=8,
|
||||
embed_pending=True,
|
||||
embed_limit=7,
|
||||
embed_batch_size=3,
|
||||
)
|
||||
|
||||
assert calls == ["embed", "semantic.cache.search"]
|
||||
assert result["embedding_refresh"]["counts"]["stored"] == 1
|
||||
Reference in New Issue
Block a user