rasa-pro 3.13.0rc3__py3-none-any.whl → 3.13.1__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/inspect.py +7 -0
- rasa/cli/shell.py +6 -1
- rasa/cli/train.py +4 -0
- rasa/core/channels/voice_stream/asr/asr_engine.py +5 -1
- rasa/core/channels/voice_stream/asr/deepgram.py +5 -0
- rasa/core/channels/voice_stream/audiocodes.py +9 -4
- rasa/core/channels/voice_stream/voice_channel.py +7 -0
- rasa/core/policies/enterprise_search_policy.py +1 -1
- rasa/core/tracker_stores/auth_retry_tracker_store.py +64 -3
- rasa/core/tracker_stores/dynamo_tracker_store.py +40 -2
- rasa/core/tracker_stores/mongo_tracker_store.py +17 -0
- rasa/core/tracker_stores/redis_tracker_store.py +23 -0
- rasa/core/tracker_stores/sql_tracker_store.py +27 -0
- rasa/core/tracker_stores/tracker_store.py +36 -2
- rasa/dialogue_understanding/commands/correct_slots_command.py +0 -10
- rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml +1 -1
- rasa/dialogue_understanding/processor/command_processor.py +6 -1
- rasa/privacy/privacy_manager.py +19 -16
- rasa/shared/core/trackers.py +17 -0
- rasa/studio/upload.py +1 -0
- rasa/version.py +1 -1
- {rasa_pro-3.13.0rc3.dist-info → rasa_pro-3.13.1.dist-info}/METADATA +4 -4
- {rasa_pro-3.13.0rc3.dist-info → rasa_pro-3.13.1.dist-info}/RECORD +26 -26
- {rasa_pro-3.13.0rc3.dist-info → rasa_pro-3.13.1.dist-info}/NOTICE +0 -0
- {rasa_pro-3.13.0rc3.dist-info → rasa_pro-3.13.1.dist-info}/WHEEL +0 -0
- {rasa_pro-3.13.0rc3.dist-info → rasa_pro-3.13.1.dist-info}/entry_points.txt +0 -0
rasa/cli/inspect.py
CHANGED
|
@@ -9,6 +9,7 @@ from rasa import telemetry
|
|
|
9
9
|
from rasa.cli import SubParsersAction
|
|
10
10
|
from rasa.cli.arguments import shell as arguments
|
|
11
11
|
from rasa.core import constants
|
|
12
|
+
from rasa.core.available_endpoints import AvailableEndpoints
|
|
12
13
|
from rasa.engine.storage.local_model_storage import LocalModelStorage
|
|
13
14
|
from rasa.exceptions import ModelNotFound
|
|
14
15
|
from rasa.model import get_local_model
|
|
@@ -83,6 +84,12 @@ def inspect(args: argparse.Namespace) -> None:
|
|
|
83
84
|
|
|
84
85
|
model = get_validated_path(args.model, "model", DEFAULT_MODELS_PATH)
|
|
85
86
|
|
|
87
|
+
# Load endpoints with proper endpoint file location
|
|
88
|
+
# This will initialise the endpoints singleton properly so that
|
|
89
|
+
# it can be used safely throughout the codebase with
|
|
90
|
+
# `AvailableEndpoints.get_instance()`
|
|
91
|
+
AvailableEndpoints.get_instance(args.endpoints)
|
|
92
|
+
|
|
86
93
|
try:
|
|
87
94
|
model = get_local_model(model)
|
|
88
95
|
except ModelNotFound:
|
rasa/cli/shell.py
CHANGED
|
@@ -6,6 +6,7 @@ from typing import List
|
|
|
6
6
|
from rasa import telemetry
|
|
7
7
|
from rasa.cli import SubParsersAction
|
|
8
8
|
from rasa.cli.arguments import shell as arguments
|
|
9
|
+
from rasa.core.available_endpoints import AvailableEndpoints
|
|
9
10
|
from rasa.engine.storage.local_model_storage import LocalModelStorage
|
|
10
11
|
from rasa.exceptions import ModelNotFound
|
|
11
12
|
from rasa.model import get_local_model
|
|
@@ -105,7 +106,11 @@ def shell(args: argparse.Namespace) -> None:
|
|
|
105
106
|
from rasa.shared.constants import DEFAULT_MODELS_PATH
|
|
106
107
|
|
|
107
108
|
args.connector = "cmdline"
|
|
108
|
-
|
|
109
|
+
# Load endpoints with proper endpoint file location
|
|
110
|
+
# This will initialise the endpoints singleton properly so that
|
|
111
|
+
# it can be used safely throughout the codebase with
|
|
112
|
+
# `AvailableEndpoints.get_instance()`
|
|
113
|
+
AvailableEndpoints.get_instance(args.endpoints)
|
|
109
114
|
model = get_validated_path(args.model, "model", DEFAULT_MODELS_PATH)
|
|
110
115
|
|
|
111
116
|
try:
|
rasa/cli/train.py
CHANGED
|
@@ -112,6 +112,10 @@ def run_training(args: argparse.Namespace, can_exit: bool = False) -> Optional[T
|
|
|
112
112
|
)
|
|
113
113
|
config = rasa.cli.utils.get_validated_config(args.config, CONFIG_MANDATORY_KEYS)
|
|
114
114
|
|
|
115
|
+
# Validates and loads endpoints with proper endpoint file location
|
|
116
|
+
# This will initialise the endpoints singleton properly so that
|
|
117
|
+
# it can be used safely throughout the codebase with
|
|
118
|
+
# `AvailableEndpoints.get_instance()`
|
|
115
119
|
_check_nlg_endpoint_validity(args.endpoints)
|
|
116
120
|
|
|
117
121
|
training_files = [
|
|
@@ -26,7 +26,7 @@ logger = structlog.get_logger(__name__)
|
|
|
26
26
|
|
|
27
27
|
@dataclass
|
|
28
28
|
class ASREngineConfig(MergeableConfig):
|
|
29
|
-
|
|
29
|
+
keep_alive_interval: int = 5 # seconds
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class ASREngine(Generic[T]):
|
|
@@ -93,3 +93,7 @@ class ASREngine(Generic[T]):
|
|
|
93
93
|
def get_default_config() -> T:
|
|
94
94
|
"""Get the default config for this component."""
|
|
95
95
|
raise NotImplementedError
|
|
96
|
+
|
|
97
|
+
async def send_keep_alive(self) -> None:
|
|
98
|
+
"""Send a keep-alive message to the ASR system if supported."""
|
|
99
|
+
pass
|
|
@@ -145,3 +145,8 @@ class DeepgramASR(ASREngine[DeepgramASRConfig]):
|
|
|
145
145
|
def concatenate_transcripts(t1: str, t2: str) -> str:
|
|
146
146
|
"""Concatenate two transcripts making sure there is a space between them."""
|
|
147
147
|
return (t1.strip() + " " + t2.strip()).strip()
|
|
148
|
+
|
|
149
|
+
async def send_keep_alive(self) -> None:
|
|
150
|
+
"""Send a keep-alive message to the Deepgram websocket connection."""
|
|
151
|
+
if self.asr_socket is not None:
|
|
152
|
+
await self.asr_socket.send(json.dumps({"type": "KeepAlive"}))
|
|
@@ -81,6 +81,12 @@ class AudiocodesVoiceOutputChannel(VoiceOutputChannel):
|
|
|
81
81
|
logger.debug("Sending start marker", stream_id=self._get_stream_id())
|
|
82
82
|
await self.voice_websocket.send(media_message)
|
|
83
83
|
|
|
84
|
+
# This should be set when the bot actually starts speaking
|
|
85
|
+
# however, Audiocodes does not have an event to indicate that.
|
|
86
|
+
# This is an approximation, as the bot will be sent the audio chunks next
|
|
87
|
+
# which are played to the user immediately.
|
|
88
|
+
call_state.is_bot_speaking = True # type: ignore[attr-defined]
|
|
89
|
+
|
|
84
90
|
async def send_intermediate_marker(self, recipient_id: str) -> None:
|
|
85
91
|
"""Audiocodes doesn't need intermediate markers, so do nothing."""
|
|
86
92
|
pass
|
|
@@ -170,21 +176,20 @@ class AudiocodesVoiceInputChannel(VoiceInputChannel):
|
|
|
170
176
|
if data["type"] == "activities":
|
|
171
177
|
activities = data["activities"]
|
|
172
178
|
for activity in activities:
|
|
173
|
-
logger.debug("audiocodes_stream.activity", data=activity)
|
|
174
179
|
if activity["name"] == "start":
|
|
175
|
-
#
|
|
180
|
+
# handled in collect_call_parameters
|
|
176
181
|
pass
|
|
177
182
|
elif activity["name"] == "dtmf":
|
|
178
|
-
|
|
183
|
+
logger.info("audiocodes_stream.dtmf_ignored", data=activity)
|
|
179
184
|
pass
|
|
180
185
|
elif activity["name"] == "playFinished":
|
|
181
186
|
logger.debug("audiocodes_stream.playFinished", data=activity)
|
|
187
|
+
call_state.is_bot_speaking = False # type: ignore[attr-defined]
|
|
182
188
|
if call_state.should_hangup:
|
|
183
189
|
logger.info("audiocodes_stream.hangup")
|
|
184
190
|
self._send_hangup(ws, data)
|
|
185
191
|
# the conversation should continue until
|
|
186
192
|
# we receive a end message from audiocodes
|
|
187
|
-
pass
|
|
188
193
|
else:
|
|
189
194
|
logger.warning("audiocodes_stream.unknown_activity", data=activity)
|
|
190
195
|
elif data["type"] == "userStream.start":
|
|
@@ -468,10 +468,17 @@ class VoiceInputChannel(InputChannel):
|
|
|
468
468
|
call_parameters,
|
|
469
469
|
)
|
|
470
470
|
|
|
471
|
+
async def asr_keep_alive_task() -> None:
|
|
472
|
+
interval = getattr(asr_engine.config, "keep_alive_interval", 5)
|
|
473
|
+
while True:
|
|
474
|
+
await asyncio.sleep(interval)
|
|
475
|
+
await asr_engine.send_keep_alive()
|
|
476
|
+
|
|
471
477
|
tasks = [
|
|
472
478
|
asyncio.create_task(consume_audio_bytes()),
|
|
473
479
|
asyncio.create_task(receive_asr_events()),
|
|
474
480
|
asyncio.create_task(handle_asr_events()),
|
|
481
|
+
asyncio.create_task(asr_keep_alive_task()),
|
|
475
482
|
]
|
|
476
483
|
await asyncio.wait(
|
|
477
484
|
tasks,
|
|
@@ -679,7 +679,7 @@ class EnterpriseSearchPolicy(LLMHealthCheckMixin, EmbeddingsHealthCheckMixin, Po
|
|
|
679
679
|
answer_relevant = not _ENTERPRISE_SEARCH_ANSWER_NOT_RELEVANT_PATTERN.search(
|
|
680
680
|
llm_answer
|
|
681
681
|
)
|
|
682
|
-
|
|
682
|
+
|
|
683
683
|
return _RelevancyCheckResponse(
|
|
684
684
|
answer=llm_answer if answer_relevant else None,
|
|
685
685
|
relevant=answer_relevant,
|
|
@@ -92,6 +92,29 @@ class AuthRetryTrackerStore(TrackerStore):
|
|
|
92
92
|
)
|
|
93
93
|
return None
|
|
94
94
|
|
|
95
|
+
async def retrieve_full_tracker(
|
|
96
|
+
self, sender_id: Text
|
|
97
|
+
) -> Optional["DialogueStateTracker"]:
|
|
98
|
+
"""Retries retrieving the full tracker if it fails."""
|
|
99
|
+
# add + 1 to retries because the retries are additional to the first attempt
|
|
100
|
+
for _ in range(self.retries + 1):
|
|
101
|
+
try:
|
|
102
|
+
return await self._tracker_store.retrieve_full_tracker(sender_id)
|
|
103
|
+
except Exception as e:
|
|
104
|
+
logger.warning(
|
|
105
|
+
f"Failed to retrieve full tracker for {sender_id}. Retrying...",
|
|
106
|
+
exc_info=e,
|
|
107
|
+
)
|
|
108
|
+
self._tracker_store = self.recreate_tracker_store(
|
|
109
|
+
self.domain, self.event_broker
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
logger.error(
|
|
113
|
+
f"Failed to retrieve full tracker for {sender_id} "
|
|
114
|
+
f"after {self.retries} retries."
|
|
115
|
+
)
|
|
116
|
+
return None
|
|
117
|
+
|
|
95
118
|
async def save(self, tracker: "DialogueStateTracker") -> None:
|
|
96
119
|
"""Retries saving the tracker if it fails."""
|
|
97
120
|
# add + 1 to retries because the retries are additional to the first attempt
|
|
@@ -120,6 +143,44 @@ class AuthRetryTrackerStore(TrackerStore):
|
|
|
120
143
|
endpoint_config = EndpointResolver.update_config(self.endpoint_config)
|
|
121
144
|
return create_tracker_store(endpoint_config, domain, event_broker)
|
|
122
145
|
|
|
123
|
-
async def delete(self, sender_id:
|
|
124
|
-
"""
|
|
125
|
-
|
|
146
|
+
async def delete(self, sender_id: str) -> None:
|
|
147
|
+
"""Retries deleting the tracker for the given sender_id."""
|
|
148
|
+
# add + 1 to retries because the retries are additional to the first attempt
|
|
149
|
+
for _ in range(self.retries + 1):
|
|
150
|
+
try:
|
|
151
|
+
await self._tracker_store.delete(sender_id)
|
|
152
|
+
break
|
|
153
|
+
except Exception as e:
|
|
154
|
+
logger.warning(
|
|
155
|
+
f"Failed to delete tracker for {sender_id}. Retrying...",
|
|
156
|
+
exc_info=e,
|
|
157
|
+
)
|
|
158
|
+
self._tracker_store = self.recreate_tracker_store(
|
|
159
|
+
self.domain, self.event_broker
|
|
160
|
+
)
|
|
161
|
+
else:
|
|
162
|
+
logger.error(
|
|
163
|
+
f"Failed to delete tracker for {sender_id} "
|
|
164
|
+
f"after {self.retries} retries."
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
async def update(self, tracker: DialogueStateTracker) -> None:
|
|
168
|
+
"""Retries replacing the tracker if it fails."""
|
|
169
|
+
# add + 1 to retries because the retries are additional to the first attempt
|
|
170
|
+
for _ in range(self.retries + 1):
|
|
171
|
+
try:
|
|
172
|
+
await self._tracker_store.update(tracker)
|
|
173
|
+
break
|
|
174
|
+
except Exception as e:
|
|
175
|
+
logger.warning(
|
|
176
|
+
f"Failed to replace tracker for {tracker.sender_id}. Retrying...",
|
|
177
|
+
exc_info=e,
|
|
178
|
+
)
|
|
179
|
+
self._tracker_store = self.recreate_tracker_store(
|
|
180
|
+
self.domain, self.event_broker
|
|
181
|
+
)
|
|
182
|
+
else:
|
|
183
|
+
logger.error(
|
|
184
|
+
f"Failed to replace tracker for {tracker.sender_id} "
|
|
185
|
+
f"after {self.retries} retries."
|
|
186
|
+
)
|
|
@@ -109,7 +109,35 @@ class DynamoTrackerStore(TrackerStore, SerializedTrackerAsDict):
|
|
|
109
109
|
await self.stream_events(tracker)
|
|
110
110
|
serialized = self.serialise_tracker(tracker)
|
|
111
111
|
|
|
112
|
-
self.
|
|
112
|
+
full_tracker = await self.retrieve_full_tracker(tracker.sender_id)
|
|
113
|
+
if full_tracker is None:
|
|
114
|
+
self.db.put_item(Item=serialized)
|
|
115
|
+
return None
|
|
116
|
+
|
|
117
|
+
# return the latest events since the last user message
|
|
118
|
+
new_tracker = DialogueStateTracker.from_dict(
|
|
119
|
+
serialized["sender_id"], events_as_dict=serialized["events"]
|
|
120
|
+
)
|
|
121
|
+
new_events = new_tracker.get_last_turn_events()
|
|
122
|
+
new_serialized_events = [event.as_dict() for event in new_events]
|
|
123
|
+
|
|
124
|
+
# we need to save the full tracker if it is a new tracker
|
|
125
|
+
# without events following a user message
|
|
126
|
+
if not new_serialized_events:
|
|
127
|
+
self.db.put_item(Item=serialized)
|
|
128
|
+
return None
|
|
129
|
+
|
|
130
|
+
# append new events to the existing tracker
|
|
131
|
+
self.db.update_item(
|
|
132
|
+
Key={"sender_id": tracker.sender_id},
|
|
133
|
+
UpdateExpression="SET events = list_append(if_not_exists(events, :empty_list), :events)", # noqa: E501
|
|
134
|
+
ExpressionAttributeValues={
|
|
135
|
+
":events": new_serialized_events,
|
|
136
|
+
":empty_list": [],
|
|
137
|
+
},
|
|
138
|
+
ReturnValues="UPDATED_NEW",
|
|
139
|
+
)
|
|
140
|
+
return None
|
|
113
141
|
|
|
114
142
|
async def delete(self, sender_id: Text) -> None:
|
|
115
143
|
"""Delete tracker for the given sender_id."""
|
|
@@ -181,7 +209,7 @@ class DynamoTrackerStore(TrackerStore, SerializedTrackerAsDict):
|
|
|
181
209
|
events = rasa.utils.json_utils.replace_decimals_with_floats(
|
|
182
210
|
dialogue["events"]
|
|
183
211
|
)
|
|
184
|
-
events_with_floats
|
|
212
|
+
events_with_floats.extend(events)
|
|
185
213
|
|
|
186
214
|
if self.domain is None:
|
|
187
215
|
slots = []
|
|
@@ -216,3 +244,13 @@ class DynamoTrackerStore(TrackerStore, SerializedTrackerAsDict):
|
|
|
216
244
|
sender_ids.extend([i["sender_id"] for i in response["Items"]])
|
|
217
245
|
|
|
218
246
|
return sender_ids
|
|
247
|
+
|
|
248
|
+
async def update(self, tracker: DialogueStateTracker) -> None:
|
|
249
|
+
"""Overwrites the tracker for the given sender_id."""
|
|
250
|
+
serialized = self.serialise_tracker(tracker)
|
|
251
|
+
self.db.put_item(Item=serialized)
|
|
252
|
+
|
|
253
|
+
structlogger.info(
|
|
254
|
+
"dynamo_tracker_store.replace.replaced_tracker",
|
|
255
|
+
sender_id=tracker.sender_id,
|
|
256
|
+
)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import itertools
|
|
4
|
+
from datetime import datetime
|
|
4
5
|
from typing import Any, Dict, Iterable, Iterator, List, Optional, Text
|
|
5
6
|
|
|
6
7
|
import structlog
|
|
@@ -204,3 +205,19 @@ class MongoTrackerStore(TrackerStore, SerializedTrackerAsText):
|
|
|
204
205
|
async def keys(self) -> Iterable[Text]:
|
|
205
206
|
"""Returns sender_ids of the Mongo Tracker Store."""
|
|
206
207
|
return [c["sender_id"] for c in self.conversations.find()]
|
|
208
|
+
|
|
209
|
+
async def update(self, tracker: DialogueStateTracker) -> None:
|
|
210
|
+
"""Overwrites the tracker for the given sender_id."""
|
|
211
|
+
self.conversations.replace_one(
|
|
212
|
+
{"sender_id": tracker.sender_id},
|
|
213
|
+
tracker.current_state(EventVerbosity.ALL),
|
|
214
|
+
upsert=True,
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
first_event_timestamp = str(datetime.fromtimestamp(tracker.events[0].timestamp))
|
|
218
|
+
|
|
219
|
+
structlogger.info(
|
|
220
|
+
"redis_tracker_store.update.updated_tracker",
|
|
221
|
+
sender_id=tracker.sender_id,
|
|
222
|
+
first_event_timestamp=first_event_timestamp,
|
|
223
|
+
)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
from datetime import datetime
|
|
3
4
|
from typing import Any, Dict, Iterable, Optional, Text
|
|
4
5
|
|
|
5
6
|
import structlog
|
|
@@ -227,3 +228,25 @@ class RedisTrackerStore(TrackerStore, SerializedTrackerAsText):
|
|
|
227
228
|
merged.update(new_event)
|
|
228
229
|
|
|
229
230
|
return merged
|
|
231
|
+
|
|
232
|
+
async def update(self, tracker: DialogueStateTracker) -> None:
|
|
233
|
+
"""Overwrites the tracker for the given sender_id."""
|
|
234
|
+
serialised_tracker = self.serialise_tracker(tracker)
|
|
235
|
+
|
|
236
|
+
# if the sender_id starts with the key prefix, we remove it
|
|
237
|
+
# this is used to avoid storing the prefix twice
|
|
238
|
+
sender_id = tracker.sender_id
|
|
239
|
+
if sender_id.startswith(self.key_prefix):
|
|
240
|
+
sender_id = sender_id[len(self.key_prefix) :]
|
|
241
|
+
|
|
242
|
+
self.red.set(
|
|
243
|
+
self.key_prefix + sender_id, serialised_tracker, ex=self.record_exp
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
first_event_timestamp = str(datetime.fromtimestamp(tracker.events[0].timestamp))
|
|
247
|
+
|
|
248
|
+
structlogger.info(
|
|
249
|
+
"redis_tracker_store.update.updated_tracker",
|
|
250
|
+
sender_id=tracker.sender_id,
|
|
251
|
+
first_event_timestamp=first_event_timestamp,
|
|
252
|
+
)
|
|
@@ -4,6 +4,7 @@ import contextlib
|
|
|
4
4
|
import itertools
|
|
5
5
|
import json
|
|
6
6
|
import os
|
|
7
|
+
from datetime import datetime
|
|
7
8
|
from time import sleep
|
|
8
9
|
from typing import (
|
|
9
10
|
TYPE_CHECKING,
|
|
@@ -553,3 +554,29 @@ class SQLTrackerStore(TrackerStore, SerializedTrackerAsText):
|
|
|
553
554
|
return itertools.islice(
|
|
554
555
|
tracker.events, number_of_events_since_last_session, len(tracker.events)
|
|
555
556
|
)
|
|
557
|
+
|
|
558
|
+
async def update(self, tracker_to_keep: DialogueStateTracker) -> None:
|
|
559
|
+
"""Overwrite the tracker in the SQL tracker store."""
|
|
560
|
+
with self.session_scope() as session:
|
|
561
|
+
# Delete events whose timestamp are older
|
|
562
|
+
# than the first event of the tracker to keep.
|
|
563
|
+
statement = sa.delete(self.SQLEvent).where(
|
|
564
|
+
self.SQLEvent.sender_id == tracker_to_keep.sender_id,
|
|
565
|
+
self.SQLEvent.timestamp < tracker_to_keep.events[0].timestamp
|
|
566
|
+
if tracker_to_keep.events
|
|
567
|
+
else 0,
|
|
568
|
+
)
|
|
569
|
+
|
|
570
|
+
result = session.execute(statement)
|
|
571
|
+
session.commit()
|
|
572
|
+
|
|
573
|
+
first_event_timestamp = str(
|
|
574
|
+
datetime.fromtimestamp(tracker_to_keep.events[0].timestamp)
|
|
575
|
+
)
|
|
576
|
+
|
|
577
|
+
structlogger.info(
|
|
578
|
+
"sql_tracker_store.update.updated_tracker",
|
|
579
|
+
sender_id=tracker_to_keep.sender_id,
|
|
580
|
+
first_event_timestamp=first_event_timestamp,
|
|
581
|
+
event_info=f"{result.rowcount} rows removed from tracker.",
|
|
582
|
+
)
|
|
@@ -251,6 +251,14 @@ class TrackerStore:
|
|
|
251
251
|
"""
|
|
252
252
|
raise NotImplementedError()
|
|
253
253
|
|
|
254
|
+
async def update(self, tracker: DialogueStateTracker) -> None:
|
|
255
|
+
"""Replace an existing tracker with a new one.
|
|
256
|
+
|
|
257
|
+
Args:
|
|
258
|
+
tracker: The tracker to update.
|
|
259
|
+
"""
|
|
260
|
+
raise NotImplementedError()
|
|
261
|
+
|
|
254
262
|
async def retrieve_full_tracker(
|
|
255
263
|
self, conversation_id: Text
|
|
256
264
|
) -> Optional[DialogueStateTracker]:
|
|
@@ -478,6 +486,14 @@ class InMemoryTrackerStore(TrackerStore, SerializedTrackerAsText):
|
|
|
478
486
|
|
|
479
487
|
return multiple_tracker_sessions[-1]
|
|
480
488
|
|
|
489
|
+
async def update(self, tracker: DialogueStateTracker) -> None:
|
|
490
|
+
"""Replace an existing tracker with a new one.
|
|
491
|
+
|
|
492
|
+
Args:
|
|
493
|
+
tracker: The tracker to update.
|
|
494
|
+
"""
|
|
495
|
+
await self.save(tracker)
|
|
496
|
+
|
|
481
497
|
|
|
482
498
|
def validate_port(port: Any) -> Optional[int]:
|
|
483
499
|
"""Ensure that port can be converted to integer.
|
|
@@ -583,7 +599,19 @@ class FailSafeTrackerStore(TrackerStore):
|
|
|
583
599
|
|
|
584
600
|
async def delete(self, sender_id: Text) -> None:
|
|
585
601
|
"""Delete tracker for the given sender_id."""
|
|
586
|
-
|
|
602
|
+
try:
|
|
603
|
+
await self._tracker_store.delete(sender_id)
|
|
604
|
+
except Exception as e:
|
|
605
|
+
self.on_tracker_store_error(e)
|
|
606
|
+
await self.fallback_tracker_store.delete(sender_id)
|
|
607
|
+
|
|
608
|
+
async def update(self, tracker: DialogueStateTracker) -> None:
|
|
609
|
+
"""Replace an existing tracker with a new one."""
|
|
610
|
+
try:
|
|
611
|
+
await self._tracker_store.update(tracker)
|
|
612
|
+
except Exception as e:
|
|
613
|
+
self.on_tracker_store_error(e)
|
|
614
|
+
await self.fallback_tracker_store.update(tracker)
|
|
587
615
|
|
|
588
616
|
async def retrieve_full_tracker(
|
|
589
617
|
self, sender_id: Text
|
|
@@ -793,7 +821,13 @@ class AwaitableTrackerStore(TrackerStore):
|
|
|
793
821
|
|
|
794
822
|
async def delete(self, sender_id: Text) -> None:
|
|
795
823
|
"""Delete tracker for the given sender_id."""
|
|
796
|
-
|
|
824
|
+
result = self._tracker_store.delete(sender_id)
|
|
825
|
+
return await result if isawaitable(result) else result
|
|
826
|
+
|
|
827
|
+
async def update(self, tracker: DialogueStateTracker) -> None:
|
|
828
|
+
"""Replace an existing tracker with a new one."""
|
|
829
|
+
result = self._tracker_store.update(tracker)
|
|
830
|
+
return await result if isawaitable(result) else result
|
|
797
831
|
|
|
798
832
|
async def retrieve_full_tracker(
|
|
799
833
|
self, conversation_id: Text
|
|
@@ -232,16 +232,6 @@ class CorrectSlotsCommand(Command):
|
|
|
232
232
|
proposed_slots, all_flows, tracker
|
|
233
233
|
)
|
|
234
234
|
|
|
235
|
-
if not earliest_collect and not is_reset_only:
|
|
236
|
-
# if we could not find any step in the flow, where the slots were
|
|
237
|
-
# previously set, and we also don't want to reset the slots, do
|
|
238
|
-
# not correct the slots.
|
|
239
|
-
structlogger.debug(
|
|
240
|
-
"correct_slots_command.skip_correction",
|
|
241
|
-
is_reset_only=is_reset_only,
|
|
242
|
-
)
|
|
243
|
-
return None
|
|
244
|
-
|
|
245
235
|
return CorrectionPatternFlowStackFrame(
|
|
246
236
|
is_reset_only=is_reset_only,
|
|
247
237
|
corrected_slots=proposed_slots,
|
|
@@ -249,7 +249,7 @@ flows:
|
|
|
249
249
|
next: END
|
|
250
250
|
|
|
251
251
|
pattern_repeat_bot_messages:
|
|
252
|
-
description:
|
|
252
|
+
description: Conversation repair flow for repeating previous messages
|
|
253
253
|
name: pattern repeat bot messages
|
|
254
254
|
steps:
|
|
255
255
|
- action: action_repeat_bot_messages
|
|
@@ -398,7 +398,12 @@ def clean_up_commands(
|
|
|
398
398
|
"""
|
|
399
399
|
domain = domain if domain else Domain.empty()
|
|
400
400
|
|
|
401
|
-
slots_so_far,
|
|
401
|
+
slots_so_far, _ = filled_slots_for_active_flow(tracker, all_flows)
|
|
402
|
+
|
|
403
|
+
# update the slots so far with the slots that were set in the tracker
|
|
404
|
+
slots_so_far.update(
|
|
405
|
+
{event.key for event in tracker.events if isinstance(event, SlotSet)}
|
|
406
|
+
)
|
|
402
407
|
|
|
403
408
|
clean_commands: List[Command] = []
|
|
404
409
|
|
rasa/privacy/privacy_manager.py
CHANGED
|
@@ -12,7 +12,7 @@ import structlog
|
|
|
12
12
|
from apscheduler.schedulers.background import BackgroundScheduler
|
|
13
13
|
|
|
14
14
|
import rasa.shared.core.trackers
|
|
15
|
-
from rasa.core.tracker_stores.tracker_store import
|
|
15
|
+
from rasa.core.tracker_stores.tracker_store import TrackerStore
|
|
16
16
|
from rasa.privacy.constants import (
|
|
17
17
|
TEXT_KEY,
|
|
18
18
|
USER_CHAT_INACTIVITY_IN_MINUTES_ENV_VAR_NAME,
|
|
@@ -25,7 +25,7 @@ from rasa.privacy.privacy_config import (
|
|
|
25
25
|
)
|
|
26
26
|
from rasa.privacy.privacy_filter import PrivacyFilter
|
|
27
27
|
from rasa.shared.core.events import Event, SlotSet, UserUttered, split_events
|
|
28
|
-
from rasa.shared.core.trackers import DialogueStateTracker
|
|
28
|
+
from rasa.shared.core.trackers import DialogueStateTracker, EventVerbosity
|
|
29
29
|
|
|
30
30
|
if TYPE_CHECKING:
|
|
31
31
|
from asyncio import AbstractEventLoop
|
|
@@ -97,7 +97,7 @@ class BackgroundPrivacyManager:
|
|
|
97
97
|
else TrackerStore.create(None)
|
|
98
98
|
)
|
|
99
99
|
|
|
100
|
-
self.tracker_store =
|
|
100
|
+
self.tracker_store = tracker_store
|
|
101
101
|
|
|
102
102
|
self.event_brokers: List["EventBroker"] = []
|
|
103
103
|
self.event_loop = event_loop
|
|
@@ -264,15 +264,16 @@ class BackgroundPrivacyManager:
|
|
|
264
264
|
)
|
|
265
265
|
return None
|
|
266
266
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
267
|
+
latest_user_message = tracker.get_last_event_for(
|
|
268
|
+
UserUttered, event_verbosity=EventVerbosity.ALL
|
|
269
|
+
)
|
|
270
|
+
if latest_user_message is None or not latest_user_message.text:
|
|
270
271
|
structlogger.debug(
|
|
271
272
|
"rasa.privacy_manager.no_user_message.skipping_processing",
|
|
272
273
|
)
|
|
273
274
|
return None
|
|
274
275
|
|
|
275
|
-
return
|
|
276
|
+
return latest_user_message
|
|
276
277
|
|
|
277
278
|
@staticmethod
|
|
278
279
|
def _has_session_been_anonymized(events: List[Event]) -> bool:
|
|
@@ -360,9 +361,13 @@ class BackgroundPrivacyManager:
|
|
|
360
361
|
full_tracker
|
|
361
362
|
)
|
|
362
363
|
|
|
363
|
-
await self.tracker_store.delete(sender_id=key)
|
|
364
|
-
|
|
365
364
|
if not events_to_be_retained:
|
|
365
|
+
await self.tracker_store.delete(sender_id=key)
|
|
366
|
+
structlogger.info(
|
|
367
|
+
"rasa.privacy_manager.tracker_session_deleted",
|
|
368
|
+
sender_id=full_tracker.sender_id,
|
|
369
|
+
triggered_by="deletion_cron_job",
|
|
370
|
+
)
|
|
366
371
|
continue
|
|
367
372
|
|
|
368
373
|
tracker = DialogueStateTracker.from_events(
|
|
@@ -370,12 +375,13 @@ class BackgroundPrivacyManager:
|
|
|
370
375
|
evts=events_to_be_retained,
|
|
371
376
|
slots=full_tracker.slots.values(),
|
|
372
377
|
)
|
|
373
|
-
await self.tracker_store.
|
|
378
|
+
await self.tracker_store.update(tracker)
|
|
374
379
|
|
|
375
380
|
structlogger.info(
|
|
376
|
-
"rasa.privacy_manager.
|
|
381
|
+
"rasa.privacy_manager.overwritten_tracker",
|
|
377
382
|
sender_id=key,
|
|
378
|
-
event_info="
|
|
383
|
+
event_info="Deleted eligible events and saved "
|
|
384
|
+
"tracker with events not scheduled "
|
|
379
385
|
"for deletion yet.",
|
|
380
386
|
)
|
|
381
387
|
|
|
@@ -527,10 +533,7 @@ class BackgroundPrivacyManager:
|
|
|
527
533
|
last_event_timestamp=last_event_timestamp,
|
|
528
534
|
triggered_by="anonymization_cron_job",
|
|
529
535
|
)
|
|
530
|
-
|
|
531
|
-
session.sender_id, session.events
|
|
532
|
-
)
|
|
533
|
-
events = self.process_events(tracker, process_all=True)
|
|
536
|
+
events = self.process_events(session, process_all=True)
|
|
534
537
|
processed_events.extend(events)
|
|
535
538
|
else:
|
|
536
539
|
# If the session is not valid for anonymization,
|
rasa/shared/core/trackers.py
CHANGED
|
@@ -1170,6 +1170,23 @@ class DialogueStateTracker:
|
|
|
1170
1170
|
"Example: `language: en`."
|
|
1171
1171
|
)
|
|
1172
1172
|
|
|
1173
|
+
def get_last_turn_events(self) -> List[Event]:
|
|
1174
|
+
"""Get all events of the last conversation turn."""
|
|
1175
|
+
last_user_message = self.get_last_event_for(
|
|
1176
|
+
UserUttered, event_verbosity=EventVerbosity.ALL
|
|
1177
|
+
)
|
|
1178
|
+
if not last_user_message:
|
|
1179
|
+
return []
|
|
1180
|
+
|
|
1181
|
+
last_turn_events = []
|
|
1182
|
+
for event in reversed(self.events):
|
|
1183
|
+
if event.timestamp >= last_user_message.timestamp:
|
|
1184
|
+
last_turn_events.append(event)
|
|
1185
|
+
else:
|
|
1186
|
+
break
|
|
1187
|
+
|
|
1188
|
+
return list(reversed(last_turn_events))
|
|
1189
|
+
|
|
1173
1190
|
|
|
1174
1191
|
class TrackerEventDiffEngine:
|
|
1175
1192
|
"""Computes event difference of two trackers."""
|
rasa/studio/upload.py
CHANGED
|
@@ -171,6 +171,7 @@ def handle_upload(args: argparse.Namespace) -> None:
|
|
|
171
171
|
|
|
172
172
|
config = read_yaml_file(args.config, expand_env_vars=False)
|
|
173
173
|
assistant_name = args.assistant_name or _get_assistant_name(config)
|
|
174
|
+
args.assistant_name = assistant_name
|
|
174
175
|
if not _handle_existing_assistant(
|
|
175
176
|
assistant_name, studio_config.studio_url, verify, args
|
|
176
177
|
):
|
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.1
|
|
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
|
|
@@ -81,7 +81,7 @@ Requires-Dist: pep440-version-utils (>=1.1.0,<1.2.0)
|
|
|
81
81
|
Requires-Dist: pluggy (>=1.2.0,<2.0.0)
|
|
82
82
|
Requires-Dist: portalocker (>=2.7.0,<3.0.0)
|
|
83
83
|
Requires-Dist: prompt-toolkit (>=3.0.28,<3.0.29)
|
|
84
|
-
Requires-Dist: protobuf (>=4.
|
|
84
|
+
Requires-Dist: protobuf (>=4.25.8,<4.26.0)
|
|
85
85
|
Requires-Dist: psutil (>=5.9.5,<6.0.0)
|
|
86
86
|
Requires-Dist: psycopg2-binary (>=2.9.10,<2.10.0)
|
|
87
87
|
Requires-Dist: pydot (>=1.4,<1.5)
|
|
@@ -99,7 +99,7 @@ Requires-Dist: pyyaml (>=6.0)
|
|
|
99
99
|
Requires-Dist: qdrant-client (>=1.9.1,<1.10.0)
|
|
100
100
|
Requires-Dist: questionary (>=1.10.0,<2.1.0)
|
|
101
101
|
Requires-Dist: randomname (>=0.2.1,<0.3.0)
|
|
102
|
-
Requires-Dist: rasa-sdk (==3.13.
|
|
102
|
+
Requires-Dist: rasa-sdk (==3.13.0)
|
|
103
103
|
Requires-Dist: redis (>=4.6.0,<6.0)
|
|
104
104
|
Requires-Dist: regex (>=2024.7.24,<2024.8.0)
|
|
105
105
|
Requires-Dist: requests (>=2.32.3,<2.33.0)
|
|
@@ -115,7 +115,7 @@ Requires-Dist: scikit-learn (>=1.5.1,<1.6.0)
|
|
|
115
115
|
Requires-Dist: scipy (>=1.13.1,<1.14.0)
|
|
116
116
|
Requires-Dist: sentencepiece[sentencepiece] (>=0.1.99,<0.2.0) ; extra == "transformers" or extra == "full"
|
|
117
117
|
Requires-Dist: sentry-sdk (>=2.8.0,<3)
|
|
118
|
-
Requires-Dist: setuptools (>=
|
|
118
|
+
Requires-Dist: setuptools (>=78.1.1,<78.2.0)
|
|
119
119
|
Requires-Dist: sklearn-crfsuite (>=0.3.6,<0.4.0)
|
|
120
120
|
Requires-Dist: skops (>=0.10.0,<0.11.0)
|
|
121
121
|
Requires-Dist: slack-sdk (>=3.27.1,<3.28.0)
|
|
@@ -19,7 +19,7 @@ rasa/cli/dialogue_understanding_test.py,sha256=0ap9gDbZQ0S52KEDqcBeKaPamvw1KM0R0
|
|
|
19
19
|
rasa/cli/e2e_test.py,sha256=0GmyZ6mRApIvU9aCr8d4vf6xNoQ_LOE7GS5OXwlBMTQ,8128
|
|
20
20
|
rasa/cli/evaluate.py,sha256=QGIuAySKosuOJJ5I-ZfLrnQRHArJiB0ubdN6I1tF4hs,7975
|
|
21
21
|
rasa/cli/export.py,sha256=lXz2fQbAjJ4bEKN9qjSYv44WrbLjXVb87b2Q5EtIALc,8329
|
|
22
|
-
rasa/cli/inspect.py,sha256=
|
|
22
|
+
rasa/cli/inspect.py,sha256=hui5u9eqwFtWdin430A99EnYywqaBZWqx7XVXEGqr6E,3718
|
|
23
23
|
rasa/cli/interactive.py,sha256=_PwvTLF9Sozt0xzDo4W_zYs3SBCoDcxuGDDumD-JtUo,6012
|
|
24
24
|
rasa/cli/license.py,sha256=oFZU5cQ6CD2DvBgnlss9DgJVHzkSpEVI6eNKlMHgAMM,3565
|
|
25
25
|
rasa/cli/llm_fine_tuning.py,sha256=A2RbXSF7jjta1Ql-X251kOMMfU3FJqwPMzh-Xuy83bg,15043
|
|
@@ -61,7 +61,7 @@ rasa/cli/project_templates/tutorial/domain.yml,sha256=X16UwfoTNKSV2DYvEQZ-CfRczz
|
|
|
61
61
|
rasa/cli/project_templates/tutorial/endpoints.yml,sha256=ZZfchpZLo5MObU5JVXPqBi8KrKe8gzsZskSDAjpfS9E,1788
|
|
62
62
|
rasa/cli/run.py,sha256=QnmVCXORZambJzee1z3wMa3Ki8cPwSsImgQ2hbvbpuU,4632
|
|
63
63
|
rasa/cli/scaffold.py,sha256=8cFXQN-iGViAXfST78f3JHmIxsVzcFfkVDisq0TsiSQ,8042
|
|
64
|
-
rasa/cli/shell.py,sha256=
|
|
64
|
+
rasa/cli/shell.py,sha256=B3HEDiqRlqKfW0ZEHd9A-uqU9vo2-2VTWtKfQoPn74k,4667
|
|
65
65
|
rasa/cli/studio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
66
66
|
rasa/cli/studio/download.py,sha256=5uLdnW60JQ1NkUcJfK_be2pKjVOtYzCCjNAQpfGkYnM,1163
|
|
67
67
|
rasa/cli/studio/link.py,sha256=rrup2dUGef6yCC-3jTDiK-2pEspcBnl-61guhVJdmGU,1059
|
|
@@ -72,7 +72,7 @@ rasa/cli/studio/train.py,sha256=R5TuZztfeBwvv83Q3VpdaHtK1oo5zdt6ImbZqfvHQxc,1485
|
|
|
72
72
|
rasa/cli/studio/upload.py,sha256=9j6-OC0uSa1decsjbIrHk952sIF_NZPnIYZHvWLOy-w,1695
|
|
73
73
|
rasa/cli/telemetry.py,sha256=mNMMbcgnNPZzeF1k-khN-7lAQFnkFx75VBwtnPfPI6k,3538
|
|
74
74
|
rasa/cli/test.py,sha256=JfzBh1_TAOnd346jVikSK94bTlUA-BLSAQ7XBRvL2TQ,8901
|
|
75
|
-
rasa/cli/train.py,sha256=
|
|
75
|
+
rasa/cli/train.py,sha256=09M5nmU3TX7R-Q_2ynMhPnuUdIfPtvEepf6dWVP6f7o,9620
|
|
76
76
|
rasa/cli/utils.py,sha256=-t0a_jMMVyDZS8nAkvqLqBn1cqCMWzwNwIj0KMvo2_w,16881
|
|
77
77
|
rasa/cli/visualize.py,sha256=YmRAATAfxHpgE8_PknGyM-oIujwICNzVftTzz6iLNNc,1256
|
|
78
78
|
rasa/cli/x.py,sha256=T10e6bVUx5BadZOt3JJ4T5EByiR5jJ2hv5ExXOnt9F8,6839
|
|
@@ -265,12 +265,12 @@ rasa/core/channels/voice_ready/twilio_voice.py,sha256=E9-tgqlGdJ7a_Jl9_rtvM5ubZz
|
|
|
265
265
|
rasa/core/channels/voice_ready/utils.py,sha256=8sDUDWHOxgEuSwNDJUQ15SnRlfnuCjEOF0rsokLIGZ8,1736
|
|
266
266
|
rasa/core/channels/voice_stream/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
267
267
|
rasa/core/channels/voice_stream/asr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
268
|
-
rasa/core/channels/voice_stream/asr/asr_engine.py,sha256=
|
|
268
|
+
rasa/core/channels/voice_stream/asr/asr_engine.py,sha256=34rgUqDtH9YvpAUZYPsS0GuS1pbYaz9ziEI5HyFXUSs,3403
|
|
269
269
|
rasa/core/channels/voice_stream/asr/asr_event.py,sha256=skPwrkRrcsptmeWXu9q68i4B-ZbvambCFFLtQ0TIgMo,297
|
|
270
270
|
rasa/core/channels/voice_stream/asr/azure.py,sha256=dUFxtNVVwGM2D1VyqQ5FWeSpKwUQekMXUxWZv6tPJ7w,6114
|
|
271
|
-
rasa/core/channels/voice_stream/asr/deepgram.py,sha256=
|
|
271
|
+
rasa/core/channels/voice_stream/asr/deepgram.py,sha256=VeVMWg05uL_epGGOZbUHXeIIhoBf0bxiWMp6QwNFe0A,5920
|
|
272
272
|
rasa/core/channels/voice_stream/audio_bytes.py,sha256=3V0QQplPD-kVfebaaeVcKgV7pwIJyjnTenujVD3y3sY,340
|
|
273
|
-
rasa/core/channels/voice_stream/audiocodes.py,sha256=
|
|
273
|
+
rasa/core/channels/voice_stream/audiocodes.py,sha256=W8p5gzP43VROMlVwwx8vrGxS4zy_JL-MpORv-1fPik0,12707
|
|
274
274
|
rasa/core/channels/voice_stream/browser_audio.py,sha256=KDUexINUh1gElQ_2ccpAWltlH-pdakm-x1L6bvKffUY,3931
|
|
275
275
|
rasa/core/channels/voice_stream/call_state.py,sha256=fbwVbT0ddE7AjTYjx-Mq5jBMEGXanbug5wlBwstaews,899
|
|
276
276
|
rasa/core/channels/voice_stream/genesys.py,sha256=-PL1y0b2dJClM-S000loaDUWbm8qwcFSYwYaNaPG_9c,17708
|
|
@@ -282,7 +282,7 @@ rasa/core/channels/voice_stream/tts/tts_cache.py,sha256=K4S2d8zWX2h2ylYALp7IdqFS
|
|
|
282
282
|
rasa/core/channels/voice_stream/tts/tts_engine.py,sha256=JMCWGHxT8QiqKoBeI6F4RX_-Q9EEqG3vUtkgOUnlt-w,1812
|
|
283
283
|
rasa/core/channels/voice_stream/twilio_media_streams.py,sha256=Tc30Z-gLB3v2PM0ibNpF2m0vTzbXP6h9B64HNwvciOE,8936
|
|
284
284
|
rasa/core/channels/voice_stream/util.py,sha256=d0Tl0tGAnVj3SgGovsUMHx-QL44nrPI29OTYKYleH0U,1987
|
|
285
|
-
rasa/core/channels/voice_stream/voice_channel.py,sha256=
|
|
285
|
+
rasa/core/channels/voice_stream/voice_channel.py,sha256=mcH5x-28X6kauPdb5XYe8WCyTAr2IjuraPM7KuOeMr0,21418
|
|
286
286
|
rasa/core/channels/webexteams.py,sha256=z_o_jnc6B7hsHpd6XorImFkF43wB4yx_kiTPKAjPSuo,4805
|
|
287
287
|
rasa/core/concurrent_lock_store.py,sha256=aAZDAYUVffCx2J8wbJ05vTE3Xd9bQ4Dx13RZmCy3ohw,8285
|
|
288
288
|
rasa/core/constants.py,sha256=dEokmEf6XkOFA_xpuwjqwNtlZv-a5Tz5dLMRc7Vu4CU,4070
|
|
@@ -320,7 +320,7 @@ rasa/core/nlg/translate.py,sha256=PBMTbIgdkhx8rhzqv6h0u5r9jqdfiVIh7u0qb363sJA,18
|
|
|
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
|
|
323
|
-
rasa/core/policies/enterprise_search_policy.py,sha256=
|
|
323
|
+
rasa/core/policies/enterprise_search_policy.py,sha256=MCY7fPtBo9IwKdl-k5gIurUUR2_oFWlZErZMhwBa1-k,46839
|
|
324
324
|
rasa/core/policies/enterprise_search_policy_config.py,sha256=rTIGBrfGfe_lvsYQW1cU20tza07p_-oxFfjXhw7-phc,8644
|
|
325
325
|
rasa/core/policies/enterprise_search_prompt_template.jinja2,sha256=dCS_seyBGxMQoMsOjjvPp0dd31OSzZCJSZeev1FJK5Q,1187
|
|
326
326
|
rasa/core/policies/enterprise_search_prompt_with_citation_template.jinja2,sha256=va9rpP97dN3PKoJZOVfyuISt3cPBlb10Pqyz25RwO_Q,3294
|
|
@@ -347,12 +347,12 @@ rasa/core/secrets_manager/secret_manager.py,sha256=oYihfIMIMUKA8U_ZRA3blcErFlCoz
|
|
|
347
347
|
rasa/core/secrets_manager/vault.py,sha256=02wlsrN3QoHSZkqygHaM_CWDtkpkJ25iD-ksEu3ejBw,20481
|
|
348
348
|
rasa/core/test.py,sha256=VGlGvmrXRqHaPMaetvvN1fa65oZMryN5ot9L3otNH5E,49282
|
|
349
349
|
rasa/core/tracker_stores/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
350
|
-
rasa/core/tracker_stores/auth_retry_tracker_store.py,sha256=
|
|
351
|
-
rasa/core/tracker_stores/dynamo_tracker_store.py,sha256=
|
|
352
|
-
rasa/core/tracker_stores/mongo_tracker_store.py,sha256=
|
|
353
|
-
rasa/core/tracker_stores/redis_tracker_store.py,sha256=
|
|
354
|
-
rasa/core/tracker_stores/sql_tracker_store.py,sha256=
|
|
355
|
-
rasa/core/tracker_stores/tracker_store.py,sha256=
|
|
350
|
+
rasa/core/tracker_stores/auth_retry_tracker_store.py,sha256=eOwsLuQZhWu5Q4RZHJYffL3FhpKOglzJ0MNGffv2E60,7270
|
|
351
|
+
rasa/core/tracker_stores/dynamo_tracker_store.py,sha256=T4F1q3o9Fw2XVOOAmtz3tgM2FTKI4aaQfCZXmdjYjGE,9426
|
|
352
|
+
rasa/core/tracker_stores/mongo_tracker_store.py,sha256=v2ktPXxp7PWfoHPqOJKLkMzML_5E_Of0Ihna2Vcqfbg,7644
|
|
353
|
+
rasa/core/tracker_stores/redis_tracker_store.py,sha256=q38nCZoXW4G7xdZ6nOcOpanIB5XrzEM4rMdFnUHR3pE,8864
|
|
354
|
+
rasa/core/tracker_stores/sql_tracker_store.py,sha256=oJgAqDysP3KXJkPRCZ1s8HhlxOn-y9Apmo6OVO3lQmc,20960
|
|
355
|
+
rasa/core/tracker_stores/tracker_store.py,sha256=bJMsxzuhw90vGY2uGbbCogikoy4HucPy6SvYfcyFQJw,29472
|
|
356
356
|
rasa/core/train.py,sha256=ESBhZ9vZySziZIG8fvshHO4AYApD0hywRFCmA9h1wFI,3521
|
|
357
357
|
rasa/core/training/__init__.py,sha256=23DaZynwsxIaGYvZBSwQRxanaMWa-ihfON7f-NetK_g,3213
|
|
358
358
|
rasa/core/training/converters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -376,7 +376,7 @@ rasa/dialogue_understanding/commands/chit_chat_answer_command.py,sha256=XXSFcU6x
|
|
|
376
376
|
rasa/dialogue_understanding/commands/clarify_command.py,sha256=az0nHYoP66fdhBj4TcD1zKBcPYqtNk8KQKyW7BvEYZk,4506
|
|
377
377
|
rasa/dialogue_understanding/commands/command.py,sha256=rhxHmllTMwvb4Uq-pDqmUdlKtu-87y8nqN5DRO-KDwE,2529
|
|
378
378
|
rasa/dialogue_understanding/commands/command_syntax_manager.py,sha256=2qA2m9Z7SSjG4pFAdgKbkqJCICyanicu4wU5iw5Bs1g,1907
|
|
379
|
-
rasa/dialogue_understanding/commands/correct_slots_command.py,sha256=
|
|
379
|
+
rasa/dialogue_understanding/commands/correct_slots_command.py,sha256=307rHpR2mwJd7Pdmphjf7F7E6YX69y6WnkWQdUqFNdU,10360
|
|
380
380
|
rasa/dialogue_understanding/commands/error_command.py,sha256=Twk2dOtR-oqE87wW5eh1tR_b24KpyWyK20f86bJpbH4,2433
|
|
381
381
|
rasa/dialogue_understanding/commands/free_form_answer_command.py,sha256=XlQrHXrcOemzu1LHZiDhBAluiSlnUQ2V7ET5Z-aG7gc,224
|
|
382
382
|
rasa/dialogue_understanding/commands/handle_code_change_command.py,sha256=Cp2e1iD0zacXmljJ8vDXHJu9Fp6BwB7cGx8NF748akw,2192
|
|
@@ -431,7 +431,7 @@ rasa/dialogue_understanding/patterns/collect_information.py,sha256=8YWvhFTt8CJML
|
|
|
431
431
|
rasa/dialogue_understanding/patterns/completed.py,sha256=7qkyUj2d__2R3mpwWVmQpfwCCbJruBrjRZbmbDr3Zbo,1278
|
|
432
432
|
rasa/dialogue_understanding/patterns/continue_interrupted.py,sha256=OSTbe5l0B0ECNIYWpYB0pdzIeaqM3m3UZskNNjL5vrw,1682
|
|
433
433
|
rasa/dialogue_understanding/patterns/correction.py,sha256=7fQ02-JU1CGZiTjTi9YqmD1F4o-9Tv5WCAXnFgZlvtY,11380
|
|
434
|
-
rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml,sha256=
|
|
434
|
+
rasa/dialogue_understanding/patterns/default_flows_for_patterns.yml,sha256=NwNXqrodwOTgDPYtu6L5n6epBLzXjnnRCzH_oBPLMnc,11030
|
|
435
435
|
rasa/dialogue_understanding/patterns/domain_for_patterns.py,sha256=Zv_lCJn4nbkxeNYOPGsR0V8tmYAUsM_Ho_9to8hku-o,6493
|
|
436
436
|
rasa/dialogue_understanding/patterns/human_handoff.py,sha256=1hkSdL6kui42rZc7zERZ9R7nLyvRHi_tHgNU7FyrhAQ,1132
|
|
437
437
|
rasa/dialogue_understanding/patterns/internal_error.py,sha256=APCKVv16M6mSQ4upu4UwG0yIaaKTyr7uB2yV8ZtpMzo,1609
|
|
@@ -443,7 +443,7 @@ rasa/dialogue_understanding/patterns/skip_question.py,sha256=fJ1MC0WEEtS-BpnGJEf
|
|
|
443
443
|
rasa/dialogue_understanding/patterns/user_silence.py,sha256=xP-QMnd-MsybH5z4g01hBv4OLOHcw6m3rc26LQfe2zo,1140
|
|
444
444
|
rasa/dialogue_understanding/patterns/validate_slot.py,sha256=hqd5AEGT3M3HLNhMwuI9W9kZNCvgU6GyI-2xc2b4kz8,2085
|
|
445
445
|
rasa/dialogue_understanding/processor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
446
|
-
rasa/dialogue_understanding/processor/command_processor.py,sha256=
|
|
446
|
+
rasa/dialogue_understanding/processor/command_processor.py,sha256=62iz_LBxw2HwkOPx-VWExZKOcGEeHfS_tbb203MxZBU,30470
|
|
447
447
|
rasa/dialogue_understanding/processor/command_processor_component.py,sha256=rkErI_Uo7s3LsEojUSGSRbWGyGaX7GtGOYSJn0V-TI4,1650
|
|
448
448
|
rasa/dialogue_understanding/stack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
449
449
|
rasa/dialogue_understanding/stack/dialogue_stack.py,sha256=cYV6aQeh0EuOJHODDqK3biqXozYTX8baPgLwHhPxFqs,5244
|
|
@@ -637,7 +637,7 @@ rasa/privacy/event_broker_utils.py,sha256=K0ej9vRED5sJiG8YJq3_pynMRJEenCyKSjt6xO
|
|
|
637
637
|
rasa/privacy/privacy_config.py,sha256=mctRStSliSUbbjHAl5ISTczJ2TgU7T5yjSfZvLmUtlI,9339
|
|
638
638
|
rasa/privacy/privacy_config_schema.json,sha256=kQVJCrlKljJMkOCL3WDzquVS8V1-KE6_XMEyVSuUkJw,1835
|
|
639
639
|
rasa/privacy/privacy_filter.py,sha256=s1LxnOeIoGh16vzTzxoM5vSDelk1P55Ay3bm0XRuINs,14988
|
|
640
|
-
rasa/privacy/privacy_manager.py,sha256=
|
|
640
|
+
rasa/privacy/privacy_manager.py,sha256=IWbWIpJeX7EgHXPjYXPmq-5RaoJEnCFa5xKE7M2roTE,22593
|
|
641
641
|
rasa/server.py,sha256=prH4FVO5kd7VKgSJnP_dt7PhXlW0vf8KWf62ccK8mlw,60505
|
|
642
642
|
rasa/shared/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
643
643
|
rasa/shared/constants.py,sha256=pYMlsFE9kao5BUOXd-8cHWLV9jMfUop7Mfm57mBPcxc,12856
|
|
@@ -677,7 +677,7 @@ rasa/shared/core/policies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
|
677
677
|
rasa/shared/core/policies/utils.py,sha256=rWE_-48Ovc__V7wOKCJ-2lTerVRtN3iRHV4ZvuU2b2g,3070
|
|
678
678
|
rasa/shared/core/slot_mappings.py,sha256=afWxJsnAdHPzIxpHBBG1NbK4JBBWSsua3_xq87PKEZA,26663
|
|
679
679
|
rasa/shared/core/slots.py,sha256=8ETIMYXWBRY_uOx9eUWm8vFiZaZpEVBjHzuwimaerJ8,29959
|
|
680
|
-
rasa/shared/core/trackers.py,sha256=
|
|
680
|
+
rasa/shared/core/trackers.py,sha256=LwePm-7-QySHHhCWzXkTnJgcLaqvyG0DwLhJ6EWG0NM,45583
|
|
681
681
|
rasa/shared/core/training_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
682
682
|
rasa/shared/core/training_data/loading.py,sha256=RCx1uTI9iDejFI_sWg3qPzhjln7-hu78f3EDAT6K0No,2894
|
|
683
683
|
rasa/shared/core/training_data/story_reader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -798,7 +798,7 @@ rasa/studio/pull/pull.py,sha256=Qr-Ms4pXNS04hvdciZCfbeC1hag6v2puwhHwhcFpA8Q,7750
|
|
|
798
798
|
rasa/studio/push.py,sha256=_EopU6RQnbQub33x0TVXOTWCYUfOQMDc6KdDNmltLMs,4279
|
|
799
799
|
rasa/studio/results_logger.py,sha256=lwKROoQjzzJVnFoceLQ-z-5Hg35TfHo-8R4MDrMLYHY,5126
|
|
800
800
|
rasa/studio/train.py,sha256=-UTPABXNWlnp3iIMKeslgprEtRQWcr8mF-Q7bacKxEw,4240
|
|
801
|
-
rasa/studio/upload.py,sha256=
|
|
801
|
+
rasa/studio/upload.py,sha256=Ssop8gTrBDj4JTrI35bdiKy7IWmUV_I3YXgXM-DIXSo,22648
|
|
802
802
|
rasa/studio/utils.py,sha256=yiJtEv_CuI3uwVsWvKvcFH1ODZw37_aFNtCqaStwyP4,1109
|
|
803
803
|
rasa/telemetry.py,sha256=2W1Tq1HMQm60o5oiy5DEGrIqSlpYMaJybY4DvCa6Gg8,69712
|
|
804
804
|
rasa/tracing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -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=JXi8bz3SsTB2c1tbDRY3r3TkcfSbhxacoxs-rVx6a9s,82937
|
|
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=iiXVaOtDUBvQbGdAbGWye0ZLm9Ie1orP7Jp3kgQO8rQ,117
|
|
850
|
+
rasa_pro-3.13.1.dist-info/METADATA,sha256=fneDi4y4nD2XzcjwKbULH6wIe5gBPhWNsWNJmx31vFI,10550
|
|
851
|
+
rasa_pro-3.13.1.dist-info/NOTICE,sha256=7HlBoMHJY9CL2GlYSfTQ-PZsVmLmVkYmMiPlTjhuCqA,218
|
|
852
|
+
rasa_pro-3.13.1.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
|
|
853
|
+
rasa_pro-3.13.1.dist-info/entry_points.txt,sha256=ckJ2SfEyTPgBqj_I6vm_tqY9dZF_LAPJZA335Xp0Q9U,43
|
|
854
|
+
rasa_pro-3.13.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|