rasa-pro 3.10.15__py3-none-any.whl → 3.10.17__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.

@@ -22,6 +22,7 @@ from rasa.cli.e2e_test import (
22
22
  )
23
23
  from rasa.core.exceptions import AgentNotReady
24
24
  from rasa.core.utils import AvailableEndpoints
25
+ from rasa.dialogue_understanding.generator import SingleStepLLMCommandGenerator
25
26
  from rasa.e2e_test.e2e_test_runner import E2ETestRunner
26
27
  from rasa.llm_fine_tuning.annotation_module import annotate_e2e_tests
27
28
  from rasa.llm_fine_tuning.llm_data_preparation_module import convert_to_fine_tuning_data
@@ -44,6 +45,9 @@ from rasa.shared.constants import (
44
45
  DEFAULT_MODELS_PATH,
45
46
  LLM_CONFIG_KEY,
46
47
  )
48
+ from rasa.shared.utils.llm import (
49
+ combine_custom_and_default_config,
50
+ )
47
51
  from rasa.shared.utils.yaml import read_config_file
48
52
  from rasa.utils.beta import ensure_beta_feature_is_enabled
49
53
 
@@ -275,20 +279,19 @@ def _get_llm_command_generator_config(e2e_test_runner: E2ETestRunner) -> Dict[st
275
279
 
276
280
  train_schema = e2e_test_runner.agent.processor.model_metadata.train_schema # type: ignore
277
281
 
278
- for node in train_schema.nodes:
279
- if "SingleStepLLMCommandGenerator" in node:
280
- return {
281
- **DEFAULT_LLM_CONFIG,
282
- **train_schema.nodes[node].config.get(LLM_CONFIG_KEY),
283
- }
282
+ for node_name, node in train_schema.nodes.items():
283
+ if node.matches_type(SingleStepLLMCommandGenerator, include_subtypes=True):
284
+ return combine_custom_and_default_config(
285
+ node.config.get(LLM_CONFIG_KEY, {}), DEFAULT_LLM_CONFIG
286
+ )
284
287
 
285
288
  rasa.shared.utils.cli.print_error(
286
- "The provided model was not trained with the 'SingleStepLLMCommandGenerator'."
287
- "Without the 'SingleStepLLMCommandGenerator' no data for fine-tuning can be "
288
- "created. Please add the 'SingleStepLLMCommandGenerator' to your config and"
289
- "train your model."
289
+ "The provided model is not trained using 'SingleStepLLMCommandGenerator' or "
290
+ "its subclasses. Without it, no data for fine-tuning can be generated. To "
291
+ "resolve this, please include 'SingleStepLLMCommandGenerator' or its subclass "
292
+ "in your config and train your model."
290
293
  )
291
- sys.exit(0)
294
+ sys.exit(1)
292
295
 
293
296
 
294
297
  def log_start_of_module(module_name: str) -> None:
@@ -17,6 +17,7 @@
17
17
  <script>
18
18
  const chatDiv = document.getElementById("rasa-chat-widget");
19
19
  const websocketUrl = window.location.origin.replace("http", "ws");
20
+ const initialPayload = "/session_start";
20
21
  const maxHeight = document.documentElement.scrollHeight - 130;
21
22
  // 21 and 25 are the rem number we're using for the columns. We add 0.75rem for the padding
22
23
  // A potential improvement would be to add a onresize event for both width and height
@@ -28,6 +29,7 @@
28
29
  const columnWidth = remReference * parseFloat(getComputedStyle(document.documentElement).fontSize);
29
30
 
30
31
  chatDiv.setAttribute("data-websocket-url", websocketUrl);
32
+ chatDiv.setAttribute("data-initial-payload", initialPayload);
31
33
  chatDiv.setAttribute("data-close-on-outside-click", false);
32
34
  chatDiv.setAttribute("data-height", maxHeight);
33
35
  chatDiv.setAttribute("data-width", columnWidth);
@@ -15,6 +15,7 @@
15
15
  <script>
16
16
  const chatDiv = document.getElementById("rasa-chat-widget");
17
17
  const websocketUrl = window.location.origin.replace("http", "ws");
18
+ const initialPayload = "/session_start";
18
19
  const maxHeight = document.documentElement.scrollHeight - 130;
19
20
  // 21 and 25 are the rem number we're using for the columns. We add 0.75rem for the padding
20
21
  // A potential improvement would be to add a onresize event for both width and height
@@ -26,6 +27,7 @@
26
27
  const columnWidth = remReference * parseFloat(getComputedStyle(document.documentElement).fontSize);
27
28
 
28
29
  chatDiv.setAttribute("data-websocket-url", websocketUrl);
30
+ chatDiv.setAttribute("data-initial-payload", initialPayload);
29
31
  chatDiv.setAttribute("data-close-on-outside-click", false);
30
32
  chatDiv.setAttribute("data-height", maxHeight);
31
33
  chatDiv.setAttribute("data-width", columnWidth);
@@ -40,3 +40,12 @@ class ContinueInterruptedPatternFlowStackFrame(PatternFlowStackFrame):
40
40
  step_id=data["step_id"],
41
41
  previous_flow_name=data["previous_flow_name"],
42
42
  )
43
+
44
+ def __eq__(self, other: Any) -> bool:
45
+ if not isinstance(other, ContinueInterruptedPatternFlowStackFrame):
46
+ return False
47
+ return (
48
+ self.flow_id == other.flow_id
49
+ and self.step_id == other.step_id
50
+ and self.previous_flow_name == other.previous_flow_name
51
+ )
@@ -77,6 +77,7 @@ def top_user_flow_frame(dialogue_stack: DialogueStack) -> Optional[UserFlowStack
77
77
  if (
78
78
  isinstance(frame, UserFlowStackFrame)
79
79
  and frame.frame_type != FlowStackFrameType.CALL
80
+ and frame.frame_type != FlowStackFrameType.LINK
80
81
  ):
81
82
  return frame
82
83
  return None
@@ -45,7 +45,7 @@ class E2ETestYAMLWriter:
45
45
 
46
46
  yaml_data = ruamel.yaml.safe_load(tests)
47
47
 
48
- test_cases_yaml = [{KEY_TEST_CASES: yaml_data}]
48
+ test_cases_yaml = {KEY_TEST_CASES: yaml_data}
49
49
  with open(output_file, "w") as outfile:
50
50
  yaml = ruamel.yaml.YAML()
51
51
  yaml.dump(test_cases_yaml, outfile)
rasa/engine/graph.py CHANGED
@@ -67,6 +67,14 @@ class SchemaNode:
67
67
  is_input: bool = False
68
68
  resource: Optional[Resource] = None
69
69
 
70
+ def matches_type(self, node_type: Type, include_subtypes: bool = True) -> bool:
71
+ """Checks if schema node's 'uses' is of specified node type.
72
+ By default, it also checks for subtypes of the specified node type.
73
+ """
74
+ return (self.uses is node_type) or (
75
+ include_subtypes and issubclass(self.uses, node_type)
76
+ )
77
+
70
78
 
71
79
  @dataclass
72
80
  class GraphSchema:
@@ -166,9 +174,7 @@ class GraphSchema:
166
174
  By default, it also checks for subtypes of the specified node type.
167
175
  """
168
176
  for node in self.nodes.values():
169
- if (node.uses is node_type) or (
170
- include_subtypes and issubclass(node.uses, node_type)
171
- ):
177
+ if node.matches_type(node_type, include_subtypes):
172
178
  return True
173
179
  return False
174
180
 
@@ -1,5 +1,4 @@
1
1
  from __future__ import annotations
2
- import copy
3
2
  import logging
4
3
  from typing import Any, List, Text, Dict, Type, Union, Tuple, Optional
5
4
 
@@ -185,8 +184,6 @@ def undo_fallback_prediction(prediction: Dict[Text, Any]) -> Dict[Text, Any]:
185
184
  if len(intent_ranking) < 2:
186
185
  return prediction
187
186
 
188
- prediction = copy.deepcopy(prediction)
189
187
  prediction[INTENT] = intent_ranking[1]
190
188
  prediction[INTENT_RANKING_KEY] = prediction[INTENT_RANKING_KEY][1:]
191
-
192
189
  return prediction
@@ -77,7 +77,7 @@ class Flow:
77
77
  Returns:
78
78
  A Flow object.
79
79
  """
80
- step_sequence = FlowStepSequence.from_json(data.get("steps"))
80
+ step_sequence = FlowStepSequence.from_json(flow_id, data.get("steps"))
81
81
  nlu_triggers = NLUTriggers.from_json(data.get("nlu_trigger"))
82
82
 
83
83
  if file_path and isinstance(file_path, Path):
@@ -180,13 +180,13 @@ class Flow:
180
180
  return None
181
181
 
182
182
  if step_id == START_STEP:
183
- return StartFlowStep(self.first_step_in_flow().id)
183
+ return StartFlowStep(self.id, self.first_step_in_flow().id)
184
184
 
185
185
  if step_id == END_STEP:
186
- return EndFlowStep()
186
+ return EndFlowStep(self.id)
187
187
 
188
188
  if step_id.startswith(CONTINUE_STEP_PREFIX):
189
- return ContinueFlowStep(step_id[len(CONTINUE_STEP_PREFIX) :])
189
+ return ContinueFlowStep(self.id, step_id[len(CONTINUE_STEP_PREFIX) :])
190
190
 
191
191
  for step in self.steps_with_calls_resolved:
192
192
  if step.id == step_id:
@@ -20,10 +20,11 @@ if TYPE_CHECKING:
20
20
  structlogger = structlog.get_logger()
21
21
 
22
22
 
23
- def step_from_json(data: Dict[Text, Any]) -> FlowStep:
23
+ def step_from_json(flow_id: Text, data: Dict[Text, Any]) -> FlowStep:
24
24
  """Create a specific FlowStep from serialized data.
25
25
 
26
26
  Args:
27
+ flow_id: The id of the flow that contains the step.
27
28
  data: data for a specific FlowStep object in a serialized data format.
28
29
 
29
30
  Returns:
@@ -39,17 +40,17 @@ def step_from_json(data: Dict[Text, Any]) -> FlowStep:
39
40
  )
40
41
 
41
42
  if "action" in data:
42
- return ActionFlowStep.from_json(data)
43
+ return ActionFlowStep.from_json(flow_id, data)
43
44
  if "collect" in data:
44
- return CollectInformationFlowStep.from_json(data)
45
+ return CollectInformationFlowStep.from_json(flow_id, data)
45
46
  if "link" in data:
46
- return LinkFlowStep.from_json(data)
47
+ return LinkFlowStep.from_json(flow_id, data)
47
48
  if "call" in data:
48
- return CallFlowStep.from_json(data)
49
+ return CallFlowStep.from_json(flow_id, data)
49
50
  if "set_slots" in data:
50
- return SetSlotsFlowStep.from_json(data)
51
+ return SetSlotsFlowStep.from_json(flow_id, data)
51
52
  if "noop" in data:
52
- return NoOperationFlowStep.from_json(data)
53
+ return NoOperationFlowStep.from_json(flow_id, data)
53
54
  raise RasaException(f"Failed to parse step from json. Unknown type for {data}.")
54
55
 
55
56
 
@@ -67,12 +68,15 @@ class FlowStep:
67
68
  """Additional, unstructured information about this flow step."""
68
69
  next: FlowStepLinks
69
70
  """The next steps of the flow step."""
71
+ flow_id: Text
72
+ """The id of the flow that contains the step."""
70
73
 
71
74
  @classmethod
72
- def from_json(cls, data: Dict[Text, Any]) -> FlowStep:
75
+ def from_json(cls, flow_id: Text, data: Dict[Text, Any]) -> FlowStep:
73
76
  """Create a FlowStep object from data in a serialized format.
74
77
 
75
78
  Args:
79
+ flow_id: The id of the flow that contains the step.
76
80
  data: The data for a FlowStep object in a serialized format.
77
81
 
78
82
  Returns:
@@ -87,7 +91,8 @@ class FlowStep:
87
91
  custom_id=data.get("id"),
88
92
  description=data.get("description"),
89
93
  metadata=data.get("metadata", {}),
90
- next=FlowStepLinks.from_json(data.get("next", [])),
94
+ next=FlowStepLinks.from_json(flow_id, data.get("next", [])),
95
+ flow_id=flow_id,
91
96
  )
92
97
 
93
98
  def does_allow_for_next_step(self) -> bool:
@@ -125,7 +130,7 @@ class FlowStep:
125
130
  @property
126
131
  def default_id(self) -> str:
127
132
  """Returns the default id of the flow step."""
128
- return f"{self.idx}_{self.default_id_postfix}"
133
+ return f"{self.flow_id}_{self.idx}_{self.default_id_postfix}"
129
134
 
130
135
  @property
131
136
  def default_id_postfix(self) -> str:
@@ -17,10 +17,13 @@ class FlowStepLinks:
17
17
  links: List[FlowStepLink]
18
18
 
19
19
  @staticmethod
20
- def from_json(data: Union[str, List[Dict[Text, Any]]]) -> FlowStepLinks:
20
+ def from_json(
21
+ flow_id: Text, data: Union[str, List[Dict[Text, Any]]]
22
+ ) -> FlowStepLinks:
21
23
  """Create a FlowStepLinks object from a serialized data format.
22
24
 
23
25
  Args:
26
+ flow_id: The id of the flow that contains the step.
24
27
  data: data for a FlowStepLinks object in a serialized format.
25
28
 
26
29
  Returns:
@@ -30,11 +33,11 @@ class FlowStepLinks:
30
33
  return FlowStepLinks(links=[])
31
34
 
32
35
  if isinstance(data, str):
33
- return FlowStepLinks(links=[StaticFlowStepLink.from_json(data)])
36
+ return FlowStepLinks(links=[StaticFlowStepLink.from_json(flow_id, data)])
34
37
 
35
38
  return FlowStepLinks(
36
39
  links=[
37
- BranchingFlowStepLink.from_json(link_config)
40
+ BranchingFlowStepLink.from_json(flow_id, link_config)
38
41
  for link_config in data
39
42
  if link_config
40
43
  ]
@@ -94,10 +97,11 @@ class FlowStepLink:
94
97
  raise NotImplementedError()
95
98
 
96
99
  @staticmethod
97
- def from_json(data: Any) -> FlowStepLink:
100
+ def from_json(flow_id: Text, data: Any) -> FlowStepLink:
98
101
  """Create a FlowStepLink object from a serialized data format.
99
102
 
100
103
  Args:
104
+ flow_id: The id of the flow that contains the step.
101
105
  data: data for a FlowStepLink object in a serialized format.
102
106
 
103
107
  Returns:
@@ -163,19 +167,20 @@ class BranchingFlowStepLink(FlowStepLink):
163
167
  return self.target_reference
164
168
 
165
169
  @staticmethod
166
- def from_json(data: Dict[Text, Any]) -> BranchingFlowStepLink:
170
+ def from_json(flow_id: Text, data: Dict[Text, Any]) -> BranchingFlowStepLink:
167
171
  """Create a BranchingFlowStepLink object from a serialized data format.
168
172
 
169
173
  Args:
174
+ flow_id: The id of the flow that contains the step.
170
175
  data: data for a BranchingFlowStepLink object in a serialized format.
171
176
 
172
177
  Returns:
173
178
  a BranchingFlowStepLink object.
174
179
  """
175
180
  if "if" in data:
176
- return IfFlowStepLink.from_json(data)
181
+ return IfFlowStepLink.from_json(flow_id, data)
177
182
  else:
178
- return ElseFlowStepLink.from_json(data)
183
+ return ElseFlowStepLink.from_json(flow_id, data)
179
184
 
180
185
  def depth_in_tree(self) -> int:
181
186
  """Returns the depth in the tree."""
@@ -198,10 +203,11 @@ class IfFlowStepLink(BranchingFlowStepLink):
198
203
  """The condition that needs to be satisfied to follow this flow step link."""
199
204
 
200
205
  @staticmethod
201
- def from_json(data: Dict[Text, Any]) -> IfFlowStepLink:
206
+ def from_json(flow_id: Text, data: Dict[Text, Any]) -> IfFlowStepLink:
202
207
  """Create an IfFlowStepLink object from a serialized data format.
203
208
 
204
209
  Args:
210
+ flow_id: The id of the flow that contains the step.
205
211
  data: data for a IfFlowStepLink in a serialized format.
206
212
 
207
213
  Returns:
@@ -213,7 +219,7 @@ class IfFlowStepLink(BranchingFlowStepLink):
213
219
  return IfFlowStepLink(target_reference=data["then"], condition=data["if"])
214
220
  else:
215
221
  return IfFlowStepLink(
216
- target_reference=FlowStepSequence.from_json(data["then"]),
222
+ target_reference=FlowStepSequence.from_json(flow_id, data["then"]),
217
223
  condition=data["if"],
218
224
  )
219
225
 
@@ -238,10 +244,11 @@ class ElseFlowStepLink(BranchingFlowStepLink):
238
244
  """A flow step link that is taken when conditional flow step links weren't taken."""
239
245
 
240
246
  @staticmethod
241
- def from_json(data: Dict[Text, Any]) -> ElseFlowStepLink:
247
+ def from_json(flow_id: Text, data: Dict[Text, Any]) -> ElseFlowStepLink:
242
248
  """Create an ElseFlowStepLink object from serialized data.
243
249
 
244
250
  Args:
251
+ flow_id: The id of the flow that contains the step.
245
252
  data: data for an ElseFlowStepLink in a serialized format
246
253
 
247
254
  Returns:
@@ -253,7 +260,7 @@ class ElseFlowStepLink(BranchingFlowStepLink):
253
260
  return ElseFlowStepLink(target_reference=data["else"])
254
261
  else:
255
262
  return ElseFlowStepLink(
256
- target_reference=FlowStepSequence.from_json(data["else"])
263
+ target_reference=FlowStepSequence.from_json(flow_id, data["else"])
257
264
  )
258
265
 
259
266
  def as_json(self) -> Dict[Text, Any]:
@@ -279,10 +286,11 @@ class StaticFlowStepLink(FlowStepLink):
279
286
  """The id of the linked step."""
280
287
 
281
288
  @staticmethod
282
- def from_json(data: Text) -> StaticFlowStepLink:
289
+ def from_json(flow_id: Text, data: Text) -> StaticFlowStepLink:
283
290
  """Create a StaticFlowStepLink from serialized data
284
291
 
285
292
  Args:
293
+ flow_id: The id of the flow that contains the step.
286
294
  data: data for a StaticFlowStepLink in a serialized format
287
295
 
288
296
  Returns:
@@ -14,17 +14,19 @@ class FlowStepSequence:
14
14
  child_steps: List[FlowStep]
15
15
 
16
16
  @staticmethod
17
- def from_json(data: List[Dict[Text, Any]]) -> FlowStepSequence:
17
+ def from_json(flow_id: Text, data: List[Dict[Text, Any]]) -> FlowStepSequence:
18
18
  """Create a FlowStepSequence object from serialized data
19
19
 
20
20
  Args:
21
+ flow_id: The id of the flow that contains the step.
21
22
  data: data for a StepSequence in a serialized format
22
23
 
23
24
  Returns:
24
25
  A StepSequence object including its flow step objects.
25
26
  """
26
-
27
- flow_steps: List[FlowStep] = [step_from_json(config) for config in data]
27
+ flow_steps: List[FlowStep] = [
28
+ step_from_json(flow_id, config) for config in data
29
+ ]
28
30
 
29
31
  return FlowStepSequence(child_steps=flow_steps)
30
32
 
@@ -15,16 +15,17 @@ class ActionFlowStep(FlowStep):
15
15
  """The action of the flow step."""
16
16
 
17
17
  @classmethod
18
- def from_json(cls, data: Dict[Text, Any]) -> ActionFlowStep:
18
+ def from_json(cls, flow_id: Text, data: Dict[Text, Any]) -> ActionFlowStep:
19
19
  """Create an ActionFlowStep object from serialized data
20
20
 
21
21
  Args:
22
+ flow_id: The id of the flow that contains the step.
22
23
  data: data for an ActionFlowStep object in a serialized format
23
24
 
24
25
  Returns:
25
26
  An ActionFlowStep object
26
27
  """
27
- base = super().from_json(data)
28
+ base = super().from_json(flow_id, data)
28
29
  return ActionFlowStep(
29
30
  action=data["action"],
30
31
  **base.__dict__,
@@ -18,16 +18,17 @@ class CallFlowStep(FlowStep):
18
18
  called_flow_reference: Optional["Flow"] = None
19
19
 
20
20
  @classmethod
21
- def from_json(cls, data: Dict[Text, Any]) -> CallFlowStep:
21
+ def from_json(cls, flow_id: Text, data: Dict[Text, Any]) -> CallFlowStep:
22
22
  """Used to read flow steps from parsed YAML.
23
23
 
24
24
  Args:
25
+ flow_id: The id of the flow that contains the step.
25
26
  data: The parsed YAML as a dictionary.
26
27
 
27
28
  Returns:
28
29
  The parsed flow step.
29
30
  """
30
- base = super().from_json(data)
31
+ base = super().from_json(flow_id, data)
31
32
  return CallFlowStep(
32
33
  call=data.get("call", ""),
33
34
  **base.__dict__,
@@ -47,7 +48,6 @@ class CallFlowStep(FlowStep):
47
48
  self, should_resolve_calls: bool = True
48
49
  ) -> Generator[FlowStep, None, None]:
49
50
  """Returns the steps in the tree of the flow step."""
50
-
51
51
  yield self
52
52
 
53
53
  if should_resolve_calls:
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Dict, Any, List, Set
4
+ from typing import Dict, Any, List, Set, Text
5
5
 
6
6
  from rasa.shared.constants import UTTER_ASK_PREFIX, ACTION_ASK_PREFIX
7
7
  from rasa.shared.core.flows.flow_step import FlowStep
@@ -61,16 +61,19 @@ class CollectInformationFlowStep(FlowStep):
61
61
  """Whether to reset the slot value at the end of the flow."""
62
62
 
63
63
  @classmethod
64
- def from_json(cls, data: Dict[str, Any]) -> CollectInformationFlowStep:
64
+ def from_json(
65
+ cls, flow_id: Text, data: Dict[str, Any]
66
+ ) -> CollectInformationFlowStep:
65
67
  """Create a CollectInformationFlowStep object from serialized data.
66
68
 
67
69
  Args:
70
+ flow_id: The id of the flow that contains the step.
68
71
  data: data for a CollectInformationFlowStep object in a serialized format
69
72
 
70
73
  Returns:
71
74
  A CollectInformationFlowStep object
72
75
  """
73
- base = super().from_json(data)
76
+ base = super().from_json(flow_id, data)
74
77
  return CollectInformationFlowStep(
75
78
  collect=data["collect"],
76
79
  utter=data.get("utter", f"{UTTER_ASK_PREFIX}{data['collect']}"),
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
+ from typing import Text
4
5
 
5
6
  from rasa.shared.core.flows.flow_step_links import FlowStepLinks, StaticFlowStepLink
6
7
  from rasa.shared.core.flows.steps.constants import (
@@ -14,7 +15,7 @@ from rasa.shared.core.flows.steps.internal import InternalFlowStep
14
15
  class ContinueFlowStep(InternalFlowStep):
15
16
  """A flow step that is dynamically introduced to jump to other flow steps."""
16
17
 
17
- def __init__(self, target_step_id: str) -> None:
18
+ def __init__(self, flow_id: Text, target_step_id: str) -> None:
18
19
  """Initializes a continue-step flow step."""
19
20
  super().__init__(
20
21
  idx=UNSET_FLOW_STEP_ID,
@@ -29,6 +30,7 @@ class ContinueFlowStep(InternalFlowStep):
29
30
  # This is why the continue step links to the step that should be
30
31
  # continued.
31
32
  next=FlowStepLinks(links=[StaticFlowStepLink(target_step_id)]),
33
+ flow_id=flow_id,
32
34
  )
33
35
 
34
36
  @staticmethod
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
+ from typing import Text
4
5
 
5
6
  from rasa.shared.core.flows.flow_step_links import FlowStepLinks
6
7
  from rasa.shared.core.flows.steps.constants import END_STEP, UNSET_FLOW_STEP_ID
@@ -11,7 +12,7 @@ from rasa.shared.core.flows.steps.internal import InternalFlowStep
11
12
  class EndFlowStep(InternalFlowStep):
12
13
  """A dynamically added flow step that marks the end of a flow."""
13
14
 
14
- def __init__(self) -> None:
15
+ def __init__(self, flow_id: Text) -> None:
15
16
  """Initializes an end flow step."""
16
17
  super().__init__(
17
18
  idx=UNSET_FLOW_STEP_ID,
@@ -19,4 +20,5 @@ class EndFlowStep(InternalFlowStep):
19
20
  description=None,
20
21
  metadata={},
21
22
  next=FlowStepLinks(links=[]),
23
+ flow_id=flow_id,
22
24
  )
@@ -13,10 +13,11 @@ class InternalFlowStep(FlowStep):
13
13
  """
14
14
 
15
15
  @classmethod
16
- def from_json(cls, data: Dict[Text, Any]) -> InternalFlowStep:
16
+ def from_json(cls, flow_id: Text, data: Dict[Text, Any]) -> InternalFlowStep:
17
17
  """Create an InternalFlowStep object from serialized data.
18
18
 
19
19
  Args:
20
+ flow_id: The id of the flow that contains the step.
20
21
  data: data for an InternalFlowStep in a serialized format
21
22
 
22
23
  Returns:
@@ -16,20 +16,22 @@ class LinkFlowStep(FlowStep):
16
16
  def does_allow_for_next_step(self) -> bool:
17
17
  """Returns whether this step allows for following steps.
18
18
 
19
- Link steps need to be terminal steps, so can't have a next step."""
19
+ Link steps need to be terminal steps, so can't have a next step.
20
+ """
20
21
  return False
21
22
 
22
23
  @classmethod
23
- def from_json(cls, data: Dict[Text, Any]) -> LinkFlowStep:
24
+ def from_json(cls, flow_id: Text, data: Dict[Text, Any]) -> LinkFlowStep:
24
25
  """Create a LinkFlowStep from serialized data
25
26
 
26
27
  Args:
28
+ flow_id: The id of the flow that contains the step.
27
29
  data: data for a LinkFlowStep in a serialized format
28
30
 
29
31
  Returns:
30
32
  a LinkFlowStep object
31
33
  """
32
- base = super().from_json(data)
34
+ base = super().from_json(flow_id, data)
33
35
  return LinkFlowStep(
34
36
  link=data["link"],
35
37
  **base.__dict__,
@@ -11,22 +11,24 @@ class NoOperationFlowStep(FlowStep):
11
11
  """A step that doesn't do a thing.
12
12
 
13
13
  This is NOT a branching step (but it can branch - but in addition to that
14
- it also does nothing)."""
14
+ it also does nothing).
15
+ """
15
16
 
16
17
  noop: Any
17
18
  """The id of the flow that should be started subsequently."""
18
19
 
19
20
  @classmethod
20
- def from_json(cls, data: Dict[Text, Any]) -> NoOperationFlowStep:
21
+ def from_json(cls, flow_id: Text, data: Dict[Text, Any]) -> NoOperationFlowStep:
21
22
  """Create a NoOperationFlowStep from serialized data
22
23
 
23
24
  Args:
25
+ flow_id: The id of the flow that contains the step.
24
26
  data: data for a NoOperationFlowStep in a serialized format
25
27
 
26
28
  Returns:
27
29
  a NoOperationFlowStep object
28
30
  """
29
- base = super().from_json(data)
31
+ base = super().from_json(flow_id, data)
30
32
  return NoOperationFlowStep(
31
33
  noop=data["noop"],
32
34
  **base.__dict__,
@@ -14,16 +14,17 @@ class SetSlotsFlowStep(FlowStep):
14
14
  """Slots and their values to set in the flow step."""
15
15
 
16
16
  @classmethod
17
- def from_json(cls, data: Dict[Text, Any]) -> SetSlotsFlowStep:
17
+ def from_json(cls, flow_id: Text, data: Dict[Text, Any]) -> SetSlotsFlowStep:
18
18
  """Create a SetSlotsFlowStep from serialized data
19
19
 
20
20
  Args:
21
+ flow_id: The id of the flow that contains the step.
21
22
  data: data for a SetSlotsFlowStep in a serialized format
22
23
 
23
24
  Returns:
24
25
  a SetSlotsFlowStep object
25
26
  """
26
- base = super().from_json(data)
27
+ base = super().from_json(flow_id, data)
27
28
  slots = [
28
29
  {"key": k, "value": v}
29
30
  for slot_sets in data["set_slots"]
@@ -15,10 +15,11 @@ from rasa.shared.core.flows.steps.internal import InternalFlowStep
15
15
  class StartFlowStep(InternalFlowStep):
16
16
  """A dynamically added flow step that represents the beginning of a flow."""
17
17
 
18
- def __init__(self, start_step_id: Text) -> None:
18
+ def __init__(self, flow_id: Text, start_step_id: Text) -> None:
19
19
  """Initializes a start flow step.
20
20
 
21
21
  Args:
22
+ flow_id: The id of the flow that contains the step
22
23
  start_step_id: The step id of the first step of the flow
23
24
  """
24
25
  super().__init__(
@@ -27,4 +28,5 @@ class StartFlowStep(InternalFlowStep):
27
28
  description=None,
28
29
  metadata={},
29
30
  next=FlowStepLinks(links=[StaticFlowStepLink(start_step_id)]),
31
+ flow_id=flow_id,
30
32
  )
rasa/shared/utils/llm.py CHANGED
@@ -67,7 +67,7 @@ DEFAULT_OPENAI_GENERATE_MODEL_NAME = "gpt-3.5-turbo"
67
67
 
68
68
  DEFAULT_OPENAI_CHAT_MODEL_NAME = "gpt-3.5-turbo"
69
69
 
70
- DEFAULT_OPENAI_CHAT_MODEL_NAME_ADVANCED = "gpt-4"
70
+ DEFAULT_OPENAI_CHAT_MODEL_NAME_ADVANCED = "gpt-4-0613"
71
71
 
72
72
  DEFAULT_OPENAI_EMBEDDING_MODEL_NAME = "text-embedding-ada-002"
73
73
 
rasa/validator.py CHANGED
@@ -303,6 +303,18 @@ class Validator:
303
303
  everything_is_alright = True
304
304
 
305
305
  for response_text, response_variations in self.domain.responses.items():
306
+ if not response_variations:
307
+ structlogger.error(
308
+ "validator.empty_response",
309
+ response=response_text,
310
+ event_info=(
311
+ f"The response '{response_text}' in the domain file "
312
+ f"does not have any variations. Please add at least one "
313
+ f"variation to the response."
314
+ ),
315
+ )
316
+ everything_is_alright = False
317
+
306
318
  for response in response_variations:
307
319
  if any(
308
320
  self.check_for_placeholder(response.get(key))
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.10.15"
3
+ __version__ = "3.10.17"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rasa-pro
3
- Version: 3.10.15
3
+ Version: 3.10.17
4
4
  Summary: State-of-the-art open-core Conversational AI framework for Enterprises that natively leverages generative AI for effortless assistant development.
5
5
  Home-page: https://rasa.com
6
6
  Keywords: nlp,machine-learning,machine-learning-library,bot,bots,botkit,rasa conversational-agents,conversational-ai,chatbot,chatbot-framework,bot-framework
@@ -57,7 +57,7 @@ Requires-Dist: importlib-resources (==6.1.3)
57
57
  Requires-Dist: jieba (>=0.42.1,<0.43) ; extra == "jieba" or extra == "full"
58
58
  Requires-Dist: jinja2 (>=3.1.4,<4.0.0)
59
59
  Requires-Dist: jsonpatch (>=1.33,<2.0)
60
- Requires-Dist: jsonpickle (>=3.0,<3.1)
60
+ Requires-Dist: jsonpickle (>=3.3.0,<3.4)
61
61
  Requires-Dist: jsonschema (>=4.22)
62
62
  Requires-Dist: keras (==2.14.0)
63
63
  Requires-Dist: langchain (>=0.2.0,<0.3.0)
@@ -88,7 +88,7 @@ Requires-Dist: pycountry (>=22.3.5,<23.0.0)
88
88
  Requires-Dist: pydantic (>=2.0,<3.0)
89
89
  Requires-Dist: pydot (>=1.4,<1.5)
90
90
  Requires-Dist: pykwalify (>=1.8,<1.9)
91
- Requires-Dist: pymilvus (<2.4.2)
91
+ Requires-Dist: pymilvus (>=2.4.0,<2.4.2)
92
92
  Requires-Dist: pymongo[srv,tls] (>=4.6.3,<4.7)
93
93
  Requires-Dist: pypred (>=0.4.0,<0.5.0)
94
94
  Requires-Dist: python-dateutil (>=2.8.2,<2.9.0)
@@ -29,7 +29,7 @@ rasa/cli/export.py,sha256=60wPKS5513J7PRKZsVeCBrUGOcSizypdjg1iYDWLCMY,8203
29
29
  rasa/cli/inspect.py,sha256=LPudl2mmkY8-a8PW28Iq4t3xnurEFduyePFgeKSx0BA,2207
30
30
  rasa/cli/interactive.py,sha256=73r_SAdGAwkj214D5rmXyiuB_XDLidiBL3bFUMBo9QI,5974
31
31
  rasa/cli/license.py,sha256=oFZU5cQ6CD2DvBgnlss9DgJVHzkSpEVI6eNKlMHgAMM,3565
32
- rasa/cli/llm_fine_tuning.py,sha256=nyLb5rSg_wnZFpiMo53H4ftKqbk1WdpntelCbfpyXyE,13213
32
+ rasa/cli/llm_fine_tuning.py,sha256=PYAFqKN6Kj5moaNvG4r-137GBC1w0lyApc-ZJCui6Gg,13436
33
33
  rasa/cli/markers.py,sha256=KN0tA69FqwfBGMU82gfoh8mtyTH3LSmuz0V5N4poRcE,2485
34
34
  rasa/cli/project_templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
35
  rasa/cli/project_templates/calm/actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -182,8 +182,8 @@ rasa/core/channels/inspector/dist/assets/styles-9c745c82-f0fc6921.js,sha256=LQKL
182
182
  rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-ef3c5a77.js,sha256=DSdBJHhg90UYRnWjFOmeR83QGVX10N62afFU2lIM0p0,1304
183
183
  rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-bf3e91c1.js,sha256=vA1r0ZS5HZygWBg4WDkqzjyeBGB10DLeuHOJEd_D1Yg,22627
184
184
  rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-4d4026c0.js,sha256=snRQD2cXkJf9VdmGnsrBVm3iqMSII0HXF_Ytri39LZE,37268
185
- rasa/core/channels/inspector/dist/index.html,sha256=02UAsBCSlIaqwlnpC2cfN1ML6o-LWtAx_8AxEEgVR2s,2483
186
- rasa/core/channels/inspector/index.html,sha256=ywJio90S8eUhPaeId87__l-Xj-3eXfwckZlJncsQ-OU,1423
185
+ rasa/core/channels/inspector/dist/index.html,sha256=xM57yI-zs94jO3Ab1Ncnl0BtuhT1UIdYoD4NL3OlUHQ,2594
186
+ rasa/core/channels/inspector/index.html,sha256=Zs5n96nppdGdoVp4A4_hsA9GThy0vne5j0wAZeM-JFw,1534
187
187
  rasa/core/channels/inspector/jest.config.ts,sha256=pDs-0q6gs0Jnm9mWKq5M1vC5wiX_Cnh4l6s--dBsskM,406
188
188
  rasa/core/channels/inspector/package.json,sha256=9QaJDSfrNm0ESF2-ohktVjdpP8ZhjuO-fSMhOEw8Qm8,1377
189
189
  rasa/core/channels/inspector/setupTests.ts,sha256=JaGsnR6noIcuD5kLjb9SiOkXwJARLV_gF0dULtlWPqk,75
@@ -377,7 +377,7 @@ rasa/dialogue_understanding/patterns/clarify.py,sha256=guR6rvRh6dPIShd0zczf5o0zM
377
377
  rasa/dialogue_understanding/patterns/code_change.py,sha256=YXj9ZaHMUXGzdHzYiUITFxJHx3Q7l6xwt7jxubujg-0,1185
378
378
  rasa/dialogue_understanding/patterns/collect_information.py,sha256=nfzAtvjIyP67CiR2KvaHQ2VKcZrYsrt96DfwEW4lpS4,3233
379
379
  rasa/dialogue_understanding/patterns/completed.py,sha256=NqVaS_5-62UetGRXjR1eOGG3o6EPaIAQxbbkkNVEa9s,1278
380
- rasa/dialogue_understanding/patterns/continue_interrupted.py,sha256=4UCFxCReL1wR8ALU4B0LzpC9izdtKrp2nJ6chS_jVng,1355
380
+ rasa/dialogue_understanding/patterns/continue_interrupted.py,sha256=JSW6F94xh6MjBId87gHtPq5jhtZqxEsKknPDRBGIf7k,1682
381
381
  rasa/dialogue_understanding/patterns/correction.py,sha256=ZfSGzvgLvmbebEuisYP0Ke0lQEZziuDvq1oB4wMSFr4,11001
382
382
  rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml,sha256=6AM-nIc-JSD8wSZ7KDGInm6nP5n4EJZe4rce747V8fQ,8284
383
383
  rasa/dialogue_understanding/patterns/human_handoff.py,sha256=ocGrnLLRW-_aiXjmSUG9nReUGQbBUxFFt4FTBWSXARM,1132
@@ -397,7 +397,7 @@ rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py,sha256=rmG09a66
397
397
  rasa/dialogue_understanding/stack/frames/flow_stack_frame.py,sha256=W4mEmihIN5Bih2C9KDpKf-rxCHjLCzK9TcT6JslhW7g,5047
398
398
  rasa/dialogue_understanding/stack/frames/pattern_frame.py,sha256=EVrYWv5dCP7XTvNV-HqtOOrseP-IkF0jD2_JacAvIYw,235
399
399
  rasa/dialogue_understanding/stack/frames/search_frame.py,sha256=rJ9og28k_udUIjP-2Z5xeb_2T5HvCzwDCnxVG9K7lws,728
400
- rasa/dialogue_understanding/stack/utils.py,sha256=ysH6-IeMwNnKbF1__uMlq6I8zaGXFdMEpw1iYdEz4kA,7650
400
+ rasa/dialogue_understanding/stack/utils.py,sha256=UpcxXwbneAMrvc94Fi1__r17UU2BAZQQ_RYI25Mek_c,7710
401
401
  rasa/e2e_test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
402
402
  rasa/e2e_test/aggregate_test_stats_calculator.py,sha256=XMI7t5xEP7Mo-F8cCCZx2w5ckUKa5sDvyitl6bk6hc8,4924
403
403
  rasa/e2e_test/assertions.py,sha256=9_1TlhBCCI0y3cTFNWQkWKluHS9kQ_Itvas6basA5YU,40936
@@ -415,14 +415,14 @@ rasa/e2e_test/e2e_test_schema.yml,sha256=0deWjuKRHNo6e_LSCnUoiw9NLIYf6dj1-zFPl_A
415
415
  rasa/e2e_test/pykwalify_extensions.py,sha256=OGYKIKYJXd2S0NrWknoQuijyBQaE-oMLkfV_eMRkGSM,1331
416
416
  rasa/e2e_test/stub_custom_action.py,sha256=teq8c5I6IuUsFX4lPdeBLY3j0SLSMCC95KmKx7GrE8I,2369
417
417
  rasa/e2e_test/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
418
- rasa/e2e_test/utils/e2e_yaml_utils.py,sha256=_3yxv18fUkmO8tvOcXzBzVVBhRdV-d9o2YAlrmCAZcE,1603
418
+ rasa/e2e_test/utils/e2e_yaml_utils.py,sha256=XvP14DGHMfsNXyI7uTV-GTAdqv-r5FNmpFmvEIn93OM,1601
419
419
  rasa/e2e_test/utils/io.py,sha256=HVsFb8uVPTlu7PcQdFmMNUFf0rRrD5Wiys0oMZqu2nA,19016
420
420
  rasa/e2e_test/utils/validation.py,sha256=BRjTg3KOAlvGtfZJApOKW29V__cX6hJIG8A5RjzoW54,2348
421
421
  rasa/engine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
422
422
  rasa/engine/caching.py,sha256=Uu-0yn_eQGysmW7nsub-tb3gD8QNz6TNssNd-GIthuI,16451
423
423
  rasa/engine/constants.py,sha256=w7hyRd2gU8JJyECqGG1meIS3volOCD3lYpVuzDLGz-s,623
424
424
  rasa/engine/exceptions.py,sha256=1aV48nLrlAGzEeIDuXeB0qjxe5qaqzOhrK52OBs66xc,437
425
- rasa/engine/graph.py,sha256=x98HNbtcYF5JzoPVmicqrdXIxyNVGFxU8wPD-5uMcEU,24195
425
+ rasa/engine/graph.py,sha256=lblyLsvM66ewismY8sLVj39vGaZqMfaqcwyWdlRIH44,24491
426
426
  rasa/engine/loader.py,sha256=ommFdjddJWkb-KHpemxRhWYlMYRAUs8rcmtJx_DzqnM,1384
427
427
  rasa/engine/recipes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
428
428
  rasa/engine/recipes/config_files/default_config.yml,sha256=M1ehmJScNbVCQD_wkBktmf0YqXn-O4UzJVbB7tnAtqs,1219
@@ -488,7 +488,7 @@ rasa/nlu/__init__.py,sha256=D0IYuTK_ZQ_F_9xsy0bXxVCAtU62Fzvp8S7J9tmfI_c,123
488
488
  rasa/nlu/classifiers/__init__.py,sha256=Qvrf7_rfiMxm2Vt2fClb56R3QFExf7WPdFdL-AOvgsk,118
489
489
  rasa/nlu/classifiers/classifier.py,sha256=9fm1mORuFf1vowYIXmqE9yLRKdSC4nGQW7UqNZQipKY,133
490
490
  rasa/nlu/classifiers/diet_classifier.py,sha256=jhzvTqC_Ln-eFCrE1o3uQf1JRR7d6mCPn5ZRewePUas,72565
491
- rasa/nlu/classifiers/fallback_classifier.py,sha256=FYOgM7bLG3HlasVWRozanz-MmDozygTlTIFcPHJWJoo,7150
491
+ rasa/nlu/classifiers/fallback_classifier.py,sha256=4vuVdtTSGuDvpD01HmL67JuijymwBHSX66mBCQ3FqTk,7094
492
492
  rasa/nlu/classifiers/keyword_intent_classifier.py,sha256=dxDzCK7YzYKslZiXYkBD1Al1y_yZWdZYkBBl7FLyPm8,7581
493
493
  rasa/nlu/classifiers/logistic_regression_classifier.py,sha256=C7GkIaVNC5MHu5xOaqKzRiV1LTu_19I5vk_Oa9BIDDU,9589
494
494
  rasa/nlu/classifiers/mitie_intent_classifier.py,sha256=_hf0aKWjcjZ8NdH61gbutgY5vAjMmpYDhCpO3dwIrDk,5559
@@ -554,26 +554,26 @@ rasa/shared/core/conversation.py,sha256=tw1fD2XB3gOdQjDI8hHo5TAAmE2JYNogQGWe3rE9
554
554
  rasa/shared/core/domain.py,sha256=zHnwLneOmRRQQp7ZGAt0RSzH_jyhzRgEPRXCa_b70wo,80054
555
555
  rasa/shared/core/events.py,sha256=HXBy-DfulOhcHxrfVtP-uUBVnCx40wkRwqDx80mOFX4,82791
556
556
  rasa/shared/core/flows/__init__.py,sha256=HszhIvEARpmyxABFc1MKYvj8oy04WiZW1xmCdToakbs,181
557
- rasa/shared/core/flows/flow.py,sha256=cxf3AVbweOezV8SuCQSog2eYI6nKw7R0SQt8XJiG7zU,21208
557
+ rasa/shared/core/flows/flow.py,sha256=C8TxzxxEtZVrEMLUY57BNA8rEIwcYZaLtJ6pPYeBMRI,21242
558
558
  rasa/shared/core/flows/flow_path.py,sha256=xstwahZBU5cfMY46mREA4NoOGlKLBRAqeP_mJ3UZqOI,2283
559
- rasa/shared/core/flows/flow_step.py,sha256=YW2rF2uCDEPfkX8vIHue95zfjF4cU84DWiW1wvGsGZs,4218
560
- rasa/shared/core/flows/flow_step_links.py,sha256=phK1BiAnASSvjUm3FcPw3atOzXbZ8ul6t9PjJes0oqI,10006
561
- rasa/shared/core/flows/flow_step_sequence.py,sha256=jStz6epvKIycZWn8nE52ZB1vbncnOKkP5J_GuJsyLa8,2253
559
+ rasa/shared/core/flows/flow_step.py,sha256=6hoVOMXryTKHgT7-p7jzTqH2r9QREmy_6d6bX2OyxI0,4550
560
+ rasa/shared/core/flows/flow_step_links.py,sha256=zMZV_9rWVjEa8kHIFSIbXCWA1qaUvp8r4uSCK_NsKKs,10548
561
+ rasa/shared/core/flows/flow_step_sequence.py,sha256=tXUEhubX3g312G2FH8Hiez7_v9XG9EaspKlANRa7Sa8,2362
562
562
  rasa/shared/core/flows/flows_list.py,sha256=PtcoK9d7gabFeofdGzQ0bYGh7tYyQDs9t8Wa3F6fkAc,8119
563
563
  rasa/shared/core/flows/flows_yaml_schema.json,sha256=ZoVbDzNM89miI3q00J7JtkZRM5dBnicsCpuy9B76jr8,10896
564
564
  rasa/shared/core/flows/nlu_trigger.py,sha256=gfnRUi7QJaUjMb43RTyQWbLoIUSx2I78LeM8CjDIIDE,3907
565
565
  rasa/shared/core/flows/steps/__init__.py,sha256=M43kHDuB8okcIE3WLivnvuCBzIsA5Qi2ATXUGTVW2Rw,655
566
- rasa/shared/core/flows/steps/action.py,sha256=AjGMtgQnaSHtzwcYdj4mkWIa1wg0_z4TxereAp8Cn-8,1642
567
- rasa/shared/core/flows/steps/call.py,sha256=KgkL9t6jhV1-cuR8dxLG0sU5FJJjCcp4myyGugJKRUw,1769
568
- rasa/shared/core/flows/steps/collect.py,sha256=L3Uhbu2wUWAgagYNc41kkGzUnmUTBNREo707q2Qh4e4,3851
566
+ rasa/shared/core/flows/steps/action.py,sha256=SoeNNgoq6Aq3eIP9aYKYj8en4vXoDMjEAERPXlige6Q,1730
567
+ rasa/shared/core/flows/steps/call.py,sha256=6y0929pM2n8Z1TQ2avfr3g2l7w7bPSKyCRJzljvGtoE,1856
568
+ rasa/shared/core/flows/steps/collect.py,sha256=p79c69BCHNR5pcVl20EmaAkoSBG52yoEbODZh0UAAok,3959
569
569
  rasa/shared/core/flows/steps/constants.py,sha256=DCxrEUGbJciBknHm-_t4tmcnH19IZKP-WYxqix9gm7M,132
570
- rasa/shared/core/flows/steps/continuation.py,sha256=DJr6lLE3WKJdiDYz6zhzUAsZf3ctJ1qWktNTVfsh3gg,1430
571
- rasa/shared/core/flows/steps/end.py,sha256=Esq4blLqrC2tz_lEERUhG_Cv9hPCJYekK8wodikYgLw,681
572
- rasa/shared/core/flows/steps/internal.py,sha256=cfQdnmTytptUS4BPJ9MvYOawRtFp8osu8_k0296sxqI,1370
573
- rasa/shared/core/flows/steps/link.py,sha256=Vtc-w3yxxytB2zMVi3i6wHDin3WFNkb4eNe9VEN96m0,1410
574
- rasa/shared/core/flows/steps/no_operation.py,sha256=6ETxgusM7rughMQPhv807OmLY9DO1SDmQAvJfP7H_eQ,1306
575
- rasa/shared/core/flows/steps/set_slots.py,sha256=oo4gYfbLFJc7507K_bGoB6Qjciv5jsx96WSHSYwOQ7U,1404
576
- rasa/shared/core/flows/steps/start.py,sha256=GA-uvHEC2dXYMKiFH8snMgU_fFfUG7s6ixoiMBes5U0,903
570
+ rasa/shared/core/flows/steps/continuation.py,sha256=5Rzayr80FsgS4bAajuRObVvVcLqPEh9nxGbT2te85xY,1498
571
+ rasa/shared/core/flows/steps/end.py,sha256=0XrPlQMVBnQKVeZs0or8P9IrVqG7i6RoSNDsVrvAeDk,749
572
+ rasa/shared/core/flows/steps/internal.py,sha256=vqBapuLBYQin3Me-YZKn_Tyg5VKozRIJ-tFmjVvmFBs,1449
573
+ rasa/shared/core/flows/steps/link.py,sha256=dlx56o-VnFRAn9Xmsu67Di3Fc9MjkDVXzIttHHRaTzA,1507
574
+ rasa/shared/core/flows/steps/no_operation.py,sha256=I0xWFWJqhUAbvU0HSFXtw4v2gmIiTEveGv4AImvLDfo,1399
575
+ rasa/shared/core/flows/steps/set_slots.py,sha256=NgBXLPl5adIa0-M-Tgt2Teg3gXYggcDqpaf96BPpvKE,1492
576
+ rasa/shared/core/flows/steps/start.py,sha256=AJpKIm0S3GZYLEs3ybXW0Zrq03Pu9lvirNahiUy2I6k,1010
577
577
  rasa/shared/core/flows/validation.py,sha256=OnSXfWp5S_IMAUEvU_fN2bwAL5gi8PYZDA4PsOO4X7A,22935
578
578
  rasa/shared/core/flows/yaml_flows_io.py,sha256=jaF5NgFAfaLUznZF57ZDvb0L9KdaE0cKBSJOZBKUXZQ,14804
579
579
  rasa/shared/core/generator.py,sha256=y2B2Vn2xOl7k_smzefryoX048b_MTtSDqclx9Ompz9s,35687
@@ -657,7 +657,7 @@ rasa/shared/utils/cli.py,sha256=bJpkf0VzzmtpmBnDnIl7SgvrntnBuaJQMHBXHm2WxcA,2916
657
657
  rasa/shared/utils/common.py,sha256=Z0sfpDosVHLhGDY-72lGVTPWsNC64z3HWSLdnZRG7yE,10057
658
658
  rasa/shared/utils/constants.py,sha256=ZNQu0RHM_7Q4A2hn6pD8XlKPEwzivNpfKiiQihwH8-U,141
659
659
  rasa/shared/utils/io.py,sha256=cYEkHjvuIB-XaK-Qchajv4lDMb_EZc3K-3CLwiEtUcA,15236
660
- rasa/shared/utils/llm.py,sha256=PAgk53HhCu8owKUegvXB3hQUcDrv-X2qwtWstMuAnok,14530
660
+ rasa/shared/utils/llm.py,sha256=zeoo9SztpUkVIalulOSrql9E3z8fj5MBb6OAA0qwNZg,14535
661
661
  rasa/shared/utils/pykwalify_extensions.py,sha256=4W8gde8C6QpGCY_t9IEmaZSgjMuie1xH0F1DYyn83BM,883
662
662
  rasa/shared/utils/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
663
663
  rasa/shared/utils/schemas/config.yml,sha256=czxSADw9hOIZdhvFP8pVUQo810hs9_C8ZGfCPx17taM,27
@@ -719,10 +719,10 @@ rasa/utils/tensorflow/types.py,sha256=XGkfDZqvLVoaNQRpSTKdB2C4MGmXTarKdIJcLREvPl
719
719
  rasa/utils/train_utils.py,sha256=f1NWpp5y6al0dzoQyyio4hc4Nf73DRoRSHDzEK6-C4E,21257
720
720
  rasa/utils/url_tools.py,sha256=JQcHL2aLqLHu82k7_d9imUoETCm2bmlHaDpOJ-dKqBc,1218
721
721
  rasa/utils/yaml.py,sha256=KjbZq5C94ZP7Jdsw8bYYF7HASI6K4-C_kdHfrnPLpSI,2000
722
- rasa/validator.py,sha256=ToRaa4dS859CJO3H2VGqS943O5qWOg45ypbDfFMKECU,62699
723
- rasa/version.py,sha256=aHCuIHQWH7VHn-hOBTaPwWHuMVCEbQOmmTIcFYIjyIw,118
724
- rasa_pro-3.10.15.dist-info/METADATA,sha256=BgLjWEGNR09ZyPW9sfS03L7AiDUwDYevse3dVR4Ep78,10919
725
- rasa_pro-3.10.15.dist-info/NOTICE,sha256=7HlBoMHJY9CL2GlYSfTQ-PZsVmLmVkYmMiPlTjhuCqA,218
726
- rasa_pro-3.10.15.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
727
- rasa_pro-3.10.15.dist-info/entry_points.txt,sha256=ckJ2SfEyTPgBqj_I6vm_tqY9dZF_LAPJZA335Xp0Q9U,43
728
- rasa_pro-3.10.15.dist-info/RECORD,,
722
+ rasa/validator.py,sha256=gGsuHZivo9MDGA8WCkvYEK5Payi2lpLpOi_PLGwg1Qk,63202
723
+ rasa/version.py,sha256=5GPZiAhXwU0CPUM9M9e331V5ua3IGUOJWo43WawWYQ4,118
724
+ rasa_pro-3.10.17.dist-info/METADATA,sha256=0qJVR32zcVfHJFgr1fWQ2wzFbK2zWN7N8DEMF_tX4DQ,10929
725
+ rasa_pro-3.10.17.dist-info/NOTICE,sha256=7HlBoMHJY9CL2GlYSfTQ-PZsVmLmVkYmMiPlTjhuCqA,218
726
+ rasa_pro-3.10.17.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
727
+ rasa_pro-3.10.17.dist-info/entry_points.txt,sha256=ckJ2SfEyTPgBqj_I6vm_tqY9dZF_LAPJZA335Xp0Q9U,43
728
+ rasa_pro-3.10.17.dist-info/RECORD,,