rasa-pro 3.10.20.dev2__py3-none-any.whl → 3.10.21__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/run.py +10 -6
- rasa/cli/utils.py +7 -0
- rasa/core/channels/channel.py +104 -10
- rasa/core/channels/twilio_voice.py +57 -6
- rasa/e2e_test/utils/validation.py +3 -3
- rasa/validator.py +1 -2
- rasa/version.py +1 -1
- {rasa_pro-3.10.20.dev2.dist-info → rasa_pro-3.10.21.dist-info}/METADATA +5 -5
- {rasa_pro-3.10.20.dev2.dist-info → rasa_pro-3.10.21.dist-info}/RECORD +12 -12
- {rasa_pro-3.10.20.dev2.dist-info → rasa_pro-3.10.21.dist-info}/NOTICE +0 -0
- {rasa_pro-3.10.20.dev2.dist-info → rasa_pro-3.10.21.dist-info}/WHEEL +0 -0
- {rasa_pro-3.10.20.dev2.dist-info → rasa_pro-3.10.21.dist-info}/entry_points.txt +0 -0
rasa/cli/run.py
CHANGED
|
@@ -62,12 +62,16 @@ def run_actions(args: argparse.Namespace) -> None:
|
|
|
62
62
|
|
|
63
63
|
def _validate_model_path(model_path: Text, parameter: Text, default: Text) -> Text:
|
|
64
64
|
if model_path is not None and not os.path.exists(model_path):
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
raise ModelNotFound(
|
|
66
|
+
f"The provided model path '{model_path}' could not be found. "
|
|
67
|
+
"Provide an existing model path."
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
if model_path is None:
|
|
71
|
+
logger.debug(
|
|
72
|
+
f"Parameter '{parameter}' not set. "
|
|
73
|
+
"Using default location '{default}' instead."
|
|
74
|
+
)
|
|
71
75
|
os.makedirs(default, exist_ok=True)
|
|
72
76
|
model_path = default
|
|
73
77
|
|
rasa/cli/utils.py
CHANGED
|
@@ -14,6 +14,7 @@ import structlog
|
|
|
14
14
|
import rasa.shared.utils.cli
|
|
15
15
|
import rasa.shared.utils.io
|
|
16
16
|
from rasa import telemetry
|
|
17
|
+
from rasa.exceptions import ModelNotFound
|
|
17
18
|
from rasa.shared.constants import (
|
|
18
19
|
ASSISTANT_ID_DEFAULT_VALUE,
|
|
19
20
|
ASSISTANT_ID_KEY,
|
|
@@ -76,6 +77,12 @@ def get_validated_path(
|
|
|
76
77
|
if current and os.path.exists(current):
|
|
77
78
|
return current
|
|
78
79
|
|
|
80
|
+
if parameter == "model":
|
|
81
|
+
raise ModelNotFound(
|
|
82
|
+
f"The provided model path '{current}' could not be found. "
|
|
83
|
+
"Provide an existing model path."
|
|
84
|
+
)
|
|
85
|
+
|
|
79
86
|
# try to find a valid option among the defaults
|
|
80
87
|
if isinstance(default, str) or isinstance(default, Path):
|
|
81
88
|
default_options = [str(default)]
|
rasa/core/channels/channel.py
CHANGED
|
@@ -1,29 +1,36 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import hmac
|
|
1
4
|
import json
|
|
2
5
|
import logging
|
|
3
6
|
import uuid
|
|
4
|
-
import
|
|
5
|
-
from
|
|
6
|
-
from sanic.request import Request
|
|
7
|
+
from base64 import b64encode
|
|
8
|
+
from functools import wraps
|
|
7
9
|
from typing import (
|
|
8
|
-
Text,
|
|
9
|
-
List,
|
|
10
|
-
Dict,
|
|
11
10
|
Any,
|
|
12
|
-
|
|
11
|
+
Awaitable,
|
|
13
12
|
Callable,
|
|
13
|
+
Dict,
|
|
14
14
|
Iterable,
|
|
15
|
-
|
|
15
|
+
List,
|
|
16
16
|
NoReturn,
|
|
17
|
+
Optional,
|
|
18
|
+
Text,
|
|
17
19
|
)
|
|
18
20
|
|
|
21
|
+
import jwt
|
|
22
|
+
from sanic import Blueprint, Sanic
|
|
23
|
+
from sanic.exceptions import Unauthorized
|
|
24
|
+
from sanic.request import Request
|
|
25
|
+
|
|
19
26
|
from rasa.cli import utils as cli_utils
|
|
20
|
-
from rasa.shared.constants import DOCS_BASE_URL, DEFAULT_SENDER_ID
|
|
21
27
|
from rasa.core.constants import BEARER_TOKEN_PREFIX
|
|
22
|
-
from rasa.shared.
|
|
28
|
+
from rasa.shared.constants import DEFAULT_SENDER_ID, DOCS_BASE_URL
|
|
23
29
|
from rasa.shared.core.trackers import (
|
|
24
30
|
DialogueStateTracker,
|
|
25
31
|
EventVerbosity,
|
|
26
32
|
)
|
|
33
|
+
from rasa.shared.exceptions import RasaException
|
|
27
34
|
|
|
28
35
|
try:
|
|
29
36
|
from urlparse import urljoin
|
|
@@ -417,3 +424,90 @@ class CollectingOutputChannel(OutputChannel):
|
|
|
417
424
|
self, recipient_id: Text, json_message: Dict[Text, Any], **kwargs: Any
|
|
418
425
|
) -> None:
|
|
419
426
|
await self._persist_message(self._message(recipient_id, custom=json_message))
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
BASIC_AUTH_SCHEME = "Basic"
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
def create_auth_requested_response_provider(
|
|
433
|
+
realm: str,
|
|
434
|
+
) -> Callable[[Request, Any, Any], ResponseWithAuthRequested]:
|
|
435
|
+
def _provider(
|
|
436
|
+
request: Request, *args: Any, **kwargs: Any
|
|
437
|
+
) -> ResponseWithAuthRequested:
|
|
438
|
+
return ResponseWithAuthRequested(scheme=BASIC_AUTH_SCHEME, realm=realm)
|
|
439
|
+
|
|
440
|
+
return _provider
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
class ResponseWithAuthRequested(Unauthorized):
|
|
444
|
+
"""Custom exception to request authentication."""
|
|
445
|
+
|
|
446
|
+
def __init__(self, scheme: str, realm: str) -> None:
|
|
447
|
+
super().__init__(
|
|
448
|
+
message="Authentication requested.", scheme=scheme, realm=realm
|
|
449
|
+
) # type: ignore[no-untyped-call]
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
def requires_basic_auth(
|
|
453
|
+
username: Optional[Text],
|
|
454
|
+
password: Optional[Text],
|
|
455
|
+
auth_request_provider: Optional[Callable[[Request, Any, Any], Unauthorized]] = None,
|
|
456
|
+
) -> Callable:
|
|
457
|
+
"""Decorator to require basic auth for a route.
|
|
458
|
+
|
|
459
|
+
Args:
|
|
460
|
+
username: The username to check against.
|
|
461
|
+
password: The password to check against.
|
|
462
|
+
auth_request_provider: Optional function to provide a custom
|
|
463
|
+
response when authentication is requested. This function should
|
|
464
|
+
return an instance of `Unauthorized` with the necessary
|
|
465
|
+
authentication headers.
|
|
466
|
+
Returns:
|
|
467
|
+
A decorator that checks for basic authentication.
|
|
468
|
+
|
|
469
|
+
Raises:
|
|
470
|
+
Unauthorized: If the authentication fails or if authentication is
|
|
471
|
+
requested without necessary credentials (headers).
|
|
472
|
+
"""
|
|
473
|
+
|
|
474
|
+
def decorator(func: Callable) -> Callable:
|
|
475
|
+
@wraps(func)
|
|
476
|
+
async def wrapper(request: Request, *args: Any, **kwargs: Any) -> Any:
|
|
477
|
+
if not username or not password:
|
|
478
|
+
return await func(request, *args, **kwargs)
|
|
479
|
+
|
|
480
|
+
auth_header = request.headers.get("Authorization")
|
|
481
|
+
|
|
482
|
+
# Some systems will first send a request without an authorization header
|
|
483
|
+
# to check if the endpoint is available. In this case, we need to
|
|
484
|
+
# return am Unauthorized response with the necessary authorization header
|
|
485
|
+
# to indicate that the endpoint requires authorization.
|
|
486
|
+
if not auth_header and auth_request_provider:
|
|
487
|
+
# if the request does not contain an authorization header,
|
|
488
|
+
# we raise an exception to request authorization
|
|
489
|
+
|
|
490
|
+
exception = auth_request_provider(request, *args, **kwargs)
|
|
491
|
+
logger.debug(
|
|
492
|
+
f"Responding with {exception.status_code} and "
|
|
493
|
+
f"necessary auth headers {exception.headers}"
|
|
494
|
+
)
|
|
495
|
+
raise exception
|
|
496
|
+
|
|
497
|
+
if not auth_header or not auth_header.startswith("Basic "):
|
|
498
|
+
logger.error("Missing or invalid authorization header.")
|
|
499
|
+
raise Unauthorized("Missing or invalid authorization header.") # type: ignore[no-untyped-call]
|
|
500
|
+
|
|
501
|
+
encoded = b64encode(f"{username}:{password}".encode()).decode()
|
|
502
|
+
username_password_digest: str = auth_header[len(BASIC_AUTH_SCHEME) :]
|
|
503
|
+
username_password_digest = username_password_digest.strip()
|
|
504
|
+
|
|
505
|
+
if not hmac.compare_digest(username_password_digest, encoded):
|
|
506
|
+
logger.error("Invalid username or password.")
|
|
507
|
+
raise Unauthorized("Invalid username or password.") # type: ignore[no-untyped-call]
|
|
508
|
+
|
|
509
|
+
return await func(request, *args, **kwargs)
|
|
510
|
+
|
|
511
|
+
return wrapper
|
|
512
|
+
|
|
513
|
+
return decorator
|
|
@@ -1,18 +1,27 @@
|
|
|
1
|
+
from typing import Any, Awaitable, Callable, Dict, List, Optional, Text
|
|
2
|
+
|
|
3
|
+
import structlog
|
|
1
4
|
from sanic import Blueprint, response
|
|
2
5
|
from sanic.request import Request
|
|
3
6
|
from sanic.response import HTTPResponse
|
|
4
|
-
from twilio.twiml.voice_response import
|
|
5
|
-
from typing import Text, Callable, Awaitable, List, Any, Dict, Optional
|
|
7
|
+
from twilio.twiml.voice_response import Gather, VoiceResponse
|
|
6
8
|
|
|
7
|
-
import rasa.utils.io
|
|
8
9
|
import rasa.shared.utils.io
|
|
9
|
-
|
|
10
|
-
from rasa.shared.exceptions import InvalidConfigException
|
|
10
|
+
import rasa.utils.io
|
|
11
11
|
from rasa.core.channels.channel import (
|
|
12
|
-
InputChannel,
|
|
13
12
|
CollectingOutputChannel,
|
|
13
|
+
InputChannel,
|
|
14
14
|
UserMessage,
|
|
15
|
+
create_auth_requested_response_provider,
|
|
16
|
+
requires_basic_auth,
|
|
15
17
|
)
|
|
18
|
+
from rasa.shared.core.events import BotUttered
|
|
19
|
+
from rasa.shared.exceptions import InvalidConfigException, RasaException
|
|
20
|
+
|
|
21
|
+
logger = structlog.get_logger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
TWILIO_VOICE_PATH = "webhooks/twilio_voice/webhook"
|
|
16
25
|
|
|
17
26
|
|
|
18
27
|
class TwilioVoiceInput(InputChannel):
|
|
@@ -104,6 +113,14 @@ class TwilioVoiceInput(InputChannel):
|
|
|
104
113
|
"""Load custom configurations."""
|
|
105
114
|
credentials = credentials or {}
|
|
106
115
|
|
|
116
|
+
username = credentials.get("username")
|
|
117
|
+
password = credentials.get("password")
|
|
118
|
+
if (username is None) != (password is None):
|
|
119
|
+
raise RasaException(
|
|
120
|
+
"In TwilioVoice channel, either both username and password "
|
|
121
|
+
"or neither should be provided. "
|
|
122
|
+
)
|
|
123
|
+
|
|
107
124
|
return cls(
|
|
108
125
|
credentials.get("initial_prompt", "hello"),
|
|
109
126
|
credentials.get(
|
|
@@ -114,6 +131,8 @@ class TwilioVoiceInput(InputChannel):
|
|
|
114
131
|
credentials.get("speech_timeout", "5"),
|
|
115
132
|
credentials.get("speech_model", "default"),
|
|
116
133
|
credentials.get("enhanced", "false"),
|
|
134
|
+
username=username,
|
|
135
|
+
password=password,
|
|
117
136
|
)
|
|
118
137
|
|
|
119
138
|
def __init__(
|
|
@@ -124,6 +143,8 @@ class TwilioVoiceInput(InputChannel):
|
|
|
124
143
|
speech_timeout: Text = "5",
|
|
125
144
|
speech_model: Text = "default",
|
|
126
145
|
enhanced: Text = "false",
|
|
146
|
+
username: Optional[Text] = None,
|
|
147
|
+
password: Optional[Text] = None,
|
|
127
148
|
) -> None:
|
|
128
149
|
"""Creates a connection to Twilio voice.
|
|
129
150
|
|
|
@@ -141,6 +162,8 @@ class TwilioVoiceInput(InputChannel):
|
|
|
141
162
|
self.speech_timeout = speech_timeout
|
|
142
163
|
self.speech_model = speech_model
|
|
143
164
|
self.enhanced = enhanced
|
|
165
|
+
self.username = username
|
|
166
|
+
self.password = password
|
|
144
167
|
|
|
145
168
|
self._validate_configuration()
|
|
146
169
|
|
|
@@ -149,6 +172,9 @@ class TwilioVoiceInput(InputChannel):
|
|
|
149
172
|
if self.assistant_voice not in self.SUPPORTED_VOICES:
|
|
150
173
|
self._raise_invalid_voice_exception()
|
|
151
174
|
|
|
175
|
+
if (self.username is None) != (self.password is None):
|
|
176
|
+
self._raise_invalid_credentials_exception()
|
|
177
|
+
|
|
152
178
|
try:
|
|
153
179
|
int(self.speech_timeout)
|
|
154
180
|
except ValueError:
|
|
@@ -234,6 +260,13 @@ class TwilioVoiceInput(InputChannel):
|
|
|
234
260
|
return response.json({"status": "ok"})
|
|
235
261
|
|
|
236
262
|
@twilio_voice_webhook.route("/webhook", methods=["POST"])
|
|
263
|
+
@requires_basic_auth(
|
|
264
|
+
username=self.username,
|
|
265
|
+
password=self.password,
|
|
266
|
+
auth_request_provider=create_auth_requested_response_provider(
|
|
267
|
+
TWILIO_VOICE_PATH
|
|
268
|
+
),
|
|
269
|
+
)
|
|
237
270
|
async def receive(request: Request) -> HTTPResponse:
|
|
238
271
|
sender_id = request.form.get("From")
|
|
239
272
|
text = request.form.get("SpeechResult")
|
|
@@ -277,6 +310,11 @@ class TwilioVoiceInput(InputChannel):
|
|
|
277
310
|
twilio_response = self._build_twilio_voice_response(
|
|
278
311
|
[{"text": last_response_text}]
|
|
279
312
|
)
|
|
313
|
+
|
|
314
|
+
logger.debug(
|
|
315
|
+
"twilio_voice.webhook.twilio_response",
|
|
316
|
+
twilio_response=str(twilio_response),
|
|
317
|
+
)
|
|
280
318
|
return response.text(str(twilio_response), content_type="text/xml")
|
|
281
319
|
|
|
282
320
|
return twilio_voice_webhook
|
|
@@ -295,6 +333,13 @@ class TwilioVoiceInput(InputChannel):
|
|
|
295
333
|
enhanced=self.enhanced,
|
|
296
334
|
)
|
|
297
335
|
|
|
336
|
+
if not messages:
|
|
337
|
+
# In case bot has a greet message disabled
|
|
338
|
+
# or if the bot is not configured to send an initial message
|
|
339
|
+
# we need to send a voice response with speech settings
|
|
340
|
+
voice_response.append(gather)
|
|
341
|
+
return voice_response
|
|
342
|
+
|
|
298
343
|
# Add pauses between messages.
|
|
299
344
|
# Add a listener to the last message to listen for user response.
|
|
300
345
|
for i, message in enumerate(messages):
|
|
@@ -308,6 +353,12 @@ class TwilioVoiceInput(InputChannel):
|
|
|
308
353
|
|
|
309
354
|
return voice_response
|
|
310
355
|
|
|
356
|
+
def _raise_invalid_credentials_exception(self) -> None:
|
|
357
|
+
raise InvalidConfigException(
|
|
358
|
+
"In TwilioVoice channel, either both username and password "
|
|
359
|
+
"or neither should be provided. "
|
|
360
|
+
)
|
|
361
|
+
|
|
311
362
|
|
|
312
363
|
class TwilioVoiceCollectingOutputChannel(CollectingOutputChannel):
|
|
313
364
|
"""Output channel that collects send messages in a list.
|
|
@@ -6,6 +6,7 @@ import structlog
|
|
|
6
6
|
|
|
7
7
|
import rasa.shared.utils.io
|
|
8
8
|
from rasa.e2e_test.constants import SCHEMA_FILE_PATH
|
|
9
|
+
from rasa.exceptions import ModelNotFound
|
|
9
10
|
from rasa.shared.utils.yaml import read_schema_file
|
|
10
11
|
|
|
11
12
|
if TYPE_CHECKING:
|
|
@@ -54,10 +55,9 @@ def validate_model_path(model_path: Optional[str], parameter: str, default: str)
|
|
|
54
55
|
return model_path
|
|
55
56
|
|
|
56
57
|
if model_path and not Path(model_path).exists():
|
|
57
|
-
|
|
58
|
+
raise ModelNotFound(
|
|
58
59
|
f"The provided model path '{model_path}' could not be found. "
|
|
59
|
-
|
|
60
|
-
UserWarning,
|
|
60
|
+
"Provide an existing model path."
|
|
61
61
|
)
|
|
62
62
|
|
|
63
63
|
elif model_path is None:
|
rasa/validator.py
CHANGED
|
@@ -511,7 +511,7 @@ class Validator:
|
|
|
511
511
|
condition_active_loop
|
|
512
512
|
and condition_active_loop not in self.domain.form_names
|
|
513
513
|
):
|
|
514
|
-
structlogger.
|
|
514
|
+
structlogger.error(
|
|
515
515
|
"validator.verify_slot_mappings.not_in_domain",
|
|
516
516
|
slot=slot.name,
|
|
517
517
|
form=condition_active_loop,
|
|
@@ -546,7 +546,6 @@ class Validator:
|
|
|
546
546
|
f"The slot needs to be added to this key."
|
|
547
547
|
),
|
|
548
548
|
)
|
|
549
|
-
everything_is_alright = False
|
|
550
549
|
|
|
551
550
|
return everything_is_alright
|
|
552
551
|
|
rasa/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: rasa-pro
|
|
3
|
-
Version: 3.10.
|
|
3
|
+
Version: 3.10.21
|
|
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
|
|
@@ -60,13 +60,13 @@ Requires-Dist: jsonschema (>=4.22)
|
|
|
60
60
|
Requires-Dist: keras (==2.14.0)
|
|
61
61
|
Requires-Dist: langchain (>=0.2.17,<0.3.0)
|
|
62
62
|
Requires-Dist: langchain-community (>=0.2.19,<0.3.0)
|
|
63
|
-
Requires-Dist: litellm (>=1.
|
|
63
|
+
Requires-Dist: litellm (>=1.64.1,<1.65.0)
|
|
64
64
|
Requires-Dist: matplotlib (>=3.7,<3.8)
|
|
65
65
|
Requires-Dist: mattermostwrapper (>=2.2,<2.3)
|
|
66
66
|
Requires-Dist: mlflow (>=2.15.1,<3.0.0) ; extra == "mlflow"
|
|
67
67
|
Requires-Dist: networkx (>=3.1,<3.2)
|
|
68
68
|
Requires-Dist: numpy (>=1.23.5,<1.25.0) ; python_version >= "3.9" and python_version < "3.11"
|
|
69
|
-
Requires-Dist: openai (>=1.
|
|
69
|
+
Requires-Dist: openai (>=1.68.2,<1.69.0)
|
|
70
70
|
Requires-Dist: openpyxl (>=3.1.5,<4.0.0)
|
|
71
71
|
Requires-Dist: opentelemetry-api (>=1.16.0,<1.17.0)
|
|
72
72
|
Requires-Dist: opentelemetry-exporter-jaeger (>=1.16.0,<1.17.0)
|
|
@@ -114,7 +114,7 @@ Requires-Dist: scikit-learn (>=1.1.3,<1.2) ; python_version >= "3.9" and python_
|
|
|
114
114
|
Requires-Dist: scipy (>=1.10.1,<1.11.0) ; python_version >= "3.9" and python_version < "3.11"
|
|
115
115
|
Requires-Dist: sentencepiece[sentencepiece] (>=0.1.99,<0.2.0) ; extra == "transformers" or extra == "full"
|
|
116
116
|
Requires-Dist: sentry-sdk (>=1.14.0,<1.15.0)
|
|
117
|
-
Requires-Dist: setuptools (>=
|
|
117
|
+
Requires-Dist: setuptools (>=78.1.0,<78.2.0)
|
|
118
118
|
Requires-Dist: sklearn-crfsuite (>=0.3.6,<0.4.0)
|
|
119
119
|
Requires-Dist: skops (>=0.10.0,<0.11.0)
|
|
120
120
|
Requires-Dist: slack-sdk (>=3.27.1,<4.0.0)
|
|
@@ -144,7 +144,7 @@ Requires-Dist: typing-utils (>=0.1.0,<0.2.0)
|
|
|
144
144
|
Requires-Dist: ujson (>=5.8,<6.0)
|
|
145
145
|
Requires-Dist: webexteamssdk (>=1.6.1,<1.7.0)
|
|
146
146
|
Requires-Dist: websockets (>=10.4,<11.0)
|
|
147
|
-
Requires-Dist: wheel (>=0.
|
|
147
|
+
Requires-Dist: wheel (>=0.45.1)
|
|
148
148
|
Project-URL: Documentation, https://rasa.com/docs
|
|
149
149
|
Project-URL: Homepage, https://rasa.com
|
|
150
150
|
Project-URL: Repository, https://github.com/rasahq/rasa
|
|
@@ -74,7 +74,7 @@ rasa/cli/project_templates/tutorial/data/flows.yml,sha256=9C23uQYm_JVguQJ7u51U4k
|
|
|
74
74
|
rasa/cli/project_templates/tutorial/data/patterns.yml,sha256=rIO8yjg6QU_l35pjQKFaqsOLpaWDMv4q1FS5O7VCV1Q,304
|
|
75
75
|
rasa/cli/project_templates/tutorial/domain.yml,sha256=DFnifO_0cD6PYKMsF011FoIDN_spaWbnuR7mhsF7dNk,402
|
|
76
76
|
rasa/cli/project_templates/tutorial/endpoints.yml,sha256=Mmjm5KDuyL_46dIe0issP8MKNzESYWU0JyYPWPVlWFw,1479
|
|
77
|
-
rasa/cli/run.py,sha256=
|
|
77
|
+
rasa/cli/run.py,sha256=tIizWzSwEt0fc7w1EpUcJtvLnIiYwzr-dr9l3kyhJ0c,4354
|
|
78
78
|
rasa/cli/scaffold.py,sha256=Eqv44T7b5cOd2FKLU1tSrAVPKwMfoiUIjc43PtaxJGg,7988
|
|
79
79
|
rasa/cli/shell.py,sha256=wymYOj6jdUON0y7pe-rpRqarWDGaDquU7PRp8knxqHk,4264
|
|
80
80
|
rasa/cli/studio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -85,7 +85,7 @@ rasa/cli/studio/upload.py,sha256=kdHqrVGsEbbqH5fz_HusWwJEycB31SHaPlXer8lXAE0,206
|
|
|
85
85
|
rasa/cli/telemetry.py,sha256=ZywhlOpp0l2Yz9oEcOGA2ej3SEkSTisKPpBhn_fS7tc,3538
|
|
86
86
|
rasa/cli/test.py,sha256=Ub7Cm9rFQ_tkB310jPYzVwU0Di88Z7IE0nLi1o-aYbA,8901
|
|
87
87
|
rasa/cli/train.py,sha256=_fQi7Sx15LGDyJDV20FJJ2oDZoPGHBfV8xf2t5Kzkpk,10298
|
|
88
|
-
rasa/cli/utils.py,sha256=
|
|
88
|
+
rasa/cli/utils.py,sha256=r1zxiGSPzSkvyrxzB1PxLiDIoADqwWXykONs7e9xpy8,15891
|
|
89
89
|
rasa/cli/visualize.py,sha256=YmRAATAfxHpgE8_PknGyM-oIujwICNzVftTzz6iLNNc,1256
|
|
90
90
|
rasa/cli/x.py,sha256=qJtNheYwdxxwZl-M2KcEbCk8lzWVGMfI6em-5-Xj05w,6825
|
|
91
91
|
rasa/constants.py,sha256=XZYjc2dDN2q3ixchLfRRNGAqxD2uL5-z_ZYoqJwLgxM,1309
|
|
@@ -119,7 +119,7 @@ rasa/core/channels/__init__.py,sha256=zXFLOIIbArflZ4bwo6Dnaj-_IY-BAEPnsRcpnxJyeF
|
|
|
119
119
|
rasa/core/channels/audiocodes.py,sha256=v3Sl6lTS6Ig6EyIQSpvj5pQAh3PXE1Y2l0pL7HfgF7s,17543
|
|
120
120
|
rasa/core/channels/botframework.py,sha256=xyc_n7DJ3uglqvkr0IrQ3xxPWgvaqSOLHWx9BUS0enE,11668
|
|
121
121
|
rasa/core/channels/callback.py,sha256=4LpjtJgQMAAXHwZrcVlVEUdpDTRqTe6n7XtwCusa75U,2750
|
|
122
|
-
rasa/core/channels/channel.py,sha256=
|
|
122
|
+
rasa/core/channels/channel.py,sha256=MRfoQXFQ3eGDA-6EEnGj3ii8PIj-DNb7rfUJKDn2v8g,17736
|
|
123
123
|
rasa/core/channels/console.py,sha256=fYhkSY8a_pn09ssjTczsKTALinABogpFJzzWTnL7MP8,8076
|
|
124
124
|
rasa/core/channels/development_inspector.py,sha256=oh2zrIEyQOl-HTKfwZmnMvJ6RZkhbqQrLeEEW0FX14k,2982
|
|
125
125
|
rasa/core/channels/facebook.py,sha256=ub8DCnTPe3_EyYtdYE49mo2Y-UNpURj6Qx9590oadeM,15816
|
|
@@ -259,7 +259,7 @@ rasa/core/channels/slack.py,sha256=3b8OZQ_gih5XBwhQ1q4BbBUC1SCAPaO9AoJEn2NaoQE,2
|
|
|
259
259
|
rasa/core/channels/socketio.py,sha256=k0b6aWE8gqhXBaLN7Sa5qaxqrWEFqf95ZeN-fX9bhPA,10675
|
|
260
260
|
rasa/core/channels/telegram.py,sha256=XvzU7KAgjmRcu2vUJ-5L2eYAAuYBqtcYlhq1Jo6kLns,10649
|
|
261
261
|
rasa/core/channels/twilio.py,sha256=c63uFLVKaK4Fj8MAn9BSQtxiV_Ezq4POezHo8zWIoiw,5938
|
|
262
|
-
rasa/core/channels/twilio_voice.py,sha256=
|
|
262
|
+
rasa/core/channels/twilio_voice.py,sha256=YOvm2jNaHGGPlhNZqf_9T9IHu7Ibp0FfuqGS0voTRL0,15007
|
|
263
263
|
rasa/core/channels/vier_cvg.py,sha256=PfvSluQqgJbP0JzZPFUvum3z7H55JPPeobcD-z5zCkw,13544
|
|
264
264
|
rasa/core/channels/voice_aware/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
265
265
|
rasa/core/channels/voice_aware/jambonz.py,sha256=aMXK2bGXioupVUUKZpkeYiAprilvVc2xEDBytRIcdMs,3481
|
|
@@ -422,7 +422,7 @@ rasa/e2e_test/stub_custom_action.py,sha256=teq8c5I6IuUsFX4lPdeBLY3j0SLSMCC95KmKx
|
|
|
422
422
|
rasa/e2e_test/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
423
423
|
rasa/e2e_test/utils/e2e_yaml_utils.py,sha256=XvP14DGHMfsNXyI7uTV-GTAdqv-r5FNmpFmvEIn93OM,1601
|
|
424
424
|
rasa/e2e_test/utils/io.py,sha256=HVsFb8uVPTlu7PcQdFmMNUFf0rRrD5Wiys0oMZqu2nA,19016
|
|
425
|
-
rasa/e2e_test/utils/validation.py,sha256=
|
|
425
|
+
rasa/e2e_test/utils/validation.py,sha256=k4zlwAMX6O45fyHFKqBXsBpeThpEVrQoj9B357AXJ7U,2336
|
|
426
426
|
rasa/engine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
427
427
|
rasa/engine/caching.py,sha256=Uu-0yn_eQGysmW7nsub-tb3gD8QNz6TNssNd-GIthuI,16451
|
|
428
428
|
rasa/engine/constants.py,sha256=w7hyRd2gU8JJyECqGG1meIS3volOCD3lYpVuzDLGz-s,623
|
|
@@ -726,10 +726,10 @@ rasa/utils/tensorflow/types.py,sha256=XGkfDZqvLVoaNQRpSTKdB2C4MGmXTarKdIJcLREvPl
|
|
|
726
726
|
rasa/utils/train_utils.py,sha256=f1NWpp5y6al0dzoQyyio4hc4Nf73DRoRSHDzEK6-C4E,21257
|
|
727
727
|
rasa/utils/url_tools.py,sha256=JQcHL2aLqLHu82k7_d9imUoETCm2bmlHaDpOJ-dKqBc,1218
|
|
728
728
|
rasa/utils/yaml.py,sha256=KjbZq5C94ZP7Jdsw8bYYF7HASI6K4-C_kdHfrnPLpSI,2000
|
|
729
|
-
rasa/validator.py,sha256=
|
|
730
|
-
rasa/version.py,sha256=
|
|
731
|
-
rasa_pro-3.10.
|
|
732
|
-
rasa_pro-3.10.
|
|
733
|
-
rasa_pro-3.10.
|
|
734
|
-
rasa_pro-3.10.
|
|
735
|
-
rasa_pro-3.10.
|
|
729
|
+
rasa/validator.py,sha256=AsFJ8e1zWHW-hnH_IB3SGBBl68vstKPrrqbAydgjVhQ,63149
|
|
730
|
+
rasa/version.py,sha256=cpxswgbUY4yfKqQlDXnZt-Jf5yzQqplOlDLIZ83yYPs,118
|
|
731
|
+
rasa_pro-3.10.21.dist-info/METADATA,sha256=-kMvwnYgDLyr_uiCHlvjarWFksCYqgh3gYANHgamm90,10856
|
|
732
|
+
rasa_pro-3.10.21.dist-info/NOTICE,sha256=7HlBoMHJY9CL2GlYSfTQ-PZsVmLmVkYmMiPlTjhuCqA,218
|
|
733
|
+
rasa_pro-3.10.21.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
|
|
734
|
+
rasa_pro-3.10.21.dist-info/entry_points.txt,sha256=ckJ2SfEyTPgBqj_I6vm_tqY9dZF_LAPJZA335Xp0Q9U,43
|
|
735
|
+
rasa_pro-3.10.21.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|