All checks were successful
Deploy Development / deploy (push) Successful in 42s
Test Suite / pytest-backend (push) Successful in 41s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 13s
Test Suite / k6 /health Baseline (push) Successful in 33s
Test Suite / playwright-tests (push) Successful in 1m23s
- Updated the path selection logic to incorporate semantic gating, ensuring only relevant exercises are considered based on semantic scores. - Introduced new functions for building path target profiles and resolving semantic skill weights, enhancing the contextual understanding of exercise suggestions. - Improved the retrieval process by applying dynamic retrieval weights based on semantic strength, refining the accuracy of exercise recommendations. - Incremented version to 0.8.188 and updated changelog to document these enhancements in planning AI functionality.
69 lines
2.1 KiB
Python
69 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 brief.must_phrases == ["mae geri"]
|
|
assert "mawashi geri" in brief.exclude_phrases
|
|
assert "perfektion" not in brief.must_phrases
|
|
assert brief.semantic_strength >= 0.8
|
|
|
|
|
|
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 "mae geri" in q4.lower()
|
|
assert "einstieg grundübung" not in q0.lower()
|