rasa-pro 3.13.10__py3-none-any.whl → 3.13.12__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/core/actions/action.py +29 -39
- rasa/core/actions/action_run_slot_rejections.py +1 -1
- rasa/core/actions/direct_custom_actions_executor.py +9 -2
- rasa/core/channels/studio_chat.py +61 -18
- rasa/core/nlg/contextual_response_rephraser.py +6 -7
- rasa/core/nlg/generator.py +21 -5
- rasa/core/nlg/response.py +43 -6
- rasa/core/nlg/translate.py +8 -0
- rasa/dialogue_understanding_test/du_test_schema.yml +3 -3
- rasa/e2e_test/e2e_test_schema.yml +3 -3
- rasa/model_manager/model_api.py +1 -1
- rasa/model_manager/socket_bridge.py +7 -0
- rasa/utils/licensing.py +21 -10
- rasa/version.py +1 -1
- {rasa_pro-3.13.10.dist-info → rasa_pro-3.13.12.dist-info}/METADATA +1 -1
- {rasa_pro-3.13.10.dist-info → rasa_pro-3.13.12.dist-info}/RECORD +19 -19
- {rasa_pro-3.13.10.dist-info → rasa_pro-3.13.12.dist-info}/NOTICE +0 -0
- {rasa_pro-3.13.10.dist-info → rasa_pro-3.13.12.dist-info}/WHEEL +0 -0
- {rasa_pro-3.13.10.dist-info → rasa_pro-3.13.12.dist-info}/entry_points.txt +0 -0
rasa/core/actions/action.py
CHANGED
|
@@ -23,11 +23,9 @@ from rasa.core.constants import (
|
|
|
23
23
|
KEY_IS_COEXISTENCE_ASSISTANT,
|
|
24
24
|
UTTER_SOURCE_METADATA_KEY,
|
|
25
25
|
)
|
|
26
|
-
from rasa.core.nlg.translate import get_translated_buttons, get_translated_text
|
|
27
26
|
from rasa.core.policies.policy import PolicyPrediction
|
|
28
27
|
from rasa.core.utils import add_bot_utterance_metadata
|
|
29
28
|
from rasa.e2e_test.constants import KEY_STUB_CUSTOM_ACTIONS
|
|
30
|
-
from rasa.engine.language import Language
|
|
31
29
|
from rasa.nlu.constants import (
|
|
32
30
|
RESPONSE_SELECTOR_DEFAULT_INTENT,
|
|
33
31
|
RESPONSE_SELECTOR_PREDICTION_KEY,
|
|
@@ -84,7 +82,6 @@ from rasa.shared.core.events import (
|
|
|
84
82
|
UserUttered,
|
|
85
83
|
)
|
|
86
84
|
from rasa.shared.core.flows import FlowsList
|
|
87
|
-
from rasa.shared.core.flows.constants import KEY_TRANSLATION
|
|
88
85
|
from rasa.shared.core.slot_mappings import (
|
|
89
86
|
SlotFillingManager,
|
|
90
87
|
extract_slot_value,
|
|
@@ -251,36 +248,25 @@ def action_for_name_or_text(
|
|
|
251
248
|
return RemoteAction(action_name_or_text, action_endpoint)
|
|
252
249
|
|
|
253
250
|
|
|
254
|
-
def create_bot_utterance(
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
251
|
+
def create_bot_utterance(message: Dict[Text, Any]) -> BotUttered:
|
|
252
|
+
"""Create BotUttered event from message."""
|
|
253
|
+
bot_message = BotUttered(
|
|
254
|
+
text=message.pop(TEXT, None),
|
|
255
|
+
data={
|
|
256
|
+
ELEMENTS: message.pop(ELEMENTS, None),
|
|
257
|
+
QUICK_REPLIES: message.pop(QUICK_REPLIES, None),
|
|
258
|
+
BUTTONS: message.pop(BUTTONS, None),
|
|
259
|
+
# for legacy / compatibility reasons we need to set the image
|
|
260
|
+
# to be the attachment if there is no other attachment (the
|
|
261
|
+
# `.get` is intentional - no `pop` as we still need the image`
|
|
262
|
+
# property to set it in the following line)
|
|
263
|
+
ATTACHMENT: message.pop(ATTACHMENT, None) or message.get(IMAGE, None),
|
|
264
|
+
IMAGE: message.pop(IMAGE, None),
|
|
265
|
+
CUSTOM: message.pop(CUSTOM, None),
|
|
266
|
+
},
|
|
267
|
+
metadata=message,
|
|
268
268
|
)
|
|
269
|
-
|
|
270
|
-
data = {
|
|
271
|
-
ELEMENTS: message_copy.pop(ELEMENTS, None),
|
|
272
|
-
QUICK_REPLIES: message_copy.pop(QUICK_REPLIES, None),
|
|
273
|
-
BUTTONS: buttons,
|
|
274
|
-
# for legacy / compatibility reasons we need to set the image
|
|
275
|
-
# to be the attachment if there is no other attachment (the
|
|
276
|
-
# `.get` is intentional - no `pop` as we still need the image`
|
|
277
|
-
# property to set it in the following line)
|
|
278
|
-
ATTACHMENT: message_copy.pop(ATTACHMENT, None) or message_copy.get(IMAGE, None),
|
|
279
|
-
IMAGE: message_copy.pop(IMAGE, None),
|
|
280
|
-
CUSTOM: message_copy.pop(CUSTOM, None),
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
return BotUttered(text=text, data=data, metadata=message_copy)
|
|
269
|
+
return bot_message
|
|
284
270
|
|
|
285
271
|
|
|
286
272
|
class Action:
|
|
@@ -393,7 +379,7 @@ class ActionBotResponse(Action):
|
|
|
393
379
|
message = add_bot_utterance_metadata(
|
|
394
380
|
message, self.utter_action, nlg, domain, tracker
|
|
395
381
|
)
|
|
396
|
-
return [create_bot_utterance(message
|
|
382
|
+
return [create_bot_utterance(message)]
|
|
397
383
|
|
|
398
384
|
def name(self) -> Text:
|
|
399
385
|
"""Returns action name."""
|
|
@@ -427,7 +413,7 @@ class ActionEndToEndResponse(Action):
|
|
|
427
413
|
) -> List[Event]:
|
|
428
414
|
"""Runs action (see parent class for full docstring)."""
|
|
429
415
|
message = {"text": self.action_text}
|
|
430
|
-
return [create_bot_utterance(message
|
|
416
|
+
return [create_bot_utterance(message)]
|
|
431
417
|
|
|
432
418
|
def event_for_successful_execution(
|
|
433
419
|
self,
|
|
@@ -893,7 +879,10 @@ class RemoteAction(Action):
|
|
|
893
879
|
generated_response = response.pop("response", None)
|
|
894
880
|
if generated_response is not None:
|
|
895
881
|
draft = await nlg.generate(
|
|
896
|
-
generated_response,
|
|
882
|
+
generated_response,
|
|
883
|
+
tracker,
|
|
884
|
+
output_channel.name(),
|
|
885
|
+
**response,
|
|
897
886
|
)
|
|
898
887
|
if not draft:
|
|
899
888
|
continue
|
|
@@ -910,8 +899,8 @@ class RemoteAction(Action):
|
|
|
910
899
|
|
|
911
900
|
# Avoid overwriting `draft` values with empty values
|
|
912
901
|
response = {k: v for k, v in response.items() if v}
|
|
913
|
-
|
|
914
|
-
bot_messages.append(create_bot_utterance(
|
|
902
|
+
draft.update(response)
|
|
903
|
+
bot_messages.append(create_bot_utterance(draft))
|
|
915
904
|
|
|
916
905
|
return bot_messages
|
|
917
906
|
|
|
@@ -1068,6 +1057,7 @@ def _revert_rephrasing_events() -> List[Event]:
|
|
|
1068
1057
|
]
|
|
1069
1058
|
|
|
1070
1059
|
|
|
1060
|
+
# TODO: this should be removed, e.g. it uses a hardcoded message and no translation
|
|
1071
1061
|
class ActionDefaultAskAffirmation(Action):
|
|
1072
1062
|
"""Default implementation which asks the user to affirm his intent.
|
|
1073
1063
|
|
|
@@ -1119,7 +1109,7 @@ class ActionDefaultAskAffirmation(Action):
|
|
|
1119
1109
|
"utter_action": self.name(),
|
|
1120
1110
|
}
|
|
1121
1111
|
|
|
1122
|
-
return [create_bot_utterance(message
|
|
1112
|
+
return [create_bot_utterance(message)]
|
|
1123
1113
|
|
|
1124
1114
|
|
|
1125
1115
|
class ActionDefaultAskRephrase(ActionBotResponse):
|
|
@@ -1155,7 +1145,7 @@ class ActionSendText(Action):
|
|
|
1155
1145
|
|
|
1156
1146
|
should_send_text = metadata_copy.get("should_send_text", True)
|
|
1157
1147
|
if should_send_text:
|
|
1158
|
-
return [create_bot_utterance(message
|
|
1148
|
+
return [create_bot_utterance(message)]
|
|
1159
1149
|
return []
|
|
1160
1150
|
|
|
1161
1151
|
|
|
@@ -216,6 +216,6 @@ class ActionRunSlotRejections(Action):
|
|
|
216
216
|
message = add_bot_utterance_metadata(
|
|
217
217
|
message, utterance, nlg, domain, tracker
|
|
218
218
|
)
|
|
219
|
-
events.append(create_bot_utterance(message
|
|
219
|
+
events.append(create_bot_utterance(message))
|
|
220
220
|
|
|
221
221
|
return events
|
|
@@ -35,8 +35,6 @@ class DirectCustomActionExecutor(CustomActionExecutor):
|
|
|
35
35
|
self.action_name = action_name
|
|
36
36
|
self.action_endpoint = action_endpoint
|
|
37
37
|
self.action_executor = self._create_action_executor()
|
|
38
|
-
self.register_actions_from_a_module()
|
|
39
|
-
self.action_executor.reload()
|
|
40
38
|
|
|
41
39
|
@staticmethod
|
|
42
40
|
@lru_cache(maxsize=1)
|
|
@@ -88,12 +86,21 @@ class DirectCustomActionExecutor(CustomActionExecutor):
|
|
|
88
86
|
|
|
89
87
|
Returns:
|
|
90
88
|
The response from the execution of the custom action.
|
|
89
|
+
|
|
90
|
+
Raises:
|
|
91
|
+
RasaException: If the actions module specified does not exist.
|
|
91
92
|
"""
|
|
92
93
|
structlogger.debug(
|
|
93
94
|
"action.direct_custom_action_executor.run",
|
|
94
95
|
action_name=self.action_name,
|
|
95
96
|
)
|
|
96
97
|
|
|
98
|
+
# Register actions module if not already registered.
|
|
99
|
+
# This is done here instead of __init__ to allow proper
|
|
100
|
+
# exception handling and avoid hanging conversations.
|
|
101
|
+
self.register_actions_from_a_module()
|
|
102
|
+
self.action_executor.reload()
|
|
103
|
+
|
|
97
104
|
tracker_state = tracker.current_state(EventVerbosity.ALL)
|
|
98
105
|
action_call = {
|
|
99
106
|
"next_action": self.action_name,
|
|
@@ -32,6 +32,7 @@ from rasa.core.channels.voice_stream.voice_channel import (
|
|
|
32
32
|
VoiceInputChannel,
|
|
33
33
|
VoiceOutputChannel,
|
|
34
34
|
)
|
|
35
|
+
from rasa.core.exceptions import AgentNotReady
|
|
35
36
|
from rasa.hooks import hookimpl
|
|
36
37
|
from rasa.plugin import plugin_manager
|
|
37
38
|
from rasa.shared.core.constants import ACTION_LISTEN_NAME
|
|
@@ -199,6 +200,13 @@ class StudioChatInput(SocketIOInput, VoiceInputChannel):
|
|
|
199
200
|
metadata_key=credentials.get("metadata_key", "metadata"),
|
|
200
201
|
)
|
|
201
202
|
|
|
203
|
+
async def emit(self, event: str, data: Dict, room: str) -> None:
|
|
204
|
+
"""Emits an event to the websocket."""
|
|
205
|
+
if not self.sio:
|
|
206
|
+
structlogger.error("studio_chat.emit.sio_not_initialized")
|
|
207
|
+
return
|
|
208
|
+
await self.sio.emit(event, data, room=room)
|
|
209
|
+
|
|
202
210
|
def _register_tracker_update_hook(self) -> None:
|
|
203
211
|
plugin_manager().register(StudioTrackerUpdatePlugin(self))
|
|
204
212
|
|
|
@@ -208,10 +216,7 @@ class StudioChatInput(SocketIOInput, VoiceInputChannel):
|
|
|
208
216
|
|
|
209
217
|
async def publish_tracker_update(self, sender_id: str, tracker_dump: Dict) -> None:
|
|
210
218
|
"""Publishes a tracker update notification to the websocket."""
|
|
211
|
-
|
|
212
|
-
structlogger.error("studio_chat.on_tracker_updated.sio_not_initialized")
|
|
213
|
-
return
|
|
214
|
-
await self.sio.emit("tracker", tracker_dump, room=sender_id)
|
|
219
|
+
await self.emit("tracker", tracker_dump, room=sender_id)
|
|
215
220
|
|
|
216
221
|
async def on_message_proxy(
|
|
217
222
|
self,
|
|
@@ -224,8 +229,15 @@ class StudioChatInput(SocketIOInput, VoiceInputChannel):
|
|
|
224
229
|
"""
|
|
225
230
|
await on_new_message(message)
|
|
226
231
|
|
|
227
|
-
if not self.agent:
|
|
232
|
+
if not self.agent or not self.agent.is_ready():
|
|
228
233
|
structlogger.error("studio_chat.on_message_proxy.agent_not_initialized")
|
|
234
|
+
await self.emit_error(
|
|
235
|
+
"The Rasa Pro model could not be loaded. "
|
|
236
|
+
"Please check the training and deployment logs "
|
|
237
|
+
"for more information.",
|
|
238
|
+
message.sender_id,
|
|
239
|
+
AgentNotReady("The Rasa Pro model could not be loaded."),
|
|
240
|
+
)
|
|
229
241
|
return
|
|
230
242
|
|
|
231
243
|
tracker = await self.agent.tracker_store.retrieve(message.sender_id)
|
|
@@ -235,6 +247,17 @@ class StudioChatInput(SocketIOInput, VoiceInputChannel):
|
|
|
235
247
|
|
|
236
248
|
await self.on_tracker_updated(tracker)
|
|
237
249
|
|
|
250
|
+
async def emit_error(self, message: str, room: str, e: Exception) -> None:
|
|
251
|
+
await self.emit(
|
|
252
|
+
"error",
|
|
253
|
+
{
|
|
254
|
+
"message": message,
|
|
255
|
+
"error": str(e),
|
|
256
|
+
"exception": str(type(e).__name__),
|
|
257
|
+
},
|
|
258
|
+
room=room,
|
|
259
|
+
)
|
|
260
|
+
|
|
238
261
|
async def handle_tracker_update(self, sid: str, data: Dict) -> None:
|
|
239
262
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
240
263
|
|
|
@@ -251,21 +274,41 @@ class StudioChatInput(SocketIOInput, VoiceInputChannel):
|
|
|
251
274
|
structlogger.error("studio_chat.sio.domain_not_initialized")
|
|
252
275
|
return None
|
|
253
276
|
|
|
254
|
-
|
|
255
|
-
tracker = DialogueStateTracker.from_dict(
|
|
256
|
-
data["sender_id"], data["events"], domain.slots
|
|
257
|
-
)
|
|
258
|
-
|
|
259
|
-
# will override an existing tracker with the same id!
|
|
260
|
-
await self.agent.tracker_store.save(tracker)
|
|
277
|
+
tracker: Optional[DialogueStateTracker] = None
|
|
261
278
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
279
|
+
async with self.agent.lock_store.lock(data["sender_id"]):
|
|
280
|
+
try:
|
|
281
|
+
tracker = DialogueStateTracker.from_dict(
|
|
282
|
+
data["sender_id"], data["events"], domain.slots
|
|
283
|
+
)
|
|
265
284
|
|
|
266
|
-
|
|
285
|
+
# will override an existing tracker with the same id!
|
|
267
286
|
await self.agent.tracker_store.save(tracker)
|
|
268
287
|
|
|
288
|
+
processor = self.agent.processor
|
|
289
|
+
if processor and does_need_action_prediction(tracker):
|
|
290
|
+
output_channel = self.get_output_channel()
|
|
291
|
+
|
|
292
|
+
await processor._run_prediction_loop(output_channel, tracker)
|
|
293
|
+
await self.agent.tracker_store.save(tracker)
|
|
294
|
+
except Exception as e:
|
|
295
|
+
structlogger.error(
|
|
296
|
+
"studio_chat.sio.handle_tracker_update.error",
|
|
297
|
+
error=e,
|
|
298
|
+
sender_id=data["sender_id"],
|
|
299
|
+
)
|
|
300
|
+
await self.emit_error(
|
|
301
|
+
"An error occurred while updating the conversation.",
|
|
302
|
+
data["sender_id"],
|
|
303
|
+
e,
|
|
304
|
+
)
|
|
305
|
+
|
|
306
|
+
if not tracker:
|
|
307
|
+
# in case the tracker couldn't be updated, we retrieve the prior
|
|
308
|
+
# version and use that to populate the update
|
|
309
|
+
tracker = await self.agent.tracker_store.get_or_create_tracker(
|
|
310
|
+
data["sender_id"]
|
|
311
|
+
)
|
|
269
312
|
await self.on_tracker_updated(tracker)
|
|
270
313
|
|
|
271
314
|
def channel_bytes_to_rasa_audio_bytes(self, input_bytes: bytes) -> RasaAudioBytes:
|
|
@@ -275,7 +318,7 @@ class StudioChatInput(SocketIOInput, VoiceInputChannel):
|
|
|
275
318
|
async def collect_call_parameters(
|
|
276
319
|
self, channel_websocket: "Websocket"
|
|
277
320
|
) -> Optional[CallParameters]:
|
|
278
|
-
"""Voice method to collect call parameters"""
|
|
321
|
+
"""Voice method to collect call parameters."""
|
|
279
322
|
session_id = channel_websocket.session_id
|
|
280
323
|
return CallParameters(session_id, "local", "local", stream_id=session_id)
|
|
281
324
|
|
|
@@ -305,7 +348,7 @@ class StudioChatInput(SocketIOInput, VoiceInputChannel):
|
|
|
305
348
|
def create_output_channel(
|
|
306
349
|
self, voice_websocket: "Websocket", tts_engine: TTSEngine
|
|
307
350
|
) -> VoiceOutputChannel:
|
|
308
|
-
"""Create a voice output channel"""
|
|
351
|
+
"""Create a voice output channel."""
|
|
309
352
|
return StudioVoiceOutputChannel(
|
|
310
353
|
voice_websocket,
|
|
311
354
|
tts_engine,
|
|
@@ -225,8 +225,10 @@ class ContextualResponseRephraser(
|
|
|
225
225
|
|
|
226
226
|
@measure_llm_latency
|
|
227
227
|
async def _generate_llm_response(self, prompt: str) -> Optional[LLMResponse]:
|
|
228
|
-
"""Use LLM to generate a response
|
|
229
|
-
|
|
228
|
+
"""Use LLM to generate a response.
|
|
229
|
+
|
|
230
|
+
Returns an LLMResponse object containing both the generated text
|
|
231
|
+
(choices) and metadata.
|
|
230
232
|
|
|
231
233
|
Args:
|
|
232
234
|
prompt: The prompt to send to the LLM.
|
|
@@ -412,12 +414,9 @@ class ContextualResponseRephraser(
|
|
|
412
414
|
Returns:
|
|
413
415
|
The generated response.
|
|
414
416
|
"""
|
|
415
|
-
|
|
416
|
-
stack_context = tracker.stack.current_context()
|
|
417
|
-
templated_response = self.generate_from_slots(
|
|
417
|
+
templated_response = await super().generate(
|
|
418
418
|
utter_action=utter_action,
|
|
419
|
-
|
|
420
|
-
stack_context=stack_context,
|
|
419
|
+
tracker=tracker,
|
|
421
420
|
output_channel=output_channel,
|
|
422
421
|
**kwargs,
|
|
423
422
|
)
|
rasa/core/nlg/generator.py
CHANGED
|
@@ -6,6 +6,8 @@ from pypred import Predicate
|
|
|
6
6
|
|
|
7
7
|
import rasa.shared.utils.common
|
|
8
8
|
import rasa.shared.utils.io
|
|
9
|
+
from rasa.core.nlg.translate import has_translation
|
|
10
|
+
from rasa.engine.language import Language
|
|
9
11
|
from rasa.shared.constants import CHANNEL, RESPONSE_CONDITION
|
|
10
12
|
from rasa.shared.core.domain import Domain
|
|
11
13
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
@@ -131,11 +133,23 @@ class ResponseVariationFilter:
|
|
|
131
133
|
|
|
132
134
|
return True
|
|
133
135
|
|
|
136
|
+
def _filter_by_language(
|
|
137
|
+
self, responses: List[Dict[Text, Any]], language: Optional[Language] = None
|
|
138
|
+
) -> List[Dict[Text, Any]]:
|
|
139
|
+
if not language:
|
|
140
|
+
return responses
|
|
141
|
+
|
|
142
|
+
if filtered := [r for r in responses if has_translation(r, language)]:
|
|
143
|
+
return filtered
|
|
144
|
+
# if no translation is found, return the original response variations
|
|
145
|
+
return responses
|
|
146
|
+
|
|
134
147
|
def responses_for_utter_action(
|
|
135
148
|
self,
|
|
136
149
|
utter_action: Text,
|
|
137
150
|
output_channel: Text,
|
|
138
151
|
filled_slots: Dict[Text, Any],
|
|
152
|
+
language: Optional[Language] = None,
|
|
139
153
|
) -> List[Dict[Text, Any]]:
|
|
140
154
|
"""Returns array of responses that fit the channel, action and condition."""
|
|
141
155
|
# filter responses without a condition
|
|
@@ -176,16 +190,16 @@ class ResponseVariationFilter:
|
|
|
176
190
|
)
|
|
177
191
|
|
|
178
192
|
if conditional_channel:
|
|
179
|
-
return conditional_channel
|
|
193
|
+
return self._filter_by_language(conditional_channel, language)
|
|
180
194
|
|
|
181
195
|
if default_channel:
|
|
182
|
-
return default_channel
|
|
196
|
+
return self._filter_by_language(default_channel, language)
|
|
183
197
|
|
|
184
198
|
if conditional_no_channel:
|
|
185
|
-
return conditional_no_channel
|
|
199
|
+
return self._filter_by_language(conditional_no_channel, language)
|
|
186
200
|
|
|
187
201
|
if default_no_channel:
|
|
188
|
-
return default_no_channel
|
|
202
|
+
return self._filter_by_language(default_no_channel, language)
|
|
189
203
|
|
|
190
204
|
# if there is no response variation selected,
|
|
191
205
|
# return the internal error response to prevent
|
|
@@ -198,7 +212,9 @@ class ResponseVariationFilter:
|
|
|
198
212
|
f"a default variation and that all the conditions are valid. "
|
|
199
213
|
f"Returning the internal error response.",
|
|
200
214
|
)
|
|
201
|
-
return self.
|
|
215
|
+
return self._filter_by_language(
|
|
216
|
+
self.responses.get("utter_internal_error_rasa", []), language
|
|
217
|
+
)
|
|
202
218
|
|
|
203
219
|
def get_response_variation_id(
|
|
204
220
|
self,
|
rasa/core/nlg/response.py
CHANGED
|
@@ -5,8 +5,11 @@ from typing import Any, Dict, List, Optional, Text
|
|
|
5
5
|
from rasa.core.constants import DEFAULT_TEMPLATE_ENGINE, TEMPLATE_ENGINE_CONFIG_KEY
|
|
6
6
|
from rasa.core.nlg import interpolator
|
|
7
7
|
from rasa.core.nlg.generator import NaturalLanguageGenerator, ResponseVariationFilter
|
|
8
|
-
from rasa.
|
|
8
|
+
from rasa.core.nlg.translate import get_translated_buttons, get_translated_text
|
|
9
|
+
from rasa.engine.language import Language
|
|
10
|
+
from rasa.shared.constants import BUTTONS, RESPONSE_CONDITION, TEXT
|
|
9
11
|
from rasa.shared.core.domain import RESPONSE_KEYS_TO_INTERPOLATE
|
|
12
|
+
from rasa.shared.core.flows.constants import KEY_TRANSLATION
|
|
10
13
|
from rasa.shared.core.trackers import DialogueStateTracker
|
|
11
14
|
from rasa.shared.nlu.constants import METADATA
|
|
12
15
|
|
|
@@ -30,7 +33,11 @@ class TemplatedNaturalLanguageGenerator(NaturalLanguageGenerator):
|
|
|
30
33
|
|
|
31
34
|
# noinspection PyUnusedLocal
|
|
32
35
|
def _random_response_for(
|
|
33
|
-
self,
|
|
36
|
+
self,
|
|
37
|
+
utter_action: Text,
|
|
38
|
+
output_channel: Text,
|
|
39
|
+
filled_slots: Dict[Text, Any],
|
|
40
|
+
language: Optional[Language] = None,
|
|
34
41
|
) -> Optional[Dict[Text, Any]]:
|
|
35
42
|
"""Select random response for the utter action from available ones.
|
|
36
43
|
|
|
@@ -42,7 +49,7 @@ class TemplatedNaturalLanguageGenerator(NaturalLanguageGenerator):
|
|
|
42
49
|
if utter_action in self.responses:
|
|
43
50
|
response_filter = ResponseVariationFilter(self.responses)
|
|
44
51
|
suitable_responses = response_filter.responses_for_utter_action(
|
|
45
|
-
utter_action, output_channel, filled_slots
|
|
52
|
+
utter_action, output_channel, filled_slots, language
|
|
46
53
|
)
|
|
47
54
|
|
|
48
55
|
if suitable_responses:
|
|
@@ -75,9 +82,36 @@ class TemplatedNaturalLanguageGenerator(NaturalLanguageGenerator):
|
|
|
75
82
|
"""Generate a response for the requested utter action."""
|
|
76
83
|
filled_slots = tracker.current_slot_values()
|
|
77
84
|
stack_context = tracker.stack.current_context()
|
|
78
|
-
|
|
79
|
-
utter_action,
|
|
85
|
+
response = self.generate_from_slots(
|
|
86
|
+
utter_action,
|
|
87
|
+
filled_slots,
|
|
88
|
+
stack_context,
|
|
89
|
+
output_channel,
|
|
90
|
+
tracker.current_language,
|
|
91
|
+
**kwargs,
|
|
80
92
|
)
|
|
93
|
+
if response is not None:
|
|
94
|
+
return self.translate_response(response, tracker.current_language)
|
|
95
|
+
return None
|
|
96
|
+
|
|
97
|
+
def translate_response(
|
|
98
|
+
self, response: Dict[Text, Any], language: Optional[Language] = None
|
|
99
|
+
) -> Dict[Text, Any]:
|
|
100
|
+
message_copy = copy.deepcopy(response)
|
|
101
|
+
|
|
102
|
+
text = get_translated_text(
|
|
103
|
+
text=message_copy.pop(TEXT, None),
|
|
104
|
+
translation=message_copy.pop(KEY_TRANSLATION, {}),
|
|
105
|
+
language=language,
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
buttons = get_translated_buttons(
|
|
109
|
+
buttons=message_copy.pop(BUTTONS, None), language=language
|
|
110
|
+
)
|
|
111
|
+
message_copy[TEXT] = text
|
|
112
|
+
if buttons:
|
|
113
|
+
message_copy[BUTTONS] = buttons
|
|
114
|
+
return message_copy
|
|
81
115
|
|
|
82
116
|
def generate_from_slots(
|
|
83
117
|
self,
|
|
@@ -85,12 +119,15 @@ class TemplatedNaturalLanguageGenerator(NaturalLanguageGenerator):
|
|
|
85
119
|
filled_slots: Dict[Text, Any],
|
|
86
120
|
stack_context: Dict[Text, Any],
|
|
87
121
|
output_channel: Text,
|
|
122
|
+
language: Optional[Language] = None,
|
|
88
123
|
**kwargs: Any,
|
|
89
124
|
) -> Optional[Dict[Text, Any]]:
|
|
90
125
|
"""Generate a response for the requested utter action."""
|
|
91
126
|
# Fetching a random response for the passed utter action
|
|
92
127
|
r = copy.deepcopy(
|
|
93
|
-
self._random_response_for(
|
|
128
|
+
self._random_response_for(
|
|
129
|
+
utter_action, output_channel, filled_slots, language
|
|
130
|
+
)
|
|
94
131
|
)
|
|
95
132
|
# Filling the slots in the response with placeholders and returning the response
|
|
96
133
|
if r is not None:
|
rasa/core/nlg/translate.py
CHANGED
|
@@ -23,6 +23,14 @@ def get_translated_text(
|
|
|
23
23
|
return translation.get(language_code, text)
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
def has_translation(
|
|
27
|
+
message: Dict[Text, Any], language: Optional[Language] = None
|
|
28
|
+
) -> bool:
|
|
29
|
+
"""Check if the message has a translation for the given language."""
|
|
30
|
+
language_code = language.code if language else None
|
|
31
|
+
return language_code in message.get(KEY_TRANSLATION, {})
|
|
32
|
+
|
|
33
|
+
|
|
26
34
|
def get_translated_buttons(
|
|
27
35
|
buttons: Optional[List[Dict[Text, Any]]], language: Optional[Language] = None
|
|
28
36
|
) -> Optional[List[Dict[Text, Any]]]:
|
|
@@ -5,12 +5,12 @@ mapping:
|
|
|
5
5
|
sequence:
|
|
6
6
|
- type: map
|
|
7
7
|
mapping:
|
|
8
|
-
regex;(^[a-zA-Z_]+[a-zA-Z0-9_]*$):
|
|
8
|
+
regex;(^[a-zA-Z_]+[a-zA-Z0-9_\-]*$):
|
|
9
9
|
type: "seq"
|
|
10
10
|
sequence:
|
|
11
11
|
- type: map
|
|
12
12
|
mapping:
|
|
13
|
-
regex;(^[a-zA-Z_]+[a-zA-Z0-9_]*$):
|
|
13
|
+
regex;(^[a-zA-Z_]+[a-zA-Z0-9_\-]*$):
|
|
14
14
|
type: any
|
|
15
15
|
|
|
16
16
|
metadata:
|
|
@@ -129,7 +129,7 @@ mapping:
|
|
|
129
129
|
type: "seq"
|
|
130
130
|
sequence:
|
|
131
131
|
- type: "str"
|
|
132
|
-
pattern: ^[a-zA-Z_]+[a-zA-Z0-9_]*$
|
|
132
|
+
pattern: ^[a-zA-Z_]+[a-zA-Z0-9_\-]*$
|
|
133
133
|
metadata:
|
|
134
134
|
type: "str"
|
|
135
135
|
pattern: ^[a-zA-Z_]+[a-zA-Z0-9_]*$
|
|
@@ -5,12 +5,12 @@ mapping:
|
|
|
5
5
|
sequence:
|
|
6
6
|
- type: map
|
|
7
7
|
mapping:
|
|
8
|
-
regex;(^[a-zA-Z_]+[a-zA-Z0-9_]*$):
|
|
8
|
+
regex;(^[a-zA-Z_]+[a-zA-Z0-9_\-]*$):
|
|
9
9
|
type: "seq"
|
|
10
10
|
sequence:
|
|
11
11
|
- type: map
|
|
12
12
|
mapping:
|
|
13
|
-
regex;(^[a-zA-Z_]+[a-zA-Z0-9_]*$):
|
|
13
|
+
regex;(^[a-zA-Z_]+[a-zA-Z0-9_\-]*$):
|
|
14
14
|
type: any
|
|
15
15
|
|
|
16
16
|
metadata:
|
|
@@ -129,7 +129,7 @@ mapping:
|
|
|
129
129
|
type: "seq"
|
|
130
130
|
sequence:
|
|
131
131
|
- type: "str"
|
|
132
|
-
pattern: ^[a-zA-Z_]+[a-zA-Z0-9_]*$
|
|
132
|
+
pattern: ^[a-zA-Z_]+[a-zA-Z0-9_\-]*$
|
|
133
133
|
metadata:
|
|
134
134
|
type: "str"
|
|
135
135
|
pattern: ^[a-zA-Z_]+[a-zA-Z0-9_]*$
|
rasa/model_manager/model_api.py
CHANGED
|
@@ -571,7 +571,7 @@ def external_blueprint() -> Blueprint:
|
|
|
571
571
|
"""Create a blueprint for the model manager API."""
|
|
572
572
|
from rasa.core.channels.socketio import SocketBlueprint
|
|
573
573
|
|
|
574
|
-
sio = AsyncServer(async_mode="sanic", cors_allowed_origins=
|
|
574
|
+
sio = AsyncServer(async_mode="sanic", cors_allowed_origins="*")
|
|
575
575
|
bp = SocketBlueprint(sio, "", "model_api_external")
|
|
576
576
|
|
|
577
577
|
create_bridge_server(sio, running_bots)
|
|
@@ -131,6 +131,13 @@ async def create_bridge_client(
|
|
|
131
131
|
structlogger.debug("model_runner.bot_message", deployment_id=deployment_id)
|
|
132
132
|
await sio.emit("bot_message", data, room=sid)
|
|
133
133
|
|
|
134
|
+
@client.event # type: ignore[misc]
|
|
135
|
+
async def error(data: Dict[str, Any]) -> None:
|
|
136
|
+
structlogger.debug(
|
|
137
|
+
"model_runner.bot_error", deployment_id=deployment_id, data=data
|
|
138
|
+
)
|
|
139
|
+
await sio.emit("error", data, room=sid)
|
|
140
|
+
|
|
134
141
|
@client.event # type: ignore[misc]
|
|
135
142
|
async def tracker(data: Dict[str, Any]) -> None:
|
|
136
143
|
await sio.emit("tracker", json.loads(data), room=sid)
|
rasa/utils/licensing.py
CHANGED
|
@@ -20,7 +20,8 @@ from rasa.shared.utils.cli import print_error_and_exit
|
|
|
20
20
|
if typing.TYPE_CHECKING:
|
|
21
21
|
from rasa.core.tracker_stores.tracker_store import TrackerStore
|
|
22
22
|
|
|
23
|
-
LICENSE_ENV_VAR = "
|
|
23
|
+
LICENSE_ENV_VAR = "RASA_LICENSE"
|
|
24
|
+
LICENSE_ENV_VAR_LEGACY = "RASA_PRO_LICENSE"
|
|
24
25
|
ALGORITHM = "RS256"
|
|
25
26
|
# deepcode ignore HardcodedKey: This is a public key - not a security issue.
|
|
26
27
|
PUBLIC_KEY = """-----BEGIN PUBLIC KEY-----
|
|
@@ -265,12 +266,22 @@ class License:
|
|
|
265
266
|
|
|
266
267
|
def retrieve_license_from_env() -> Text:
|
|
267
268
|
"""Return the license found in the env var."""
|
|
269
|
+
# Check environment variables first
|
|
270
|
+
license_value = os.environ.get(LICENSE_ENV_VAR) or os.environ.get(
|
|
271
|
+
LICENSE_ENV_VAR_LEGACY
|
|
272
|
+
)
|
|
273
|
+
if license_value:
|
|
274
|
+
return license_value
|
|
275
|
+
|
|
276
|
+
# Fall back to .env file
|
|
268
277
|
stored_env_values = dotenv_values(".env")
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
278
|
+
license_value = stored_env_values.get(LICENSE_ENV_VAR) or stored_env_values.get(
|
|
279
|
+
LICENSE_ENV_VAR_LEGACY
|
|
280
|
+
)
|
|
281
|
+
if license_value:
|
|
282
|
+
return license_value
|
|
283
|
+
|
|
284
|
+
raise LicenseNotFoundException()
|
|
274
285
|
|
|
275
286
|
|
|
276
287
|
def is_license_expiring_soon(license: License) -> bool:
|
|
@@ -297,15 +308,15 @@ def validate_license_from_env(product_area: Text = PRODUCT_AREA) -> None:
|
|
|
297
308
|
except LicenseNotFoundException:
|
|
298
309
|
structlogger.error("license.not_found.error")
|
|
299
310
|
raise SystemExit(
|
|
300
|
-
f"A Rasa
|
|
301
|
-
f"Please set the
|
|
311
|
+
f"A Rasa license is required. "
|
|
312
|
+
f"Please set the environment variable "
|
|
302
313
|
f"`{LICENSE_ENV_VAR}` to a valid license string. "
|
|
303
314
|
)
|
|
304
315
|
except LicenseValidationException as e:
|
|
305
316
|
structlogger.error("license.validation.error", error=e)
|
|
306
317
|
raise SystemExit(
|
|
307
|
-
f"Failed to validate Rasa
|
|
308
|
-
f"which was read from
|
|
318
|
+
f"Failed to validate Rasa license "
|
|
319
|
+
f"which was read from environment variable `{LICENSE_ENV_VAR}`. "
|
|
309
320
|
f"Please ensure `{LICENSE_ENV_VAR}` is set to a valid license string. "
|
|
310
321
|
)
|
|
311
322
|
|
rasa/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: rasa-pro
|
|
3
|
-
Version: 3.13.
|
|
3
|
+
Version: 3.13.12
|
|
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
|
Keywords: nlp,machine-learning,machine-learning-library,bot,bots,botkit,rasa conversational-agents,conversational-ai,chatbot,chatbot-framework,bot-framework
|
|
6
6
|
Author: Rasa Technologies GmbH
|
|
@@ -79,18 +79,18 @@ rasa/cli/x.py,sha256=T10e6bVUx5BadZOt3JJ4T5EByiR5jJ2hv5ExXOnt9F8,6839
|
|
|
79
79
|
rasa/constants.py,sha256=ddT6MLksS96Jeav0waBMu3Z5yocBPgC695-IYE9EbXM,1389
|
|
80
80
|
rasa/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
81
81
|
rasa/core/actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
82
|
-
rasa/core/actions/action.py,sha256=
|
|
82
|
+
rasa/core/actions/action.py,sha256=Sedj_SSKgMsPgtIENeGWSpTZ6WOwdgVpT4kwRe8usKk,42787
|
|
83
83
|
rasa/core/actions/action_clean_stack.py,sha256=xUP-2ipPsPAnAiwP17c-ezmHPSrV4JSUZr-eSgPQwIs,2279
|
|
84
84
|
rasa/core/actions/action_exceptions.py,sha256=hghzXYN6VeHC-O_O7WiPesCNV86ZTkHgG90ZnQcbai8,724
|
|
85
85
|
rasa/core/actions/action_hangup.py,sha256=o5iklHG-F9IcRgWis5C6AumVXznxzAV3o9zdduhozEM,994
|
|
86
86
|
rasa/core/actions/action_repeat_bot_messages.py,sha256=T7bJH0fsxFQgbkCZZ5dnPi8v18-2X9QZZLfAHmmn7WI,3466
|
|
87
|
-
rasa/core/actions/action_run_slot_rejections.py,sha256=
|
|
87
|
+
rasa/core/actions/action_run_slot_rejections.py,sha256=RSSsPRf67kcybMdMUTd55vJt5TNTAN0OZxEqn3L1zhk,7213
|
|
88
88
|
rasa/core/actions/action_trigger_chitchat.py,sha256=krOPqCXBihxOskqmm05A4mFEm4lj4ohvzuddy7rELVQ,1084
|
|
89
89
|
rasa/core/actions/action_trigger_flow.py,sha256=IydYAGafTtoY6XSgCX124xJQhzudUg8JAICstqsV3VA,3487
|
|
90
90
|
rasa/core/actions/action_trigger_search.py,sha256=QfYqnaGRCqRYJ4msYsLAbnVYW5ija_tqhCcKIN8aEfw,1064
|
|
91
91
|
rasa/core/actions/constants.py,sha256=gfgdWmj-OJ5xTcTAS1OcXQ3dgcTiHO98NC-SGyKlTjs,161
|
|
92
92
|
rasa/core/actions/custom_action_executor.py,sha256=qafASBdM3-hByDqbkNxgXfx5yMSsJh_nB3B7x9ye0TY,6176
|
|
93
|
-
rasa/core/actions/direct_custom_actions_executor.py,sha256=
|
|
93
|
+
rasa/core/actions/direct_custom_actions_executor.py,sha256=zGHI3cXVRfyzaaGSH7VePXHQxsDAvF0iAZSEcOuM-_M,4026
|
|
94
94
|
rasa/core/actions/e2e_stub_custom_action_executor.py,sha256=D-kECC1QjVLv4owNxstW2xJPPsXTGfGepvquMeWB_ec,2282
|
|
95
95
|
rasa/core/actions/forms.py,sha256=MPGxp3vg-EgFcU5UQYqWM2tycSFIuoF6vWvNSSWPhSA,26967
|
|
96
96
|
rasa/core/actions/grpc_custom_action_executor.py,sha256=EDxdSIDA4H4Mu-QZk-pPGV2N41ZsbY8W9laV6l1WlDQ,9103
|
|
@@ -253,7 +253,7 @@ rasa/core/channels/rest.py,sha256=LWBYBdVzOz5Vv5tZCkB1QA7LxXJFTeC87CQLAi_ZGeI,73
|
|
|
253
253
|
rasa/core/channels/rocketchat.py,sha256=hajaH6549CjEYFM5jSapw1DQKBPKTXbn7cVSuZzknmI,5999
|
|
254
254
|
rasa/core/channels/slack.py,sha256=jVsTTUu9wUjukPoIsAhbee9o0QFUMCNlQHbR8LTcMBc,24406
|
|
255
255
|
rasa/core/channels/socketio.py,sha256=ZEavmx2on9AH73cuIFSGMKn1LHJhzcQVaqrFz7SH-CE,11348
|
|
256
|
-
rasa/core/channels/studio_chat.py,sha256=
|
|
256
|
+
rasa/core/channels/studio_chat.py,sha256=9UGWnOYITsahC3OV2ge8kJYrzXxLnF2TqY6VjTSqxyM,20888
|
|
257
257
|
rasa/core/channels/telegram.py,sha256=TKVknsk3U9tYeY1a8bzlhqkltWmZfGSOvrcmwa9qozc,12499
|
|
258
258
|
rasa/core/channels/twilio.py,sha256=2BTQpyx0b0yPpc0A2BHYfxLPgodrLGLs8nq6i3lVGAM,5906
|
|
259
259
|
rasa/core/channels/vier_cvg.py,sha256=5O4yx0TDQIMppvlCxTOzmPB60CA-vqQXqWQ7upfrTO0,13496
|
|
@@ -311,12 +311,12 @@ rasa/core/lock_store.py,sha256=wP_0S5bBNI0cnRPVOcGNZgD8usdzw4udT4ncP6CKy14,15443
|
|
|
311
311
|
rasa/core/migrate.py,sha256=h1dOpXxmVmZlbLVGy1yOU_Obp2KzRiOiL0iuEacA0Cg,14618
|
|
312
312
|
rasa/core/nlg/__init__.py,sha256=jZuQAhOUcxO-KqqHGqICHSY3oDeXlUiGr2trQDYfG6o,240
|
|
313
313
|
rasa/core/nlg/callback.py,sha256=lxBBZdjXHS54fn_pH_YUW8ApbFOBO-kYSY5bL4gR1p0,5218
|
|
314
|
-
rasa/core/nlg/contextual_response_rephraser.py,sha256=
|
|
315
|
-
rasa/core/nlg/generator.py,sha256=
|
|
314
|
+
rasa/core/nlg/contextual_response_rephraser.py,sha256=3sawFeW2zh4N6byhmzUDba9-JUY7z_l8qO7gUJ0QCSg,15047
|
|
315
|
+
rasa/core/nlg/generator.py,sha256=VsaxPjKgErVABiQLa9ps7fc4qwubtdYoue96ZshBnl4,11616
|
|
316
316
|
rasa/core/nlg/interpolator.py,sha256=vI2ZyeKHkHESPScCbefrcRrY6mrClI0LNwvZ1GvS5Tk,5138
|
|
317
|
-
rasa/core/nlg/response.py,sha256=
|
|
317
|
+
rasa/core/nlg/response.py,sha256=SecKyoBQjEnZr4t-Gg5fkUpkozwGT2lzswIKgD63Dac,7248
|
|
318
318
|
rasa/core/nlg/summarize.py,sha256=ZlWj7DyJSTF0SRBv73kMWS8wkPmsZgX8woZiJFkgP-c,3195
|
|
319
|
-
rasa/core/nlg/translate.py,sha256=
|
|
319
|
+
rasa/core/nlg/translate.py,sha256=ZXRvysqXGdtHBJ7x3YkW6zfmnb9DuEGHCMTL41v-M8M,2112
|
|
320
320
|
rasa/core/persistor.py,sha256=7LCZHAwCM-xrUI38aaJ5dkxJvLdJXWI1TEUKsBo4_EE,21295
|
|
321
321
|
rasa/core/policies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
322
322
|
rasa/core/policies/ensemble.py,sha256=XoHxU0jcb_io_LBOpjJffylzqtGEB7CH9ivhRyO8pDc,12960
|
|
@@ -464,7 +464,7 @@ rasa/dialogue_understanding_test/constants.py,sha256=G63FEzswDUOonTxoXQicEJwI6IC
|
|
|
464
464
|
rasa/dialogue_understanding_test/du_test_case.py,sha256=4Z5Ei21OdqN2MEHEKz-NGzzv0zuPwUkOjzNjEWQhnVA,17038
|
|
465
465
|
rasa/dialogue_understanding_test/du_test_result.py,sha256=y9U_w_5aV8bGppmUHWgbNZG-9-TQGOm2xO0w38e1eUo,19457
|
|
466
466
|
rasa/dialogue_understanding_test/du_test_runner.py,sha256=WYxtuilwX8MKVHiczWAMBLAovicxDdpR5lNmd7cs2lc,11478
|
|
467
|
-
rasa/dialogue_understanding_test/du_test_schema.yml,sha256=
|
|
467
|
+
rasa/dialogue_understanding_test/du_test_schema.yml,sha256=nxezEXfnoc-oVZXDqHRg-Yk4fkDF3t2VatRRMdSSE2o,4773
|
|
468
468
|
rasa/dialogue_understanding_test/io.py,sha256=doMboRm9G6KaxmfsOYhsa2iz8zghh4bLMa3XTIV6DC0,16250
|
|
469
469
|
rasa/dialogue_understanding_test/test_case_simulation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
470
470
|
rasa/dialogue_understanding_test/test_case_simulation/exception.py,sha256=RJV8CfoGKmfpC3d28y7IBKfmcAZSm2Vs6p0GkiCHlcc,1034
|
|
@@ -484,7 +484,7 @@ rasa/e2e_test/e2e_test_converter_prompt.jinja2,sha256=EMy-aCd7jLARHmwAuZUGT5ABnN
|
|
|
484
484
|
rasa/e2e_test/e2e_test_coverage_report.py,sha256=UGQ3np2p_gtnhl17K5y886STiX9xBn95GVuN9LGIpGY,11344
|
|
485
485
|
rasa/e2e_test/e2e_test_result.py,sha256=qVurjFC4cAWIY7rOsc-A-4nIdcnnw98TaK86-bDwI7Y,1649
|
|
486
486
|
rasa/e2e_test/e2e_test_runner.py,sha256=nNEKGopReHKYPSvhG4VRhc5wK53RsO9t3emHUqBDrcA,47979
|
|
487
|
-
rasa/e2e_test/e2e_test_schema.yml,sha256=
|
|
487
|
+
rasa/e2e_test/e2e_test_schema.yml,sha256=0WG0I3baTRc76lff3UjQ8vGRzMUoV6qcE8r9adOAlCU,5638
|
|
488
488
|
rasa/e2e_test/llm_judge_prompts/answer_relevance_prompt_template.jinja2,sha256=6Ddszg4Y6sIvhH7C1jjEAArpzke48mfCOa2KUQYbNVA,2725
|
|
489
489
|
rasa/e2e_test/llm_judge_prompts/groundedness_prompt_template.jinja2,sha256=jCgDbZvWn5fncr4zvB5UQSK1VJu9xDQtpY4B8GKtlmA,8226
|
|
490
490
|
rasa/e2e_test/pykwalify_extensions.py,sha256=OGYKIKYJXd2S0NrWknoQuijyBQaE-oMLkfV_eMRkGSM,1331
|
|
@@ -562,9 +562,9 @@ rasa/markers/validate.py,sha256=dZvMTcDK_sji9OP8JY4kUcjeIScLF93C3CKTWK8DplI,708
|
|
|
562
562
|
rasa/model.py,sha256=cAbQXvfZXBKHAj79Z0-mCy29hSSWp2KaroScgDeTfJw,3489
|
|
563
563
|
rasa/model_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
564
564
|
rasa/model_manager/config.py,sha256=8upZP4CokMBy0imiiPvINJuLW4JOQ326dPiJ041jJUI,1231
|
|
565
|
-
rasa/model_manager/model_api.py,sha256=
|
|
565
|
+
rasa/model_manager/model_api.py,sha256=uY8gC4xSwb7OxnMU0hcT5fx6bGgoTURA3r6bhpxNJdk,23855
|
|
566
566
|
rasa/model_manager/runner_service.py,sha256=CfvkmCqk-syCqTxb4u3N44WvzXuWFlpomR9SvgzIFKs,9514
|
|
567
|
-
rasa/model_manager/socket_bridge.py,sha256=
|
|
567
|
+
rasa/model_manager/socket_bridge.py,sha256=luU0EzzuM77jthUZUWobW2dMocz-TM_DGrfUSUTqozk,5554
|
|
568
568
|
rasa/model_manager/studio_jwt_auth.py,sha256=uls2QiHUlUrR3fOzZssW4UaAMJMfnPMZeV1aDmZIT0E,2645
|
|
569
569
|
rasa/model_manager/trainer_service.py,sha256=aw3tp2736fILT5bYunkERPcWR5TjjyhThBXIktJfhqU,10628
|
|
570
570
|
rasa/model_manager/utils.py,sha256=rS0ST-rJMuZOna90r_Ioz7gOkZ8r8vm4XAhzI0iUZOA,2643
|
|
@@ -818,7 +818,7 @@ rasa/utils/converter.py,sha256=H4LHpoAK7MXMmvNZG_uSn0gbccCJvHtsA2-6Zya4u6M,1656
|
|
|
818
818
|
rasa/utils/endpoints.py,sha256=jX9xSI_3KJ-NpzymyfaO-Zj-ISaWbA4ql2Kx3NulBvE,10905
|
|
819
819
|
rasa/utils/io.py,sha256=LIAdQQqUPA-V_mdpgeQzPDzA4rmsdZLyVKc8j_0Z70Y,7161
|
|
820
820
|
rasa/utils/json_utils.py,sha256=SKtJzzsIRCAgNEQiBvWDDm9euMRBgJ-TyvCi2tXHH1w,1689
|
|
821
|
-
rasa/utils/licensing.py,sha256=
|
|
821
|
+
rasa/utils/licensing.py,sha256=SP_jm0S1hpwPGh9bQaJviBL0Eu4xuwToObWTZRLaouQ,20768
|
|
822
822
|
rasa/utils/log_utils.py,sha256=QR0R5Ezs9xOaESluelqdikViIypXSWVxCPJmJM4Ir3E,5440
|
|
823
823
|
rasa/utils/mapper.py,sha256=CZiD3fu7-W-OJgoB1R8JaOg-Hq13TK20D-zGVNgbF18,7726
|
|
824
824
|
rasa/utils/ml_utils.py,sha256=y4Czr9GdRBj-a2npXU8ED2qC9bzw5olRyqQEmu5BB8k,4185
|
|
@@ -846,9 +846,9 @@ rasa/utils/train_utils.py,sha256=ClJx-6x3-h3Vt6mskacgkcCUJTMXjFPe3zAcy_DfmaU,212
|
|
|
846
846
|
rasa/utils/url_tools.py,sha256=dZ1HGkVdWTJB7zYEdwoDIrEuyX9HE5WsxKKFVsXBLE0,1218
|
|
847
847
|
rasa/utils/yaml.py,sha256=KjbZq5C94ZP7Jdsw8bYYF7HASI6K4-C_kdHfrnPLpSI,2000
|
|
848
848
|
rasa/validator.py,sha256=fhRlHQvuBkiup0FnNYmwRmqQwC3QpdCJt0TuvW4jMaI,83125
|
|
849
|
-
rasa/version.py,sha256=
|
|
850
|
-
rasa_pro-3.13.
|
|
851
|
-
rasa_pro-3.13.
|
|
852
|
-
rasa_pro-3.13.
|
|
853
|
-
rasa_pro-3.13.
|
|
854
|
-
rasa_pro-3.13.
|
|
849
|
+
rasa/version.py,sha256=3UnszRya9YXfsq3ggIAqyg0PEBNe3n1XPY7rrfVCXzE,118
|
|
850
|
+
rasa_pro-3.13.12.dist-info/METADATA,sha256=FwZnszYQiFEoggVI8pPRc-xF3IIivOUAOKYGgZ3h5jY,10551
|
|
851
|
+
rasa_pro-3.13.12.dist-info/NOTICE,sha256=7HlBoMHJY9CL2GlYSfTQ-PZsVmLmVkYmMiPlTjhuCqA,218
|
|
852
|
+
rasa_pro-3.13.12.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
|
|
853
|
+
rasa_pro-3.13.12.dist-info/entry_points.txt,sha256=ckJ2SfEyTPgBqj_I6vm_tqY9dZF_LAPJZA335Xp0Q9U,43
|
|
854
|
+
rasa_pro-3.13.12.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|