# -*- coding: utf-8 -*- """ Intent-Definitionen fuer das Calendar-Plugin. Definiert 6 Intents: next_appointment, search_appointment, appointment_attendees, check_person_schedule, create_appointment, list_appointments. """ from typing import Callable from trixy_core.nlp.intent_registry import IntentDefinition, IntentSlot def build_intent_definitions( plugin_name: str, handle_next_appointment: Callable, handle_search_appointment: Callable, handle_appointment_attendees: Callable, handle_check_person_schedule: Callable, handle_create_appointment: Callable, handle_list_appointments: Callable, ) -> list[IntentDefinition]: """ Erstellt alle Intent-Definitionen fuer das Calendar-Plugin. Args: plugin_name: Plugin-Name fuer die Registrierung handle_*: Handler-Funktionen Returns: Liste von IntentDefinition """ return [ # 1. Naechster Termin IntentDefinition( name="next_appointment", handler=handle_next_appointment, plugin_name=plugin_name, examples=[ "Wann ist mein naechster Termin?", "Was ist mein naechster Termin?", "Naechster Termin", "Wann muss ich zum naechsten Termin?", "Habe ich bald einen Termin?", ], description="Naechsten bevorstehenden Termin abfragen", patterns=[ "(wann|was) ist [mein] naechster termin", "naechster termin", "habe ich [bald] [einen] termin", ], ), # 2. Termin suchen IntentDefinition( name="search_appointment", handler=handle_search_appointment, plugin_name=plugin_name, slots={ "query": IntentSlot( name="query", slot_type=str, required=True, description="Suchbegriff (Terminname, Ort, etc.)", examples=["Zahnarzt", "Stand-Up", "Meeting"], ), }, examples=[ "Wann ist der Zahnarzt Termin?", "Um wieviel Uhr ist das Stand-Up?", "Wann habe ich den naechsten Zahnarzt Termin?", "Wann findet das Meeting statt?", "Gibt es einen Termin zum Thema Review?", ], description="Termin anhand eines Suchbegriffs suchen", patterns=[ "wann ist [der] {query} [termin]", "um wieviel uhr ist {query}", "wann (habe ich|findet) [den|das] {query} [statt]", ], ), # 3. Teilnehmer abfragen IntentDefinition( name="appointment_attendees", handler=handle_appointment_attendees, plugin_name=plugin_name, slots={ "query": IntentSlot( name="query", slot_type=str, required=True, description="Name des Termins", examples=["Stand-Up", "Meeting", "Review"], ), }, examples=[ "Wer ist alles in dem Stand-Up?", "Wer nimmt am Meeting teil?", "Welche Teilnehmer hat das Review?", "Wer kommt zum Stand-Up?", ], description="Teilnehmer eines Termins abfragen", patterns=[ "wer ist [alles] (in|bei) [dem|dem] {query}", "wer nimmt [am|an] {query} teil", "welche teilnehmer hat {query}", "wer kommt [zum|zur] {query}", ], ), # 4. Personen-Terminplan IntentDefinition( name="check_person_schedule", handler=handle_check_person_schedule, plugin_name=plugin_name, slots={ "person": IntentSlot( name="person", slot_type=str, required=True, description="Name der Person", examples=["André", "Max", "Lisa"], ), }, examples=[ "Wann hat André seinen naechsten Termin?", "Wann hat André Zeit?", "Hat Max heute noch Termine?", "Was macht Lisa als naechstes?", ], description="Terminplan einer bestimmten Person abfragen", patterns=[ "wann hat {person} [seinen|ihren] [naechsten] termin", "wann hat {person} zeit", "hat {person} [heute] [noch] termine", ], ), # 5. Termin erstellen IntentDefinition( name="create_appointment", handler=handle_create_appointment, plugin_name=plugin_name, slots={ "title": IntentSlot( name="title", slot_type=str, required=True, description="Titel des Termins", examples=["Zahnarzt", "Meeting", "Mittagspause"], ), "time": IntentSlot( name="time", slot_type=str, required=True, description="Uhrzeit des Termins", examples=["15 Uhr", "9:30", "14:00"], ), "date": IntentSlot( name="date", slot_type=str, required=False, description="Datum des Termins (Standard: heute)", examples=["heute", "morgen", "Freitag", "15.03."], ), "duration": IntentSlot( name="duration", slot_type=int, required=False, description="Dauer in Minuten (Standard: 60)", examples=["30", "60", "90"], ), }, examples=[ "Richte einen Termin Zahnarzt um 15 Uhr ein", "Trage einen Zahnarzt Termin fuer morgen 9 Uhr ein", "Erstelle einen Termin Meeting um 14 Uhr fuer 30 Minuten", "Neuer Termin Mittagspause morgen 12 Uhr", ], description="Neuen Termin im Kalender erstellen", patterns=[ "(richte|trage|erstelle) [einen] [termin] {title} [um|fuer] {time} [ein]", "neuer termin {title} [am] {date} [um] {time}", ], ), # 6. Termine auflisten IntentDefinition( name="list_appointments", handler=handle_list_appointments, plugin_name=plugin_name, slots={ "date": IntentSlot( name="date", slot_type=str, required=False, description="Datum (Standard: heute)", examples=["heute", "morgen", "Freitag"], ), }, examples=[ "Was steht heute an?", "Welche Termine habe ich morgen?", "Termine fuer Freitag", "Was habe ich heute auf dem Plan?", "Zeig mir meine Termine fuer morgen", ], description="Alle Termine fuer einen bestimmten Tag auflisten", patterns=[ "was steht [heute|morgen] an", "welche termine habe ich {date}", "termine [fuer] {date}", "was habe ich {date} [auf dem plan]", "zeig [meine] termine [fuer] {date}", ], ), ]