103 lines
3.2 KiB
Python
103 lines
3.2 KiB
Python
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_code_vectors as search_cli # noqa: E402
|
|
|
|
|
|
def test_search_code_vectors_sends_model_and_strict_query_embedding(monkeypatch) -> None:
|
|
calls: list[tuple[str, dict]] = []
|
|
|
|
monkeypatch.setattr(
|
|
search_cli,
|
|
"embed_texts",
|
|
lambda texts, **kwargs: [[1.0, 0.0, 0.0]],
|
|
)
|
|
|
|
def fake_adapter_call(
|
|
adapter_url: str,
|
|
method: str,
|
|
payload: dict,
|
|
*,
|
|
timeout_seconds: int = 180,
|
|
) -> dict:
|
|
calls.append((method, payload))
|
|
return {"status": "ok", "matches": []}
|
|
|
|
monkeypatch.setattr(search_cli, "adapter_call", fake_adapter_call)
|
|
|
|
result = search_cli.search_code_vectors(
|
|
adapter_url="http://adapter/rpc",
|
|
base_id="upo_test",
|
|
query="где рассчитывается налог",
|
|
embedding_provider="openai-compatible",
|
|
embedding_model="test-code-model",
|
|
embedding_base_url="http://embeddings",
|
|
dimensions=3,
|
|
)
|
|
|
|
assert result["status"] == "ok"
|
|
assert result["client_embedding"]["stored_embedding_model"] == "openai-compatible:test-code-model@d3"
|
|
assert calls == [
|
|
(
|
|
"metadata.code_vector.search",
|
|
{
|
|
"base_id": "upo_test",
|
|
"query": "где рассчитывается налог",
|
|
"query_embedding": [1.0, 0.0, 0.0],
|
|
"embedding_model": "openai-compatible:test-code-model@d3",
|
|
"limit": 10,
|
|
"scan_limit": 2000,
|
|
"verify": True,
|
|
"strict": True,
|
|
},
|
|
)
|
|
]
|
|
|
|
|
|
def test_qwen3_search_uses_query_instruction_but_keeps_lexical_query_plain(monkeypatch) -> None:
|
|
embedded_texts: list[str] = []
|
|
calls: list[tuple[str, dict]] = []
|
|
|
|
def fake_embed_texts(texts: list[str], **kwargs) -> list[list[float]]:
|
|
embedded_texts.extend(texts)
|
|
return [[0.5, 0.5]]
|
|
|
|
monkeypatch.setattr(search_cli, "embed_texts", fake_embed_texts)
|
|
|
|
def fake_adapter_call(
|
|
adapter_url: str,
|
|
method: str,
|
|
payload: dict,
|
|
*,
|
|
timeout_seconds: int = 180,
|
|
) -> dict:
|
|
calls.append((method, payload))
|
|
return {"status": "ok", "matches": []}
|
|
|
|
monkeypatch.setattr(search_cli, "adapter_call", fake_adapter_call)
|
|
|
|
result = search_cli.search_code_vectors(
|
|
adapter_url="http://adapter/rpc",
|
|
base_id="upo_test",
|
|
query="обработка проведения документа",
|
|
embedding_provider="openai-compatible",
|
|
embedding_model="qwen3-embedding-0.6b",
|
|
embedding_base_url="http://embeddings",
|
|
)
|
|
|
|
assert embedded_texts == [
|
|
"Instruct: Given a natural-language software task, retrieve the relevant "
|
|
"1C Enterprise BSL source-code fragment that implements or explains it\n"
|
|
"Query:обработка проведения документа"
|
|
]
|
|
assert calls[0][1]["query"] == "обработка проведения документа"
|
|
assert result["client_embedding"]["query_instruction"] == (
|
|
search_cli.DEFAULT_QWEN3_CODE_RETRIEVAL_INSTRUCTION
|
|
)
|