rasa-pro 3.12.5__py3-none-any.whl → 3.12.6__py3-none-any.whl

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.

Potentially problematic release.


This version of rasa-pro might be problematic. Click here for more details.

Files changed (35) hide show
  1. rasa/core/actions/action.py +0 -6
  2. rasa/core/channels/voice_ready/audiocodes.py +52 -17
  3. rasa/core/channels/voice_stream/audiocodes.py +53 -9
  4. rasa/core/channels/voice_stream/genesys.py +146 -16
  5. rasa/core/policies/flows/flow_executor.py +3 -38
  6. rasa/core/processor.py +19 -5
  7. rasa/core/utils.py +53 -0
  8. rasa/dialogue_understanding/commands/cancel_flow_command.py +4 -59
  9. rasa/dialogue_understanding/commands/start_flow_command.py +0 -41
  10. rasa/dialogue_understanding/generator/command_generator.py +67 -0
  11. rasa/dialogue_understanding/generator/llm_based_command_generator.py +2 -12
  12. rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +0 -61
  13. rasa/dialogue_understanding/processor/command_processor.py +7 -65
  14. rasa/dialogue_understanding/stack/utils.py +0 -38
  15. rasa/shared/core/constants.py +0 -8
  16. rasa/shared/core/domain.py +12 -3
  17. rasa/shared/core/flows/flow.py +0 -17
  18. rasa/shared/core/flows/flows_yaml_schema.json +3 -38
  19. rasa/shared/core/flows/steps/collect.py +5 -18
  20. rasa/shared/core/flows/utils.py +1 -16
  21. rasa/shared/core/slot_mappings.py +23 -5
  22. rasa/shared/nlu/constants.py +0 -1
  23. rasa/shared/utils/common.py +11 -1
  24. rasa/validator.py +1 -123
  25. rasa/version.py +1 -1
  26. {rasa_pro-3.12.5.dist-info → rasa_pro-3.12.6.dist-info}/METADATA +4 -5
  27. {rasa_pro-3.12.5.dist-info → rasa_pro-3.12.6.dist-info}/RECORD +30 -35
  28. {rasa_pro-3.12.5.dist-info → rasa_pro-3.12.6.dist-info}/WHEEL +1 -1
  29. README.md +0 -38
  30. rasa/core/actions/action_handle_digressions.py +0 -164
  31. rasa/dialogue_understanding/commands/handle_digressions_command.py +0 -144
  32. rasa/dialogue_understanding/patterns/handle_digressions.py +0 -81
  33. rasa/keys +0 -1
  34. {rasa_pro-3.12.5.dist-info → rasa_pro-3.12.6.dist-info}/NOTICE +0 -0
  35. {rasa_pro-3.12.5.dist-info → rasa_pro-3.12.6.dist-info}/entry_points.txt +0 -0
@@ -217,15 +217,12 @@
217
217
  "reset_after_flow_ends": {
218
218
  "type": "boolean"
219
219
  },
220
- "ask_confirm_digressions": {
221
- "$ref": "#/$defs/ask_confirm_digressions"
222
- },
223
- "block_digressions": {
224
- "$ref": "#/$defs/block_digressions"
225
- },
226
220
  "utter": {
227
221
  "type": "string"
228
222
  },
223
+ "force_slot_filling": {
224
+ "type": "boolean"
225
+ },
229
226
  "rejections": {
230
227
  "type": "array",
231
228
  "schema_name": "list of rejections",
@@ -253,32 +250,6 @@
253
250
  }
254
251
  }
255
252
  },
256
- "ask_confirm_digressions": {
257
- "oneOf": [
258
- {
259
- "type": "boolean"
260
- },
261
- {
262
- "type": "array",
263
- "items": {
264
- "type": "string"
265
- }
266
- }
267
- ]
268
- },
269
- "block_digressions": {
270
- "oneOf": [
271
- {
272
- "type": "boolean"
273
- },
274
- {
275
- "type": "array",
276
- "items": {
277
- "type": "string"
278
- }
279
- }
280
- ]
281
- },
282
253
  "flow": {
283
254
  "required": [
284
255
  "steps",
@@ -340,12 +311,6 @@
340
311
  "persisted_slots": {
341
312
  "$ref": "#/$defs/persisted_slots"
342
313
  },
343
- "ask_confirm_digressions": {
344
- "$ref": "#/$defs/ask_confirm_digressions"
345
- },
346
- "block_digressions": {
347
- "$ref": "#/$defs/block_digressions"
348
- },
349
314
  "run_pattern_completed": {
350
315
  "type": "boolean"
351
316
  }
@@ -1,15 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
- from dataclasses import dataclass, field
3
+ from dataclasses import dataclass
4
4
  from typing import Any, Dict, List, Set, Text
5
5
 
6
6
  from rasa.shared.constants import ACTION_ASK_PREFIX, UTTER_ASK_PREFIX
7
- from rasa.shared.core.constants import (
8
- KEY_ASK_CONFIRM_DIGRESSIONS,
9
- KEY_BLOCK_DIGRESSIONS,
10
- )
11
7
  from rasa.shared.core.flows.flow_step import FlowStep
12
- from rasa.shared.core.flows.utils import extract_digression_prop
13
8
  from rasa.shared.core.slots import SlotRejection
14
9
 
15
10
 
@@ -29,10 +24,8 @@ class CollectInformationFlowStep(FlowStep):
29
24
  """Whether to always ask the question even if the slot is already filled."""
30
25
  reset_after_flow_ends: bool = True
31
26
  """Whether to reset the slot value at the end of the flow."""
32
- ask_confirm_digressions: List[str] = field(default_factory=list)
33
- """The flow id digressions for which the assistant should ask for confirmation."""
34
- block_digressions: List[str] = field(default_factory=list)
35
- """The flow id digressions that should be blocked during the flow step."""
27
+ force_slot_filling: bool = False
28
+ """Whether to keep only the SetSlot command for the collected slot."""
36
29
 
37
30
  @classmethod
38
31
  def from_json(
@@ -60,10 +53,7 @@ class CollectInformationFlowStep(FlowStep):
60
53
  SlotRejection.from_dict(rejection)
61
54
  for rejection in data.get("rejections", [])
62
55
  ],
63
- ask_confirm_digressions=extract_digression_prop(
64
- KEY_ASK_CONFIRM_DIGRESSIONS, data
65
- ),
66
- block_digressions=extract_digression_prop(KEY_BLOCK_DIGRESSIONS, data),
56
+ force_slot_filling=data.get("force_slot_filling", False),
67
57
  **base.__dict__,
68
58
  )
69
59
 
@@ -79,10 +69,7 @@ class CollectInformationFlowStep(FlowStep):
79
69
  data["ask_before_filling"] = self.ask_before_filling
80
70
  data["reset_after_flow_ends"] = self.reset_after_flow_ends
81
71
  data["rejections"] = [rejection.as_dict() for rejection in self.rejections]
82
- data["ask_confirm_digressions"] = self.ask_confirm_digressions
83
- data["block_digressions"] = (
84
- self.block_digressions if self.block_digressions else False
85
- )
72
+ data["force_slot_filling"] = self.force_slot_filling
86
73
 
87
74
  return data
88
75
 
@@ -1,4 +1,4 @@
1
- from typing import TYPE_CHECKING, Any, Dict, List, Set, Text
1
+ from typing import TYPE_CHECKING, Any, Dict, Set, Text
2
2
 
3
3
  from rasa.shared.utils.io import raise_deprecation_warning
4
4
 
@@ -8,7 +8,6 @@ if TYPE_CHECKING:
8
8
 
9
9
  RESET_PROPERTY_NAME = "reset_after_flow_ends"
10
10
  PERSIST_PROPERTY_NAME = "persisted_slots"
11
- ALL_LABEL = "ALL"
12
11
 
13
12
 
14
13
  def warn_deprecated_collect_step_config() -> None:
@@ -45,20 +44,6 @@ def get_invalid_slot_persistence_config_error_message(
45
44
  )
46
45
 
47
46
 
48
- def extract_digression_prop(prop: str, data: Dict[str, Any]) -> List[str]:
49
- """Extracts the digression property from the data.
50
-
51
- There can be two types of properties: ask_confirm_digressions and
52
- block_digressions.
53
- """
54
- digression_property = data.get(prop, [])
55
-
56
- if isinstance(digression_property, bool):
57
- digression_property = [ALL_LABEL] if digression_property else []
58
-
59
- return digression_property
60
-
61
-
62
47
  def extract_translations(
63
48
  translation_data: Dict[Text, Any],
64
49
  ) -> Dict[Text, "FlowLanguageTranslation"]:
@@ -115,6 +115,18 @@ class SlotMapping(BaseModel):
115
115
  )
116
116
  data_copy[KEY_RUN_ACTION_EVERY_TURN] = deprecated_action
117
117
 
118
+ structlogger.warning(
119
+ "slot_mapping.deprecated_action_key_replaced_with_run_action_every_turn",
120
+ slot_name=slot_name,
121
+ event_info=f"The `{KEY_ACTION}` key in slot mappings "
122
+ f"has been replaced with "
123
+ f"the `{KEY_RUN_ACTION_EVERY_TURN}` key. "
124
+ f"This will result in the custom action "
125
+ f"being executed at every conversation turn "
126
+ f"automatically. Remove the key "
127
+ f"to avoid this behavior.",
128
+ )
129
+
118
130
  run_action_every_turn = data_copy.pop(KEY_RUN_ACTION_EVERY_TURN, None)
119
131
 
120
132
  coexistence_system = data_copy.pop(KEY_COEXISTENCE_SYSTEM, None)
@@ -636,12 +648,14 @@ class SlotFillingManager:
636
648
  output_channel: "OutputChannel",
637
649
  nlg: "NaturalLanguageGenerator",
638
650
  recreate_tracker: bool = False,
651
+ slot_events: Optional[List[Event]] = None,
639
652
  ) -> List[Event]:
640
653
  from rasa.core.actions.action import RemoteAction
641
654
  from rasa.shared.core.trackers import DialogueStateTracker
642
655
  from rasa.utils.endpoints import ClientResponseError
643
656
 
644
- slot_events: List[Event] = []
657
+ validated_slot_events: List[Event] = []
658
+ slot_events = slot_events if slot_events is not None else []
645
659
  remote_action = RemoteAction(custom_action, self._action_endpoint)
646
660
  disallowed_types = set()
647
661
 
@@ -661,9 +675,9 @@ class SlotFillingManager:
661
675
  )
662
676
  for event in custom_events:
663
677
  if isinstance(event, SlotSet):
664
- slot_events.append(event)
678
+ validated_slot_events.append(event)
665
679
  elif isinstance(event, BotUttered):
666
- slot_events.append(event)
680
+ validated_slot_events.append(event)
667
681
  else:
668
682
  disallowed_types.add(event.type_name)
669
683
  except (RasaException, ClientResponseError) as e:
@@ -687,7 +701,7 @@ class SlotFillingManager:
687
701
  f"updated with this event.",
688
702
  )
689
703
 
690
- return slot_events
704
+ return validated_slot_events
691
705
 
692
706
  async def execute_validation_action(
693
707
  self,
@@ -710,7 +724,11 @@ class SlotFillingManager:
710
724
  return cast(List[Event], slot_events)
711
725
 
712
726
  validate_events = await self._run_custom_action(
713
- ACTION_VALIDATE_SLOT_MAPPINGS, output_channel, nlg, recreate_tracker=True
727
+ ACTION_VALIDATE_SLOT_MAPPINGS,
728
+ output_channel,
729
+ nlg,
730
+ recreate_tracker=True,
731
+ slot_events=cast(List[Event], slot_events),
714
732
  )
715
733
  validated_slot_names = [
716
734
  event.key for event in validate_events if isinstance(event, SlotSet)
@@ -55,4 +55,3 @@ SPLIT_ENTITIES_BY_COMMA_DEFAULT_VALUE = True
55
55
  SINGLE_ENTITY_ALLOWED_INTERLEAVING_CHARSET = {".", ",", " ", ";"}
56
56
 
57
57
  SET_SLOT_COMMAND = "set slot"
58
- HANDLE_DIGRESSIONS_COMMAND = "handle digressions"
@@ -7,7 +7,17 @@ import os
7
7
  import pkgutil
8
8
  import sys
9
9
  from types import ModuleType
10
- from typing import Any, Callable, Collection, Dict, List, Optional, Sequence, Text, Type
10
+ from typing import (
11
+ Any,
12
+ Callable,
13
+ Collection,
14
+ Dict,
15
+ List,
16
+ Optional,
17
+ Sequence,
18
+ Text,
19
+ Type,
20
+ )
11
21
 
12
22
  import rasa.shared.utils.io
13
23
  from rasa.exceptions import MissingDependencyException
rasa/validator.py CHANGED
@@ -48,7 +48,7 @@ from rasa.shared.core.domain import (
48
48
  Domain,
49
49
  )
50
50
  from rasa.shared.core.events import ActionExecuted, ActiveLoop, UserUttered
51
- from rasa.shared.core.flows import Flow, FlowsList
51
+ from rasa.shared.core.flows import FlowsList
52
52
  from rasa.shared.core.flows.constants import KEY_NAME, KEY_TRANSLATION
53
53
  from rasa.shared.core.flows.flow_step_links import IfFlowStepLink
54
54
  from rasa.shared.core.flows.steps.action import ActionFlowStep
@@ -56,7 +56,6 @@ from rasa.shared.core.flows.steps.collect import CollectInformationFlowStep
56
56
  from rasa.shared.core.flows.steps.link import LinkFlowStep
57
57
  from rasa.shared.core.flows.steps.set_slots import SetSlotsFlowStep
58
58
  from rasa.shared.core.flows.utils import (
59
- ALL_LABEL,
60
59
  get_duplicate_slot_persistence_config_error_message,
61
60
  get_invalid_slot_persistence_config_error_message,
62
61
  warn_deprecated_collect_step_config,
@@ -1281,7 +1280,6 @@ class Validator:
1281
1280
  self.verify_unique_flows(),
1282
1281
  self.verify_predicates(),
1283
1282
  self.verify_slot_persistence_configuration(),
1284
- self.verify_digression_configuration(),
1285
1283
  ]
1286
1284
 
1287
1285
  all_good = all(flow_validation_conditions)
@@ -1830,126 +1828,6 @@ class Validator:
1830
1828
 
1831
1829
  return all_good
1832
1830
 
1833
- def verify_digression_configuration(self) -> bool:
1834
- """Validates the digression configuration in flows."""
1835
- all_good = True
1836
-
1837
- for flow in self.flows.underlying_flows:
1838
- all_good = self._validate_ask_confirm_digressions(flow, all_good)
1839
- all_good = self._validate_block_digressions(flow, all_good)
1840
-
1841
- return all_good
1842
-
1843
- def _validate_ask_confirm_digressions(self, flow: Flow, all_good: bool) -> bool:
1844
- """Validates the ask_confirm_digressions configuration in a flow."""
1845
- for flow_id in flow.ask_confirm_digressions:
1846
- if flow_id == ALL_LABEL:
1847
- continue
1848
- if flow_id not in self.flows.flow_ids:
1849
- structlogger.error(
1850
- "validator.verify_digression_configuration.ask_confirm_digressions",
1851
- flow=flow.id,
1852
- event_info=(
1853
- f"The flow '{flow_id}' is listed in the "
1854
- f"`ask_confirm_digressions` configuration of flow "
1855
- f"'{flow.id}', but it is not found in the "
1856
- f"flows file. Please make sure that the flow id is correct."
1857
- ),
1858
- )
1859
- all_good = False
1860
-
1861
- if flow_id in flow.block_digressions:
1862
- structlogger.error(
1863
- "validator.verify_digression_configuration.overlap_digressions",
1864
- flow=flow.id,
1865
- event_info=(
1866
- f"The flow '{flow_id}' is listed in both the "
1867
- f"`ask_confirm_digressions` and `block_digressions` "
1868
- f"configuration of flow '{flow.id}'. "
1869
- f"Please make sure that the flow id is not listed in both "
1870
- f"configurations."
1871
- ),
1872
- )
1873
- all_good = False
1874
-
1875
- for step in flow.get_collect_steps():
1876
- for flow_id in step.ask_confirm_digressions:
1877
- if flow_id == ALL_LABEL:
1878
- continue
1879
-
1880
- if flow_id not in self.flows.flow_ids:
1881
- structlogger.error(
1882
- "validator.verify_digression_configuration.ask_confirm_digressions",
1883
- flow=flow.id,
1884
- step_id=step.id,
1885
- event_info=(
1886
- f"The flow '{flow_id}' is listed in the "
1887
- f"`ask_confirm_digressions` configuration of step "
1888
- f"'{step.id}' in flow '{flow.id}', but it is "
1889
- f"not found in the flows file. "
1890
- f"Please make sure that the flow id is correct."
1891
- ),
1892
- )
1893
- all_good = False
1894
-
1895
- if flow_id in step.block_digressions:
1896
- structlogger.error(
1897
- "validator.verify_digression_configuration.overlap_digressions",
1898
- flow=flow.id,
1899
- step_id=step.id,
1900
- event_info=(
1901
- f"The flow '{flow_id}' is listed in both the "
1902
- f"`ask_confirm_digressions` and `block_digressions` "
1903
- f"configuration of step '{step.id}' in flow '{flow.id}'. "
1904
- f"Please make sure that the flow id is not listed in both "
1905
- f"configurations."
1906
- ),
1907
- )
1908
- all_good = False
1909
-
1910
- return all_good
1911
-
1912
- def _validate_block_digressions(self, flow: Flow, all_good: bool) -> bool:
1913
- """Validates the block_digressions configuration in a flow."""
1914
- for flow_id in flow.block_digressions:
1915
- if flow_id == ALL_LABEL:
1916
- continue
1917
-
1918
- if flow_id not in self.flows.flow_ids:
1919
- structlogger.error(
1920
- "validator.verify_digression_configuration.block_digressions",
1921
- flow=flow.id,
1922
- event_info=(
1923
- f"The flow '{flow_id}' is listed in the `block_digressions` "
1924
- f"configuration of flow '{flow.id}', but it is not found "
1925
- f"in the flows file. Please make sure that the flow id "
1926
- f"is correct."
1927
- ),
1928
- )
1929
- all_good = False
1930
-
1931
- for step in flow.get_collect_steps():
1932
- for flow_id in step.block_digressions:
1933
- if flow_id == ALL_LABEL:
1934
- continue
1935
-
1936
- if flow_id not in self.flows.flow_ids:
1937
- structlogger.error(
1938
- "validator.verify_digression_configuration.block_digressions",
1939
- flow=flow.id,
1940
- step_id=step.id,
1941
- event_info=(
1942
- f"The flow '{flow_id}' is listed in the "
1943
- f"`block_digressions` configuration of step "
1944
- f"'{step.id}' in flow '{flow.id}', but it is "
1945
- f"not found in the flows file. "
1946
- f"Please make sure that the flow id is correct."
1947
- ),
1948
- )
1949
- all_good = False
1950
-
1951
- return all_good
1952
-
1953
1831
  def verify_slot_validation(self) -> bool:
1954
1832
  """Validates the slot validation configuration in the domain file."""
1955
1833
  all_good = True
rasa/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  # this file will automatically be changed,
2
2
  # do not add anything but the version number here!
3
- __version__ = "3.12.5"
3
+ __version__ = "3.12.6"
@@ -1,8 +1,7 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: rasa-pro
3
- Version: 3.12.5
3
+ Version: 3.12.6
4
4
  Summary: State-of-the-art open-core Conversational AI framework for Enterprises that natively leverages generative AI for effortless assistant development.
5
- Home-page: https://rasa.com
6
5
  Keywords: nlp,machine-learning,machine-learning-library,bot,bots,botkit,rasa conversational-agents,conversational-ai,chatbot,chatbot-framework,bot-framework
7
6
  Author: Rasa Technologies GmbH
8
7
  Author-email: hi@rasa.com
@@ -86,7 +85,6 @@ Requires-Dist: protobuf (>=4.23.3,<4.25.4)
86
85
  Requires-Dist: psutil (>=5.9.5,<6.0.0)
87
86
  Requires-Dist: psycopg2-binary (>=2.9.9,<2.10.0)
88
87
  Requires-Dist: pycountry (>=22.3.5,<23.0.0)
89
- Requires-Dist: pydantic (>=2.0,<3.0)
90
88
  Requires-Dist: pydot (>=1.4,<1.5)
91
89
  Requires-Dist: pykwalify (>=1.8,<1.9)
92
90
  Requires-Dist: pymilvus (>=2.4.1,<2.4.2)
@@ -135,7 +133,7 @@ Requires-Dist: tensorflow-io-gcs-filesystem (==0.34) ; sys_platform == "darwin"
135
133
  Requires-Dist: tensorflow-io-gcs-filesystem (==0.34) ; sys_platform == "linux"
136
134
  Requires-Dist: tensorflow-macos (==2.14.1) ; sys_platform == "darwin" and platform_machine == "arm64"
137
135
  Requires-Dist: tensorflow-metal (==1.1.0) ; (sys_platform == "darwin" and platform_machine == "arm64") and (extra == "metal")
138
- Requires-Dist: tensorflow-text (==2.14.0) ; sys_platform != "win32" and (platform_machine != "arm64" and platform_machine != "aarch64")
136
+ Requires-Dist: tensorflow-text (==2.14.0) ; sys_platform != "win32" and platform_machine != "arm64" and platform_machine != "aarch64"
139
137
  Requires-Dist: tensorflow_hub (>=0.13.0,<0.14.0)
140
138
  Requires-Dist: terminaltables (>=3.1.10,<3.2.0)
141
139
  Requires-Dist: tiktoken (>=0.7.0,<0.8.0)
@@ -150,6 +148,7 @@ Requires-Dist: webexteamssdk (>=1.6.1,<1.7.0)
150
148
  Requires-Dist: websockets (>=10.4,<11.0)
151
149
  Requires-Dist: wheel (>=0.40.0)
152
150
  Project-URL: Documentation, https://rasa.com/docs
151
+ Project-URL: Homepage, https://rasa.com
153
152
  Project-URL: Repository, https://github.com/rasahq/rasa
154
153
  Description-Content-Type: text/markdown
155
154