intents.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. # -*- coding: utf-8 -*-
  2. """
  3. Intent-Definitionen fuer das Weather-Plugin.
  4. Definiert 3 Intents: current_weather, weather_forecast, weather_week.
  5. """
  6. from typing import Callable
  7. from trixy_core.nlp.intent_registry import IntentDefinition, IntentSlot
  8. def build_intent_definitions(
  9. plugin_name: str,
  10. handle_current_weather: Callable,
  11. handle_weather_forecast: Callable,
  12. handle_weather_week: Callable,
  13. ) -> list[IntentDefinition]:
  14. """
  15. Erstellt alle Intent-Definitionen fuer das Weather-Plugin.
  16. Args:
  17. plugin_name: Plugin-Name fuer die Registrierung
  18. handle_current_weather: Handler fuer aktuelles Wetter
  19. handle_weather_forecast: Handler fuer Tagesvorhersage
  20. handle_weather_week: Handler fuer Wochenvorhersage
  21. Returns:
  22. Liste von IntentDefinition
  23. """
  24. return [
  25. # 1. Aktuelles Wetter
  26. IntentDefinition(
  27. name="current_weather",
  28. handler=handle_current_weather,
  29. plugin_name=plugin_name,
  30. slots={
  31. "city": IntentSlot(
  32. name="city",
  33. slot_type=str,
  34. required=False,
  35. description="Stadtname (optional, Standard: Default-Standort)",
  36. examples=["Berlin", "Muenchen", "Hamburg", "Sinsheim"],
  37. ),
  38. },
  39. examples=[
  40. "Wie ist das Wetter?",
  41. "Wie ist das Wetter in Berlin?",
  42. "Wie warm ist es?",
  43. "Wie kalt ist es draussen?",
  44. "Wie ist das Wetter gerade?",
  45. "Wetter in Hamburg",
  46. "Temperatur draussen",
  47. ],
  48. description="Aktuelles Wetter abfragen",
  49. patterns=[
  50. "(wie ist|wie wird) [denn] {das|} wetter [draussen|gerade|heute]",
  51. "wetter [in] {city}",
  52. "(wie warm|wie kalt) ist [es] [draussen|gerade]",
  53. "temperatur [draussen]",
  54. ],
  55. ),
  56. # 2. Tagesvorhersage
  57. IntentDefinition(
  58. name="weather_forecast",
  59. handler=handle_weather_forecast,
  60. plugin_name=plugin_name,
  61. slots={
  62. "city": IntentSlot(
  63. name="city",
  64. slot_type=str,
  65. required=False,
  66. description="Stadtname (optional)",
  67. examples=["Berlin", "Muenchen", "Hamburg"],
  68. ),
  69. "date": IntentSlot(
  70. name="date",
  71. slot_type=str,
  72. required=False,
  73. description="Datum (Standard: morgen)",
  74. examples=["morgen", "Freitag", "uebermorgen"],
  75. ),
  76. },
  77. examples=[
  78. "Wie wird das Wetter morgen?",
  79. "Wie wird das Wetter am Freitag in Muenchen?",
  80. "Brauche ich morgen einen Regenschirm?",
  81. "Wetter morgen",
  82. "Wie wird es morgen?",
  83. "Vorhersage fuer Freitag",
  84. ],
  85. description="Wettervorhersage fuer einen bestimmten Tag",
  86. patterns=[
  87. "wie wird {das|} wetter {date}",
  88. "wie wird [das] wetter [am] {date} [in] {city}",
  89. "wetter {date}",
  90. "vorhersage [fuer] {date}",
  91. "brauche ich {date} [einen] regenschirm",
  92. ],
  93. ),
  94. # 3. Wochenvorhersage
  95. IntentDefinition(
  96. name="weather_week",
  97. handler=handle_weather_week,
  98. plugin_name=plugin_name,
  99. slots={
  100. "city": IntentSlot(
  101. name="city",
  102. slot_type=str,
  103. required=False,
  104. description="Stadtname (optional)",
  105. examples=["Berlin", "Muenchen", "Hamburg"],
  106. ),
  107. },
  108. examples=[
  109. "Wie wird das Wetter diese Woche?",
  110. "Wettervorhersage",
  111. "Wochenwetter",
  112. "Wie wird das Wetter die naechsten Tage?",
  113. "Wetter fuer die Woche",
  114. ],
  115. description="Wettervorhersage fuer die naechsten Tage",
  116. patterns=[
  117. "wie wird {das|} wetter [diese|die] (woche|naechsten tage)",
  118. "(wettervorhersage|wochenwetter)",
  119. "wetter fuer [die] woche",
  120. ],
  121. ),
  122. ]