All checks were successful
Deploy Development / deploy (push) Successful in 42s
Test Suite / pytest-backend (push) Successful in 40s
Test Suite / lint-backend (push) Successful in 1s
Test Suite / build-frontend (push) Successful in 13s
Test Suite / k6 /health Baseline (push) Successful in 33s
Test Suite / playwright-tests (push) Successful in 1m14s
- Introduced new functions to load exercise goals and variant names in chunks, improving data retrieval efficiency. - Integrated semantic scoring into the ranking logic, allowing for more nuanced exercise suggestions based on semantic relevance. - Updated the planning exercise suggestion process to include semantic brief handling, enriching the context for exercise recommendations. - Adjusted the retrieval phase to incorporate dynamic retrieval weights based on semantic strength, enhancing the overall suggestion accuracy. - Incremented version to 0.8.186 and updated changelog to reflect these significant enhancements in planning AI functionality.
68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
"""Tests Planungs-KI Phase E — Semantik-Schicht."""
|
|
from planning_exercise_semantics import (
|
|
apply_dynamic_retrieval_weights,
|
|
build_semantic_brief,
|
|
score_exercise_semantic_relevance,
|
|
step_retrieval_query,
|
|
)
|
|
|
|
|
|
def test_build_semantic_brief_mae_geri():
|
|
brief = build_semantic_brief(
|
|
"Von Erlernen bis zur Perfektion, des Fußtritts Mae Geri"
|
|
)
|
|
assert brief.primary_topic == "mae geri"
|
|
assert "mae geri" in brief.must_phrases
|
|
assert "mawashi geri" in brief.exclude_phrases
|
|
assert brief.semantic_strength >= 0.8
|
|
assert "einstieg" in brief.development_arc or "perfektion" in brief.development_arc
|
|
|
|
|
|
def test_semantic_score_prefers_mae_over_mawashi():
|
|
brief = build_semantic_brief("Mae Geri Perfektion")
|
|
mae_score, _ = score_exercise_semantic_relevance(
|
|
title="Mae Geri — Frontkick Grundstellung",
|
|
summary="Frontkick von vorn",
|
|
goal="Sauberer Mae Geri",
|
|
variant_names=[],
|
|
brief=brief,
|
|
)
|
|
mawashi_score, _ = score_exercise_semantic_relevance(
|
|
title="Mawashi Geri — Rundkick",
|
|
summary="Rundkick Technik",
|
|
goal="Mawashi Geri Höhe",
|
|
variant_names=[],
|
|
brief=brief,
|
|
)
|
|
assert mae_score > mawashi_score
|
|
|
|
|
|
def test_dynamic_weights_boost_semantic_for_query_only():
|
|
brief = build_semantic_brief("Mae Geri bis Perfektion")
|
|
base = {
|
|
"fulltext": 0.45,
|
|
"semantic": 0.0,
|
|
"progression": 0.08,
|
|
"skill": 0.08,
|
|
"plan": 0.08,
|
|
"profile": 0.15,
|
|
"repeat_unit": -0.3,
|
|
"repeat_group": -0.15,
|
|
}
|
|
out = apply_dynamic_retrieval_weights(
|
|
base,
|
|
brief,
|
|
scenario="free_search",
|
|
has_planning_reference=False,
|
|
)
|
|
assert out["semantic"] > 0.25
|
|
assert out["fulltext"] < base["fulltext"]
|
|
|
|
|
|
def test_step_retrieval_query_carries_topic_and_phase():
|
|
brief = build_semantic_brief("Mae Geri von Einstieg bis Perfektion")
|
|
q0 = step_retrieval_query(brief, brief.retrieval_query, 0, 5)
|
|
q4 = step_retrieval_query(brief, brief.retrieval_query, 4, 5)
|
|
assert "mae geri" in q0.lower()
|
|
assert q0 != q4
|