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 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
- reason_str = f"'{model_path}' not found."
66
- if model_path is None:
67
- reason_str = f"Parameter '{parameter}' not set."
68
-
69
- logger.debug(f"{reason_str} Using default location '{default}' instead.")
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)]
@@ -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 jwt
5
- from sanic import Sanic, Blueprint
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
- Optional,
11
+ Awaitable,
13
12
  Callable,
13
+ Dict,
14
14
  Iterable,
15
- Awaitable,
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.exceptions import RasaException
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 VoiceResponse, Gather
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
- from rasa.shared.core.events import BotUttered
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
- rasa.shared.utils.io.raise_warning(
58
+ raise ModelNotFound(
58
59
  f"The provided model path '{model_path}' could not be found. "
59
- f"Using default location '{default}' instead.",
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.warn(
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,3 +1,3 @@
1
1
  # this file will automatically be changed,
2
2
  # do not add anything but the version number here!
3
- __version__ = "3.10.20.dev2"
3
+ __version__ = "3.10.21"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: rasa-pro
3
- Version: 3.10.20.dev2
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.52.6,<1.53.0)
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.55.3,<1.56.0)
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 (>=70.0.0,<70.1.0)
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.40.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=KTpAq-seXO6r-gDA8jpYX0HDa56SZVNrNWZSSk5PyKw,4253
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=Q4WFdSYrqQvMY2nZY4i2P-vBimUh_cS08KEN-PGkJlg,15662
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=zTLZasDhDlldhi3v4dNMZWioxjxHsa9O4WSUJuoaN6U,14132
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=SrtNZOk3Yuk_QuUk45Hadj3PGvmwD0jeSzF90GbiUV0,13244
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=BRjTg3KOAlvGtfZJApOKW29V__cX6hJIG8A5RjzoW54,2348
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=gGsuHZivo9MDGA8WCkvYEK5Payi2lpLpOi_PLGwg1Qk,63202
730
- rasa/version.py,sha256=BnOvQO4zanqt5fkU7gC8HnO-fhxkHFrkXrU82Q7rpZ4,123
731
- rasa_pro-3.10.20.dev2.dist-info/METADATA,sha256=YlJJQxK--dvCotfk5RHG0t433DlBUO4ABGGWLJqmZ_U,10861
732
- rasa_pro-3.10.20.dev2.dist-info/NOTICE,sha256=7HlBoMHJY9CL2GlYSfTQ-PZsVmLmVkYmMiPlTjhuCqA,218
733
- rasa_pro-3.10.20.dev2.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
734
- rasa_pro-3.10.20.dev2.dist-info/entry_points.txt,sha256=ckJ2SfEyTPgBqj_I6vm_tqY9dZF_LAPJZA335Xp0Q9U,43
735
- rasa_pro-3.10.20.dev2.dist-info/RECORD,,
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,,