Files
wehub-resource-sync 1443d3fdf9
Ruff Format Check / Ruff Format & Lint (push) Failing after 7m39s
Deploy VitePress site to Pages / build (push) Failing after 9m11s
Deploy VitePress site to Pages / Deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:32:26 +08:00

134 lines
4.1 KiB
Python

from types import SimpleNamespace
import pytest
from yuxi.knowledge.eval import service as eval_service_module
from yuxi.knowledge.eval.service import EvaluationService, build_evaluation_run_name
class FakeEvaluationRepository:
def __init__(self):
self.created_dataset = None
self.updated_dataset = None
self.dataset = None
self.created_run = None
async def create_dataset(self, payload):
self.created_dataset = payload
async def update_dataset(self, dataset_id, payload):
self.updated_dataset = (dataset_id, payload)
async def get_dataset(self, dataset_id):
return self.dataset
async def create_run(self, payload):
self.created_run = payload
class FakeChunkRepository:
def __init__(self, indexed_count):
self.indexed_count = indexed_count
async def count_graph_indexed_by_kb_id(self, kb_id):
return self.indexed_count
class FakeKnowledgeBaseRepository:
async def get_by_kb_id(self, kb_id):
return SimpleNamespace(query_params={"options": {"top_k": 3}})
@pytest.mark.asyncio
async def test_generate_dataset_saves_generation_params(monkeypatch):
async def fake_enqueue(**kwargs):
return SimpleNamespace(id="task_1")
monkeypatch.setattr(eval_service_module.tasker, "enqueue", fake_enqueue)
service = EvaluationService()
service.eval_repo = FakeEvaluationRepository()
service.chunk_repo = FakeChunkRepository(indexed_count=1)
result = await service.generate_dataset(
kb_id="db_1",
name="dataset",
description="desc",
count=2,
neighbors_count=3,
concurrency_count=4,
llm_model_spec="test:model",
generation_mode="graph_enhanced",
graph_expand_top_k=2,
created_by="user_1",
)
assert result["task_id"] == "task_1"
params = service.eval_repo.created_dataset["build_metadata"]["params"]
assert params["generation_mode"] == "graph_enhanced"
assert params["graph_expand_top_k"] == 2
updated_metadata = service.eval_repo.updated_dataset[1]["build_metadata"]
assert updated_metadata["params"] == params
@pytest.mark.asyncio
async def test_generate_dataset_rejects_graph_mode_without_indexed_chunks():
service = EvaluationService()
service.eval_repo = FakeEvaluationRepository()
service.chunk_repo = FakeChunkRepository(indexed_count=0)
with pytest.raises(ValueError, match="尚未完成图索引"):
await service.generate_dataset(
kb_id="db_1",
name="dataset",
description="desc",
count=2,
neighbors_count=3,
concurrency_count=4,
llm_model_spec="test:model",
generation_mode="graph_enhanced",
graph_expand_top_k=1,
created_by="user_1",
)
assert service.eval_repo.created_dataset is None
def test_build_evaluation_run_name_uses_eval_date_hash_format():
name = build_evaluation_run_name(hash_value="abcdef12")
assert name.startswith("eval-")
assert name.endswith("-abcdef")
assert len(name.split("-")[1]) == 8
@pytest.mark.asyncio
async def test_run_evaluation_saves_custom_name(monkeypatch):
async def fake_enqueue(**kwargs):
return SimpleNamespace(id="task_1")
monkeypatch.setattr(eval_service_module.tasker, "enqueue", fake_enqueue)
repo = FakeEvaluationRepository()
repo.dataset = SimpleNamespace(
dataset_id="dataset_1",
kb_id="db_1",
name="dataset",
item_count=2,
build_metadata={"status": "completed"},
)
service = EvaluationService()
service.eval_repo = repo
service.kb_repo = FakeKnowledgeBaseRepository()
run_id = await service.run_evaluation(
kb_id="db_1",
dataset_id="dataset_1",
name=" 回归评估 ",
model_config={"answer_llm": "test:model"},
created_by="user_1",
)
assert run_id.startswith("run_")
assert repo.created_run["name"] == "回归评估"
assert repo.created_run["retrieval_config"]["top_k"] == 3
assert repo.created_run["retrieval_config"]["answer_llm"] == "test:model"