| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- # -*- 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}",
- ],
- ),
- ]
|