|
@@ -6,8 +6,6 @@ from uuid import uuid4
|
|
|
import pytest
|
|
import pytest
|
|
|
|
|
|
|
|
from acquisition.domain import Query, QueryBatch
|
|
from acquisition.domain import Query, QueryBatch
|
|
|
-from acquisition.queries import builder as query_builder
|
|
|
|
|
-from acquisition.queries import filter as query_filter
|
|
|
|
|
from acquisition.queries.builder import (
|
|
from acquisition.queries.builder import (
|
|
|
QueryBuildOptions,
|
|
QueryBuildOptions,
|
|
|
TREES,
|
|
TREES,
|
|
@@ -15,7 +13,6 @@ from acquisition.queries.builder import (
|
|
|
persist_query_batch,
|
|
persist_query_batch,
|
|
|
)
|
|
)
|
|
|
from core.config import PgConfig, Settings
|
|
from core.config import PgConfig, Settings
|
|
|
-from core.text_limits import QUERY_FILTER_REASON_MAX_CHARS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _settings() -> Settings:
|
|
def _settings() -> Settings:
|
|
@@ -35,23 +32,6 @@ def _settings() -> Settings:
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
-def test_query_filter_preserves_wide_reason(monkeypatch):
|
|
|
|
|
- reason = "理" * (QUERY_FILTER_REASON_MAX_CHARS + 3)
|
|
|
|
|
-
|
|
|
|
|
- monkeypatch.setattr(
|
|
|
|
|
- query_filter,
|
|
|
|
|
- "_chat_content",
|
|
|
|
|
- lambda settings, messages: json.dumps(
|
|
|
|
|
- [{"idx": 0, "valid": 8, "relevant": True, "reason": reason}],
|
|
|
|
|
- ensure_ascii=False,
|
|
|
|
|
- ),
|
|
|
|
|
- )
|
|
|
|
|
-
|
|
|
|
|
- rows = query_filter.filter_queries(["符号 视频 灵感 怎么做"], _settings())
|
|
|
|
|
-
|
|
|
|
|
- assert rows[0]["reason"] == "理" * QUERY_FILTER_REASON_MAX_CHARS
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
class FakeRepo:
|
|
class FakeRepo:
|
|
|
def __init__(self) -> None:
|
|
def __init__(self) -> None:
|
|
|
self.batch_kwargs = None
|
|
self.batch_kwargs = None
|
|
@@ -182,47 +162,22 @@ def test_build_creation_query_batch_rejects_unknown_family_key():
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
-def test_build_creation_query_batch_keeps_all_queries_without_default_llm_filter(monkeypatch):
|
|
|
|
|
- def fail_filter(*args, **kwargs):
|
|
|
|
|
- raise AssertionError("query filter should be disabled by default")
|
|
|
|
|
-
|
|
|
|
|
- monkeypatch.setattr(query_builder, "filter_queries", fail_filter)
|
|
|
|
|
-
|
|
|
|
|
|
|
+def test_build_creation_query_batch_keeps_all_queries():
|
|
|
generated = build_creation_query_batch(
|
|
generated = build_creation_query_batch(
|
|
|
_settings(),
|
|
_settings(),
|
|
|
options=QueryBuildOptions(per=3, batch_n=4),
|
|
options=QueryBuildOptions(per=3, batch_n=4),
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
- assert generated["metadata"]["query_filter_enabled"] is False
|
|
|
|
|
|
|
+ assert "query_filter_enabled" not in generated["metadata"]
|
|
|
|
|
+ assert "query_filter_prompt_version" not in generated["metadata"]
|
|
|
assert all(item["keep"] is True for family in generated["families"] for item in family["items"])
|
|
assert all(item["keep"] is True for family in generated["families"] for item in family["items"])
|
|
|
assert all(item["reason"] == "" for family in generated["families"] for item in family["items"])
|
|
assert all(item["reason"] == "" for family in generated["families"] for item in family["items"])
|
|
|
|
|
|
|
|
|
|
|
|
|
-def test_build_creation_query_batch_can_enable_llm_filter(monkeypatch):
|
|
|
|
|
- def fake_filter(queries, settings):
|
|
|
|
|
- return [
|
|
|
|
|
- {"keep": i != 1, "valid": 9 if i != 1 else 5, "relevant": i != 1, "reason": f"r{i}"}
|
|
|
|
|
- for i, _ in enumerate(queries)
|
|
|
|
|
- ]
|
|
|
|
|
-
|
|
|
|
|
- monkeypatch.setattr(query_builder, "filter_queries", fake_filter)
|
|
|
|
|
-
|
|
|
|
|
- generated = build_creation_query_batch(
|
|
|
|
|
- _settings(),
|
|
|
|
|
- options=QueryBuildOptions(per=3, batch_n=4, enable_query_filter=True),
|
|
|
|
|
- )
|
|
|
|
|
- items = generated["families"][0]["items"]
|
|
|
|
|
-
|
|
|
|
|
- assert generated["metadata"]["query_filter_enabled"] is True
|
|
|
|
|
- assert [item["keep"] for item in items] == [True, False, True]
|
|
|
|
|
- assert [item["reason"] for item in items] == ["r0", "r1", "r2"]
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
def test_persist_query_batch_writes_formal_batch_and_query_contract():
|
|
def test_persist_query_batch_writes_formal_batch_and_query_contract():
|
|
|
repo = FakeRepo()
|
|
repo = FakeRepo()
|
|
|
generated = {
|
|
generated = {
|
|
|
"metadata": {
|
|
"metadata": {
|
|
|
- "query_filter_prompt_version": "abc123",
|
|
|
|
|
"active_family_keys": ["f1", "f2"],
|
|
"active_family_keys": ["f1", "f2"],
|
|
|
},
|
|
},
|
|
|
"families": [
|
|
"families": [
|
|
@@ -235,8 +190,6 @@ def test_persist_query_batch_writes_formal_batch_and_query_contract():
|
|
|
"query": "反转 视频 脚本 怎么做",
|
|
"query": "反转 视频 脚本 怎么做",
|
|
|
"parts": {"实质": "反转", "模态": "视频"},
|
|
"parts": {"实质": "反转", "模态": "视频"},
|
|
|
"keep": True,
|
|
"keep": True,
|
|
|
- "valid": 8,
|
|
|
|
|
- "relevant": True,
|
|
|
|
|
"reason": "可搜创作方法",
|
|
"reason": "可搜创作方法",
|
|
|
}
|
|
}
|
|
|
],
|
|
],
|
|
@@ -258,5 +211,6 @@ def test_persist_query_batch_writes_formal_batch_and_query_contract():
|
|
|
assert row["keep"] is True
|
|
assert row["keep"] is True
|
|
|
assert row["filter_reason"] == "可搜创作方法"
|
|
assert row["filter_reason"] == "可搜创作方法"
|
|
|
assert row["metadata"]["family_key"] == "f1"
|
|
assert row["metadata"]["family_key"] == "f1"
|
|
|
- assert row["metadata"]["valid"] == 8
|
|
|
|
|
- assert row["metadata"]["query_filter_prompt_version"] == "abc123"
|
|
|
|
|
|
|
+ assert "valid" not in row["metadata"]
|
|
|
|
|
+ assert "relevant" not in row["metadata"]
|
|
|
|
|
+ assert "query_filter_prompt_version" not in row["metadata"]
|