All checks were successful
Deploy Development / deploy (push) Successful in 43s
Test Suite / pytest-backend (push) Successful in 43s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 13s
Test Suite / k6 /health Baseline (push) Successful in 47s
Test Suite / playwright-tests (push) Successful in 1m14s
- Implemented optional LLM-Rerank functionality in the planning exercise suggestion process, allowing for improved exercise ranking based on user-defined criteria. - Updated the `suggestPlanningExercises` API to accept `planned_exercise_ids` for client-side overrides, enhancing flexibility in exercise selection. - Enhanced the `ExercisePickerModal` to reflect LLM ranking status and support new planning context features. - Incremented application version to 0.8.170 and updated changelog to document the new features and improvements in the planning AI capabilities.
55 lines
2.1 KiB
SQL
55 lines
2.1 KiB
SQL
-- Migration 072: KI-Prompt Planungs-Übungssuche — LLM-Rerank (Phase 2)
|
|
-- Spec: .claude/docs/working/PLANNING_EXERCISE_SUGGEST_CONTEXT.md §14
|
|
|
|
INSERT INTO ai_prompts (
|
|
slug, display_name, description, template,
|
|
category, output_format, output_schema, is_system_default, default_template, active, sort_order
|
|
)
|
|
SELECT
|
|
'planning_exercise_search_rank',
|
|
'Planungs-Übungssuche Rerank',
|
|
'Ordnet Kandidaten für die Trainingsplanung nach Intent und Kontext; nur IDs aus candidates_json.',
|
|
$t$Du bist Assistent für Kampfsport-Trainer bei der Trainingsplanung.
|
|
Ordne die vorgegebenen Übungs-Kandidaten nach Eignung für die aktuelle Planungssituation.
|
|
|
|
Regeln:
|
|
- Verwende NUR exercise_id-Werte aus candidates_json (keine erfundenen IDs).
|
|
- Berücksichtige search_query, intent, planning_context_json und target_profile_json.
|
|
- Bewerte anhand von Titel, summary, goal und skills jedes Kandidaten.
|
|
- Gib maximal {{result_limit}} IDs in sinnvoller Reihenfolge zurück (beste zuerst).
|
|
- Kurze Begründung pro Top-Treffer auf Deutsch (1 Satz, sachlich).
|
|
|
|
Intent-Hinweise:
|
|
- suggest_next / progression_next: logische Fortsetzung, Progression, passende Skills
|
|
- deepen_exercise: Vertiefung zum Anker, ähnlicher Fokus
|
|
- continue_plan_goal: schließt an bisherigen Plan und Skill-Lücken an
|
|
- free_search: Freitext-Relevanz
|
|
|
|
Kontext:
|
|
Intent: {{intent}}
|
|
Suchanfrage: {{search_query}}
|
|
Planung: {{planning_context_json}}
|
|
Zielprofil: {{target_profile_json}}
|
|
|
|
Kandidaten (JSON):
|
|
{{candidates_json}}
|
|
|
|
Antworte NUR mit JSON (kein Text davor/danach):
|
|
{
|
|
"ranked_ids": [123, 456],
|
|
"reasons": { "123": "…", "456": "…" }
|
|
}$t$,
|
|
'training',
|
|
'json',
|
|
'{"type":"object","required":["ranked_ids"],"properties":{"ranked_ids":{"type":"array","items":{"type":"integer"}},"reasons":{"type":"object"}}}'::jsonb,
|
|
true,
|
|
NULL,
|
|
true,
|
|
10
|
|
WHERE NOT EXISTS (SELECT 1 FROM ai_prompts WHERE slug = 'planning_exercise_search_rank');
|
|
|
|
UPDATE ai_prompts
|
|
SET default_template = template
|
|
WHERE slug = 'planning_exercise_search_rank'
|
|
AND (default_template IS NULL OR TRIM(default_template) = '');
|