rasa-pro 3.12.0.dev3__py3-none-any.whl → 3.12.0.dev5__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.
- rasa/cli/dialogue_understanding_test.py +6 -1
- rasa/dialogue_understanding/commands/can_not_handle_command.py +2 -2
- rasa/dialogue_understanding/commands/cancel_flow_command.py +2 -2
- rasa/dialogue_understanding/commands/change_flow_command.py +2 -2
- rasa/dialogue_understanding/commands/chit_chat_answer_command.py +2 -2
- rasa/dialogue_understanding/commands/clarify_command.py +2 -2
- rasa/dialogue_understanding/commands/human_handoff_command.py +2 -2
- rasa/dialogue_understanding/commands/knowledge_answer_command.py +2 -2
- rasa/dialogue_understanding/commands/repeat_bot_messages_command.py +2 -2
- rasa/dialogue_understanding/commands/set_slot_command.py +2 -2
- rasa/dialogue_understanding/commands/skip_question_command.py +2 -2
- rasa/dialogue_understanding/commands/start_flow_command.py +2 -2
- rasa/dialogue_understanding/commands/utils.py +1 -1
- rasa/dialogue_understanding/generator/command_parser.py +1 -1
- rasa/dialogue_understanding/generator/llm_based_command_generator.py +2 -1
- rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2 +39 -41
- rasa/dialogue_understanding_test/du_test_result.py +17 -7
- rasa/nlu/classifiers/fallback_classifier.py +0 -3
- rasa/shared/utils/llm.py +1 -1
- rasa/tracing/instrumentation/attribute_extractors.py +52 -0
- rasa/tracing/instrumentation/instrumentation.py +21 -1
- rasa/version.py +1 -1
- {rasa_pro-3.12.0.dev3.dist-info → rasa_pro-3.12.0.dev5.dist-info}/METADATA +2 -2
- {rasa_pro-3.12.0.dev3.dist-info → rasa_pro-3.12.0.dev5.dist-info}/RECORD +27 -27
- {rasa_pro-3.12.0.dev3.dist-info → rasa_pro-3.12.0.dev5.dist-info}/NOTICE +0 -0
- {rasa_pro-3.12.0.dev3.dist-info → rasa_pro-3.12.0.dev5.dist-info}/WHEEL +0 -0
- {rasa_pro-3.12.0.dev3.dist-info → rasa_pro-3.12.0.dev5.dist-info}/entry_points.txt +0 -0
|
@@ -35,7 +35,6 @@ from rasa.dialogue_understanding_test.du_test_runner import (
|
|
|
35
35
|
DialogueUnderstandingTestRunner,
|
|
36
36
|
)
|
|
37
37
|
from rasa.dialogue_understanding_test.io import (
|
|
38
|
-
print_test_results,
|
|
39
38
|
read_test_suite,
|
|
40
39
|
write_test_results_to_file,
|
|
41
40
|
)
|
|
@@ -249,6 +248,12 @@ def execute_dialogue_understanding_tests(args: argparse.Namespace) -> None:
|
|
|
249
248
|
failing_test_results, passing_test_results, command_metrics
|
|
250
249
|
)
|
|
251
250
|
|
|
251
|
+
# Do not move this import to the top of the file as it will break the
|
|
252
|
+
# instrumentation of this function: the CLI module is initialized before the
|
|
253
|
+
# instrumentation is set up, and we won't be able to "replace" the function
|
|
254
|
+
# with the instrumented wrapper
|
|
255
|
+
from rasa.dialogue_understanding_test.io import print_test_results
|
|
256
|
+
|
|
252
257
|
# write results to console and file
|
|
253
258
|
print_test_results(test_suite_result, output_prompt=args.output_prompt)
|
|
254
259
|
if not args.no_output:
|
|
@@ -74,7 +74,7 @@ class CannotHandleCommand(Command):
|
|
|
74
74
|
|
|
75
75
|
def to_dsl(self) -> str:
|
|
76
76
|
"""Converts the command to a DSL string."""
|
|
77
|
-
return "
|
|
77
|
+
return "cannot handle"
|
|
78
78
|
|
|
79
79
|
@classmethod
|
|
80
80
|
def from_dsl(cls, match: re.Match, **kwargs: Any) -> CannotHandleCommand:
|
|
@@ -86,4 +86,4 @@ class CannotHandleCommand(Command):
|
|
|
86
86
|
|
|
87
87
|
@staticmethod
|
|
88
88
|
def regex_pattern() -> str:
|
|
89
|
-
return r"
|
|
89
|
+
return r"^cannot handle$"
|
|
@@ -124,7 +124,7 @@ class CancelFlowCommand(Command):
|
|
|
124
124
|
|
|
125
125
|
def to_dsl(self) -> str:
|
|
126
126
|
"""Converts the command to a DSL string."""
|
|
127
|
-
return "
|
|
127
|
+
return "cancel"
|
|
128
128
|
|
|
129
129
|
@classmethod
|
|
130
130
|
def from_dsl(cls, match: re.Match, **kwargs: Any) -> CancelFlowCommand:
|
|
@@ -133,4 +133,4 @@ class CancelFlowCommand(Command):
|
|
|
133
133
|
|
|
134
134
|
@staticmethod
|
|
135
135
|
def regex_pattern() -> str:
|
|
136
|
-
return r"
|
|
136
|
+
return r"^cancel$"
|
|
@@ -48,7 +48,7 @@ class ChangeFlowCommand(Command):
|
|
|
48
48
|
|
|
49
49
|
def to_dsl(self) -> str:
|
|
50
50
|
"""Converts the command to a DSL string."""
|
|
51
|
-
return "
|
|
51
|
+
return "change"
|
|
52
52
|
|
|
53
53
|
@staticmethod
|
|
54
54
|
def from_dsl(match: re.Match, **kwargs: Any) -> ChangeFlowCommand:
|
|
@@ -57,4 +57,4 @@ class ChangeFlowCommand(Command):
|
|
|
57
57
|
|
|
58
58
|
@staticmethod
|
|
59
59
|
def regex_pattern() -> str:
|
|
60
|
-
return r"
|
|
60
|
+
return r"^change"
|
|
@@ -59,7 +59,7 @@ class ChitChatAnswerCommand(FreeFormAnswerCommand):
|
|
|
59
59
|
|
|
60
60
|
def to_dsl(self) -> str:
|
|
61
61
|
"""Converts the command to a DSL string."""
|
|
62
|
-
return "
|
|
62
|
+
return "chat"
|
|
63
63
|
|
|
64
64
|
@classmethod
|
|
65
65
|
def from_dsl(cls, match: re.Match, **kwargs: Any) -> ChitChatAnswerCommand:
|
|
@@ -68,4 +68,4 @@ class ChitChatAnswerCommand(FreeFormAnswerCommand):
|
|
|
68
68
|
|
|
69
69
|
@staticmethod
|
|
70
70
|
def regex_pattern() -> str:
|
|
71
|
-
return r"
|
|
71
|
+
return r"^chat$"
|
|
@@ -89,7 +89,7 @@ class ClarifyCommand(Command):
|
|
|
89
89
|
|
|
90
90
|
def to_dsl(self) -> str:
|
|
91
91
|
"""Converts the command to a DSL string."""
|
|
92
|
-
return f"
|
|
92
|
+
return f"clarify {' '.join(self.options)}"
|
|
93
93
|
|
|
94
94
|
@classmethod
|
|
95
95
|
def from_dsl(cls, match: re.Match, **kwargs: Any) -> Optional[ClarifyCommand]:
|
|
@@ -99,4 +99,4 @@ class ClarifyCommand(Command):
|
|
|
99
99
|
|
|
100
100
|
@staticmethod
|
|
101
101
|
def regex_pattern() -> str:
|
|
102
|
-
return r"
|
|
102
|
+
return r"^clarify([\"\'a-zA-Z0-9_, ]*)$"
|
|
@@ -66,7 +66,7 @@ class HumanHandoffCommand(Command):
|
|
|
66
66
|
|
|
67
67
|
def to_dsl(self) -> str:
|
|
68
68
|
"""Converts the command to a DSL string."""
|
|
69
|
-
return "
|
|
69
|
+
return "hand over"
|
|
70
70
|
|
|
71
71
|
@classmethod
|
|
72
72
|
def from_dsl(cls, match: re.Match, **kwargs: Any) -> HumanHandoffCommand:
|
|
@@ -75,4 +75,4 @@ class HumanHandoffCommand(Command):
|
|
|
75
75
|
|
|
76
76
|
@staticmethod
|
|
77
77
|
def regex_pattern() -> str:
|
|
78
|
-
return r"
|
|
78
|
+
return r"^hand over$"
|
|
@@ -59,7 +59,7 @@ class KnowledgeAnswerCommand(FreeFormAnswerCommand):
|
|
|
59
59
|
|
|
60
60
|
def to_dsl(self) -> str:
|
|
61
61
|
"""Converts the command to a DSL string."""
|
|
62
|
-
return "
|
|
62
|
+
return "search"
|
|
63
63
|
|
|
64
64
|
@classmethod
|
|
65
65
|
def from_dsl(cls, match: re.Match, **kwargs: Any) -> KnowledgeAnswerCommand:
|
|
@@ -68,4 +68,4 @@ class KnowledgeAnswerCommand(FreeFormAnswerCommand):
|
|
|
68
68
|
|
|
69
69
|
@staticmethod
|
|
70
70
|
def regex_pattern() -> str:
|
|
71
|
-
return r"
|
|
71
|
+
return r"^search$"
|
|
@@ -60,7 +60,7 @@ class RepeatBotMessagesCommand(Command):
|
|
|
60
60
|
|
|
61
61
|
def to_dsl(self) -> str:
|
|
62
62
|
"""Converts the command to a DSL string."""
|
|
63
|
-
return "
|
|
63
|
+
return "repeat message"
|
|
64
64
|
|
|
65
65
|
@classmethod
|
|
66
66
|
def from_dsl(cls, match: re.Match, **kwargs: Any) -> RepeatBotMessagesCommand:
|
|
@@ -69,4 +69,4 @@ class RepeatBotMessagesCommand(Command):
|
|
|
69
69
|
|
|
70
70
|
@staticmethod
|
|
71
71
|
def regex_pattern() -> str:
|
|
72
|
-
return r"
|
|
72
|
+
return r"^repeat message$"
|
|
@@ -170,7 +170,7 @@ class SetSlotCommand(Command):
|
|
|
170
170
|
|
|
171
171
|
def to_dsl(self) -> str:
|
|
172
172
|
"""Converts the command to a DSL string."""
|
|
173
|
-
return f"
|
|
173
|
+
return f"set {self.name} {self.value}"
|
|
174
174
|
|
|
175
175
|
@classmethod
|
|
176
176
|
def from_dsl(cls, match: re.Match, **kwargs: Any) -> SetSlotCommand:
|
|
@@ -181,4 +181,4 @@ class SetSlotCommand(Command):
|
|
|
181
181
|
|
|
182
182
|
@staticmethod
|
|
183
183
|
def regex_pattern() -> str:
|
|
184
|
-
return r"""
|
|
184
|
+
return r"""^set ['"]?([a-zA-Z_][a-zA-Z0-9_-]*)['"]? ['"]?(.+?)['"]?$"""
|
|
@@ -75,7 +75,7 @@ class SkipQuestionCommand(Command):
|
|
|
75
75
|
|
|
76
76
|
def to_dsl(self) -> str:
|
|
77
77
|
"""Converts the command to a DSL string."""
|
|
78
|
-
return "
|
|
78
|
+
return "skip"
|
|
79
79
|
|
|
80
80
|
@classmethod
|
|
81
81
|
def from_dsl(cls, match: re.Match, **kwargs: Any) -> SkipQuestionCommand:
|
|
@@ -84,4 +84,4 @@ class SkipQuestionCommand(Command):
|
|
|
84
84
|
|
|
85
85
|
@staticmethod
|
|
86
86
|
def regex_pattern() -> str:
|
|
87
|
-
return r"
|
|
87
|
+
return r"^skip$"
|
|
@@ -110,7 +110,7 @@ class StartFlowCommand(Command):
|
|
|
110
110
|
|
|
111
111
|
def to_dsl(self) -> str:
|
|
112
112
|
"""Converts the command to a DSL string."""
|
|
113
|
-
return f"
|
|
113
|
+
return f"start {self.flow}"
|
|
114
114
|
|
|
115
115
|
@classmethod
|
|
116
116
|
def from_dsl(cls, match: re.Match, **kwargs: Any) -> Optional[StartFlowCommand]:
|
|
@@ -119,4 +119,4 @@ class StartFlowCommand(Command):
|
|
|
119
119
|
|
|
120
120
|
@staticmethod
|
|
121
121
|
def regex_pattern() -> str:
|
|
122
|
-
return r"
|
|
122
|
+
return r"^start ['\"]?([a-zA-Z0-9_-]+)['\"]?$"
|
|
@@ -27,7 +27,7 @@ def extract_cleaned_options(options_str: str) -> List[str]:
|
|
|
27
27
|
"""Extract and clean options from a string."""
|
|
28
28
|
return sorted(
|
|
29
29
|
opt.strip().strip('"').strip("'")
|
|
30
|
-
for opt in options_str.split("
|
|
30
|
+
for opt in options_str.split(" ")
|
|
31
31
|
if opt.strip()
|
|
32
32
|
)
|
|
33
33
|
|
|
@@ -125,7 +125,7 @@ def _parse_standard_commands(
|
|
|
125
125
|
commands: List[Command] = []
|
|
126
126
|
for command_clz in standard_commands:
|
|
127
127
|
pattern = _get_compiled_pattern(command_clz.regex_pattern())
|
|
128
|
-
if match := pattern.search(action):
|
|
128
|
+
if match := pattern.search(action.strip()):
|
|
129
129
|
parsed_command = command_clz.from_dsl(match, **kwargs)
|
|
130
130
|
if _additional_parsing_fn := _get_additional_parsing_logic(command_clz):
|
|
131
131
|
parsed_command = _additional_parsing_fn(parsed_command, flows, **kwargs)
|
|
@@ -1,60 +1,58 @@
|
|
|
1
1
|
Your task is to analyze the current conversation context and generate a list of actions to start new business processes that we call flows, to extract slots, or respond to small talk and knowledge requests.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
## Available Actions:
|
|
5
|
+
* Starting a flow, described by "start flow_name". For example, "start transfer_money" or "start list_contacts"
|
|
6
|
+
* Slot setting, described by "set slot_name slot_value". For example, "set transfer_money_recipient Freddy". Can be used to correct and change previously set values.
|
|
7
|
+
* Cancelling the current flow, described by "cancel"
|
|
8
|
+
* Clarifying which flow should be started in ambiguous cases. For example, "clarify list_contacts add_contact remove_contact" if the user just wrote "contacts" and there are multiple potential candidates.
|
|
9
|
+
* Skipping the current question when the user explicitly asks for it, described by "skip".
|
|
10
|
+
* Responding to knowledge-oriented user messages, described by "search"
|
|
11
|
+
* Responding to a casual, non-task-oriented user message, described by "chat".
|
|
12
|
+
* Handing over to a human, in case the user seems frustrated or explicitly asks to speak to one, described by "hand over".
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## General Tips
|
|
16
|
+
* Do not fill slots with abstract values or placeholders.
|
|
17
|
+
* Only use information provided by the user.
|
|
18
|
+
* Use clarification in ambiguous cases.
|
|
19
|
+
* Multiple flows can be started. If a user wants to digress into a second flow, you do not need to cancel the current flow.
|
|
20
|
+
* Strictly adhere to the provided action format.
|
|
21
|
+
* For categorical slots try to match the user message with potential slot values. Use "other" if you cannot match it
|
|
22
|
+
* Focus on the last message and take it one step at a time.
|
|
23
|
+
* Use the previous conversation steps only to aid understanding.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## Available Flows:
|
|
4
27
|
{% for flow in available_flows %}
|
|
5
|
-
{{ flow.name }}: {{ flow.description }}
|
|
28
|
+
* {{ flow.name }}: {{ flow.description }}
|
|
6
29
|
{% for slot in flow.slots -%}
|
|
7
|
-
|
|
30
|
+
* {{ slot.name }}{% if slot.description %} ({{ slot.description }}){% endif %}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %}
|
|
8
31
|
{% endfor %}
|
|
9
32
|
{%- endfor %}
|
|
10
33
|
|
|
11
|
-
===
|
|
12
|
-
Here is what happened previously in the conversation:
|
|
13
|
-
{{ current_conversation }}
|
|
14
34
|
|
|
15
|
-
|
|
35
|
+
## Current State
|
|
16
36
|
{% if current_flow != None %}
|
|
17
37
|
You are currently in the flow "{{ current_flow }}".
|
|
18
38
|
You have just asked the user for the slot "{{ current_slot }}"{% if current_slot_description %} ({{ current_slot_description }}){% endif %}.
|
|
19
39
|
|
|
20
40
|
{% if flow_slots|length > 0 %}
|
|
21
|
-
Here are the slots of the
|
|
41
|
+
Here are the slots of the flow "{{ current_flow }}":
|
|
22
42
|
{% for slot in flow_slots -%}
|
|
23
|
-
|
|
43
|
+
* name: {{ slot.name }}, value: {{ slot.value }}, type: {{ slot.type }}, description: {{ slot.description}}{% if slot.allowed_values %}, allowed values: {{ slot.allowed_values }}{% endif %}
|
|
24
44
|
{% endfor %}
|
|
25
45
|
{% endif %}
|
|
26
46
|
{% else %}
|
|
27
|
-
You are currently not
|
|
28
|
-
This means you can only set a slot if you first start a flow that requires that slot.
|
|
29
|
-
{% endif %}
|
|
30
|
-
If you start a flow, first start the flow and then optionally fill that flow's slots with information the user provided in their message.
|
|
31
|
-
|
|
32
|
-
The user just said """{{ user_message }}""".
|
|
33
|
-
|
|
34
|
-
===
|
|
35
|
-
Based on this information generate a list of actions you want to take. Your job is to start flows and to fill slots where appropriate. Any logic of what happens afterwards is handled by the flow engine. These are your available actions:
|
|
36
|
-
* Slot setting, described by "SetSlot(slot_name, slot_value)". An example would be "SetSlot(recipient, Freddy)"
|
|
37
|
-
* Starting another flow, described by "StartFlow(flow_name)". An example would be "StartFlow(transfer_money)"
|
|
38
|
-
* Cancelling the current flow, described by "CancelFlow()"
|
|
39
|
-
* Clarifying which flow should be started. An example would be Clarify(list_contacts, add_contact, remove_contact) if the user just wrote "contacts" and there are multiple potential candidates. It also works with a single flow name to confirm you understood correctly, as in Clarify(transfer_money).
|
|
40
|
-
* Intercepting and handle user messages with the intent to bypass the current step in the flow, described by "SkipQuestion()". Examples of user skip phrases are: "Go to the next question", "Ask me something else".
|
|
41
|
-
* Responding to knowledge-oriented user messages, described by "SearchAndReply()"
|
|
42
|
-
* Responding to a casual, non-task-oriented user message, described by "ChitChat()".
|
|
43
|
-
* Handing off to a human, in case the user seems frustrated or explicitly asks to speak to one, described by "HumanHandoff()".
|
|
44
|
-
{% if is_repeat_command_enabled %}
|
|
45
|
-
* Repeat the last bot messages, described by "RepeatLastBotMessages()". This is useful when the user asks to repeat the last bot messages.
|
|
47
|
+
You are currently not inside any flow.
|
|
46
48
|
{% endif %}
|
|
47
49
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
Focus on the last message and take it one step at a time.
|
|
58
|
-
Use the previous conversation steps only to aid understanding.
|
|
59
|
-
|
|
60
|
-
Your action list:
|
|
50
|
+
|
|
51
|
+
## Conversation History
|
|
52
|
+
{{ current_conversation }}
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
## Task
|
|
56
|
+
Create an action list with one action per line in response to the users last message: """{{ user_message }}""".
|
|
57
|
+
|
|
58
|
+
Your action list:
|
|
@@ -18,6 +18,16 @@ if typing.TYPE_CHECKING:
|
|
|
18
18
|
KEY_TEST_CASES_ACCURACY = "test_cases"
|
|
19
19
|
KEY_USER_UTTERANCES_ACCURACY = "user_utterances"
|
|
20
20
|
|
|
21
|
+
OUTPUT_NUMBER_OF_FAILED_TESTS = "number_of_failed_tests"
|
|
22
|
+
OUTPUT_NUMBER_OF_PASSED_TESTS = "number_of_passed_tests"
|
|
23
|
+
OUTPUT_TEST_CASES_ACCURACY = "test_cases_accuracy"
|
|
24
|
+
OUTPUT_USER_UTTERANCES_ACCURACY = "user_utterances_accuracy"
|
|
25
|
+
OUTPUT_NUMBER_OF_PASSED_USER_UTTERANCES = "number_of_passed_user_utterances"
|
|
26
|
+
OUTPUT_NUMBER_OF_FAILED_USER_UTTERANCES = "number_of_failed_user_utterances"
|
|
27
|
+
OUTPUT_COMMAND_METRICS = "command_metrics"
|
|
28
|
+
OUTPUT_NAMES_OF_FAILED_TESTS = "names_of_failed_tests"
|
|
29
|
+
OUTPUT_NAMES_OF_PASSED_TESTS = "names_of_passed_tests"
|
|
30
|
+
|
|
21
31
|
|
|
22
32
|
class DialogueUnderstandingTestResult(BaseModel):
|
|
23
33
|
"""Result of a single dialogue understanding test case."""
|
|
@@ -260,10 +270,10 @@ class DialogueUnderstandingTestSuiteResult:
|
|
|
260
270
|
"test_cases": self.accuracy[KEY_TEST_CASES_ACCURACY],
|
|
261
271
|
"user_utterances": self.accuracy[KEY_USER_UTTERANCES_ACCURACY],
|
|
262
272
|
},
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
273
|
+
OUTPUT_NUMBER_OF_PASSED_TESTS: self.number_of_passed_tests,
|
|
274
|
+
OUTPUT_NUMBER_OF_FAILED_TESTS: self.number_of_failed_tests,
|
|
275
|
+
OUTPUT_NUMBER_OF_PASSED_USER_UTTERANCES: self.number_of_passed_user_utterances, # noqa: E501
|
|
276
|
+
OUTPUT_NUMBER_OF_FAILED_USER_UTTERANCES: self.number_of_failed_user_utterances, # noqa: E501
|
|
267
277
|
}
|
|
268
278
|
|
|
269
279
|
cmd_metrics_output = {}
|
|
@@ -274,10 +284,10 @@ class DialogueUnderstandingTestSuiteResult:
|
|
|
274
284
|
else:
|
|
275
285
|
pass
|
|
276
286
|
|
|
277
|
-
result_dict[
|
|
287
|
+
result_dict[OUTPUT_COMMAND_METRICS] = cmd_metrics_output
|
|
278
288
|
|
|
279
|
-
result_dict[
|
|
280
|
-
result_dict[
|
|
289
|
+
result_dict[OUTPUT_NAMES_OF_PASSED_TESTS] = self.names_of_passed_tests
|
|
290
|
+
result_dict[OUTPUT_NAMES_OF_FAILED_TESTS] = self.names_of_failed_tests
|
|
281
291
|
|
|
282
292
|
failed_steps_list = []
|
|
283
293
|
for failed_test_step in self.failed_test_steps:
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import copy
|
|
4
3
|
import logging
|
|
5
4
|
from typing import Any, Dict, List, Optional, Text, Tuple, Type, Union
|
|
6
5
|
|
|
@@ -186,8 +185,6 @@ def undo_fallback_prediction(prediction: Dict[Text, Any]) -> Dict[Text, Any]:
|
|
|
186
185
|
if len(intent_ranking) < 2:
|
|
187
186
|
return prediction
|
|
188
187
|
|
|
189
|
-
prediction = copy.deepcopy(prediction)
|
|
190
188
|
prediction[INTENT] = intent_ranking[1]
|
|
191
189
|
prediction[INTENT_RANKING_KEY] = prediction[INTENT_RANKING_KEY][1:]
|
|
192
|
-
|
|
193
190
|
return prediction
|
rasa/shared/utils/llm.py
CHANGED
|
@@ -680,7 +680,7 @@ def allowed_values_for_slot(slot: Slot) -> Union[str, None]:
|
|
|
680
680
|
if isinstance(slot, BooleanSlot):
|
|
681
681
|
return str([True, False])
|
|
682
682
|
if isinstance(slot, CategoricalSlot):
|
|
683
|
-
return str([v for v in slot.values if v != "__other__"])
|
|
683
|
+
return str([v for v in slot.values if v != "__other__"] + ["other"])
|
|
684
684
|
else:
|
|
685
685
|
return None
|
|
686
686
|
|
|
@@ -21,6 +21,20 @@ from rasa.dialogue_understanding.commands import Command
|
|
|
21
21
|
from rasa.dialogue_understanding.generator import LLMBasedCommandGenerator
|
|
22
22
|
from rasa.dialogue_understanding.generator.constants import FLOW_RETRIEVAL_KEY
|
|
23
23
|
from rasa.dialogue_understanding.stack.dialogue_stack import DialogueStack
|
|
24
|
+
from rasa.dialogue_understanding_test.du_test_result import (
|
|
25
|
+
KEY_TEST_CASES_ACCURACY,
|
|
26
|
+
KEY_USER_UTTERANCES_ACCURACY,
|
|
27
|
+
OUTPUT_COMMAND_METRICS,
|
|
28
|
+
OUTPUT_NAMES_OF_FAILED_TESTS,
|
|
29
|
+
OUTPUT_NAMES_OF_PASSED_TESTS,
|
|
30
|
+
OUTPUT_NUMBER_OF_FAILED_TESTS,
|
|
31
|
+
OUTPUT_NUMBER_OF_FAILED_USER_UTTERANCES,
|
|
32
|
+
OUTPUT_NUMBER_OF_PASSED_TESTS,
|
|
33
|
+
OUTPUT_NUMBER_OF_PASSED_USER_UTTERANCES,
|
|
34
|
+
OUTPUT_TEST_CASES_ACCURACY,
|
|
35
|
+
OUTPUT_USER_UTTERANCES_ACCURACY,
|
|
36
|
+
DialogueUnderstandingTestSuiteResult,
|
|
37
|
+
)
|
|
24
38
|
from rasa.engine.graph import ExecutionContext, GraphModelConfiguration, GraphNode
|
|
25
39
|
from rasa.engine.training.graph_trainer import GraphTrainer
|
|
26
40
|
from rasa.shared.constants import (
|
|
@@ -571,6 +585,44 @@ def extract_attrs_for_advance_flows(
|
|
|
571
585
|
}
|
|
572
586
|
|
|
573
587
|
|
|
588
|
+
def extract_attrs_for_du_print_test_results(
|
|
589
|
+
test_suite_result: DialogueUnderstandingTestSuiteResult,
|
|
590
|
+
output_prompt: bool,
|
|
591
|
+
) -> Dict[str, Any]:
|
|
592
|
+
"""Extract the attributes for
|
|
593
|
+
`rasa.dialogue_understanding_test.io.print_test_results` function.
|
|
594
|
+
"""
|
|
595
|
+
from rasa.tracing.instrumentation.instrumentation import (
|
|
596
|
+
DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME,
|
|
597
|
+
)
|
|
598
|
+
|
|
599
|
+
attributes_dict = {
|
|
600
|
+
"module_name": DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME,
|
|
601
|
+
OUTPUT_TEST_CASES_ACCURACY: test_suite_result.accuracy[KEY_TEST_CASES_ACCURACY],
|
|
602
|
+
OUTPUT_USER_UTTERANCES_ACCURACY: test_suite_result.accuracy[
|
|
603
|
+
KEY_USER_UTTERANCES_ACCURACY
|
|
604
|
+
],
|
|
605
|
+
OUTPUT_NUMBER_OF_PASSED_TESTS: test_suite_result.number_of_passed_tests,
|
|
606
|
+
OUTPUT_NUMBER_OF_FAILED_TESTS: test_suite_result.number_of_failed_tests,
|
|
607
|
+
OUTPUT_NUMBER_OF_PASSED_USER_UTTERANCES: test_suite_result.number_of_passed_user_utterances, # noqa: E501
|
|
608
|
+
OUTPUT_NUMBER_OF_FAILED_USER_UTTERANCES: test_suite_result.number_of_failed_user_utterances, # noqa: E501
|
|
609
|
+
OUTPUT_NAMES_OF_PASSED_TESTS: json.dumps(
|
|
610
|
+
test_suite_result.names_of_passed_tests
|
|
611
|
+
),
|
|
612
|
+
OUTPUT_NAMES_OF_FAILED_TESTS: json.dumps(
|
|
613
|
+
test_suite_result.names_of_failed_tests
|
|
614
|
+
),
|
|
615
|
+
}
|
|
616
|
+
if test_suite_result.command_metrics:
|
|
617
|
+
attributes_dict[OUTPUT_COMMAND_METRICS] = json.dumps(
|
|
618
|
+
{
|
|
619
|
+
key: value.as_dict()
|
|
620
|
+
for key, value in test_suite_result.command_metrics.items()
|
|
621
|
+
}
|
|
622
|
+
)
|
|
623
|
+
return attributes_dict
|
|
624
|
+
|
|
625
|
+
|
|
574
626
|
def extract_attrs_for_run_step(
|
|
575
627
|
step: FlowStep,
|
|
576
628
|
flow: Flow,
|
|
@@ -84,6 +84,7 @@ COMMAND_PROCESSOR_MODULE_NAME = (
|
|
|
84
84
|
"rasa.dialogue_understanding.processor.command_processor"
|
|
85
85
|
)
|
|
86
86
|
FLOW_EXECUTOR_MODULE_NAME = "rasa.core.policies.flows.flow_executor"
|
|
87
|
+
DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME = "rasa.dialogue_understanding_test.io"
|
|
87
88
|
|
|
88
89
|
|
|
89
90
|
def _check_extractor_argument_list(
|
|
@@ -151,7 +152,11 @@ def traceable(
|
|
|
151
152
|
)
|
|
152
153
|
|
|
153
154
|
module_name = attrs.pop("module_name", "")
|
|
154
|
-
if module_name in [
|
|
155
|
+
if module_name in [
|
|
156
|
+
"command_processor",
|
|
157
|
+
FLOW_EXECUTOR_MODULE_NAME,
|
|
158
|
+
DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME,
|
|
159
|
+
]:
|
|
155
160
|
span_name = f"{module_name}.{fn.__name__}"
|
|
156
161
|
else:
|
|
157
162
|
span_name = f"{self.__class__.__name__}.{fn.__name__}"
|
|
@@ -583,6 +588,9 @@ def instrument(
|
|
|
583
588
|
if not module_is_instrumented(FLOW_EXECUTOR_MODULE_NAME):
|
|
584
589
|
_instrument_flow_executor_module(tracer_provider)
|
|
585
590
|
|
|
591
|
+
if not module_is_instrumented(DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME):
|
|
592
|
+
_instrument_dialog_understanding_test_io_module(tracer_provider)
|
|
593
|
+
|
|
586
594
|
if policy_subclasses:
|
|
587
595
|
for policy_subclass in policy_subclasses:
|
|
588
596
|
if policy_subclass is not None and not class_is_instrumented(
|
|
@@ -974,6 +982,18 @@ def _instrument_flow_executor_module(tracer_provider: TracerProvider) -> None:
|
|
|
974
982
|
mark_module_as_instrumented(FLOW_EXECUTOR_MODULE_NAME)
|
|
975
983
|
|
|
976
984
|
|
|
985
|
+
def _instrument_dialog_understanding_test_io_module(
|
|
986
|
+
tracer_provider: TracerProvider,
|
|
987
|
+
) -> None:
|
|
988
|
+
_instrument_function(
|
|
989
|
+
tracer_provider.get_tracer(DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME),
|
|
990
|
+
DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME,
|
|
991
|
+
"print_test_results",
|
|
992
|
+
attribute_extractors.extract_attrs_for_du_print_test_results,
|
|
993
|
+
)
|
|
994
|
+
mark_module_as_instrumented(DIALOG_UNDERSTANDING_TEST_IO_MODULE_NAME)
|
|
995
|
+
|
|
996
|
+
|
|
977
997
|
def _instrument_advance_flows_until_next_action(
|
|
978
998
|
tracer: Tracer,
|
|
979
999
|
module_name: str,
|
rasa/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: rasa-pro
|
|
3
|
-
Version: 3.12.0.
|
|
3
|
+
Version: 3.12.0.dev5
|
|
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
|
|
@@ -40,7 +40,7 @@ Requires-Dist: colorclass (>=2.2,<2.3)
|
|
|
40
40
|
Requires-Dist: coloredlogs (>=15,<16)
|
|
41
41
|
Requires-Dist: colorhash (>=2.0,<2.1.0)
|
|
42
42
|
Requires-Dist: confluent-kafka (>=2.3.0,<3.0.0)
|
|
43
|
-
Requires-Dist: cryptography (>=
|
|
43
|
+
Requires-Dist: cryptography (>=43.0.1)
|
|
44
44
|
Requires-Dist: cvg-python-sdk (>=0.5.1,<0.6.0)
|
|
45
45
|
Requires-Dist: dask (>=2024.7.0,<2024.8.0)
|
|
46
46
|
Requires-Dist: demoji (>=1.1.0,<2.0.0)
|
|
@@ -23,7 +23,7 @@ rasa/cli/arguments/train.py,sha256=bnBIvSMxeY8qOswCdp6-MfXwCf5OIzDmNjDjW84yzYQ,8
|
|
|
23
23
|
rasa/cli/arguments/visualize.py,sha256=e8yhvc6Jfy1JKSOIVFV5mY5QPowkf0o1kt6IGujVxcY,861
|
|
24
24
|
rasa/cli/arguments/x.py,sha256=_23reqNwiit2VoCqmv23kQZudA3iZVXaBV_zEXJjV6w,1028
|
|
25
25
|
rasa/cli/data.py,sha256=dmQqLBTlsNeO-QnAzMwWV2BR65LklIXDjgR0xo9CJ_w,12696
|
|
26
|
-
rasa/cli/dialogue_understanding_test.py,sha256=
|
|
26
|
+
rasa/cli/dialogue_understanding_test.py,sha256=1qum-Z-qZUUW8mBHhXAeLfQQF4OCtd9QXyZgD4B4tJg,12301
|
|
27
27
|
rasa/cli/e2e_test.py,sha256=guHIeX7qPwv8db4j9zsDG7MQbfUq92xO51u0iOR3eqw,8359
|
|
28
28
|
rasa/cli/evaluate.py,sha256=104vTMKNQPhuEUm5n1OMVxH4qywaZx14kE_5ULGNMbg,7946
|
|
29
29
|
rasa/cli/export.py,sha256=vohrKZpUrNVXE2xZM3V-IgWc6UsWUoUl-5tRXSg6Nag,8203
|
|
@@ -358,36 +358,36 @@ rasa/dialogue_understanding/coexistence/intent_based_router.py,sha256=JlYBZdScnh
|
|
|
358
358
|
rasa/dialogue_understanding/coexistence/llm_based_router.py,sha256=UTLMZpynSRt8qnQSSV-dTgFQbBHaMEgrLIUWCMyH1BE,11354
|
|
359
359
|
rasa/dialogue_understanding/coexistence/router_template.jinja2,sha256=CHWFreN0sv1EbPh-hf5AlCt3zxy2_llX1Pdn9Q11Y18,357
|
|
360
360
|
rasa/dialogue_understanding/commands/__init__.py,sha256=F-pLETYRUjhIkjjDfXGUuPsK_ac1HcLmJkrUUP0RhME,2259
|
|
361
|
-
rasa/dialogue_understanding/commands/can_not_handle_command.py,sha256=
|
|
362
|
-
rasa/dialogue_understanding/commands/cancel_flow_command.py,sha256=
|
|
363
|
-
rasa/dialogue_understanding/commands/change_flow_command.py,sha256=
|
|
364
|
-
rasa/dialogue_understanding/commands/chit_chat_answer_command.py,sha256=
|
|
365
|
-
rasa/dialogue_understanding/commands/clarify_command.py,sha256=
|
|
361
|
+
rasa/dialogue_understanding/commands/can_not_handle_command.py,sha256=z7aGn7aBMdXTsn7lzN1RvXlYi8WN7gtFm21qcJF8Hko,2829
|
|
362
|
+
rasa/dialogue_understanding/commands/cancel_flow_command.py,sha256=Tc5xXQw_P8XlIApL6CblFf1nnfnWGUqsMSIkVV_K_bE,4613
|
|
363
|
+
rasa/dialogue_understanding/commands/change_flow_command.py,sha256=gQyL1UqRNPdYXKVQi3hlAHOdpcCWLkhL34M3A_PzSR0,1722
|
|
364
|
+
rasa/dialogue_understanding/commands/chit_chat_answer_command.py,sha256=JnOMAaWhyynlTTzLpi663BOSs8hYNZyxrjUnSq0Qle8,2140
|
|
365
|
+
rasa/dialogue_understanding/commands/clarify_command.py,sha256=7ZlgA_gmOCj0xcP3sCNn7frk75SqiuWpS0O0HWuxjNE,3428
|
|
366
366
|
rasa/dialogue_understanding/commands/command.py,sha256=riYYO0Lvm7T2vydDOfFFi7IquJWdyX_jH8d7qX0PB2c,2993
|
|
367
367
|
rasa/dialogue_understanding/commands/correct_slots_command.py,sha256=lnSfYXNdTwQflOeMRXh1rV4qn6Bgx85S1yaXHtiKKAs,10461
|
|
368
368
|
rasa/dialogue_understanding/commands/error_command.py,sha256=LTEsxkGGGZR6wEEGuTtQ4K4EK_u2UFhNK4eAKyPfyME,2436
|
|
369
369
|
rasa/dialogue_understanding/commands/free_form_answer_command.py,sha256=XlQrHXrcOemzu1LHZiDhBAluiSlnUQ2V7ET5Z-aG7gc,224
|
|
370
370
|
rasa/dialogue_understanding/commands/handle_code_change_command.py,sha256=Cp2e1iD0zacXmljJ8vDXHJu9Fp6BwB7cGx8NF748akw,2192
|
|
371
|
-
rasa/dialogue_understanding/commands/human_handoff_command.py,sha256=
|
|
372
|
-
rasa/dialogue_understanding/commands/knowledge_answer_command.py,sha256=
|
|
371
|
+
rasa/dialogue_understanding/commands/human_handoff_command.py,sha256=bxSTNbLz05nN_gL14TsVural4S9-Du1teVXy1JDASP8,2275
|
|
372
|
+
rasa/dialogue_understanding/commands/knowledge_answer_command.py,sha256=IvFcV8rhnDchzvWfJncJ34OFkXHiQ3yWytkGFWNuSho,2146
|
|
373
373
|
rasa/dialogue_understanding/commands/noop_command.py,sha256=aIaLBjSV84qy9X4aGlJfMIYhF57maH5CiKNWL_-giD4,1485
|
|
374
|
-
rasa/dialogue_understanding/commands/repeat_bot_messages_command.py,sha256=
|
|
374
|
+
rasa/dialogue_understanding/commands/repeat_bot_messages_command.py,sha256=6oitCpsYtLjOUBGe4cIx2OOZnw9ygi4nKwWOg66R2aA,2225
|
|
375
375
|
rasa/dialogue_understanding/commands/restart_command.py,sha256=vvmucwlVtfh6VMgdOn5hZfsP9U5HhfbDeBSG2IndX0Y,1639
|
|
376
376
|
rasa/dialogue_understanding/commands/session_end_command.py,sha256=ZecUpYZDTX_68_kV1Hv4i317bbeBeVHHyhW_A7r5yzs,1770
|
|
377
377
|
rasa/dialogue_understanding/commands/session_start_command.py,sha256=FA4yocMnFt5bn2dmXj48S4Pq_yTlEnOBxgK_mq-qAxg,1704
|
|
378
|
-
rasa/dialogue_understanding/commands/set_slot_command.py,sha256=
|
|
379
|
-
rasa/dialogue_understanding/commands/skip_question_command.py,sha256=
|
|
380
|
-
rasa/dialogue_understanding/commands/start_flow_command.py,sha256=
|
|
378
|
+
rasa/dialogue_understanding/commands/set_slot_command.py,sha256=ENpMuAbrlNA0hX3ABbIxQPNAL4a7sk7HZvNTZGhoiRE,5982
|
|
379
|
+
rasa/dialogue_understanding/commands/skip_question_command.py,sha256=ZPstoD-A2jnW8AszKsZ10WtDEeAtoCh6swESwk7fpDA,2588
|
|
380
|
+
rasa/dialogue_understanding/commands/start_flow_command.py,sha256=WYgynvL1sqlOr_I5VXI5OHqWaSRUexvFUvEsgI9WvPw,3783
|
|
381
381
|
rasa/dialogue_understanding/commands/user_silence_command.py,sha256=DQjRfZk09sV1o2emnLkmX7cZpsJwBHNeJGBDQVkejjY,1686
|
|
382
|
-
rasa/dialogue_understanding/commands/utils.py,sha256=
|
|
382
|
+
rasa/dialogue_understanding/commands/utils.py,sha256=OV6hJjlb2WWOHCaIxtRXbbKHKSNGX2het_KZNoomrBI,1748
|
|
383
383
|
rasa/dialogue_understanding/constants.py,sha256=YcELaIss69Hnroclvn90Dl4Suk3S6e3t0UoIbUaXG2A,83
|
|
384
384
|
rasa/dialogue_understanding/generator/__init__.py,sha256=Ykeb2wQ1DuiUWAWO0hLIPSTK1_Ktiq9DZXF6D3ugN78,764
|
|
385
385
|
rasa/dialogue_understanding/generator/command_generator.py,sha256=OTyE9_CcorpjTOgdI-u0J9ryBwlDdd2foJLA3jQJ9_Y,11959
|
|
386
|
-
rasa/dialogue_understanding/generator/command_parser.py,sha256=
|
|
386
|
+
rasa/dialogue_understanding/generator/command_parser.py,sha256=E-P1giFoSzPwgg7FqPEx0-4XWUAKidn8HT2Bn70DzmM,6430
|
|
387
387
|
rasa/dialogue_understanding/generator/constants.py,sha256=ntP5xmTlS3b_6uVT7LKvWzxbmf5_9tWZ5eFY1RLBtqU,716
|
|
388
388
|
rasa/dialogue_understanding/generator/flow_document_template.jinja2,sha256=f4H6vVd-_nX_RtutMh1xD3ZQE_J2OyuPHAtiltfiAPY,253
|
|
389
389
|
rasa/dialogue_understanding/generator/flow_retrieval.py,sha256=wlGnMj17-X1-siQmdSvOd7K61sRzBf82MQEL2pqDQMI,17891
|
|
390
|
-
rasa/dialogue_understanding/generator/llm_based_command_generator.py,sha256=
|
|
390
|
+
rasa/dialogue_understanding/generator/llm_based_command_generator.py,sha256=Tbrm8Y39lnHEZScWy-tVaBS45R5PJpJgLYwXHw6iZPs,16149
|
|
391
391
|
rasa/dialogue_understanding/generator/llm_command_generator.py,sha256=QpNXhjB9ugtPV8XAHmKjbJtOiI1yE9rC2osbsI_A4ZY,2529
|
|
392
392
|
rasa/dialogue_understanding/generator/multi_step/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
393
393
|
rasa/dialogue_understanding/generator/multi_step/fill_slots_prompt.jinja2,sha256=Y0m673tAML3cFPaLM-urMXDsBYUUcXIw9YUpkAhGUuA,2933
|
|
@@ -395,7 +395,7 @@ rasa/dialogue_understanding/generator/multi_step/handle_flows_prompt.jinja2,sha2
|
|
|
395
395
|
rasa/dialogue_understanding/generator/multi_step/multi_step_llm_command_generator.py,sha256=U8Sj6KxQZw5v-RdkuH-5fJYEvKDfIG2SnPXfsEZuG2Y,31034
|
|
396
396
|
rasa/dialogue_understanding/generator/nlu_command_adapter.py,sha256=-DFGkeRKQwU0-0ZJpVjxvgAUGq8pK9NXavAUONT0Wo8,9383
|
|
397
397
|
rasa/dialogue_understanding/generator/single_step/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
398
|
-
rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2,sha256=
|
|
398
|
+
rasa/dialogue_understanding/generator/single_step/command_prompt_template.jinja2,sha256=k6s9Gj4ULCwfuqRbX41yW0aJwQN_T_ShfWlGeZDT308,2863
|
|
399
399
|
rasa/dialogue_understanding/generator/single_step/single_step_llm_command_generator.py,sha256=KznnZzf3RtvRK8sSfMw4tCaWzXMJf0Mw66S73lA22uk,15724
|
|
400
400
|
rasa/dialogue_understanding/generator/utils.py,sha256=fRACEJ2bEgEgSq90TUrQFLTrLqtJqtbb64mgAXklMQ4,1911
|
|
401
401
|
rasa/dialogue_understanding/patterns/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -436,7 +436,7 @@ rasa/dialogue_understanding_test/command_comparison.py,sha256=LvCZGgZVFpKjWqaZE5
|
|
|
436
436
|
rasa/dialogue_understanding_test/command_metric_calculation.py,sha256=McLi6YNsTIieGOCSNTGBeiXBLCIdxpJEiu-nXG5wa4g,3756
|
|
437
437
|
rasa/dialogue_understanding_test/constants.py,sha256=G63FEzswDUOonTxoXQicEJwI6ICkSx3YP1ILkGH1ijw,790
|
|
438
438
|
rasa/dialogue_understanding_test/du_test_case.py,sha256=P82xu4wkyIrhPdQWHp2wMYG6YVkUgaDFNSSDDN6Znv8,11277
|
|
439
|
-
rasa/dialogue_understanding_test/du_test_result.py,sha256=
|
|
439
|
+
rasa/dialogue_understanding_test/du_test_result.py,sha256=L3OVBaetQgLML1iHPFJyQqF6DrsBCnNB9XCBG8WaAPM,11454
|
|
440
440
|
rasa/dialogue_understanding_test/du_test_runner.py,sha256=ZG-TNfu-Ak9l_gg9NNadzKzARgICJ9wlsYooCBi1WKU,11943
|
|
441
441
|
rasa/dialogue_understanding_test/du_test_schema.yml,sha256=zgIhb6PE8LnoigVmv4NbU3cjSsr2SkGoO-5Xh4Et9KA,4767
|
|
442
442
|
rasa/dialogue_understanding_test/io.py,sha256=ah26adacAU57YX7rhL3fMLNKeVddVURzUaWddXl8N0k,12707
|
|
@@ -544,7 +544,7 @@ rasa/nlu/__init__.py,sha256=D0IYuTK_ZQ_F_9xsy0bXxVCAtU62Fzvp8S7J9tmfI_c,123
|
|
|
544
544
|
rasa/nlu/classifiers/__init__.py,sha256=Qvrf7_rfiMxm2Vt2fClb56R3QFExf7WPdFdL-AOvgsk,118
|
|
545
545
|
rasa/nlu/classifiers/classifier.py,sha256=9fm1mORuFf1vowYIXmqE9yLRKdSC4nGQW7UqNZQipKY,133
|
|
546
546
|
rasa/nlu/classifiers/diet_classifier.py,sha256=xwpEC1QNpjJU6JnE55h48JPlE6qRmwogHl85GMOJLtw,72524
|
|
547
|
-
rasa/nlu/classifiers/fallback_classifier.py,sha256=
|
|
547
|
+
rasa/nlu/classifiers/fallback_classifier.py,sha256=LSzFMEYhX7_hrvlRGf-OsUmng33GcbtQGIFtVtMmqWI,7095
|
|
548
548
|
rasa/nlu/classifiers/keyword_intent_classifier.py,sha256=ujOO3gb4uouKzVzSv72yGbSADKY158YzGGx7p1z0Qoc,7582
|
|
549
549
|
rasa/nlu/classifiers/logistic_regression_classifier.py,sha256=cEvURAt8VZVJfWC40kK9xX3q-zIBz4iVqij5lT6Voic,9589
|
|
550
550
|
rasa/nlu/classifiers/mitie_intent_classifier.py,sha256=_1F85vzb-PZfX__wOE5Twd2MplCjpjX2FmEx8jFOCak,5560
|
|
@@ -728,7 +728,7 @@ rasa/shared/utils/health_check/embeddings_health_check_mixin.py,sha256=ASOzDtI3i
|
|
|
728
728
|
rasa/shared/utils/health_check/health_check.py,sha256=izixrbc9BxFSsjzwoIw9U0w0VKSX5gMwhey8bcwe1wc,9709
|
|
729
729
|
rasa/shared/utils/health_check/llm_health_check_mixin.py,sha256=ANP5Q68TRX8p4wWkRCAISsWBV1iYYeGnqWILnR1NawE,957
|
|
730
730
|
rasa/shared/utils/io.py,sha256=AhuECoXGO367NvWRCBu99utEtTQnyxWVJyKOOpLePpg,15917
|
|
731
|
-
rasa/shared/utils/llm.py,sha256=
|
|
731
|
+
rasa/shared/utils/llm.py,sha256=Z2hs_xRRE1jnY27POLgfB5Zc8X0pT-LvD0nJFFZoshY,25557
|
|
732
732
|
rasa/shared/utils/pykwalify_extensions.py,sha256=36vfuD9gSreZvMIZ_qIPpykXhYGuZu2BpoEMVX50Is4,883
|
|
733
733
|
rasa/shared/utils/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
734
734
|
rasa/shared/utils/schemas/config.yml,sha256=czxSADw9hOIZdhvFP8pVUQo810hs9_C8ZGfCPx17taM,27
|
|
@@ -751,8 +751,8 @@ rasa/tracing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
751
751
|
rasa/tracing/config.py,sha256=j5N6s-GX3idNH9FO-0z10KduVg2ovzsE-u5ve87249U,12860
|
|
752
752
|
rasa/tracing/constants.py,sha256=N_MJLStE3IkmPKQCQv42epd3jdBMJ4Ith1dVO65N5ho,2425
|
|
753
753
|
rasa/tracing/instrumentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
754
|
-
rasa/tracing/instrumentation/attribute_extractors.py,sha256=
|
|
755
|
-
rasa/tracing/instrumentation/instrumentation.py,sha256=
|
|
754
|
+
rasa/tracing/instrumentation/attribute_extractors.py,sha256=cdPAo3zMUKclumsvlS7XMUISHfJUczQeAsipo3j89lw,28166
|
|
755
|
+
rasa/tracing/instrumentation/instrumentation.py,sha256=K4h_u3VY-eKPKUP8UXKEHsCy5UpXw0QGQ2MdlQFBeWE,51861
|
|
756
756
|
rasa/tracing/instrumentation/intentless_policy_instrumentation.py,sha256=RgixI0FVIzBz19E3onidUpSEwjkAh8paA5_w07PMzFo,4821
|
|
757
757
|
rasa/tracing/instrumentation/metrics.py,sha256=N4Zxo8P84p4VH6vGai1oRurIUifXPtMrZh1BlpPB7kg,10534
|
|
758
758
|
rasa/tracing/metric_instrument_provider.py,sha256=I1elkXfDNix9s4mqRWA_5f_PI15_yPl8k2yO0rltWoI,9989
|
|
@@ -792,9 +792,9 @@ rasa/utils/train_utils.py,sha256=ClJx-6x3-h3Vt6mskacgkcCUJTMXjFPe3zAcy_DfmaU,212
|
|
|
792
792
|
rasa/utils/url_tools.py,sha256=dZ1HGkVdWTJB7zYEdwoDIrEuyX9HE5WsxKKFVsXBLE0,1218
|
|
793
793
|
rasa/utils/yaml.py,sha256=KjbZq5C94ZP7Jdsw8bYYF7HASI6K4-C_kdHfrnPLpSI,2000
|
|
794
794
|
rasa/validator.py,sha256=Uh5R1JDmIRl0aNprh9FfHND8UKiNJTNYBrMdBDVxEFM,67516
|
|
795
|
-
rasa/version.py,sha256=
|
|
796
|
-
rasa_pro-3.12.0.
|
|
797
|
-
rasa_pro-3.12.0.
|
|
798
|
-
rasa_pro-3.12.0.
|
|
799
|
-
rasa_pro-3.12.0.
|
|
800
|
-
rasa_pro-3.12.0.
|
|
795
|
+
rasa/version.py,sha256=S671PaGrikbveYGVjkGPNsLXHGDs_sktWwfX0AdUx_8,122
|
|
796
|
+
rasa_pro-3.12.0.dev5.dist-info/METADATA,sha256=a8QtoiKiAuWqF2h19L7aYxtWR6HdWIfeebamu9d7YG8,10808
|
|
797
|
+
rasa_pro-3.12.0.dev5.dist-info/NOTICE,sha256=7HlBoMHJY9CL2GlYSfTQ-PZsVmLmVkYmMiPlTjhuCqA,218
|
|
798
|
+
rasa_pro-3.12.0.dev5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
799
|
+
rasa_pro-3.12.0.dev5.dist-info/entry_points.txt,sha256=ckJ2SfEyTPgBqj_I6vm_tqY9dZF_LAPJZA335Xp0Q9U,43
|
|
800
|
+
rasa_pro-3.12.0.dev5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|