52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
from app.services.external_query_service.planner import ExternalQueryPlanner
|
|
|
|
|
|
def test_fallback_plan_stays_generic_for_fresh_weather_semantics() -> None:
|
|
planner = ExternalQueryPlanner(
|
|
llm_service=object(),
|
|
db=object(),
|
|
tenant_id=1,
|
|
)
|
|
|
|
plan = planner._build_fallback_plan(
|
|
question="帮我看看未来5天的广州天气如何",
|
|
query_semantics={
|
|
"query_type": "status",
|
|
"object_mentions": ["广州"],
|
|
"query_profile": {
|
|
"needs_freshness": True,
|
|
"referenced_objects": ["weather"],
|
|
},
|
|
},
|
|
)
|
|
|
|
assert plan.query_kind == "generic_web"
|
|
assert plan.answer_contract == "summary_with_sources"
|
|
assert plan.location_hint is None
|
|
assert plan.result_limit == 3
|
|
|
|
|
|
def test_fallback_plan_uses_compare_contract_without_object_kind_mapping() -> None:
|
|
planner = ExternalQueryPlanner(
|
|
llm_service=object(),
|
|
db=object(),
|
|
tenant_id=1,
|
|
)
|
|
|
|
plan = planner._build_fallback_plan(
|
|
question="对比 OpenAI 和 Anthropic 最新模型能力差异",
|
|
query_semantics={
|
|
"query_type": "compare",
|
|
"object_mentions": ["OpenAI", "Anthropic"],
|
|
"query_profile": {
|
|
"needs_freshness": True,
|
|
"referenced_objects": ["public_model"],
|
|
},
|
|
},
|
|
)
|
|
|
|
assert plan.query_kind == "generic_web"
|
|
assert plan.answer_contract == "compare_with_sources"
|
|
assert plan.requires_multi_source is True
|
|
assert plan.result_limit == 3
|