rasa-pro 3.9.17__py3-none-any.whl → 3.9.19__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.
- README.md +20 -21
- rasa/core/channels/inspector/dist/index.html +2 -0
- rasa/core/channels/inspector/index.html +2 -0
- rasa/core/policies/flows/flow_executor.py +48 -27
- rasa/core/processor.py +7 -5
- rasa/dialogue_understanding/patterns/continue_interrupted.py +9 -0
- rasa/dialogue_understanding/stack/utils.py +1 -0
- rasa/e2e_test/e2e_test_runner.py +11 -5
- rasa/nlu/classifiers/fallback_classifier.py +0 -3
- rasa/shared/core/flows/flow.py +4 -4
- rasa/shared/core/flows/flow_step.py +15 -10
- rasa/shared/core/flows/flow_step_links.py +20 -12
- rasa/shared/core/flows/flow_step_sequence.py +5 -3
- rasa/shared/core/flows/steps/action.py +3 -2
- rasa/shared/core/flows/steps/call.py +3 -3
- rasa/shared/core/flows/steps/collect.py +6 -3
- rasa/shared/core/flows/steps/continuation.py +3 -1
- rasa/shared/core/flows/steps/end.py +3 -1
- rasa/shared/core/flows/steps/internal.py +2 -1
- rasa/shared/core/flows/steps/link.py +5 -3
- rasa/shared/core/flows/steps/no_operation.py +5 -3
- rasa/shared/core/flows/steps/set_slots.py +3 -2
- rasa/shared/core/flows/steps/start.py +3 -1
- rasa/shared/utils/llm.py +1 -1
- rasa/version.py +1 -1
- {rasa_pro-3.9.17.dist-info → rasa_pro-3.9.19.dist-info}/METADATA +22 -23
- {rasa_pro-3.9.17.dist-info → rasa_pro-3.9.19.dist-info}/RECORD +30 -30
- {rasa_pro-3.9.17.dist-info → rasa_pro-3.9.19.dist-info}/NOTICE +0 -0
- {rasa_pro-3.9.17.dist-info → rasa_pro-3.9.19.dist-info}/WHEEL +0 -0
- {rasa_pro-3.9.17.dist-info → rasa_pro-3.9.19.dist-info}/entry_points.txt +0 -0
README.md
CHANGED
|
@@ -10,39 +10,35 @@
|
|
|
10
10
|
|
|
11
11
|
<hr />
|
|
12
12
|
|
|
13
|
-
<img align="right" height="255" src="https://www.rasa.com/assets/img/sara/sara-open-source-2.0.png" alt="An image of Sara, the Rasa mascot bird, holding a flag that reads Open Source with one wing, and a wrench in the other" title="Rasa Pro">
|
|
14
13
|
|
|
15
|
-
Rasa Pro is
|
|
14
|
+
Rasa Pro is a framework for building scalable, dynamic conversational AI assistants that integrate large language models (LLMs) to enable more contextually aware and agentic interactions. Whether you’re new to conversational AI or an experienced developer, Rasa Pro offers enhanced flexibility, control, and performance for mission-critical applications.
|
|
16
15
|
|
|
17
|
-
Rasa
|
|
16
|
+
Building on the foundation of Rasa Open Source, Rasa Pro adds advanced features like CALM (Conversational AI with Language Models) and Dialogue Understanding (DU), which enable developers to shift from traditional intent-driven systems to LLM-based agents. This allows for more robust, responsive interactions that adhere strictly to business logic, while reducing risks like prompt injection and minimizing hallucinations.
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
**Key Features:**
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
-
|
|
20
|
+
- **Flows for Business Logic:** Easily define business logic through Flows, a simplified way to describe how your AI assistant should handle conversations. Flows help streamline the development process, focusing on key tasks and reducing the complexity involved in managing conversations.
|
|
21
|
+
- **Automatic Conversation Repair:** Ensure seamless interactions by automatically handling interruptions or unexpected inputs. Developers have full control to customize these repairs based on specific use cases.
|
|
22
|
+
- **Customizable and Open:** Fully customizable code that allows developers to modify Rasa Pro to meet specific requirements, ensuring flexibility and adaptability to various conversational AI needs.
|
|
23
|
+
- **Robustness and Control:** Maintain strict adherence to business logic, preventing unwanted behaviors like prompt injection and hallucinations, leading to more reliable responses and secure interactions.
|
|
24
|
+
- **Built-in Security:** Safeguard sensitive data, control access, and ensure secure deployment, essential for production environments that demand high levels of security and compliance.
|
|
23
25
|
|
|
24
|
-
- 😁 [Install Rasa Pro](https://rasa.com/docs/rasa-pro/installation/python/installation)
|
|
25
26
|
|
|
26
|
-
---
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
- [Development Internals](#development-internals)
|
|
30
|
-
- [Releases](#releases)
|
|
31
|
-
- [Troubleshooting](#troubleshooting)
|
|
28
|
+
A [free developer license](https://rasa.com/docs/rasa-pro/developer-edition/) is available so you can explore and get to know Rasa Pro. For small production deployments, the Extended Developer License allows you to take your assistant live in a limited capacity. A paid license is required for larger-scale production use, but all code is visible and can be customized as needed.
|
|
32
29
|
|
|
33
|
-
|
|
30
|
+
To get started right now, you can
|
|
34
31
|
|
|
35
|
-
|
|
32
|
+
`pip install rasa-pro`
|
|
36
33
|
|
|
37
|
-
|
|
38
|
-
you have to install Poetry first. Please follow
|
|
39
|
-
[the official guide](https://python-poetry.org/docs/#installation) to see all possible options.
|
|
34
|
+
Check out our
|
|
40
35
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
36
|
+
- [Rasa-pro Quickstart](https://rasa.com/docs/rasa-pro/installation/quickstart/),
|
|
37
|
+
- [Conversational AI with Language Models (CALM) conceptual rundown](https://rasa.com/docs/rasa-pro/calm/),
|
|
38
|
+
- [Rasa Pro / CALM tutorial](https://rasa.com/docs/rasa-pro/tutorial), and
|
|
39
|
+
- [Rasa pro changelog](https://rasa.com/docs/rasa/rasa-pro-changelog/)
|
|
45
40
|
|
|
41
|
+
<<<<<<< HEAD
|
|
46
42
|
### Managing environments
|
|
47
43
|
|
|
48
44
|
The official [Poetry guide](https://python-poetry.org/docs/managing-environments/) suggests to use
|
|
@@ -414,3 +410,6 @@ Please refer to the [Rasa Product Release and Maintenance Policy](https://rasa.c
|
|
|
414
410
|
```
|
|
415
411
|
|
|
416
412
|
For more information on this command, please see the [Official Docker Documentation](https://docs.docker.com/engine/reference/commandline/system_prune/).
|
|
413
|
+
=======
|
|
414
|
+
for more. Also feel free to reach out to us on the [Rasa forum](https://forum.rasa.com/).
|
|
415
|
+
>>>>>>> 2c5cd7bc639 (update readme.md from main branch on 3.10.x (#1597))
|
|
@@ -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);
|
|
@@ -476,7 +476,8 @@ def validate_collect_step(
|
|
|
476
476
|
step: CollectInformationFlowStep,
|
|
477
477
|
stack: DialogueStack,
|
|
478
478
|
available_actions: List[str],
|
|
479
|
-
slots: Dict[
|
|
479
|
+
slots: Dict[str, Slot],
|
|
480
|
+
flow_name: str,
|
|
480
481
|
) -> bool:
|
|
481
482
|
"""Validate that a collect step can be executed.
|
|
482
483
|
|
|
@@ -498,12 +499,12 @@ def validate_collect_step(
|
|
|
498
499
|
slot_name=step.collect,
|
|
499
500
|
)
|
|
500
501
|
|
|
501
|
-
cancel_flow_and_push_internal_error(stack)
|
|
502
|
+
cancel_flow_and_push_internal_error(stack, flow_name)
|
|
502
503
|
|
|
503
504
|
return False
|
|
504
505
|
|
|
505
506
|
|
|
506
|
-
def cancel_flow_and_push_internal_error(stack: DialogueStack) -> None:
|
|
507
|
+
def cancel_flow_and_push_internal_error(stack: DialogueStack, flow_name: str) -> None:
|
|
507
508
|
"""Cancel the top user flow and push the internal error pattern."""
|
|
508
509
|
top_frame = stack.top()
|
|
509
510
|
|
|
@@ -515,7 +516,7 @@ def cancel_flow_and_push_internal_error(stack: DialogueStack) -> None:
|
|
|
515
516
|
canceled_frames = CancelFlowCommand.select_canceled_frames(stack)
|
|
516
517
|
stack.push(
|
|
517
518
|
CancelPatternFlowStackFrame(
|
|
518
|
-
canceled_name=
|
|
519
|
+
canceled_name=flow_name,
|
|
519
520
|
canceled_frames=canceled_frames,
|
|
520
521
|
)
|
|
521
522
|
)
|
|
@@ -527,6 +528,7 @@ def validate_custom_slot_mappings(
|
|
|
527
528
|
stack: DialogueStack,
|
|
528
529
|
tracker: DialogueStateTracker,
|
|
529
530
|
available_actions: List[str],
|
|
531
|
+
flow_name: str,
|
|
530
532
|
) -> bool:
|
|
531
533
|
"""Validate a slot with custom mappings.
|
|
532
534
|
|
|
@@ -547,7 +549,7 @@ def validate_custom_slot_mappings(
|
|
|
547
549
|
action=step.collect_action,
|
|
548
550
|
collect=step.collect,
|
|
549
551
|
)
|
|
550
|
-
cancel_flow_and_push_internal_error(stack)
|
|
552
|
+
cancel_flow_and_push_internal_error(stack, flow_name)
|
|
551
553
|
return False
|
|
552
554
|
|
|
553
555
|
return True
|
|
@@ -586,30 +588,15 @@ def run_step(
|
|
|
586
588
|
initial_events.append(FlowStarted(flow.id))
|
|
587
589
|
|
|
588
590
|
if isinstance(step, CollectInformationFlowStep):
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
is_mapping_valid = validate_custom_slot_mappings(
|
|
598
|
-
step, stack, tracker, available_actions
|
|
599
|
-
)
|
|
600
|
-
if not is_mapping_valid:
|
|
601
|
-
# if we return any other FlowStepResult, the assistant will stay silent
|
|
602
|
-
# instead of triggering the internal error pattern
|
|
603
|
-
return ContinueFlowWithNextStep(events=initial_events)
|
|
604
|
-
|
|
605
|
-
structlogger.debug("flow.step.run.collect")
|
|
606
|
-
trigger_pattern_ask_collect_information(
|
|
607
|
-
step.collect, stack, step.rejections, step.utter, step.collect_action
|
|
591
|
+
return _run_collect_information_step(
|
|
592
|
+
available_actions,
|
|
593
|
+
initial_events,
|
|
594
|
+
stack,
|
|
595
|
+
step,
|
|
596
|
+
tracker,
|
|
597
|
+
flow.readable_name(),
|
|
608
598
|
)
|
|
609
599
|
|
|
610
|
-
events: List[Event] = events_for_collect_step_execution(step, tracker)
|
|
611
|
-
return ContinueFlowWithNextStep(events=initial_events + events)
|
|
612
|
-
|
|
613
600
|
elif isinstance(step, ActionFlowStep):
|
|
614
601
|
if not step.action:
|
|
615
602
|
raise FlowException(f"Action not specified for step {step}")
|
|
@@ -682,3 +669,37 @@ def run_step(
|
|
|
682
669
|
|
|
683
670
|
else:
|
|
684
671
|
raise FlowException(f"Unknown flow step type {type(step)}")
|
|
672
|
+
|
|
673
|
+
|
|
674
|
+
def _run_collect_information_step(
|
|
675
|
+
available_actions: List[str],
|
|
676
|
+
initial_events: List[Event],
|
|
677
|
+
stack: DialogueStack,
|
|
678
|
+
step: CollectInformationFlowStep,
|
|
679
|
+
tracker: DialogueStateTracker,
|
|
680
|
+
flow_name: str,
|
|
681
|
+
) -> FlowStepResult:
|
|
682
|
+
is_step_valid = validate_collect_step(
|
|
683
|
+
step, stack, available_actions, tracker.slots, flow_name
|
|
684
|
+
)
|
|
685
|
+
|
|
686
|
+
if not is_step_valid:
|
|
687
|
+
# if we return any other FlowStepResult, the assistant will stay silent
|
|
688
|
+
# instead of triggering the internal error pattern
|
|
689
|
+
return ContinueFlowWithNextStep(events=initial_events)
|
|
690
|
+
is_mapping_valid = validate_custom_slot_mappings(
|
|
691
|
+
step, stack, tracker, available_actions, flow_name
|
|
692
|
+
)
|
|
693
|
+
|
|
694
|
+
if not is_mapping_valid:
|
|
695
|
+
# if we return any other FlowStepResult, the assistant will stay silent
|
|
696
|
+
# instead of triggering the internal error pattern
|
|
697
|
+
return ContinueFlowWithNextStep(events=initial_events)
|
|
698
|
+
|
|
699
|
+
structlogger.debug("flow.step.run.collect")
|
|
700
|
+
trigger_pattern_ask_collect_information(
|
|
701
|
+
step.collect, stack, step.rejections, step.utter, step.collect_action
|
|
702
|
+
)
|
|
703
|
+
|
|
704
|
+
events: List[Event] = events_for_collect_step_execution(step, tracker)
|
|
705
|
+
return ContinueFlowWithNextStep(events=initial_events + events)
|
rasa/core/processor.py
CHANGED
|
@@ -1260,11 +1260,13 @@ class MessageProcessor:
|
|
|
1260
1260
|
tracker.update(events[0])
|
|
1261
1261
|
return self.should_predict_another_action(action.name())
|
|
1262
1262
|
except Exception:
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
"
|
|
1266
|
-
"
|
|
1267
|
-
"
|
|
1263
|
+
structlogger.exception(
|
|
1264
|
+
"rasa.core.processor.run_action.exception",
|
|
1265
|
+
event_info=f"Encountered an exception while "
|
|
1266
|
+
f"running action '{action.name()}'."
|
|
1267
|
+
f"Bot will continue, but the actions events are lost. "
|
|
1268
|
+
f"Please check the logs of your action server for "
|
|
1269
|
+
f"more information.",
|
|
1268
1270
|
)
|
|
1269
1271
|
events = []
|
|
1270
1272
|
|
|
@@ -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
|
rasa/e2e_test/e2e_test_runner.py
CHANGED
|
@@ -103,8 +103,11 @@ class E2ETestRunner:
|
|
|
103
103
|
turns: TEST_TURNS_TYPE = {}
|
|
104
104
|
event_cursor = 0
|
|
105
105
|
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
if not self.agent.processor:
|
|
107
|
+
return turns
|
|
108
|
+
|
|
109
|
+
tracker = await self.agent.processor.fetch_tracker_with_initial_session(
|
|
110
|
+
sender_id, output_channel=collector
|
|
108
111
|
)
|
|
109
112
|
# turn -1 i used to contain events that happen during
|
|
110
113
|
# the start of the session and before the first user message
|
|
@@ -157,7 +160,7 @@ class E2ETestRunner:
|
|
|
157
160
|
f"An exception occurred while handling "
|
|
158
161
|
f"user message '{step.text}'."
|
|
159
162
|
)
|
|
160
|
-
tracker = await self.agent.tracker_store.retrieve(sender_id)
|
|
163
|
+
tracker = await self.agent.tracker_store.retrieve(sender_id) # type: ignore[assignment]
|
|
161
164
|
turns[position], event_cursor = self.get_actual_step_output(
|
|
162
165
|
tracker, step, event_cursor
|
|
163
166
|
)
|
|
@@ -592,8 +595,11 @@ class E2ETestRunner:
|
|
|
592
595
|
"""
|
|
593
596
|
if not fixtures:
|
|
594
597
|
return
|
|
595
|
-
|
|
596
|
-
|
|
598
|
+
if not self.agent.processor:
|
|
599
|
+
return
|
|
600
|
+
|
|
601
|
+
tracker = await self.agent.processor.fetch_tracker_with_initial_session(
|
|
602
|
+
sender_id, output_channel=CollectingOutputChannel()
|
|
597
603
|
)
|
|
598
604
|
|
|
599
605
|
for fixture in fixtures:
|
|
@@ -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
|
rasa/shared/core/flows/flow.py
CHANGED
|
@@ -63,7 +63,7 @@ class Flow:
|
|
|
63
63
|
Returns:
|
|
64
64
|
A Flow object.
|
|
65
65
|
"""
|
|
66
|
-
step_sequence = FlowStepSequence.from_json(data.get("steps"))
|
|
66
|
+
step_sequence = FlowStepSequence.from_json(flow_id, data.get("steps"))
|
|
67
67
|
nlu_triggers = NLUTriggers.from_json(data.get("nlu_trigger"))
|
|
68
68
|
|
|
69
69
|
return Flow(
|
|
@@ -153,13 +153,13 @@ class Flow:
|
|
|
153
153
|
return None
|
|
154
154
|
|
|
155
155
|
if step_id == START_STEP:
|
|
156
|
-
return StartFlowStep(self.first_step_in_flow().id)
|
|
156
|
+
return StartFlowStep(self.id, self.first_step_in_flow().id)
|
|
157
157
|
|
|
158
158
|
if step_id == END_STEP:
|
|
159
|
-
return EndFlowStep()
|
|
159
|
+
return EndFlowStep(self.id)
|
|
160
160
|
|
|
161
161
|
if step_id.startswith(CONTINUE_STEP_PREFIX):
|
|
162
|
-
return ContinueFlowStep(step_id[len(CONTINUE_STEP_PREFIX) :])
|
|
162
|
+
return ContinueFlowStep(self.id, step_id[len(CONTINUE_STEP_PREFIX) :])
|
|
163
163
|
|
|
164
164
|
for step in self.steps_with_calls_resolved:
|
|
165
165
|
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(
|
|
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
|
-
|
|
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(
|
|
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
|
@@ -52,7 +52,7 @@ DEFAULT_OPENAI_GENERATE_MODEL_NAME = "gpt-3.5-turbo"
|
|
|
52
52
|
|
|
53
53
|
DEFAULT_OPENAI_CHAT_MODEL_NAME = "gpt-3.5-turbo"
|
|
54
54
|
|
|
55
|
-
DEFAULT_OPENAI_CHAT_MODEL_NAME_ADVANCED = "gpt-4"
|
|
55
|
+
DEFAULT_OPENAI_CHAT_MODEL_NAME_ADVANCED = "gpt-4-0613"
|
|
56
56
|
|
|
57
57
|
DEFAULT_OPENAI_EMBEDDING_MODEL_NAME = "text-embedding-ada-002"
|
|
58
58
|
|
rasa/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: rasa-pro
|
|
3
|
-
Version: 3.9.
|
|
3
|
+
Version: 3.9.19
|
|
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
|
|
@@ -54,7 +54,7 @@ Requires-Dist: importlib-resources (>=6.1.1,<7.0.0)
|
|
|
54
54
|
Requires-Dist: jieba (>=0.42.1,<0.43) ; extra == "jieba" or extra == "full"
|
|
55
55
|
Requires-Dist: jinja2 (>=3.1.4,<4.0.0)
|
|
56
56
|
Requires-Dist: jsonpatch (>=1.33,<2.0)
|
|
57
|
-
Requires-Dist: jsonpickle (>=3.0,<3.
|
|
57
|
+
Requires-Dist: jsonpickle (>=3.3.0,<3.4)
|
|
58
58
|
Requires-Dist: jsonschema (>=4.20,<4.21)
|
|
59
59
|
Requires-Dist: keras (==2.14.0)
|
|
60
60
|
Requires-Dist: langchain (>=0.0.329,<0.0.330)
|
|
@@ -157,39 +157,35 @@ Description-Content-Type: text/markdown
|
|
|
157
157
|
|
|
158
158
|
<hr />
|
|
159
159
|
|
|
160
|
-
<img align="right" height="255" src="https://www.rasa.com/assets/img/sara/sara-open-source-2.0.png" alt="An image of Sara, the Rasa mascot bird, holding a flag that reads Open Source with one wing, and a wrench in the other" title="Rasa Pro">
|
|
161
160
|
|
|
162
|
-
Rasa Pro is
|
|
161
|
+
Rasa Pro is a framework for building scalable, dynamic conversational AI assistants that integrate large language models (LLMs) to enable more contextually aware and agentic interactions. Whether you’re new to conversational AI or an experienced developer, Rasa Pro offers enhanced flexibility, control, and performance for mission-critical applications.
|
|
163
162
|
|
|
164
|
-
Rasa
|
|
163
|
+
Building on the foundation of Rasa Open Source, Rasa Pro adds advanced features like CALM (Conversational AI with Language Models) and Dialogue Understanding (DU), which enable developers to shift from traditional intent-driven systems to LLM-based agents. This allows for more robust, responsive interactions that adhere strictly to business logic, while reducing risks like prompt injection and minimizing hallucinations.
|
|
165
164
|
|
|
166
|
-
|
|
165
|
+
**Key Features:**
|
|
167
166
|
|
|
168
|
-
|
|
169
|
-
-
|
|
167
|
+
- **Flows for Business Logic:** Easily define business logic through Flows, a simplified way to describe how your AI assistant should handle conversations. Flows help streamline the development process, focusing on key tasks and reducing the complexity involved in managing conversations.
|
|
168
|
+
- **Automatic Conversation Repair:** Ensure seamless interactions by automatically handling interruptions or unexpected inputs. Developers have full control to customize these repairs based on specific use cases.
|
|
169
|
+
- **Customizable and Open:** Fully customizable code that allows developers to modify Rasa Pro to meet specific requirements, ensuring flexibility and adaptability to various conversational AI needs.
|
|
170
|
+
- **Robustness and Control:** Maintain strict adherence to business logic, preventing unwanted behaviors like prompt injection and hallucinations, leading to more reliable responses and secure interactions.
|
|
171
|
+
- **Built-in Security:** Safeguard sensitive data, control access, and ensure secure deployment, essential for production environments that demand high levels of security and compliance.
|
|
170
172
|
|
|
171
|
-
- 😁 [Install Rasa Pro](https://rasa.com/docs/rasa-pro/installation/python/installation)
|
|
172
173
|
|
|
173
|
-
---
|
|
174
174
|
|
|
175
|
-
|
|
176
|
-
- [Development Internals](#development-internals)
|
|
177
|
-
- [Releases](#releases)
|
|
178
|
-
- [Troubleshooting](#troubleshooting)
|
|
175
|
+
A [free developer license](https://rasa.com/docs/rasa-pro/developer-edition/) is available so you can explore and get to know Rasa Pro. For small production deployments, the Extended Developer License allows you to take your assistant live in a limited capacity. A paid license is required for larger-scale production use, but all code is visible and can be customized as needed.
|
|
179
176
|
|
|
180
|
-
|
|
177
|
+
To get started right now, you can
|
|
181
178
|
|
|
182
|
-
|
|
179
|
+
`pip install rasa-pro`
|
|
183
180
|
|
|
184
|
-
|
|
185
|
-
you have to install Poetry first. Please follow
|
|
186
|
-
[the official guide](https://python-poetry.org/docs/#installation) to see all possible options.
|
|
181
|
+
Check out our
|
|
187
182
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
183
|
+
- [Rasa-pro Quickstart](https://rasa.com/docs/rasa-pro/installation/quickstart/),
|
|
184
|
+
- [Conversational AI with Language Models (CALM) conceptual rundown](https://rasa.com/docs/rasa-pro/calm/),
|
|
185
|
+
- [Rasa Pro / CALM tutorial](https://rasa.com/docs/rasa-pro/tutorial), and
|
|
186
|
+
- [Rasa pro changelog](https://rasa.com/docs/rasa/rasa-pro-changelog/)
|
|
192
187
|
|
|
188
|
+
<<<<<<< HEAD
|
|
193
189
|
### Managing environments
|
|
194
190
|
|
|
195
191
|
The official [Poetry guide](https://python-poetry.org/docs/managing-environments/) suggests to use
|
|
@@ -561,4 +557,7 @@ Please refer to the [Rasa Product Release and Maintenance Policy](https://rasa.c
|
|
|
561
557
|
```
|
|
562
558
|
|
|
563
559
|
For more information on this command, please see the [Official Docker Documentation](https://docs.docker.com/engine/reference/commandline/system_prune/).
|
|
560
|
+
=======
|
|
561
|
+
for more. Also feel free to reach out to us on the [Rasa forum](https://forum.rasa.com/).
|
|
562
|
+
>>>>>>> 2c5cd7bc639 (update readme.md from main branch on 3.10.x (#1597))
|
|
564
563
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
README.md,sha256=
|
|
1
|
+
README.md,sha256=i205Tmh_mTyKYrm09rgjd5CjkaabXYzMhSK6zNoyutc,24262
|
|
2
2
|
rasa/__init__.py,sha256=GmsfxCbHI9hPTvgeUA_r8mr1WmNZ35jq1BOuQ7tzWr4,280
|
|
3
3
|
rasa/__main__.py,sha256=yjgc3M3Ga2oOhTaqciL6AW3io-wvtcH4pSbQDmgDr0k,5602
|
|
4
4
|
rasa/anonymization/__init__.py,sha256=Z-ZUW2ofZGfI6ysjYIS7U0JL4JSzDNOkHiiXK488Zik,86
|
|
@@ -178,8 +178,8 @@ rasa/core/channels/inspector/dist/assets/styles-9c745c82-f0fc6921.js,sha256=LQKL
|
|
|
178
178
|
rasa/core/channels/inspector/dist/assets/svgDrawCommon-4835440b-ef3c5a77.js,sha256=DSdBJHhg90UYRnWjFOmeR83QGVX10N62afFU2lIM0p0,1304
|
|
179
179
|
rasa/core/channels/inspector/dist/assets/timeline-definition-5b62e21b-bf3e91c1.js,sha256=vA1r0ZS5HZygWBg4WDkqzjyeBGB10DLeuHOJEd_D1Yg,22627
|
|
180
180
|
rasa/core/channels/inspector/dist/assets/xychartDiagram-2b33534f-4d4026c0.js,sha256=snRQD2cXkJf9VdmGnsrBVm3iqMSII0HXF_Ytri39LZE,37268
|
|
181
|
-
rasa/core/channels/inspector/dist/index.html,sha256=
|
|
182
|
-
rasa/core/channels/inspector/index.html,sha256=
|
|
181
|
+
rasa/core/channels/inspector/dist/index.html,sha256=xM57yI-zs94jO3Ab1Ncnl0BtuhT1UIdYoD4NL3OlUHQ,2594
|
|
182
|
+
rasa/core/channels/inspector/index.html,sha256=Zs5n96nppdGdoVp4A4_hsA9GThy0vne5j0wAZeM-JFw,1534
|
|
183
183
|
rasa/core/channels/inspector/jest.config.ts,sha256=pDs-0q6gs0Jnm9mWKq5M1vC5wiX_Cnh4l6s--dBsskM,406
|
|
184
184
|
rasa/core/channels/inspector/package.json,sha256=9QaJDSfrNm0ESF2-ohktVjdpP8ZhjuO-fSMhOEw8Qm8,1377
|
|
185
185
|
rasa/core/channels/inspector/setupTests.ts,sha256=JaGsnR6noIcuD5kLjb9SiOkXwJARLV_gF0dULtlWPqk,75
|
|
@@ -291,7 +291,7 @@ rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2,sha256
|
|
|
291
291
|
rasa/core/policies/flow_policy.py,sha256=wGb1l_59cGM9ZaexSIK5uXFi618739oNfLOxx2FC0_Y,7490
|
|
292
292
|
rasa/core/policies/flows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
293
293
|
rasa/core/policies/flows/flow_exceptions.py,sha256=_FQuN-cerQDM1pivce9bz4zylh5UYkljvYS1gjDukHI,1527
|
|
294
|
-
rasa/core/policies/flows/flow_executor.py,sha256=
|
|
294
|
+
rasa/core/policies/flows/flow_executor.py,sha256=8n1rVnclQrYEhXsi8t3yJZUDh990FzwHu9PFNg2fRks,24319
|
|
295
295
|
rasa/core/policies/flows/flow_step_result.py,sha256=agjPrD6lahGSe2ViO5peBeoMdI9ngVGRSgtytgxmJmg,1360
|
|
296
296
|
rasa/core/policies/intentless_policy.py,sha256=rkjO2ol-1p-umUyj9et2cVLwglrx43iV1mb1iZDsH4k,33444
|
|
297
297
|
rasa/core/policies/intentless_prompt_template.jinja2,sha256=KhIL3cruMmkxhrs5oVbqgSvK6ZiN_6TQ_jXrgtEB-ZY,677
|
|
@@ -300,7 +300,7 @@ rasa/core/policies/policy.py,sha256=HeVtIaV0dA1QcAG3vjdn-4g7-oUEJPL4u01ETJt78YA,
|
|
|
300
300
|
rasa/core/policies/rule_policy.py,sha256=YNDPZUZkpKFCvZwKe1kSfP6LQnDL9CQ6JU69JRwdmWw,50729
|
|
301
301
|
rasa/core/policies/ted_policy.py,sha256=_DHiDH5Upx1yFNzMXBA3SGdHBRfsitTLlr7howUHPoo,87750
|
|
302
302
|
rasa/core/policies/unexpected_intent_policy.py,sha256=5pGe9EMS-NLHIDDhqY6KCH_Kv7_TGMzSbe_GsjuKH1w,39649
|
|
303
|
-
rasa/core/processor.py,sha256=
|
|
303
|
+
rasa/core/processor.py,sha256=0qv5tj7eywAAxg-NceZ5g9dCtjqVyZhI9rBl_cLqz5k,53375
|
|
304
304
|
rasa/core/run.py,sha256=T2tEPcHoquy5PTmHEmOkeQ3KIFYhG7Og68JWwIvi-ZY,10993
|
|
305
305
|
rasa/core/secrets_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
306
306
|
rasa/core/secrets_manager/constants.py,sha256=jVhtn_2PN2LQVq-FkeBEipztCQPYSVQq4_n2xq0wfoY,1051
|
|
@@ -365,7 +365,7 @@ rasa/dialogue_understanding/patterns/clarify.py,sha256=guR6rvRh6dPIShd0zczf5o0zM
|
|
|
365
365
|
rasa/dialogue_understanding/patterns/code_change.py,sha256=YXj9ZaHMUXGzdHzYiUITFxJHx3Q7l6xwt7jxubujg-0,1185
|
|
366
366
|
rasa/dialogue_understanding/patterns/collect_information.py,sha256=nfzAtvjIyP67CiR2KvaHQ2VKcZrYsrt96DfwEW4lpS4,3233
|
|
367
367
|
rasa/dialogue_understanding/patterns/completed.py,sha256=NqVaS_5-62UetGRXjR1eOGG3o6EPaIAQxbbkkNVEa9s,1278
|
|
368
|
-
rasa/dialogue_understanding/patterns/continue_interrupted.py,sha256=
|
|
368
|
+
rasa/dialogue_understanding/patterns/continue_interrupted.py,sha256=JSW6F94xh6MjBId87gHtPq5jhtZqxEsKknPDRBGIf7k,1682
|
|
369
369
|
rasa/dialogue_understanding/patterns/correction.py,sha256=ZfSGzvgLvmbebEuisYP0Ke0lQEZziuDvq1oB4wMSFr4,11001
|
|
370
370
|
rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml,sha256=6AM-nIc-JSD8wSZ7KDGInm6nP5n4EJZe4rce747V8fQ,8284
|
|
371
371
|
rasa/dialogue_understanding/patterns/human_handoff.py,sha256=ocGrnLLRW-_aiXjmSUG9nReUGQbBUxFFt4FTBWSXARM,1132
|
|
@@ -383,12 +383,12 @@ rasa/dialogue_understanding/stack/frames/dialogue_stack_frame.py,sha256=rmG09a66
|
|
|
383
383
|
rasa/dialogue_understanding/stack/frames/flow_stack_frame.py,sha256=W4mEmihIN5Bih2C9KDpKf-rxCHjLCzK9TcT6JslhW7g,5047
|
|
384
384
|
rasa/dialogue_understanding/stack/frames/pattern_frame.py,sha256=EVrYWv5dCP7XTvNV-HqtOOrseP-IkF0jD2_JacAvIYw,235
|
|
385
385
|
rasa/dialogue_understanding/stack/frames/search_frame.py,sha256=rJ9og28k_udUIjP-2Z5xeb_2T5HvCzwDCnxVG9K7lws,728
|
|
386
|
-
rasa/dialogue_understanding/stack/utils.py,sha256=
|
|
386
|
+
rasa/dialogue_understanding/stack/utils.py,sha256=UpcxXwbneAMrvc94Fi1__r17UU2BAZQQ_RYI25Mek_c,7710
|
|
387
387
|
rasa/e2e_test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
388
388
|
rasa/e2e_test/constants.py,sha256=YZE0Fku8JVywNcWJPnBly367eZjIFRxXueijSvrKBeo,291
|
|
389
389
|
rasa/e2e_test/e2e_test_case.py,sha256=XlgWdR86rBU2AzQJ_E36_InKxn-ZKsnn_Eh42FA8tG4,12798
|
|
390
390
|
rasa/e2e_test/e2e_test_result.py,sha256=KgqD3N6PQW2HayY_TkSize25ISEl52GONOi-lAfYgRQ,869
|
|
391
|
-
rasa/e2e_test/e2e_test_runner.py,sha256=
|
|
391
|
+
rasa/e2e_test/e2e_test_runner.py,sha256=qx0C1PROS3DePz77ROp8FcBiVuayQTlZLR8oeOGZBDM,27700
|
|
392
392
|
rasa/e2e_test/e2e_test_schema.yml,sha256=F1CimUtTS9PLTDzLUzcepT8qT2N7EmD5dA2PxceB6nY,2430
|
|
393
393
|
rasa/engine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
394
394
|
rasa/engine/caching.py,sha256=Uu-0yn_eQGysmW7nsub-tb3gD8QNz6TNssNd-GIthuI,16451
|
|
@@ -447,7 +447,7 @@ rasa/nlu/__init__.py,sha256=D0IYuTK_ZQ_F_9xsy0bXxVCAtU62Fzvp8S7J9tmfI_c,123
|
|
|
447
447
|
rasa/nlu/classifiers/__init__.py,sha256=Qvrf7_rfiMxm2Vt2fClb56R3QFExf7WPdFdL-AOvgsk,118
|
|
448
448
|
rasa/nlu/classifiers/classifier.py,sha256=9fm1mORuFf1vowYIXmqE9yLRKdSC4nGQW7UqNZQipKY,133
|
|
449
449
|
rasa/nlu/classifiers/diet_classifier.py,sha256=jhzvTqC_Ln-eFCrE1o3uQf1JRR7d6mCPn5ZRewePUas,72565
|
|
450
|
-
rasa/nlu/classifiers/fallback_classifier.py,sha256=
|
|
450
|
+
rasa/nlu/classifiers/fallback_classifier.py,sha256=4vuVdtTSGuDvpD01HmL67JuijymwBHSX66mBCQ3FqTk,7094
|
|
451
451
|
rasa/nlu/classifiers/keyword_intent_classifier.py,sha256=dxDzCK7YzYKslZiXYkBD1Al1y_yZWdZYkBBl7FLyPm8,7581
|
|
452
452
|
rasa/nlu/classifiers/llm_intent_classifier.py,sha256=q_xzDVnB4thKphGeTR4YDlvAMLKwOECsJKYVnK-XQdU,18582
|
|
453
453
|
rasa/nlu/classifiers/logistic_regression_classifier.py,sha256=C7GkIaVNC5MHu5xOaqKzRiV1LTu_19I5vk_Oa9BIDDU,9589
|
|
@@ -514,25 +514,25 @@ rasa/shared/core/conversation.py,sha256=tw1fD2XB3gOdQjDI8hHo5TAAmE2JYNogQGWe3rE9
|
|
|
514
514
|
rasa/shared/core/domain.py,sha256=68oAyvY7WgpBRadoD3UcoPmm8bOYjdudt3-PVTAExGE,79706
|
|
515
515
|
rasa/shared/core/events.py,sha256=j9UAH9onHNmFTWyyM3jFxALwcTFt8pVgQpd_ANeM5uQ,81922
|
|
516
516
|
rasa/shared/core/flows/__init__.py,sha256=HszhIvEARpmyxABFc1MKYvj8oy04WiZW1xmCdToakbs,181
|
|
517
|
-
rasa/shared/core/flows/flow.py,sha256=
|
|
518
|
-
rasa/shared/core/flows/flow_step.py,sha256=
|
|
519
|
-
rasa/shared/core/flows/flow_step_links.py,sha256=
|
|
520
|
-
rasa/shared/core/flows/flow_step_sequence.py,sha256=
|
|
517
|
+
rasa/shared/core/flows/flow.py,sha256=YAHjjB8dyDRJPGK6MtbUnAZ5SFZ9ryYVZ7opPaOfPTQ,13208
|
|
518
|
+
rasa/shared/core/flows/flow_step.py,sha256=6hoVOMXryTKHgT7-p7jzTqH2r9QREmy_6d6bX2OyxI0,4550
|
|
519
|
+
rasa/shared/core/flows/flow_step_links.py,sha256=zMZV_9rWVjEa8kHIFSIbXCWA1qaUvp8r4uSCK_NsKKs,10548
|
|
520
|
+
rasa/shared/core/flows/flow_step_sequence.py,sha256=tXUEhubX3g312G2FH8Hiez7_v9XG9EaspKlANRa7Sa8,2362
|
|
521
521
|
rasa/shared/core/flows/flows_list.py,sha256=gZQwhLgymineOMGZKu_NeWuuASRsDWS5lQL7V4yEB0k,7505
|
|
522
522
|
rasa/shared/core/flows/flows_yaml_schema.json,sha256=uSxpB5-mWNDqwlQMMdRlcaPZWVHZvjWoH38bfu_i4jQ,5989
|
|
523
523
|
rasa/shared/core/flows/nlu_trigger.py,sha256=gfnRUi7QJaUjMb43RTyQWbLoIUSx2I78LeM8CjDIIDE,3907
|
|
524
524
|
rasa/shared/core/flows/steps/__init__.py,sha256=M43kHDuB8okcIE3WLivnvuCBzIsA5Qi2ATXUGTVW2Rw,655
|
|
525
|
-
rasa/shared/core/flows/steps/action.py,sha256=
|
|
526
|
-
rasa/shared/core/flows/steps/call.py,sha256=
|
|
527
|
-
rasa/shared/core/flows/steps/collect.py,sha256=
|
|
525
|
+
rasa/shared/core/flows/steps/action.py,sha256=SoeNNgoq6Aq3eIP9aYKYj8en4vXoDMjEAERPXlige6Q,1730
|
|
526
|
+
rasa/shared/core/flows/steps/call.py,sha256=6y0929pM2n8Z1TQ2avfr3g2l7w7bPSKyCRJzljvGtoE,1856
|
|
527
|
+
rasa/shared/core/flows/steps/collect.py,sha256=p79c69BCHNR5pcVl20EmaAkoSBG52yoEbODZh0UAAok,3959
|
|
528
528
|
rasa/shared/core/flows/steps/constants.py,sha256=DCxrEUGbJciBknHm-_t4tmcnH19IZKP-WYxqix9gm7M,132
|
|
529
|
-
rasa/shared/core/flows/steps/continuation.py,sha256=
|
|
530
|
-
rasa/shared/core/flows/steps/end.py,sha256=
|
|
531
|
-
rasa/shared/core/flows/steps/internal.py,sha256=
|
|
532
|
-
rasa/shared/core/flows/steps/link.py,sha256=
|
|
533
|
-
rasa/shared/core/flows/steps/no_operation.py,sha256=
|
|
534
|
-
rasa/shared/core/flows/steps/set_slots.py,sha256=
|
|
535
|
-
rasa/shared/core/flows/steps/start.py,sha256=
|
|
529
|
+
rasa/shared/core/flows/steps/continuation.py,sha256=5Rzayr80FsgS4bAajuRObVvVcLqPEh9nxGbT2te85xY,1498
|
|
530
|
+
rasa/shared/core/flows/steps/end.py,sha256=0XrPlQMVBnQKVeZs0or8P9IrVqG7i6RoSNDsVrvAeDk,749
|
|
531
|
+
rasa/shared/core/flows/steps/internal.py,sha256=vqBapuLBYQin3Me-YZKn_Tyg5VKozRIJ-tFmjVvmFBs,1449
|
|
532
|
+
rasa/shared/core/flows/steps/link.py,sha256=dlx56o-VnFRAn9Xmsu67Di3Fc9MjkDVXzIttHHRaTzA,1507
|
|
533
|
+
rasa/shared/core/flows/steps/no_operation.py,sha256=I0xWFWJqhUAbvU0HSFXtw4v2gmIiTEveGv4AImvLDfo,1399
|
|
534
|
+
rasa/shared/core/flows/steps/set_slots.py,sha256=NgBXLPl5adIa0-M-Tgt2Teg3gXYggcDqpaf96BPpvKE,1492
|
|
535
|
+
rasa/shared/core/flows/steps/start.py,sha256=AJpKIm0S3GZYLEs3ybXW0Zrq03Pu9lvirNahiUy2I6k,1010
|
|
536
536
|
rasa/shared/core/flows/validation.py,sha256=snTzSnS_xy3jjV2o1MHwLF3kOIpvAccwNSZiokQ5fMA,19494
|
|
537
537
|
rasa/shared/core/flows/yaml_flows_io.py,sha256=Ao4UTXSEpKssgUxPC9vIsca3hCCv1TRZ6FsTHWQWoR8,9374
|
|
538
538
|
rasa/shared/core/generator.py,sha256=y2B2Vn2xOl7k_smzefryoX048b_MTtSDqclx9Ompz9s,35687
|
|
@@ -592,7 +592,7 @@ rasa/shared/utils/cli.py,sha256=2o0ek7B85kTHDNzZbZQNiWkM3td_etH1zxghFJFvDlA,2078
|
|
|
592
592
|
rasa/shared/utils/common.py,sha256=Z0sfpDosVHLhGDY-72lGVTPWsNC64z3HWSLdnZRG7yE,10057
|
|
593
593
|
rasa/shared/utils/constants.py,sha256=ZNQu0RHM_7Q4A2hn6pD8XlKPEwzivNpfKiiQihwH8-U,141
|
|
594
594
|
rasa/shared/utils/io.py,sha256=ppLA6OO_RrSsLBCCGjYtMHkuvmCcyYsgq2IBK_YPLK0,13054
|
|
595
|
-
rasa/shared/utils/llm.py,sha256=
|
|
595
|
+
rasa/shared/utils/llm.py,sha256=SqO5VFg_36BZXL95nOu38oRiDyLrySJGwZWPWjc6imU,13601
|
|
596
596
|
rasa/shared/utils/pykwalify_extensions.py,sha256=4W8gde8C6QpGCY_t9IEmaZSgjMuie1xH0F1DYyn83BM,883
|
|
597
597
|
rasa/shared/utils/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
598
598
|
rasa/shared/utils/schemas/config.yml,sha256=czxSADw9hOIZdhvFP8pVUQo810hs9_C8ZGfCPx17taM,27
|
|
@@ -654,9 +654,9 @@ rasa/utils/train_utils.py,sha256=f1NWpp5y6al0dzoQyyio4hc4Nf73DRoRSHDzEK6-C4E,212
|
|
|
654
654
|
rasa/utils/url_tools.py,sha256=JQcHL2aLqLHu82k7_d9imUoETCm2bmlHaDpOJ-dKqBc,1218
|
|
655
655
|
rasa/utils/yaml.py,sha256=KjbZq5C94ZP7Jdsw8bYYF7HASI6K4-C_kdHfrnPLpSI,2000
|
|
656
656
|
rasa/validator.py,sha256=JFhASyXNzA24SIK4BCyX2rE4x2bsLMU7phYWAMSzlSM,55245
|
|
657
|
-
rasa/version.py,sha256=
|
|
658
|
-
rasa_pro-3.9.
|
|
659
|
-
rasa_pro-3.9.
|
|
660
|
-
rasa_pro-3.9.
|
|
661
|
-
rasa_pro-3.9.
|
|
662
|
-
rasa_pro-3.9.
|
|
657
|
+
rasa/version.py,sha256=QFSRRi7XtzFDId7wp0wh7BQW3Cxtrl1_efMyiOGE-7Q,117
|
|
658
|
+
rasa_pro-3.9.19.dist-info/METADATA,sha256=10F1mLovynJUSf7I8iLWJz5ZFBI4icH2OxgE4CoLGNw,31576
|
|
659
|
+
rasa_pro-3.9.19.dist-info/NOTICE,sha256=7HlBoMHJY9CL2GlYSfTQ-PZsVmLmVkYmMiPlTjhuCqA,218
|
|
660
|
+
rasa_pro-3.9.19.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
661
|
+
rasa_pro-3.9.19.dist-info/entry_points.txt,sha256=ckJ2SfEyTPgBqj_I6vm_tqY9dZF_LAPJZA335Xp0Q9U,43
|
|
662
|
+
rasa_pro-3.9.19.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|