Files
llm/tests/1c/test_code_vector_search_cli.py
2026-08-14 09:40:51 +03:00

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
)