home-assistant-intents 2025.6.10__tar.gz → 2025.7.30__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/MANIFEST.in +1 -0
  2. {home_assistant_intents-2025.6.10/home_assistant_intents.egg-info → home_assistant_intents-2025.7.30}/PKG-INFO +1 -1
  3. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/__init__.py +135 -1
  4. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/ca.json +1 -1
  5. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/de.json +400 -233
  6. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/el.json +1392 -132
  7. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/en.json +41 -8
  8. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/fr.json +1 -1
  9. home_assistant_intents-2025.7.30/home_assistant_intents/data/ja.json +119 -0
  10. home_assistant_intents-2025.6.10/home_assistant_intents/data/pt-br.json → home_assistant_intents-2025.7.30/home_assistant_intents/data/pt-BR.json +186 -25
  11. home_assistant_intents-2025.6.10/home_assistant_intents/data/zh-cn.json → home_assistant_intents-2025.7.30/home_assistant_intents/data/zh-CN.json +1 -1
  12. home_assistant_intents-2025.6.10/home_assistant_intents/data/zh-hk.json → home_assistant_intents-2025.7.30/home_assistant_intents/data/zh-HK.json +1 -1
  13. home_assistant_intents-2025.6.10/home_assistant_intents/data/zh-tw.json → home_assistant_intents-2025.7.30/home_assistant_intents/data/zh-TW.json +1 -1
  14. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/config.json +250 -0
  15. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/config.json +77 -0
  16. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/climate_HassClimateGetTemperature.db +0 -0
  17. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/climate_HassClimateGetTemperature.json +44 -0
  18. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/climate_HassClimateSetTemperature.db +0 -0
  19. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/climate_HassClimateSetTemperature.json +37 -0
  20. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/cover_HassSetPosition.db +0 -0
  21. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/cover_HassSetPosition.json +38 -0
  22. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/cover_HassTurnOff.db +0 -0
  23. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/cover_HassTurnOff.json +25 -0
  24. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/cover_HassTurnOn.db +0 -0
  25. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/cover_HassTurnOn.json +24 -0
  26. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/fan_HassTurnOff.db +0 -0
  27. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/fan_HassTurnOff.json +26 -0
  28. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/fan_HassTurnOn.db +0 -0
  29. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/fan_HassTurnOn.json +25 -0
  30. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/homeassistant_HassGetCurrentDate.db +0 -0
  31. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/homeassistant_HassGetCurrentDate.json +22 -0
  32. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/homeassistant_HassGetCurrentTime.db +0 -0
  33. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/homeassistant_HassGetCurrentTime.json +22 -0
  34. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/homeassistant_HassNevermind.db +0 -0
  35. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/homeassistant_HassNevermind.json +13 -0
  36. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/homeassistant_HassTimerStatus.db +0 -0
  37. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/homeassistant_HassTimerStatus.json +36 -0
  38. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/homeassistant_HassTurnOff.db +0 -0
  39. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/homeassistant_HassTurnOff.json +23 -0
  40. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/homeassistant_HassTurnOn.db +0 -0
  41. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/homeassistant_HassTurnOn.json +23 -0
  42. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/light_HassLightSet.db +0 -0
  43. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/light_HassLightSet.json +51 -0
  44. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/light_HassTurnOff.db +0 -0
  45. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/light_HassTurnOff.json +64 -0
  46. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/light_HassTurnOn.db +0 -0
  47. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/light_HassTurnOn.json +65 -0
  48. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/lock_HassTurnOff.db +0 -0
  49. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/lock_HassTurnOff.json +29 -0
  50. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/lock_HassTurnOn.db +0 -0
  51. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/lock_HassTurnOn.json +29 -0
  52. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/media_player_HassMediaNext.db +0 -0
  53. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/media_player_HassMediaNext.json +25 -0
  54. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/media_player_HassMediaPause.db +0 -0
  55. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/media_player_HassMediaPause.json +24 -0
  56. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/media_player_HassMediaPrevious.db +0 -0
  57. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/media_player_HassMediaPrevious.json +29 -0
  58. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/media_player_HassMediaUnpause.db +0 -0
  59. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/media_player_HassMediaUnpause.json +25 -0
  60. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/media_player_HassSetVolume.db +0 -0
  61. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/media_player_HassSetVolume.json +31 -0
  62. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/scene_HassTurnOn.db +0 -0
  63. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/scene_HassTurnOn.json +30 -0
  64. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/script_HassTurnOn.db +0 -0
  65. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/script_HassTurnOn.json +23 -0
  66. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/vacuum_HassVacuumReturnToBase.db +0 -0
  67. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/vacuum_HassVacuumReturnToBase.json +17 -0
  68. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/vacuum_HassVacuumStart.db +0 -0
  69. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/vacuum_HassVacuumStart.json +19 -0
  70. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/valve_HassSetPosition.db +0 -0
  71. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/valve_HassSetPosition.json +34 -0
  72. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/valve_HassTurnOff.db +0 -0
  73. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/valve_HassTurnOff.json +19 -0
  74. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/valve_HassTurnOn.db +0 -0
  75. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/valve_HassTurnOn.json +18 -0
  76. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/weather_HassGetWeather.db +0 -0
  77. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/ngram/weather_HassGetWeather.json +25 -0
  78. home_assistant_intents-2025.7.30/home_assistant_intents/fuzzy/en/responses.json +131 -0
  79. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/languages.py +5 -4
  80. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30/home_assistant_intents.egg-info}/PKG-INFO +1 -1
  81. home_assistant_intents-2025.7.30/home_assistant_intents.egg-info/SOURCES.txt +136 -0
  82. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/pyproject.toml +3 -2
  83. home_assistant_intents-2025.6.10/home_assistant_intents.egg-info/SOURCES.txt +0 -70
  84. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/LICENSE.md +0 -0
  85. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/README.md +0 -0
  86. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/ar.json +0 -0
  87. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/bg.json +0 -0
  88. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/bn.json +0 -0
  89. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/cs.json +0 -0
  90. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/da.json +0 -0
  91. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/de-CH.json +0 -0
  92. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/es.json +0 -0
  93. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/et.json +0 -0
  94. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/eu.json +0 -0
  95. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/fa.json +0 -0
  96. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/fi.json +0 -0
  97. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/gl.json +0 -0
  98. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/he.json +0 -0
  99. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/hi.json +0 -0
  100. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/hr.json +0 -0
  101. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/hu.json +0 -0
  102. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/id.json +0 -0
  103. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/is.json +0 -0
  104. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/it.json +0 -0
  105. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/ka.json +0 -0
  106. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/ko.json +0 -0
  107. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/kw.json +0 -0
  108. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/lb.json +0 -0
  109. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/lt.json +0 -0
  110. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/lv.json +0 -0
  111. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/ml.json +0 -0
  112. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/mn.json +0 -0
  113. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/ms.json +0 -0
  114. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/nb.json +0 -0
  115. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/ne.json +0 -0
  116. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/nl.json +0 -0
  117. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/pl.json +0 -0
  118. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/pt.json +0 -0
  119. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/ro.json +0 -0
  120. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/ru.json +0 -0
  121. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/sk.json +0 -0
  122. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/sl.json +0 -0
  123. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/sr-Latn.json +0 -0
  124. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/sr.json +0 -0
  125. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/sv.json +0 -0
  126. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/sw.json +0 -0
  127. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/te.json +0 -0
  128. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/th.json +0 -0
  129. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/tr.json +0 -0
  130. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/uk.json +0 -0
  131. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/ur.json +0 -0
  132. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/data/vi.json +0 -0
  133. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents/language_scores.json +0 -0
  134. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents.egg-info/dependency_links.txt +0 -0
  135. /home_assistant_intents-2025.6.10/home_assistant_intents.egg-info/zip-safe → /home_assistant_intents-2025.7.30/home_assistant_intents.egg-info/not-zip-safe +0 -0
  136. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/home_assistant_intents.egg-info/top_level.txt +0 -0
  137. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/setup.cfg +0 -0
  138. {home_assistant_intents-2025.6.10 → home_assistant_intents-2025.7.30}/tests/test_intents.py +0 -0
@@ -1,2 +1,3 @@
1
1
  include LICENSE.md
2
2
  recursive-include home_assistant_intents/data *.json
3
+ recursive-include home_assistant_intents/fuzzy *.json *.db
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: home-assistant-intents
3
- Version: 2025.6.10
3
+ Version: 2025.7.30
4
4
  Summary: Intents for Home Assistant
5
5
  Author-email: The Home Assistant Authors <hello@home-assistant.io>
6
6
  License-Expression: Apache-2.0
@@ -7,13 +7,14 @@ import typing
7
7
  from dataclasses import dataclass
8
8
  from enum import Enum
9
9
  from pathlib import Path
10
- from typing import IO, Any, Callable, Dict, List, Optional
10
+ from typing import IO, Any, Callable, Collection, Dict, List, Optional, Set, Tuple
11
11
 
12
12
  from .languages import LANGUAGES
13
13
 
14
14
  _PACKAGE = "home_assistant_intents"
15
15
  _DIR = Path(typing.cast(os.PathLike, importlib.resources.files(_PACKAGE)))
16
16
  _DATA_DIR = _DIR / "data"
17
+ _FUZZY_DIR = _DIR / "fuzzy"
17
18
 
18
19
 
19
20
  class ErrorKey(str, Enum):
@@ -155,3 +156,136 @@ def get_language_scores(
155
156
  )
156
157
  for lang_key, lang_scores in scores_dict.items()
157
158
  }
159
+
160
+
161
+ # -----------------------------------------------------------------------------
162
+
163
+
164
+ @dataclass
165
+ class FuzzyConfig:
166
+ """Shared configuration for fuzzy matching."""
167
+
168
+ # intent -> (slot, slot) -> {name domains}
169
+ slot_combinations: Dict[str, Dict[Tuple[str, ...], Set[str]]]
170
+ """Name domains for all intent slot combinations."""
171
+
172
+ # list name -> [slot names]
173
+ slot_list_names: Dict[str, List[str]]
174
+ """Mapping between list and slot names."""
175
+
176
+
177
+ @dataclass
178
+ class FuzzyNgramModel:
179
+ """N-gram model for fuzzy matching."""
180
+
181
+ order: int
182
+ """N-gram order."""
183
+
184
+ words: Dict[str, int]
185
+ """Words to integer ids."""
186
+
187
+ database_path: Path
188
+ """Path to sqlite3 database file."""
189
+
190
+
191
+ FuzzyLanguageResponses = Dict[str, Dict[Tuple[str, ...], Dict[str, str]]]
192
+
193
+
194
+ @dataclass
195
+ class FuzzyLanguageInfo:
196
+ """Language specific information for fuzzy matching."""
197
+
198
+ language: str
199
+
200
+ # domain -> [keywords]
201
+ domain_keywords: Dict[str, List[str]]
202
+ """Keywords that hint at a domain."""
203
+
204
+ # intent -> model
205
+ ngram_models: Dict[str, FuzzyNgramModel]
206
+ """N-gram model for each intent."""
207
+
208
+ # intent -> (slot, slot) -> domain -> response
209
+ responses: FuzzyLanguageResponses
210
+ """Response code mapping per slot combination."""
211
+
212
+ stop_words: Optional[Collection[str]] = None
213
+ """Words that can be ignored if unknown."""
214
+
215
+
216
+ def get_fuzzy_config(
217
+ json_load: Callable[[IO[str]], Dict[str, Any]] = json.load,
218
+ ) -> FuzzyConfig:
219
+ """Return shared configuration for fuzzy matching."""
220
+ with open(_FUZZY_DIR / "config.json", "r", encoding="utf-8") as config_file:
221
+ config_dict = json_load(config_file)
222
+
223
+ return FuzzyConfig(
224
+ slot_combinations={
225
+ intent_name: {
226
+ tuple(sorted(combo_key_str.split())): set(name_domains)
227
+ for combo_key_str, name_domains in intent_combos.items()
228
+ }
229
+ for intent_name, intent_combos in config_dict["slot_combinations"].items()
230
+ },
231
+ slot_list_names={
232
+ list_name: slot_names
233
+ for list_name, slot_names in config_dict["slot_list_names"].items()
234
+ },
235
+ )
236
+
237
+
238
+ def get_fuzzy_languages() -> Set[str]:
239
+ """Return languages with fuzzy matching support."""
240
+ return {lang_dir.name for lang_dir in _FUZZY_DIR.iterdir() if lang_dir.is_dir()}
241
+
242
+
243
+ def get_fuzzy_language(
244
+ language: str,
245
+ json_load: Callable[[IO[str]], Dict[str, Any]] = json.load,
246
+ ) -> Optional[FuzzyLanguageInfo]:
247
+ """Return fuzzy matching information for a language."""
248
+ lang_fuzzy_dir = _FUZZY_DIR / language
249
+ lang_ngram_dir = lang_fuzzy_dir / "ngram"
250
+
251
+ if not lang_ngram_dir.is_dir():
252
+ return None
253
+
254
+ with open(lang_fuzzy_dir / "config.json", "r", encoding="utf-8") as config_file:
255
+ lang_config = json_load(config_file)
256
+
257
+ ngram_models: Dict[str, FuzzyNgramModel] = {}
258
+ for intent_ngram_path in lang_ngram_dir.glob("*.json"):
259
+ intent_db_path = intent_ngram_path.with_suffix(".db")
260
+ if not intent_db_path.exists():
261
+ continue
262
+
263
+ with open(intent_ngram_path, "r", encoding="utf-8") as intent_ngram_file:
264
+ intent_ngram_dict = json_load(intent_ngram_file)
265
+
266
+ intent_name = intent_ngram_path.stem
267
+ ngram_models[intent_name] = FuzzyNgramModel(
268
+ order=intent_ngram_dict["order"],
269
+ words=intent_ngram_dict["words"],
270
+ database_path=intent_db_path,
271
+ )
272
+
273
+ with open(
274
+ lang_fuzzy_dir / "responses.json", "r", encoding="utf-8"
275
+ ) as responses_file:
276
+ lang_responses_dict = json_load(responses_file)
277
+ lang_responses = {
278
+ intent_name: {
279
+ tuple(sorted(combo_key_str.split())): domain_responses
280
+ for combo_key_str, domain_responses in intent_responses.items()
281
+ }
282
+ for intent_name, intent_responses in lang_responses_dict.items()
283
+ }
284
+
285
+ return FuzzyLanguageInfo(
286
+ language=language,
287
+ domain_keywords=lang_config["domain_keywords"],
288
+ stop_words=lang_config.get("stop_words"),
289
+ ngram_models=ngram_models,
290
+ responses=lang_responses,
291
+ )
@@ -559,7 +559,7 @@
559
559
  "my_list": "[la] [meva] llista [de (la compra|compres|comprar)]",
560
560
  "my_list_req": "[la] [meva] llista de (la compra|compres|comprar)",
561
561
  "item": "{shopping_list_item:item}",
562
- "add": "(afeg[e]ix|posa)"
562
+ "add": "(afeg[e]ix|posa|fica)"
563
563
  }
564
564
  }
565
565
  ]