intents.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. # -*- coding: utf-8 -*-
  2. """
  3. Intent-Definitionen fuer das Calendar-Plugin.
  4. Definiert 6 Intents: next_appointment, search_appointment, appointment_attendees,
  5. check_person_schedule, create_appointment, list_appointments.
  6. """
  7. from typing import Callable
  8. from trixy_core.nlp.intent_registry import IntentDefinition, IntentSlot
  9. def build_intent_definitions(
  10. plugin_name: str,
  11. handle_next_appointment: Callable,
  12. handle_search_appointment: Callable,
  13. handle_appointment_attendees: Callable,
  14. handle_check_person_schedule: Callable,
  15. handle_create_appointment: Callable,
  16. handle_list_appointments: Callable,
  17. ) -> list[IntentDefinition]:
  18. """
  19. Erstellt alle Intent-Definitionen fuer das Calendar-Plugin.
  20. Args:
  21. plugin_name: Plugin-Name fuer die Registrierung
  22. handle_*: Handler-Funktionen
  23. Returns:
  24. Liste von IntentDefinition
  25. """
  26. return [
  27. # 1. Naechster Termin
  28. IntentDefinition(
  29. name="next_appointment",
  30. handler=handle_next_appointment,
  31. plugin_name=plugin_name,
  32. examples=[
  33. "Wann ist mein naechster Termin?",
  34. "Was ist mein naechster Termin?",
  35. "Naechster Termin",
  36. "Wann muss ich zum naechsten Termin?",
  37. "Habe ich bald einen Termin?",
  38. ],
  39. description="Naechsten bevorstehenden Termin abfragen",
  40. patterns=[
  41. "(wann|was) ist [mein] naechster termin",
  42. "naechster termin",
  43. "habe ich [bald] [einen] termin",
  44. ],
  45. ),
  46. # 2. Termin suchen
  47. IntentDefinition(
  48. name="search_appointment",
  49. handler=handle_search_appointment,
  50. plugin_name=plugin_name,
  51. slots={
  52. "query": IntentSlot(
  53. name="query",
  54. slot_type=str,
  55. required=True,
  56. description="Suchbegriff (Terminname, Ort, etc.)",
  57. examples=["Zahnarzt", "Stand-Up", "Meeting"],
  58. ),
  59. },
  60. examples=[
  61. "Wann ist der Zahnarzt Termin?",
  62. "Um wieviel Uhr ist das Stand-Up?",
  63. "Wann habe ich den naechsten Zahnarzt Termin?",
  64. "Wann findet das Meeting statt?",
  65. "Gibt es einen Termin zum Thema Review?",
  66. ],
  67. description="Termin anhand eines Suchbegriffs suchen",
  68. patterns=[
  69. "wann ist [der] {query} [termin]",
  70. "um wieviel uhr ist {query}",
  71. "wann (habe ich|findet) [den|das] {query} [statt]",
  72. ],
  73. ),
  74. # 3. Teilnehmer abfragen
  75. IntentDefinition(
  76. name="appointment_attendees",
  77. handler=handle_appointment_attendees,
  78. plugin_name=plugin_name,
  79. slots={
  80. "query": IntentSlot(
  81. name="query",
  82. slot_type=str,
  83. required=True,
  84. description="Name des Termins",
  85. examples=["Stand-Up", "Meeting", "Review"],
  86. ),
  87. },
  88. examples=[
  89. "Wer ist alles in dem Stand-Up?",
  90. "Wer nimmt am Meeting teil?",
  91. "Welche Teilnehmer hat das Review?",
  92. "Wer kommt zum Stand-Up?",
  93. ],
  94. description="Teilnehmer eines Termins abfragen",
  95. patterns=[
  96. "wer ist [alles] (in|bei) [dem|dem] {query}",
  97. "wer nimmt [am|an] {query} teil",
  98. "welche teilnehmer hat {query}",
  99. "wer kommt [zum|zur] {query}",
  100. ],
  101. ),
  102. # 4. Personen-Terminplan
  103. IntentDefinition(
  104. name="check_person_schedule",
  105. handler=handle_check_person_schedule,
  106. plugin_name=plugin_name,
  107. slots={
  108. "person": IntentSlot(
  109. name="person",
  110. slot_type=str,
  111. required=True,
  112. description="Name der Person",
  113. examples=["André", "Max", "Lisa"],
  114. ),
  115. },
  116. examples=[
  117. "Wann hat André seinen naechsten Termin?",
  118. "Wann hat André Zeit?",
  119. "Hat Max heute noch Termine?",
  120. "Was macht Lisa als naechstes?",
  121. ],
  122. description="Terminplan einer bestimmten Person abfragen",
  123. patterns=[
  124. "wann hat {person} [seinen|ihren] [naechsten] termin",
  125. "wann hat {person} zeit",
  126. "hat {person} [heute] [noch] termine",
  127. ],
  128. ),
  129. # 5. Termin erstellen
  130. IntentDefinition(
  131. name="create_appointment",
  132. handler=handle_create_appointment,
  133. plugin_name=plugin_name,
  134. slots={
  135. "title": IntentSlot(
  136. name="title",
  137. slot_type=str,
  138. required=True,
  139. description="Titel des Termins",
  140. examples=["Zahnarzt", "Meeting", "Mittagspause"],
  141. ),
  142. "time": IntentSlot(
  143. name="time",
  144. slot_type=str,
  145. required=True,
  146. description="Uhrzeit des Termins",
  147. examples=["15 Uhr", "9:30", "14:00"],
  148. ),
  149. "date": IntentSlot(
  150. name="date",
  151. slot_type=str,
  152. required=False,
  153. description="Datum des Termins (Standard: heute)",
  154. examples=["heute", "morgen", "Freitag", "15.03."],
  155. ),
  156. "duration": IntentSlot(
  157. name="duration",
  158. slot_type=int,
  159. required=False,
  160. description="Dauer in Minuten (Standard: 60)",
  161. examples=["30", "60", "90"],
  162. ),
  163. },
  164. examples=[
  165. "Richte einen Termin Zahnarzt um 15 Uhr ein",
  166. "Trage einen Zahnarzt Termin fuer morgen 9 Uhr ein",
  167. "Erstelle einen Termin Meeting um 14 Uhr fuer 30 Minuten",
  168. "Neuer Termin Mittagspause morgen 12 Uhr",
  169. ],
  170. description="Neuen Termin im Kalender erstellen",
  171. patterns=[
  172. "(richte|trage|erstelle) [einen] [termin] {title} [um|fuer] {time} [ein]",
  173. "neuer termin {title} [am] {date} [um] {time}",
  174. ],
  175. ),
  176. # 6. Termine auflisten
  177. IntentDefinition(
  178. name="list_appointments",
  179. handler=handle_list_appointments,
  180. plugin_name=plugin_name,
  181. slots={
  182. "date": IntentSlot(
  183. name="date",
  184. slot_type=str,
  185. required=False,
  186. description="Datum (Standard: heute)",
  187. examples=["heute", "morgen", "Freitag"],
  188. ),
  189. },
  190. examples=[
  191. "Was steht heute an?",
  192. "Welche Termine habe ich morgen?",
  193. "Termine fuer Freitag",
  194. "Was habe ich heute auf dem Plan?",
  195. "Zeig mir meine Termine fuer morgen",
  196. ],
  197. description="Alle Termine fuer einen bestimmten Tag auflisten",
  198. patterns=[
  199. "was steht [heute|morgen] an",
  200. "welche termine habe ich {date}",
  201. "termine [fuer] {date}",
  202. "was habe ich {date} [auf dem plan]",
  203. "zeig [meine] termine [fuer] {date}",
  204. ],
  205. ),
  206. ]