From 2cebc45b1197a906e6c3acaf6e5073d0f1603b7f Mon Sep 17 00:00:00 2001 From: Sara Silva Date: Wed, 11 Nov 2020 16:01:32 -0300 Subject: [PATCH 01/16] Add list handling in the send_custom_json method. --- changelog/5657.improvement.md | 1 + rasa/core/channels/facebook.py | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 changelog/5657.improvement.md diff --git a/changelog/5657.improvement.md b/changelog/5657.improvement.md new file mode 100644 index 000000000000..2063dd6cc3da --- /dev/null +++ b/changelog/5657.improvement.md @@ -0,0 +1 @@ +Add list handling in the `send_custom_json` method on `channels/facebook.py`. diff --git a/rasa/core/channels/facebook.py b/rasa/core/channels/facebook.py index 1b4e4b4c6f49..1aeba14e13fd 100644 --- a/rasa/core/channels/facebook.py +++ b/rasa/core/channels/facebook.py @@ -280,7 +280,18 @@ async def send_custom_json( ) -> None: """Sends custom json data to the output.""" - recipient_id = json_message.pop("sender", {}).pop("id", None) or recipient_id + if isinstance(json_message, list): + if isinstance(json_message.pop(), list): + recipient_id = json_message.pop().pop() or recipient_id + else: + recipient_id = json_message.pop().pop("id", None) or recipient_id + else: + if isinstance(json_message.pop("sender", {}), list): + recipient_id = json_message.pop("sender", {}).pop("id") or recipient_id + else: + recipient_id = ( + json_message.pop("sender", {}).pop("id", None) or recipient_id + ) self.messenger_client.send(json_message, recipient_id, "RESPONSE") From f69f4d239105467a6f88cb4693b4ea7b01ba231d Mon Sep 17 00:00:00 2001 From: Sara Silva Date: Mon, 7 Dec 2020 00:24:36 -0300 Subject: [PATCH 02/16] Fix lint problem --- rasa/core/channels/facebook.py | 1 - 1 file changed, 1 deletion(-) diff --git a/rasa/core/channels/facebook.py b/rasa/core/channels/facebook.py index 1aeba14e13fd..01eca240833d 100644 --- a/rasa/core/channels/facebook.py +++ b/rasa/core/channels/facebook.py @@ -279,7 +279,6 @@ async def send_custom_json( self, recipient_id: Text, json_message: Dict[Text, Any], **kwargs: Any ) -> None: """Sends custom json data to the output.""" - if isinstance(json_message, list): if isinstance(json_message.pop(), list): recipient_id = json_message.pop().pop() or recipient_id From 728dc91a34b7e9594129c570d2aa2300228b6772 Mon Sep 17 00:00:00 2001 From: jppgomes Date: Thu, 11 Mar 2021 11:01:27 -0300 Subject: [PATCH 03/16] adding tests and create a facebook file test --- .pre-commit-config.yaml | 4 +-- tests/core/test_channels.py | 23 -------------- tests/test_facebook.py | 61 +++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 25 deletions(-) create mode 100644 tests/test_facebook.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c3c23891f472..badacf5a804a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,10 +1,10 @@ repos: - repo: https://github.com/ambv/black - rev: 19.10b0 + rev: 20.8b1 hooks: - id: black - repo: https://github.com/thlorenz/doctoc - rev: master + rev: v2.0.0 hooks: - id: doctoc files: "CONTRIBUTING.md" diff --git a/tests/core/test_channels.py b/tests/core/test_channels.py index 12d1d2d0d6b1..8295f88c16ee 100644 --- a/tests/core/test_channels.py +++ b/tests/core/test_channels.py @@ -142,29 +142,6 @@ async def test_console_input(): assert b == {"message": "Test Input", "sender": "default"} -# USED FOR DOCS - don't rename without changing in the docs -def test_facebook_channel(): - # START DOC INCLUDE - from rasa.core.channels.facebook import FacebookInput - - input_channel = FacebookInput( - fb_verify="YOUR_FB_VERIFY", - # you need tell facebook this token, to confirm your URL - fb_secret="YOUR_FB_SECRET", # your app secret - fb_access_token="YOUR_FB_PAGE_ACCESS_TOKEN" - # token for the page you subscribed to - ) - - s = rasa.core.run.configure_app([input_channel], port=5004) - # END DOC INCLUDE - # the above marker marks the end of the code snipped included - # in the docs - routes_list = utils.list_routes(s) - - assert routes_list["fb_webhook.health"].startswith("/webhooks/facebook") - assert routes_list["fb_webhook.webhook"].startswith("/webhooks/facebook/webhook") - - # USED FOR DOCS - don't rename without changing in the docs def test_webexteams_channel(): # START DOC INCLUDE diff --git a/tests/test_facebook.py b/tests/test_facebook.py new file mode 100644 index 000000000000..d5159ecf0ddb --- /dev/null +++ b/tests/test_facebook.py @@ -0,0 +1,61 @@ +import logging +from typing import Dict +from unittest.mock import patch, MagicMock + +import pytest +from _pytest.monkeypatch import MonkeyPatch +from aiohttp import ClientTimeout +from aioresponses import aioresponses +from sanic import Sanic + +import rasa.core.run +from rasa.core import utils +from rasa.core.channels import RasaChatInput, console +from rasa.core.channels.channel import UserMessage +from rasa.core.channels.rasa_chat import ( + JWT_USERNAME_KEY, + CONVERSATION_ID_KEY, + INTERACTIVE_LEARNING_PERMISSION, +) +from rasa.core.channels.telegram import TelegramOutput +from rasa.utils.endpoints import EndpointConfig +from tests.core import utilities + +# this is needed so that the tests included as code examples look better +from tests.utilities import json_of_latest_request, latest_request + +logger = logging.getLogger(__name__) + +# USED FOR DOCS - don't rename without changing in the docs +def test_facebook_channel(): + # START DOC INCLUDE + from rasa.core.channels.facebook import FacebookInput + + input_channel = FacebookInput( + fb_verify="YOUR_FB_VERIFY", + # you need tell facebook this token, to confirm your URL + fb_secret="YOUR_FB_SECRET", # your app secret + fb_access_token="YOUR_FB_PAGE_ACCESS_TOKEN" + # token for the page you subscribed to + ) + + s = rasa.core.run.configure_app([input_channel], port=5004) + # END DOC INCLUDE + # the above marker marks the end of the code snipped included + # in the docs + routes_list = utils.list_routes(s) + + assert routes_list["fb_webhook.health"].startswith("/webhooks/facebook") + assert routes_list["fb_webhook.webhook"].startswith("/webhooks/facebook/webhook") + + +def test_facebook_send_custon_json_list(): + json_with_list = [["example text"]] + json_with_list_else = [{"id": "example text"}] + assert json_with_list.pop().pop() == "example text" + assert json_with_list_else.pop().pop("id", None) == "example text" + + +def test_facebook_send_custon_json(): + json_without_list = {"sender": {"id": "example text"}} + assert json_without_list.pop("sender", {}).pop("id", None) == "example text" From d2e50c2025efc9b9ebc45c5f59693e624910503e Mon Sep 17 00:00:00 2001 From: Mehdi-Bachar Date: Sun, 21 Mar 2021 18:29:15 -0400 Subject: [PATCH 04/16] Fixed issue (#5657) in MessengerBot.send_custom_json --- .pre-commit-config.yaml | 4 +-- rasa/core/channels/facebook.py | 14 ++------ tests/core/test_channels.py | 23 ++++++++++++ tests/test_facebook.py | 66 +++++++++++++++++++++++++++++----- 4 files changed, 85 insertions(+), 22 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index badacf5a804a..c3c23891f472 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,10 +1,10 @@ repos: - repo: https://github.com/ambv/black - rev: 20.8b1 + rev: 19.10b0 hooks: - id: black - repo: https://github.com/thlorenz/doctoc - rev: v2.0.0 + rev: master hooks: - id: doctoc files: "CONTRIBUTING.md" diff --git a/rasa/core/channels/facebook.py b/rasa/core/channels/facebook.py index 01eca240833d..b64e2a009f31 100644 --- a/rasa/core/channels/facebook.py +++ b/rasa/core/channels/facebook.py @@ -279,18 +279,8 @@ async def send_custom_json( self, recipient_id: Text, json_message: Dict[Text, Any], **kwargs: Any ) -> None: """Sends custom json data to the output.""" - if isinstance(json_message, list): - if isinstance(json_message.pop(), list): - recipient_id = json_message.pop().pop() or recipient_id - else: - recipient_id = json_message.pop().pop("id", None) or recipient_id - else: - if isinstance(json_message.pop("sender", {}), list): - recipient_id = json_message.pop("sender", {}).pop("id") or recipient_id - else: - recipient_id = ( - json_message.pop("sender", {}).pop("id", None) or recipient_id - ) + if isinstance(json_message, dict) and "sender" in json_message.keys(): + recipient_id = json_message.pop("sender", {}).pop("id") or recipient_id self.messenger_client.send(json_message, recipient_id, "RESPONSE") diff --git a/tests/core/test_channels.py b/tests/core/test_channels.py index 8295f88c16ee..12d1d2d0d6b1 100644 --- a/tests/core/test_channels.py +++ b/tests/core/test_channels.py @@ -142,6 +142,29 @@ async def test_console_input(): assert b == {"message": "Test Input", "sender": "default"} +# USED FOR DOCS - don't rename without changing in the docs +def test_facebook_channel(): + # START DOC INCLUDE + from rasa.core.channels.facebook import FacebookInput + + input_channel = FacebookInput( + fb_verify="YOUR_FB_VERIFY", + # you need tell facebook this token, to confirm your URL + fb_secret="YOUR_FB_SECRET", # your app secret + fb_access_token="YOUR_FB_PAGE_ACCESS_TOKEN" + # token for the page you subscribed to + ) + + s = rasa.core.run.configure_app([input_channel], port=5004) + # END DOC INCLUDE + # the above marker marks the end of the code snipped included + # in the docs + routes_list = utils.list_routes(s) + + assert routes_list["fb_webhook.health"].startswith("/webhooks/facebook") + assert routes_list["fb_webhook.webhook"].startswith("/webhooks/facebook/webhook") + + # USED FOR DOCS - don't rename without changing in the docs def test_webexteams_channel(): # START DOC INCLUDE diff --git a/tests/test_facebook.py b/tests/test_facebook.py index d5159ecf0ddb..6a978d3f6d33 100644 --- a/tests/test_facebook.py +++ b/tests/test_facebook.py @@ -1,6 +1,8 @@ import logging from typing import Dict from unittest.mock import patch, MagicMock +from rasa.core.channels.facebook import MessengerBot +from fbmessenger import MessengerClient import pytest from _pytest.monkeypatch import MonkeyPatch @@ -27,6 +29,8 @@ logger = logging.getLogger(__name__) # USED FOR DOCS - don't rename without changing in the docs + + def test_facebook_channel(): # START DOC INCLUDE from rasa.core.channels.facebook import FacebookInput @@ -49,13 +53,59 @@ def test_facebook_channel(): assert routes_list["fb_webhook.webhook"].startswith("/webhooks/facebook/webhook") -def test_facebook_send_custon_json_list(): - json_with_list = [["example text"]] - json_with_list_else = [{"id": "example text"}] - assert json_with_list.pop().pop() == "example text" - assert json_with_list_else.pop().pop("id", None) == "example text" +async def test_facebook_send_custom_json(): + # This function tests cases when the custom json is a list + # The send_custom_json function doesn't return anything. Rather + # it calls an object MessengerClient, that will + # then make a post request. + # Since the purpose is to test the extraction of the recipient_id + # by the MessengerBot.send_custom_json_list we + # modify MessengerClient (from the fbmessenger pypackage) to + # return the recipient ID. + + json_without_id = { + "blocks": [ + {"type": "title", "text": {"text": "Conversation progress"}}, + { + "type": "progression_bar", + "text": {"text": "progression 1", "level": "1"}, + }, + ] + } + json_with_id = { + "blocks": [ + {"type": "title", "text": {"text": "Conversation progress"}}, + { + "type": "progression_bar", + "text": {"text": "progression 1", "level": "1"}, + }, + ], + "sender": {"id": "test_json_id"}, + } + class TestableMessengerClient(MessengerClient): + def __init__(self, page_access_token, **kwargs): + self.recipient_id = "" + super(TestableMessengerClient, self).__init__(page_access_token, **kwargs) -def test_facebook_send_custon_json(): - json_without_list = {"sender": {"id": "example text"}} - assert json_without_list.pop("sender", {}).pop("id", None) == "example text" + def send( + self, + payload, + recipient_id, + messaging_type="RESPONSE", + notification_type="REGULAR", + timeout=None, + tag=None, + ): + self.recipient_id = recipient_id + + messenger_client = TestableMessengerClient(page_access_token="test_token") + messenger_bot = MessengerBot(messenger_client) + await messenger_bot.send_custom_json( + recipient_id="test_id", json_message=json_without_id + ) + assert messenger_bot.messenger_client.recipient_id == "test_id" + await messenger_bot.send_custom_json( + recipient_id="test_id", json_message=json_with_id + ) + assert messenger_bot.messenger_client.recipient_id == "test_json_id" From aa7b4eb4847320b6e8d28da577146c9c74a6d58d Mon Sep 17 00:00:00 2001 From: ErickGiffoni Date: Sat, 7 Aug 2021 15:39:25 -0300 Subject: [PATCH 05/16] add a support guide for macOS users regarding rasa development installation --- macOS-support.md | 170 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 macOS-support.md diff --git a/macOS-support.md b/macOS-support.md new file mode 100644 index 000000000000..95fb37f21c26 --- /dev/null +++ b/macOS-support.md @@ -0,0 +1,170 @@ +# Development Internals Support for macOS users + +When trying to get virtual env and dependencies running, macOS users may + +experience some compiler problems. + +If that is your case, this guide is intended to help you get things working. + +It was built based on common problems that were reported to the Rasa repository. + +It is possible that your problem is not listed here yet, but try reading the + +bellow because it might give you an insight. + + +## Problems with pyenv + + +### 1. ```pyenv install 3.7.6``` failed + + +If you tried the command above and it failed, you probably got something like + +this: + + +Error example 1 +``` +> pyenv install 3.7.6 +python-build: use openssl@1.1 from homebrew +python-build: use readline from homebrew +Downloading Python-3.7.6.tar.xz... +-> https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tar.xz +Installing Python-3.7.6... +python-build: use readline from homebrew +python-build: use zlib from xcode sdk + +BUILD FAILED (OS X 11.2.1 using python-build 20180424) + +Inspect or clean up the working tree at /var/folders/g8/frp_8d7s2639spgcxqyd3kpw0000gn/T/python-build.20210215142044.19884 +Results logged to /var/folders/g8/frp_8d7s2639spgcxqyd3kpw0000gn/T/python-build.20210215142044.19884.log + +Last 10 log lines: +/usr/local/include/pthread.h:197:34: note: expanded from macro '_PTHREAD_SWIFT_IMPORTER_NULLABILITY_COMPAT' + defined(SWIFT_CLASS_EXTRA) && (!defined(SWIFT_SDK_OVERLAY_PTHREAD_EPOCH) || (SWIFT_SDK_OVERLAY_PTHREAD_EPOCH < 1)) + ^ +``` + +or even this: + + +Error example 2 +``` +[...] +./Modules/posixmodule.c:8436:15: error: implicit declaration of function 'sendfile' is invalid in C99 [-Werror,-Wimplicit-function-declaration] + ret = sendfile(in, out, offset, &sbytes, &sf, flags); + ^ +1 error generated. +make: *** [Modules/posixmodule.o] Error 1 +make: *** Waiting for unfinished jobs.... +1 warning generated. +``` + + +> **Possible solution** + + +Applying a **patch** when running the command worked for some users. You can do + +it like this: + + +```$ pyenv install --patch 3.7.6 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch)``` + + +The above should work just fine, but if life doesn't go easy on you, it's possible + +that an error like the one bellow showed up: + + +Error example 3 +``` +Last 10 log lines: + File "/private/var/folders/c8/05hjylz57llf63n1bhhv9n6w0000gn/T/python-build.20210804100934.72978/Python-3.7.6/Lib/ensurepip/__main__.py", line 5, in + sys.exit(ensurepip._main()) + File "/private/var/folders/c8/05hjylz57llf63n1bhhv9n6w0000gn/T/python-build.20210804100934.72978/Python-3.7.6/Lib/ensurepip/__init__.py", line 204, in _main + default_pip=args.default_pip, + File "/private/var/folders/c8/05hjylz57llf63n1bhhv9n6w0000gn/T/python-build.20210804100934.72978/Python-3.7.6/Lib/ensurepip/__init__.py", line 117, in _bootstrap + return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths) + File "/private/var/folders/c8/05hjylz57llf63n1bhhv9n6w0000gn/T/python-build.20210804100934.72978/Python-3.7.6/Lib/ensurepip/__init__.py", line 27, in _run_pip + import pip._internal +**zipimport.ZipImportError: can't decompress data; zlib not available** +make: *** [install] Error 1 +``` + + +> **More possible solutions** + + +- You may need to install *zlib*. You can do it with Homebrew: + +```$ brew install zlib``` + +- It is possible that your shell is not able to find *zilib*. To help it, + +exporting some flags may work: + +``` +$ export LDFLAGS="-L/usr/local/opt/zlib/lib" +$ export CPPFLAGS="-I/usr/local/opt/zlib/include" +$ export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig" +``` + +- Furthermore, you might need to create symbolic links regarding *zlib* so your + +include path can find it: + +``` +$ ln -s /usr/local/Cellar/zlib/1.2.11/include/* /usr/local/include/ +$ ln -s /usr/local/Cellar/zlib/1.2.11/lib/* /usr/local/lib/ +``` + +- If you did everything above and still got errors, you might also reinstall + +python with Homebrew: + +```$ brew reinstall python``` + + +After all that, **run the command again**: + +```$ pyenv install --patch 3.7.6 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch)``` + + +## Problems with my venv + + +- You may want to guarantee **creating your venv** with the right **python version**. + +For example, ```python3 -m venv .venv```. + +Then, activate the venv: ```$ source .venv/bin/activate```. + + +
+ +## I've got no more problems !!! + + +Nice ! Now you can run one simple command and you'll be ready to work: + + +```$ make install``` + + +
+ +### References + +- https://github.com/RasaHQ/rasa/issues/7956 + +- https://github.com/pyenv/pyenv/issues/1643 + +- https://github.com/python-pillow/Pillow/issues/1461 + +- https://stackoverflow.com/questions/38749403/python-no-module-named-zlib-mac-os-x-el-capitan-10-11-6 + +- https://github.com/pyenv/pyenv/issues/1764#issuecomment-758400362 + +- https://github.com/grpc/grpc/issues/24677#issuecomment-775458281 From 3966ecee74ac4b49c456c8460d93d56d1238d76c Mon Sep 17 00:00:00 2001 From: ErickGiffoni Date: Sat, 7 Aug 2021 15:40:44 -0300 Subject: [PATCH 06/16] update README with a link to the new macOS support guide --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 8b3faa6f0caa..0bba8c1e5e94 100644 --- a/README.md +++ b/README.md @@ -159,6 +159,9 @@ To install dependencies and `rasa` itself in editable mode execute make install ``` +If you are a **macOS user** and you're having trouble, this [macOS support guide](macOS-support.md) +might help you. + ### Running and changing the documentation First of all, install all the required dependencies: From f007a3005358235e750570c2d6e1ea73a17a366c Mon Sep 17 00:00:00 2001 From: ErickGiffoni Date: Sat, 7 Aug 2021 19:39:44 -0300 Subject: [PATCH 07/16] Apply suggestions from code review Co-authored-by: David --- macOS-support.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/macOS-support.md b/macOS-support.md index 95fb37f21c26..9d9523eed577 100644 --- a/macOS-support.md +++ b/macOS-support.md @@ -1,16 +1,16 @@ -# Development Internals Support for macOS users +# Development Internal Support for macOS users When trying to get virtual env and dependencies running, macOS users may experience some compiler problems. -If that is your case, this guide is intended to help you get things working. +If that is the case, this guide is intended to help you get things working. It was built based on common problems that were reported to the Rasa repository. It is possible that your problem is not listed here yet, but try reading the -bellow because it might give you an insight. +below because it might give you an insight. ## Problems with pyenv @@ -75,7 +75,7 @@ it like this: The above should work just fine, but if life doesn't go easy on you, it's possible -that an error like the one bellow showed up: +that an error like the one below showed up: Error example 3 From de28d044377e333724b190fc3b0d11802dbdd7f0 Mon Sep 17 00:00:00 2001 From: Aciel Eshky Date: Fri, 6 Aug 2021 14:52:01 +0100 Subject: [PATCH 08/16] Merge 2.8.2 to main (#9285) * Add ability to point to a certificate in endpoints.yml (#9118) * Add cert file functionality to Endpoint * Apply suggestions from code review types Co-authored-by: Tobias Wochinger * update changelog Co-authored-by: Tobias Wochinger * Fix epoch override for TEDPolicy (#9182) * bump rasa-sdk dep and min compat version * fix bug add tests * add changelog * change test cases * remove test cases * prepared release of version 2.8.1 (#9183) * update rasa-sdk * prepared release of version 2.8.1 * update lock * Make UnexpecTEDIntentPolicy compatible with E2E data (#9203) * bump rasa-sdk dep and min compat version * add test and code * add changelog and refactor method * add test * more test cases * use applied_events * 2.8.x: Remove experimental feature warning for story validation and entity roles and groups (#9237) * I removed the experimental feature designation from the docs. * I removed the entity roles and groups experimental feature warning message from the code, and tested it using 'rasa train' on a minimal example. * I removed the unused import: rasa.shared.utils.common * Adding change log files for issues 8791 and 8024. * Rewording change logs to make it clear that the behaviour of the features remains unchanged. * prepared release of version 2.8.2 (#9262) * prepared release of version 2.8.2 * Updated the date of release. * install yarn dependency in cloned repository, in docs publication workflow * silence yarn warning * Fix typo in push_docs_to_branch.sh * Generated a new poetry lock file Co-authored-by: Joe Juzl Co-authored-by: Tobias Wochinger Co-authored-by: Daksh Varshneya Co-authored-by: m-vdb --- CHANGELOG.mdx | 33 ++ data/test_endpoints/cert.pem | 32 ++ data/test_endpoints/example_endpoints.yml | 3 + docs/docs/command-line-interface.mdx | 7 - docs/docs/nlu-training-data.mdx | 8 - poetry.lock | 366 ++++++++++-------- pyproject.toml | 4 +- rasa/core/policies/ted_policy.py | 24 +- .../core/policies/unexpected_intent_policy.py | 32 ++ rasa/nlu/train.py | 5 - rasa/utils/endpoints.py | 18 + rasa/version.py | 2 +- scripts/push_docs_to_branch.sh | 5 +- tests/core/policies/test_ted_policy.py | 34 +- .../policies/test_unexpected_intent_policy.py | 294 +++++++++++++- tests/utils/test_endpoints.py | 45 +++ 16 files changed, 711 insertions(+), 201 deletions(-) create mode 100644 data/test_endpoints/cert.pem diff --git a/CHANGELOG.mdx b/CHANGELOG.mdx index 4b676cd09feb..e4c5a138e545 100644 --- a/CHANGELOG.mdx +++ b/CHANGELOG.mdx @@ -16,6 +16,39 @@ https://github.com/RasaHQ/rasa/tree/main/changelog/ . --> +## [2.8.2] - 2021-08-04 +### Bugfixes +- [#9203](https://github.com/rasahq/rasa/issues/9203): Fixes a bug which caused training of `UnexpecTEDIntentPolicy` to crash when end-to-end training stories were included in the training data. + + Stories with end-to-end training data will now be skipped for the training of `UnexpecTEDIntentPolicy`. + +### Improved Documentation +- [#8024](https://github.com/rasahq/rasa/issues/8024): Removing the experimental feature warning for the `story validation` tool from the rasa docs. + The behaviour of the feature remains unchanged. +- [#8791](https://github.com/rasahq/rasa/issues/8791): Removing the experimental feature warning for `entity roles and groups` from the rasa docs, + and from the code where it previously appeared as a print statement. + The behaviour of the feature remains otherwise unchanged. + + +## [2.8.1] - 2021-07-22 +### Improvements +- [#9085](https://github.com/rasahq/rasa/issues/9085): Add support for `cafile` parameter in `endpoints.yaml`. + This will load a custom local certificate file and use it when making requests to that endpoint. + + For example: + + ```yaml + action_endpoint: + url: https://localhost:5055/webhook + cafile: ./cert.pem + ``` + + This means that requests to the action server `localhost:5055` will use the certificate `cert.pem` located in the current working directory. + +### Bugfixes +- [#9182](https://github.com/rasahq/rasa/issues/9182): Fixes wrong overriding of `epochs` parameter when `TEDPolicy` or `UnexpecTEDIntentPolicy` is not loaded in finetune mode. + + ## [2.8.0] - 2021-07-12 ### Deprecations and Removals - [#9045](https://github.com/rasahq/rasa/issues/9045): The option `model_confidence=linear_norm` is deprecated and will be removed in Rasa Open Source `3.0.0`. diff --git a/data/test_endpoints/cert.pem b/data/test_endpoints/cert.pem new file mode 100644 index 000000000000..cd25e0551178 --- /dev/null +++ b/data/test_endpoints/cert.pem @@ -0,0 +1,32 @@ +-----BEGIN CERTIFICATE----- +MIIFiDCCA3ACCQCgeYtdshQ3bjANBgkqhkiG9w0BAQsFADCBhTELMAkGA1UEBhMC +ZGUxDzANBgNVBAgMBmJlcmxpbjEPMA0GA1UEBwwGYmVybGluMQ0wCwYDVQQKDARy +YXNhMQ0wCwYDVQQLDARyYXNhMRYwFAYDVQQDDA1teWFjdGlvbnMuZGV2MR4wHAYJ +KoZIhvcNAQkBFg9qLmp1emxAcmFzYS5jb20wHhcNMjEwNzEzMTAwNTI5WhcNMjIw +NzEzMTAwNTI5WjCBhTELMAkGA1UEBhMCZGUxDzANBgNVBAgMBmJlcmxpbjEPMA0G +A1UEBwwGYmVybGluMQ0wCwYDVQQKDARyYXNhMQ0wCwYDVQQLDARyYXNhMRYwFAYD +VQQDDA1teWFjdGlvbnMuZGV2MR4wHAYJKoZIhvcNAQkBFg9qLmp1emxAcmFzYS5j +b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDH4D74AQ0vlk7McR+a +syG/38maXyqFM1XKybxxjUnBqooay4v8+wiByn3LK3IjVdnUBeuJLe8jAhbbDXgK +okbjuQb8U7o3T/rW4rrFKoT3bpF+VOfULmzW51jREYB/mtd+TvhBLhMlxytxPVzU +Rq3xT5NV6UILaTuWUFrQNP/CcwzjCPJXfPHwQaY8G5Ua31PqOBe2rNxHInIcctbg +DSwUxtcCCroIOIC5THoiYDzMMwGryZIabtdRbp/XAvcnrDxqXZGLxNEKKM7xOLTG +HfJfqqlLhCMn7KOie8OC0NGX36rIDUJHV+JVenDqgFdu7h4sRNFal/w0dstcZQBy +68A5GcQuuyggLv2XvTWThc1WycDAQ/gCoOsLTnuDW2KS1v/W1Rckyvm0R45FwIv/ +BomnAEDWpUao8Jy4k8/b10xaX1kDyikz3uIeM0AtDY1cxnBowk+82yL1uC0UIcRp +8bCxp9U9y+uk80+1+OHnb8CIOjR3jzVSdLnnMeZyld+5g2qJ8WbPvXJmzo5sh9yb +PKMx8zwODM3YyJm6WgRkZXNRCEytIeNMFBr4gfa+iBvCn2PBERMDrG5gzOV7VSY8 +JJTCpbmAkq9DnxLLMO1PqK+l+yD3xtE5xIx4lF4vMoy29w1K046pyORcRBDAOHyN +WA3YrlWVghZPCPH3eMaZ8H+gPQIDAQABMA0GCSqGSIb3DQEBCwUAA4ICAQBGAKk5 +0Rts2Dob9DBh0/lVTSeIa9tmjlpeBf1ZsqUVCkmAs5nhE+3ydGeNYTw1zoJ7hiHn +27IiB6yq+zu1qUoHFLv7W0xrZ2cW2M2df0mYVG1bFH9pmSeCQt4/ekDjnztZLgNb +fQiKpVWk7GLrAKhAhdoYE/t5uKT5Ns5vp9g5AsIIlMNPZqQAYdhX7/6zI755xuHp +2Dp232zKpmh+6bYLYeuI6bLDQ2HLSBhxmwEf4YZCi3R1LwxjnomXT9yTyd2PDN/B +WrV7G6zrPRcYq/QeLVKHDCNbUtZrwko5dR2Siz4ds8vLN1pX4v5y88WkIniZox+Q +9GyYvQ/m11rB+0kp9LKfCswW/F2AIznLgnQxfgXgrw/DUiUkQ0hQ/S5trwSQPHpO +Uf4g4yXh1MZg38kadSslqmkwMg0lI4MYdyCNjsVbH+ESqc5FkfFfR6TOS1wuevIQ +OFbF6BfkA/b4Faq9Uf+pxA1+9bt6EI5No2SnZ0InGvmbqnPkU78SCa7qTmq2UHZ1 +fvLejsbOTHZpu72lj/mXVZAgrnXzcuj+M0uc+k/vAWp1sx7fAapsMlO+8Unn6QGq +/BE3rSj1OnYfb6c7w+yF/8mRx2t0OWyJinkNrOAScFdDWalnprc9woattsRunhvF +xdPTIWctCZpcmgDvh7XJMP47CGvOHCSFtgsEIg== +-----END CERTIFICATE----- diff --git a/data/test_endpoints/example_endpoints.yml b/data/test_endpoints/example_endpoints.yml index 5ca07a8dcab5..049d6cd32b89 100644 --- a/data/test_endpoints/example_endpoints.yml +++ b/data/test_endpoints/example_endpoints.yml @@ -23,4 +23,7 @@ tracker_store: #db: rasa #user: username #password: password +action_endpoint: + url: http://localhost:5055/webhook + cafile: ./some_test_file empty: diff --git a/docs/docs/command-line-interface.mdx b/docs/docs/command-line-interface.mdx index 0edefafb0b72..8d3ac8ac751d 100644 --- a/docs/docs/command-line-interface.mdx +++ b/docs/docs/command-line-interface.mdx @@ -408,13 +408,6 @@ To interrupt validation even for minor issues such as unused intents or response The `rasa data validate stories` command assumes that all your story names are unique! ::: -:::caution experimental feature -The `rasa data validate stories` command is an experimental feature. We introduce experimental -features to get feedback from our community, so we encourage you to try it out! However, the functionality -might be changed or removed in the future. If you have feedback (positive or negative) please share -it with us on the [Rasa Forum](https://forum.rasa.com/). -::: - You can use `rasa data validate` with additional arguments, e.g. to specify the location of your data and domain files: diff --git a/docs/docs/nlu-training-data.mdx b/docs/docs/nlu-training-data.mdx index 682e6eca9603..aae92bb3a0fa 100644 --- a/docs/docs/nlu-training-data.mdx +++ b/docs/docs/nlu-training-data.mdx @@ -168,14 +168,6 @@ When using lookup tables with `RegexFeaturizer`, provide enough examples for the ## Entities Roles and Groups -:::caution -This feature is experimental. -We introduce experimental features to get feedback from our community, so we encourage you to try it out! -However, the functionality might be changed or removed in the future. -If you have feedback (positive or negative) please share it with us on the [Rasa Forum](https://forum.rasa.com). - -::: - Annotating words as custom entities allows you to define certain concepts in your training data. For example, you can identify cities by annotating them: diff --git a/poetry.lock b/poetry.lock index 2f859107a9ef..f3749d028d4b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -162,7 +162,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "azure-core" -version = "1.16.0" +version = "1.17.0" description = "Microsoft Azure Core Library for Python" category = "dev" optional = false @@ -248,20 +248,23 @@ numpy = ">=1.15.0" [[package]] name = "boto3" -version = "1.18.3" +version = "1.18.15" description = "The AWS SDK for Python" category = "main" optional = false python-versions = ">= 3.6" [package.dependencies] -botocore = ">=1.21.3,<1.22.0" +botocore = ">=1.21.15,<1.22.0" jmespath = ">=0.7.1,<1.0.0" s3transfer = ">=0.5.0,<0.6.0" +[package.extras] +crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] + [[package]] name = "botocore" -version = "1.21.3" +version = "1.21.15" description = "Low-level, data-driven core of boto 3." category = "main" optional = false @@ -668,7 +671,7 @@ test = ["betamax (>=0.8.0)", "pytest (>2.3.5)", "betamax-matchers (>=0.1.0)", "u [[package]] name = "gitpython" -version = "3.1.18" +version = "3.1.20" description = "Python Git Library" category = "dev" optional = false @@ -676,11 +679,11 @@ python-versions = ">=3.6" [package.dependencies] gitdb = ">=4.0.1,<5" -typing-extensions = {version = ">=3.7.4.0", markers = "python_version < \"3.8\""} +typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.10\""} [[package]] name = "google-api-core" -version = "1.31.0" +version = "1.31.1" description = "Google API client core library" category = "dev" optional = false @@ -702,7 +705,7 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2)"] [[package]] name = "google-auth" -version = "1.33.1" +version = "1.34.0" description = "Google Authentication Library" category = "main" optional = false @@ -721,7 +724,7 @@ reauth = ["pyu2f (>=0.1.5)"] [[package]] name = "google-auth-oauthlib" -version = "0.4.4" +version = "0.4.5" description = "Google Authentication Library" category = "main" optional = false @@ -736,7 +739,7 @@ tool = ["click (>=6.0.0)"] [[package]] name = "google-cloud-core" -version = "1.7.1" +version = "1.7.2" description = "Google Cloud API client core library" category = "dev" optional = false @@ -791,7 +794,7 @@ six = "*" [[package]] name = "google-resumable-media" -version = "1.3.1" +version = "1.3.3" description = "Utilities for Google Media Downloads and Resumable Uploads" category = "dev" optional = false @@ -832,7 +835,7 @@ docs = ["sphinx"] [[package]] name = "grpcio" -version = "1.38.1" +version = "1.39.0" description = "HTTP/2-based RPC framework" category = "main" optional = false @@ -842,7 +845,7 @@ python-versions = "*" six = ">=1.5.2" [package.extras] -protobuf = ["grpcio-tools (>=1.38.1)"] +protobuf = ["grpcio-tools (>=1.39.0)"] [[package]] name = "h11" @@ -940,7 +943,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "importlib-metadata" -version = "4.6.1" +version = "4.6.3" description = "Read metadata from Python packages" category = "main" optional = false @@ -1067,7 +1070,7 @@ format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator [[package]] name = "jwcrypto" -version = "0.9.1" +version = "1.0" description = "Implementation of JOSE Web standards" category = "main" optional = true @@ -1076,7 +1079,6 @@ python-versions = "*" [package.dependencies] cryptography = ">=2.3" deprecated = "*" -six = "*" [[package]] name = "kafka-python" @@ -1832,7 +1834,7 @@ python-versions = ">=3.6" [[package]] name = "pytelegrambotapi" -version = "3.8.1" +version = "3.8.2" description = "Python Telegram bot api." category = "main" optional = false @@ -1911,16 +1913,17 @@ pytest = ">=3.10" [[package]] name = "pytest-sanic" -version = "1.6.2" +version = "1.7.1" description = "a pytest plugin for Sanic" category = "dev" optional = false -python-versions = ">=3.6,<4.0" +python-versions = ">=3.6.1" [package.dependencies] -aiohttp = ">=3.6.2,<4.0.0" async_generator = ">=1.10,<2.0" +httpx = ">=0.15.4" pytest = ">=5.2" +websockets = ">=8.1,<9.0" [[package]] name = "pytest-timeout" @@ -1971,11 +1974,11 @@ six = ">=1.5" [[package]] name = "python-engineio" -version = "4.2.0" -description = "Engine.IO server" +version = "4.2.1" +description = "Engine.IO server and client for Python" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" [package.extras] asyncio_client = ["aiohttp (>=3.4)"] @@ -1983,18 +1986,18 @@ client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"] [[package]] name = "python-socketio" -version = "5.3.0" -description = "Socket.IO server" +version = "5.4.0" +description = "Socket.IO server and client for Python" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" [package.dependencies] bidict = ">=0.21.0" python-engineio = ">=4.1.0" [package.extras] -asyncio_client = ["aiohttp (>=3.4)", "websockets (>=7.0)"] +asyncio_client = ["aiohttp (>=3.4)"] client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"] [[package]] @@ -2029,7 +2032,7 @@ docs = ["Sphinx (>=3.3,<4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)", "sphinx-auto [[package]] name = "rasa-sdk" -version = "2.8.0" +version = "2.8.1" description = "Open source machine learning framework to automate text- and voice-based conversations: NLU, dialogue management, connect to Slack, Facebook, and more - Create chatbots and voice assistants" category = "main" optional = false @@ -2041,6 +2044,7 @@ requests = ">=2.23.0,<2.26.0" sanic = ">=19.12.2,<21.0.0" sanic-cors = ">=0.10.0,<0.11.0" typing-extensions = ">=3.7.4,<4.0.0" +urllib3 = ">=1.26.5,<2.0.0" uvloop = {version = "<0.15.0", markers = "sys_platform != \"win32\""} [[package]] @@ -2293,7 +2297,7 @@ tests = ["matplotlib (>=2.1.1)", "scikit-image (>=0.13)", "pandas (>=0.25.0)", " [[package]] name = "scipy" -version = "1.7.0" +version = "1.7.1" description = "SciPy: Scientific Library for Python" category = "main" optional = false @@ -2320,7 +2324,7 @@ python-versions = "*" [[package]] name = "sentry-sdk" -version = "1.3.0" +version = "1.3.1" description = "Python client for Sentry (https://sentry.io)" category = "main" optional = false @@ -2489,7 +2493,7 @@ python-versions = ">=3.6" [[package]] name = "sqlalchemy" -version = "1.4.21" +version = "1.4.22" description = "Database Abstraction Library" category = "main" optional = false @@ -2789,7 +2793,7 @@ dev = ["packaging"] [[package]] name = "tqdm" -version = "4.61.2" +version = "4.62.0" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -2912,7 +2916,7 @@ python-versions = "*" [[package]] name = "types-requests" -version = "2.25.0" +version = "2.25.2" description = "Typing stubs for requests" category = "dev" optional = false @@ -3093,7 +3097,7 @@ transformers = ["transformers"] [metadata] lock-version = "1.1" python-versions = ">=3.7,<3.9" -content-hash = "cd5061ac13ab79b5963cbed71a77d90faef45528003b4ad27e22f16e832fb359" +content-hash = "5a97eda052614a732021af9d203317ca0f8320e1558ba1ce5e8174adf855bfe1" [metadata.files] absl-py = [ @@ -3184,8 +3188,8 @@ attrs = [ {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, ] azure-core = [ - {file = "azure-core-1.16.0.zip", hash = "sha256:b1c7d2e01846074f258c8b2e592239aef836a2b1c27d8d0e8491a2c7e2906ef4"}, - {file = "azure_core-1.16.0-py2.py3-none-any.whl", hash = "sha256:83ef981ca4ad167c1df7b1ec5c4bda74999fcd21cacc048e83cf8ce51c61d5c2"}, + {file = "azure-core-1.17.0.zip", hash = "sha256:25407390dde142d3e41ecf78bb18cedda9b7f7a0af558d082dec711c4a334f46"}, + {file = "azure_core-1.17.0-py2.py3-none-any.whl", hash = "sha256:906e031a8241fe0794ec4137aca77a1aeab2ebde5cd6049c377d05cb6b87b691"}, ] azure-storage-blob = [ {file = "azure-storage-blob-12.8.1.zip", hash = "sha256:eb37b50ddfb6e558b29f6c8c03b0666514e55d6170bf4624e7261a3af93c6401"}, @@ -3219,12 +3223,12 @@ blis = [ {file = "blis-0.7.4.tar.gz", hash = "sha256:7daa615a97d4f28db0f332b710bfe1900b15d0c25841c6d727965e4fd91e09cf"}, ] boto3 = [ - {file = "boto3-1.18.3-py3-none-any.whl", hash = "sha256:3be2f259b279d69495433e3288db3670817fdb1813cfde92abf867bba3ad8148"}, - {file = "boto3-1.18.3.tar.gz", hash = "sha256:13e60f88d13161df951d6e52bd483cdbe1a36a31f818746289d8ba0879465710"}, + {file = "boto3-1.18.15-py3-none-any.whl", hash = "sha256:dc44be94fa03245fd0cfff8a3fcc17d79283cfda9a39ae2e5cdedcd75749e089"}, + {file = "boto3-1.18.15.tar.gz", hash = "sha256:48241d2ca6074dd35411e1e72a4ca8ae5043e8e4aba0a9975a94af66382995da"}, ] botocore = [ - {file = "botocore-1.21.3-py3-none-any.whl", hash = "sha256:285ab9459cdd49d4a9322692c6e13772b97af723a03c0eed519b589446491a5b"}, - {file = "botocore-1.21.3.tar.gz", hash = "sha256:0b6f378c9efbc72eee61aba1e16cab90bde53a37bd2d861f6435552fd7030adf"}, + {file = "botocore-1.21.15-py3-none-any.whl", hash = "sha256:5f9686f42fcc6df0eb3ca5804113135f06ae92a6010347665ca7670f1397bff1"}, + {file = "botocore-1.21.15.tar.gz", hash = "sha256:90b50e321278223c794032ae1ded7dfebdc73c54cc3cbbf72648e4cfdf060529"}, ] cachetools = [ {file = "cachetools-4.2.2-py3-none-any.whl", hash = "sha256:2cc0b89715337ab6dbba85b5b50effe2b0c74e035d83ee8ed637cf52f12ae001"}, @@ -3496,24 +3500,24 @@ gitdb = [ {file = "github3.py-1.3.0.tar.gz", hash = "sha256:15a115c18f7bfcf934dfef7ab103844eb9f620c586bad65967708926da47cbda"}, ] gitpython = [ - {file = "GitPython-3.1.18-py3-none-any.whl", hash = "sha256:fce760879cd2aebd2991b3542876dc5c4a909b30c9d69dfc488e504a8db37ee8"}, - {file = "GitPython-3.1.18.tar.gz", hash = "sha256:b838a895977b45ab6f0cc926a9045c8d1c44e2b653c1fcc39fe91f42c6e8f05b"}, + {file = "GitPython-3.1.20-py3-none-any.whl", hash = "sha256:b1e1c269deab1b08ce65403cf14e10d2ef1f6c89e33ea7c5e5bb0222ea593b8a"}, + {file = "GitPython-3.1.20.tar.gz", hash = "sha256:df0e072a200703a65387b0cfdf0466e3bab729c0458cf6b7349d0e9877636519"}, ] google-api-core = [ - {file = "google-api-core-1.31.0.tar.gz", hash = "sha256:7c8ba88e2b893ef4f67d67e229aade51a2db5053023b73b1394a5ee3dcdb561c"}, - {file = "google_api_core-1.31.0-py2.py3-none-any.whl", hash = "sha256:a9f979b5c6a9cad31a4120ca6be712df76adc32336a7bf4bc2f4331a1b527fe7"}, + {file = "google-api-core-1.31.1.tar.gz", hash = "sha256:108cf94336aed7e614eafc53933ef02adf63b9f0fd87e8f8212acaa09eaca456"}, + {file = "google_api_core-1.31.1-py2.py3-none-any.whl", hash = "sha256:1d63e2b28057d79d64795c9a70abcecb5b7e96da732d011abf09606a39b48701"}, ] google-auth = [ - {file = "google-auth-1.33.1.tar.gz", hash = "sha256:7665c04f2df13cc938dc7d9066cddb1f8af62b038bc8b2306848c1b23121865f"}, - {file = "google_auth-1.33.1-py2.py3-none-any.whl", hash = "sha256:036dd68c1e8baa422b6b61619b8e02793da2e20f55e69514612de6c080468755"}, + {file = "google-auth-1.34.0.tar.gz", hash = "sha256:f1094088bae046fb06f3d1a3d7df14717e8d959e9105b79c57725bd4e17597a2"}, + {file = "google_auth-1.34.0-py2.py3-none-any.whl", hash = "sha256:bd6aa5916970a823e76ffb3d5c3ad3f0bedafca0a7fa53bc15149ab21cb71e05"}, ] google-auth-oauthlib = [ - {file = "google-auth-oauthlib-0.4.4.tar.gz", hash = "sha256:09832c6e75032f93818edf1affe4746121d640c625a5bef9b5c96af676e98eee"}, - {file = "google_auth_oauthlib-0.4.4-py2.py3-none-any.whl", hash = "sha256:0e92aacacfb94978de3b7972cf4b0f204c3cd206f74ddd0dc0b31e91164e6317"}, + {file = "google-auth-oauthlib-0.4.5.tar.gz", hash = "sha256:4ab58e6c3dc6ccf112f921fcced40e5426fba266768986ea502228488276eaba"}, + {file = "google_auth_oauthlib-0.4.5-py2.py3-none-any.whl", hash = "sha256:b5a1ce7c617d247ccb2dfbba9d4bfc734b41096803d854a2c52592ae80150a67"}, ] google-cloud-core = [ - {file = "google-cloud-core-1.7.1.tar.gz", hash = "sha256:3bd1e679a3d38b9da93c5919ae56239dda91fb32a2d954b2cd830392337c1cc9"}, - {file = "google_cloud_core-1.7.1-py2.py3-none-any.whl", hash = "sha256:31e8c8596d3fbe2ecbe8708572b48741f8b247a78740aebfaf4da445487a1af5"}, + {file = "google-cloud-core-1.7.2.tar.gz", hash = "sha256:b1030aadcbb2aeb4ee51475426351af83c1072456b918fb8fdb80666c4bb63b5"}, + {file = "google_cloud_core-1.7.2-py2.py3-none-any.whl", hash = "sha256:5b77935f3d9573e27007749a3b522f08d764c5b5930ff1527b2ab2743e9f0c15"}, ] google-cloud-storage = [ {file = "google-cloud-storage-1.41.1.tar.gz", hash = "sha256:a81ecc0f382b8e4437cc7f152f74d77ef917c8280a5d1040f5dcfbd0502c7906"}, @@ -3556,8 +3560,8 @@ google-pasta = [ {file = "google_pasta-0.2.0-py3-none-any.whl", hash = "sha256:b32482794a366b5366a32c92a9a9201b107821889935a02b3e51f6b432ea84ed"}, ] google-resumable-media = [ - {file = "google-resumable-media-1.3.1.tar.gz", hash = "sha256:1a1eb743d13f782d1405437c266b2c815ef13c2b141ba40835c74a3317539d01"}, - {file = "google_resumable_media-1.3.1-py2.py3-none-any.whl", hash = "sha256:106db689574283a7d9d154d5a97ab384153c55a1195cecb8c01cad9e6e827628"}, + {file = "google-resumable-media-1.3.3.tar.gz", hash = "sha256:ce38555d250bd70b0c2598bf61e99003cb8c569b0176ec0e3f38b86f9ffff581"}, + {file = "google_resumable_media-1.3.3-py2.py3-none-any.whl", hash = "sha256:092f39153cd67a4e409924edf08129f43cc72e630a1eb22abec93e80155df4ba"}, ] googleapis-common-protos = [ {file = "googleapis-common-protos-1.53.0.tar.gz", hash = "sha256:a88ee8903aa0a81f6c3cec2d5cf62d3c8aa67c06439b0496b49048fb1854ebf4"}, @@ -3615,57 +3619,57 @@ greenlet = [ {file = "greenlet-1.1.0.tar.gz", hash = "sha256:c87df8ae3f01ffb4483c796fe1b15232ce2b219f0b18126948616224d3f658ee"}, ] grpcio = [ - {file = "grpcio-1.38.1-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:118479436bda25b369e2dc1cd0921790fbfaea1ec663e4ee7095c4c325694495"}, - {file = "grpcio-1.38.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:7adfbd4e22647f880c9ed86b2be7f6d7a7dbbb8adc09395808cc7a4d021bc328"}, - {file = "grpcio-1.38.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:87b4b1977b52d5e0873a5e396340d2443640ba760f4fa23e93a38997ecfbcd5b"}, - {file = "grpcio-1.38.1-cp27-cp27m-win32.whl", hash = "sha256:3a25e1a46f51c80d06b66223f61938b9ffda37f2824ca65749c49b758137fac2"}, - {file = "grpcio-1.38.1-cp27-cp27m-win_amd64.whl", hash = "sha256:b5ea9902fc2990af993b74862282b49ae0b8de8a64ca3b4a8dda26a3163c3bb4"}, - {file = "grpcio-1.38.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:8ccde1df51eeaddf5515edc41bde2ea43a834a288914eae9ce4287399be108f5"}, - {file = "grpcio-1.38.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:0e193feaf4ebc72f6af57d7b8a08c0b8e43ebbd76f81c6f1e55d013557602dfd"}, - {file = "grpcio-1.38.1-cp35-cp35m-macosx_10_10_intel.whl", hash = "sha256:b16e1967709392a0ec4b10b4374a72eb062c47c168a189606c9a7ea7b36593a8"}, - {file = "grpcio-1.38.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:4bc60f8372c3ab06f41279163c5d558bf95195bb3f68e35ed19f95d4fbd53d71"}, - {file = "grpcio-1.38.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a433d3740a9ef7bc34a18e2b12bf72b25e618facdfd09871167b30fd8e955fed"}, - {file = "grpcio-1.38.1-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:d49f250c3ffbe83ba2d03e3500e03505576a985f7c5f77172a9531058347aa68"}, - {file = "grpcio-1.38.1-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:6e137d014cf4162e5a796777012452516d92547717c1b4914fb71ce4e41817b5"}, - {file = "grpcio-1.38.1-cp35-cp35m-win32.whl", hash = "sha256:5ff4802d9b3704e680454289587e1cc146bb0d953cf3c9296e2d96441a6a8e88"}, - {file = "grpcio-1.38.1-cp35-cp35m-win_amd64.whl", hash = "sha256:4c19578b35715e110c324b27c18ab54a56fccc4c41b8f651b1d1da5a64e0d605"}, - {file = "grpcio-1.38.1-cp36-cp36m-linux_armv7l.whl", hash = "sha256:6edf68d4305e08f6f8c45bfaa9dc04d527ab5a1562aaf0c452fa921fbe90eb23"}, - {file = "grpcio-1.38.1-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:ddd33c90b0c95eca737c9f6db7e969a48d23aed72cecb23f3b8aac009ca2cfb4"}, - {file = "grpcio-1.38.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:c83481501533824fe341c17d297bbec1ec584ec46b352f98ce12bf16740615c4"}, - {file = "grpcio-1.38.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:3e85bba6f0e0c454a90b8fea16b59db9c6d19ddf9cc95052b2d4ca77b22d46d6"}, - {file = "grpcio-1.38.1-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:dcfcb147c18272a22a592251a49830b3c7abc82385ffff34916c2534175d885e"}, - {file = "grpcio-1.38.1-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:419af4f577a3d5d9f386aeacf4c4992f90016f84cbceb11ecd832101b1f7f9c9"}, - {file = "grpcio-1.38.1-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:cd7ddb5b6ffcbd3691990df20f260a888c8bd770d57480a97da1b756fb1be5c0"}, - {file = "grpcio-1.38.1-cp36-cp36m-win32.whl", hash = "sha256:d4179d96b0ce27602756185c1a00d088c9c1feb0cc17a36f8a66eec6ddddbc0c"}, - {file = "grpcio-1.38.1-cp36-cp36m-win_amd64.whl", hash = "sha256:96d78d9edf3070770cefd1822bc220d8cccad049b818a70a3c630052e9f15490"}, - {file = "grpcio-1.38.1-cp37-cp37m-linux_armv7l.whl", hash = "sha256:8ab27a6626c2038e13c1b250c5cd22da578f182364134620ec298b4ccfc85722"}, - {file = "grpcio-1.38.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:532ab738351aad2cdad80f4355123652e08b207281f3923ce51fb2b58692dd4c"}, - {file = "grpcio-1.38.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:e4a8a371ad02bf31576bcd99093cea3849e19ca1e9eb63fc0b2c0f1db1132f7d"}, - {file = "grpcio-1.38.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:89af675d38bf490384dae85151768b8434e997cece98e5d1eb6fcb3c16d6af12"}, - {file = "grpcio-1.38.1-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:ff9ebc416e815161d89d2fd22d1a91acf3b810ef800dae38c402d19d203590bf"}, - {file = "grpcio-1.38.1-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:3db0680fee9e55022677abda186e73e3c019c59ed83e1550519250dc97cf6793"}, - {file = "grpcio-1.38.1-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:a77d1f47e5e82504c531bc9dd22c093ff093b6706ec8bcdad228464ef3a5dd54"}, - {file = "grpcio-1.38.1-cp37-cp37m-win32.whl", hash = "sha256:549beb5646137b78534a312a3b80b2b8b1ea01058b38a711d42d6b54b20b6c2b"}, - {file = "grpcio-1.38.1-cp37-cp37m-win_amd64.whl", hash = "sha256:3eb960c2f9e031f0643b53bab67733a9544d82f42d0714338183d14993d2a23c"}, - {file = "grpcio-1.38.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:e90cda2ccd4bdb89a3cd5dc11771c3b8394817d5caaa1ae36042bc96a428c10e"}, - {file = "grpcio-1.38.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:26af85ae0a7ff8e8f8f550255bf85551df86a89883c11721c0756b71bc1019be"}, - {file = "grpcio-1.38.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:947bdba3ebcd93a7cef537d6405bc5667d1caf818fa8bbd2e2cc952ec8f97e09"}, - {file = "grpcio-1.38.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:6d898441ada374f76e0b5354d7e240e1c0e905a1ebcb1e95d9ffd99c88f63700"}, - {file = "grpcio-1.38.1-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:59f5fb4ba219a11fdc1c23e17c93ca3090480a8cde4370c980908546ffc091e6"}, - {file = "grpcio-1.38.1-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:cddd61bff66e42ef334f8cb9e719951e479b5ad2cb75c00338aac8de28e17484"}, - {file = "grpcio-1.38.1-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:c323265a4f18f586e8de84fda12b48eb3bd48395294aa2b8c05307ac1680299d"}, - {file = "grpcio-1.38.1-cp38-cp38-win32.whl", hash = "sha256:72e8358c751da9ab4f8653a3b67b2a3bb7e330ee57cb26439c6af358d6eac032"}, - {file = "grpcio-1.38.1-cp38-cp38-win_amd64.whl", hash = "sha256:278e131bfbc57bab112359b98930b0fdbf81aa0ba2cdfc6555c7a5119d7e2117"}, - {file = "grpcio-1.38.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:44efa41ac36f6bcbf4f64d6479b3031cceea28cf6892a77f15bd1c22611bff9d"}, - {file = "grpcio-1.38.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:cf6c3bfa403e055380fe90844beb4fe8e9448edab5d2bf40d37d208dbb2f768c"}, - {file = "grpcio-1.38.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:5efa68fc3fe0c439e2858215f2224bfb7242c35079538d58063f68a0d5d5ec33"}, - {file = "grpcio-1.38.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:2a179b2565fa85a134933acc7845f9d4c12e742c802b4f50bf2fd208bf8b741e"}, - {file = "grpcio-1.38.1-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:b1624123710fa701988a8a43994de78416e5010ac1508f64ed41e2577358604a"}, - {file = "grpcio-1.38.1-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:6a225440015db88ec4625a2a41c21582a50cce7ffbe38dcbbb416c7180352516"}, - {file = "grpcio-1.38.1-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:e891b0936aab73550d673dd3bbf89fa9577b3db1a61baecea480afd36fdb1852"}, - {file = "grpcio-1.38.1-cp39-cp39-win32.whl", hash = "sha256:889518ce7c2a0609a3cffb7b667669a39b3410e869ff38e087bf7eeadad62e5d"}, - {file = "grpcio-1.38.1-cp39-cp39-win_amd64.whl", hash = "sha256:77054f24d46498d9696c809da7810b67bccf6153f9848ea48331708841926d82"}, - {file = "grpcio-1.38.1.tar.gz", hash = "sha256:1f79d8a24261e3c12ec3a6c25945ff799ae09874fd24815bc17c2dc37715ef6c"}, + {file = "grpcio-1.39.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:4163e022f365406be2da78db890035463371effea172300ce5af8a768142baf3"}, + {file = "grpcio-1.39.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:02e8a8b41db8e13df53078355b439363e4ac46d0ac9a8a461a39e42829e2bcf8"}, + {file = "grpcio-1.39.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:050901a5baa6c4ca445e1781ef4c32d864f965ccec70c46cd5ad92d15e282c6a"}, + {file = "grpcio-1.39.0-cp27-cp27m-win32.whl", hash = "sha256:1ab44dde4e1b225d3fc873535ca6e642444433131dd2891a601b75fb46c87c11"}, + {file = "grpcio-1.39.0-cp27-cp27m-win_amd64.whl", hash = "sha256:25731b2c20a4ed51bea7e3952d5e83d408a5df32d03c7553457b2e6eb8bcb16c"}, + {file = "grpcio-1.39.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:a2733994b05ee5382da1d0378f6312b72c5cb202930c7fa20c794a24e96a1a34"}, + {file = "grpcio-1.39.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4039645b8b5d19064766f3a6fa535f1db52a61c4d4de97a6a8945331a354d527"}, + {file = "grpcio-1.39.0-cp35-cp35m-macosx_10_10_intel.whl", hash = "sha256:7b95b3329446408e2fe6db9b310d263303fa1a94649d08ec1e1cc12506743d26"}, + {file = "grpcio-1.39.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:2a4308875b9b986000513c6b04c2e7424f436a127f15547036c42d3cf8289374"}, + {file = "grpcio-1.39.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:4b3fcc1878a1a5b71e1ecdfe82c74f7cd9eadaa43e25be0d67676dcec0c9d39f"}, + {file = "grpcio-1.39.0-cp35-cp35m-manylinux2014_i686.whl", hash = "sha256:6d51be522b573cec14798d4742efaa69d234bedabce122fec2d5489abb3724d4"}, + {file = "grpcio-1.39.0-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:43c57987e526d1b893b85099424387b22de6e3eee4ea7188443de8d657d11cc0"}, + {file = "grpcio-1.39.0-cp35-cp35m-win32.whl", hash = "sha256:cd2e39a199bcbefb3f4b9fa6677c72b0e67332915550fed3bd7c28b454bf917d"}, + {file = "grpcio-1.39.0-cp35-cp35m-win_amd64.whl", hash = "sha256:5628e7cc69079159f9465388ff21fde1e1a780139f76dd99d319119d45156f45"}, + {file = "grpcio-1.39.0-cp36-cp36m-linux_armv7l.whl", hash = "sha256:3c14e2087f809973d5ee8ca64f772a089ead0167286f3f21fdda8b6029b50abb"}, + {file = "grpcio-1.39.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:d5a105f5a595b89a0e394e5b147430b115333d07c55efb0c0eddc96055f0d951"}, + {file = "grpcio-1.39.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:366b6b35b3719c5570588e21d866460c5666ae74e3509c2a5a73ca79997abdaf"}, + {file = "grpcio-1.39.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:544e1c1a133b43893e03e828c8325be5b82e20d3b0ef0ee3942d32553052a1b5"}, + {file = "grpcio-1.39.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:a659f7c634cacfcf14657687a9fa3265b0a1844b1c19d140f3b66aebfba1a66b"}, + {file = "grpcio-1.39.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:b0ff14dd872030e6b2fce8a6811642bd30d93833f794d3782c7e9eb2f01234cc"}, + {file = "grpcio-1.39.0-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:2a958ad794292e12d8738a06754ebaf71662e635a89098916c18715b27ca2b5b"}, + {file = "grpcio-1.39.0-cp36-cp36m-win32.whl", hash = "sha256:ed845ba6253c4032d5a01b7fb9db8fe80299e9a437e695a698751b0b191174be"}, + {file = "grpcio-1.39.0-cp36-cp36m-win_amd64.whl", hash = "sha256:b236eb4b50d83754184b248b8b1041bb1546287fff7618c4b7001b9f257bb903"}, + {file = "grpcio-1.39.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:27e2c6213fc04e71a862bacccb51f3c8e722255933f01736ace183e92d860ee6"}, + {file = "grpcio-1.39.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5127f4ba1f52fda28037ae465cf4b0e5fabe89d5ac1d64d15b073b46b7db5e16"}, + {file = "grpcio-1.39.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:a6211150765cc2343e69879dfb856718b0f7477a4618b5f9a8f6c3ee84c047c0"}, + {file = "grpcio-1.39.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:691f5b3a75f072dfb7b093f46303f493b885b7a42f25a831868ffaa22ee85f9d"}, + {file = "grpcio-1.39.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:c8fe430add656b92419f6cd0680b64fbe6347c831d89a7788324f5037dfb3359"}, + {file = "grpcio-1.39.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:3cccf470fcaab65a1b0a826ff34bd7c0861eb82ed957a83c6647a983459e4ecd"}, + {file = "grpcio-1.39.0-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:2bc7eebb405aac2d7eecfaa881fd73b489f99c01470d7193b4431a6ce199b9c3"}, + {file = "grpcio-1.39.0-cp37-cp37m-win32.whl", hash = "sha256:52100d800390d58492ed1093de6faccd957de6fc29b1a0e5948c84f275d9228f"}, + {file = "grpcio-1.39.0-cp37-cp37m-win_amd64.whl", hash = "sha256:20f57c5d09a36e0d0c8fe16ee1905f4307edb1d04f6034b56320f7fbc1a1071a"}, + {file = "grpcio-1.39.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:6ba6ad60009da2258cf15a72c51b7e0c2f58c8da517e97550881e488839e56c6"}, + {file = "grpcio-1.39.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a1fb9936b86b5efdea417fe159934bcad82a6f8c6ab7d1beec4bf3a78324d975"}, + {file = "grpcio-1.39.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:46cfb0f2b757673bfd36ab4b0e3d61988cc1a0d47e0597e91462dcbef7528f35"}, + {file = "grpcio-1.39.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:f2621c82fbbff1496993aa5fbf60e235583c7f970506e818671ad52000b6f310"}, + {file = "grpcio-1.39.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:e98aca5cfe05ca29950b3d99006b9ddb54fde6451cd12cb2db1443ae3b9fa076"}, + {file = "grpcio-1.39.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:8ed1e52ad507a54d20e6aaedf4b3edcab18cc12031eafe6de898f97513d8997b"}, + {file = "grpcio-1.39.0-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:3c57fa7fec932767bc553bfb956759f45026890255bd232b2f797c3bc4dfeba2"}, + {file = "grpcio-1.39.0-cp38-cp38-win32.whl", hash = "sha256:88dbef504b491b96e3238a6d5360b04508c34c62286080060c85fddd3caf7137"}, + {file = "grpcio-1.39.0-cp38-cp38-win_amd64.whl", hash = "sha256:cffdccc94e63710dd6ead01849443390632c8e0fec52dc26e4fddf9f28ac9280"}, + {file = "grpcio-1.39.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:43e0f5c49f985c94332794aa6c4f15f3a1ced336f0c6a6c8946c67b5ab111ae9"}, + {file = "grpcio-1.39.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:dc3a24022a90c1754e54315009da6f949b48862c1d06daa54f9a28f89a5efacb"}, + {file = "grpcio-1.39.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:476fa94ba8efb09213baabd757f6f93e839794d8ae0eaa371347d6899e8f57a0"}, + {file = "grpcio-1.39.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:46d510a7af777d2f38ef4c1d25491add37cad24143012f3eebe72dc5c6d0fc4c"}, + {file = "grpcio-1.39.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:5091b4a5ee8454a8f0c8ac45946ca25d6142c3be4b1fba141f1d62a6e0b5c696"}, + {file = "grpcio-1.39.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:de83a045005703e7b9e67b61c38bb72cd49f68d9d2780d2c675353a3a3f2816f"}, + {file = "grpcio-1.39.0-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:4258b778ce09ffa3b7c9a26971c216a34369e786771afbf4f98afe223f27d248"}, + {file = "grpcio-1.39.0-cp39-cp39-win32.whl", hash = "sha256:c44958a24559f875d902d5c1acb0ae43faa5a84f6120d1d0d800acb52f96516e"}, + {file = "grpcio-1.39.0-cp39-cp39-win_amd64.whl", hash = "sha256:2068a2b896ac67103c4a5453d5435fafcbb1a2f41eaf25148d08780096935cee"}, + {file = "grpcio-1.39.0.tar.gz", hash = "sha256:57974361a459d6fe04c9ae0af1845974606612249f467bbd2062d963cb90f407"}, ] h11 = [ {file = "h11-0.9.0-py2.py3-none-any.whl", hash = "sha256:4bc6d6a1238b7615b266ada57e0618568066f57dd6fa967d1290ec9309b2f2f1"}, @@ -3740,8 +3744,8 @@ idna = [ {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.6.1-py3-none-any.whl", hash = "sha256:9f55f560e116f8643ecf2922d9cd3e1c7e8d52e683178fecd9d08f6aa357e11e"}, - {file = "importlib_metadata-4.6.1.tar.gz", hash = "sha256:079ada16b7fc30dfbb5d13399a5113110dab1aa7c2bc62f66af75f0b717c8cac"}, + {file = "importlib_metadata-4.6.3-py3-none-any.whl", hash = "sha256:51c6635429c77cf1ae634c997ff9e53ca3438b495f10a55ba28594dd69764a8b"}, + {file = "importlib_metadata-4.6.3.tar.gz", hash = "sha256:0645585859e9a6689c523927a5032f2ba5919f1f7d0e84bd4533312320de1ff9"}, ] incremental = [ {file = "incremental-21.3.0-py2.py3-none-any.whl", hash = "sha256:92014aebc6a20b78a8084cdd5645eeaa7f74b8933f70fa3ada2cfbd1e3b54321"}, @@ -3783,8 +3787,8 @@ jsonschema = [ {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, ] jwcrypto = [ - {file = "jwcrypto-0.9.1-py2.py3-none-any.whl", hash = "sha256:12976a09895ec0076ce17c49ab7be64d6e63bcd7fd9a773e3fedf8011537a5f6"}, - {file = "jwcrypto-0.9.1.tar.gz", hash = "sha256:63531529218ba9869e14ef8c9e7b516865ede3facf9b0ef3d3ba68014da211f9"}, + {file = "jwcrypto-1.0-py2.py3-none-any.whl", hash = "sha256:db93a656d9a7a35dda5a68deb5c9f301f4e60507d8aef1559e0637b9ac497137"}, + {file = "jwcrypto-1.0.tar.gz", hash = "sha256:f88816eb0a41b8f006af978ced5f171f33782525006cdb055b536a40f4d46ac9"}, ] kafka-python = [ {file = "kafka-python-2.0.2.tar.gz", hash = "sha256:04dfe7fea2b63726cd6f3e79a2d86e709d608d74406638c5da33a01d45a9d7e3"}, @@ -4194,9 +4198,13 @@ protobuf = [ {file = "protobuf-3.17.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2ae692bb6d1992afb6b74348e7bb648a75bb0d3565a3f5eea5bec8f62bd06d87"}, {file = "protobuf-3.17.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:99938f2a2d7ca6563c0ade0c5ca8982264c484fdecf418bd68e880a7ab5730b1"}, {file = "protobuf-3.17.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6902a1e4b7a319ec611a7345ff81b6b004b36b0d2196ce7a748b3493da3d226d"}, + {file = "protobuf-3.17.3-cp38-cp38-win32.whl", hash = "sha256:59e5cf6b737c3a376932fbfb869043415f7c16a0cf176ab30a5bbc419cd709c1"}, + {file = "protobuf-3.17.3-cp38-cp38-win_amd64.whl", hash = "sha256:ebcb546f10069b56dc2e3da35e003a02076aaa377caf8530fe9789570984a8d2"}, {file = "protobuf-3.17.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ffbd23640bb7403574f7aff8368e2aeb2ec9a5c6306580be48ac59a6bac8bde"}, {file = "protobuf-3.17.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:26010f693b675ff5a1d0e1bdb17689b8b716a18709113288fead438703d45539"}, {file = "protobuf-3.17.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e76d9686e088fece2450dbc7ee905f9be904e427341d289acbe9ad00b78ebd47"}, + {file = "protobuf-3.17.3-cp39-cp39-win32.whl", hash = "sha256:a38bac25f51c93e4be4092c88b2568b9f407c27217d3dd23c7a57fa522a17554"}, + {file = "protobuf-3.17.3-cp39-cp39-win_amd64.whl", hash = "sha256:85d6303e4adade2827e43c2b54114d9a6ea547b671cb63fafd5011dc47d0e13d"}, {file = "protobuf-3.17.3-py2.py3-none-any.whl", hash = "sha256:2bfb815216a9cd9faec52b16fd2bfa68437a44b67c56bee59bc3926522ecb04e"}, {file = "protobuf-3.17.3.tar.gz", hash = "sha256:72804ea5eaa9c22a090d2803813e280fb273b62d5ae497aaf3553d141c4fdd7b"}, ] @@ -4442,7 +4450,7 @@ pyrsistent = [ {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"}, ] pytelegrambotapi = [ - {file = "pyTelegramBotAPI-3.8.1.tar.gz", hash = "sha256:f383d7aa4b20e2724a5f58d89fdc64c316614791be18f20bdcd6f8b84c5d4b7e"}, + {file = "pyTelegramBotAPI-3.8.2.tar.gz", hash = "sha256:cf83c652b88b4b1535a306a9b0c2f34bf6c390cebb9553ef34369e6290fc9496"}, ] pytest = [ {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"}, @@ -4461,8 +4469,8 @@ pytest-forked = [ {file = "pytest_forked-1.3.0-py2.py3-none-any.whl", hash = "sha256:dc4147784048e70ef5d437951728825a131b81714b398d5d52f17c7c144d8815"}, ] pytest-sanic = [ - {file = "pytest-sanic-1.6.2.tar.gz", hash = "sha256:6428ed8cc2e6cfa05b92689a8589149aacdc1f0640fcf9673211aa733e6a5209"}, - {file = "pytest_sanic-1.6.2-py3-none-any.whl", hash = "sha256:982fa2ca879130fda9066b6051c7d232bf433dcc1bbac324e17ee49a8f7a92b1"}, + {file = "pytest-sanic-1.7.1.tar.gz", hash = "sha256:b3abb456731d0aa9a030a908159e48580b1b49cb188f68bce75bf6f186748763"}, + {file = "pytest_sanic-1.7.1-py3-none-any.whl", hash = "sha256:ebb3e0dabd05e32914b0a0cb472bfe04ae75ff4009954da2430b0c420467691f"}, ] pytest-timeout = [ {file = "pytest-timeout-1.4.2.tar.gz", hash = "sha256:20b3113cf6e4e80ce2d403b6fb56e9e1b871b510259206d40ff8d609f48bda76"}, @@ -4510,12 +4518,12 @@ python-dateutil = [ {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, ] python-engineio = [ - {file = "python-engineio-4.2.0.tar.gz", hash = "sha256:4e97c1189c23923858f5bb6dc47cfcd915005383c3c039ff01c89f2c00d62077"}, - {file = "python_engineio-4.2.0-py2.py3-none-any.whl", hash = "sha256:c6c119c2039fcb6f64d260211ca92c0c61b2b888a28678732a961f2aaebcc848"}, + {file = "python-engineio-4.2.1.tar.gz", hash = "sha256:d510329b6d8ed5662547862f58bc73659ae62defa66b66d745ba021de112fa62"}, + {file = "python_engineio-4.2.1-py3-none-any.whl", hash = "sha256:f3ef9a2c048d08990f294c5f8991f6f162c3b12ecbd368baa0d90441de907d1c"}, ] python-socketio = [ - {file = "python-socketio-5.3.0.tar.gz", hash = "sha256:3dcc9785aaeef3a9eeb36c3818095662342744bdcdabd050fe697cdb826a1c2b"}, - {file = "python_socketio-5.3.0-py2.py3-none-any.whl", hash = "sha256:d74314fd4241342c8a55c4f66d5cfea8f1a8fffd157af216c67e1c3a649a2444"}, + {file = "python-socketio-5.4.0.tar.gz", hash = "sha256:ca807c9e1f168e96dea412d64dd834fb47c470d27fd83da0504aa4b248ba2544"}, + {file = "python_socketio-5.4.0-py3-none-any.whl", hash = "sha256:7ed57f6c024abdfeb9b25c74c0c00ffc18da47d903e8d72deecb87584370d1fc"}, ] pytz = [ {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, @@ -4557,8 +4565,8 @@ questionary = [ {file = "questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"}, ] rasa-sdk = [ - {file = "rasa-sdk-2.8.0.tar.gz", hash = "sha256:5691042238cc0a30b38dd9dcff2bad28621611b78791f0525c4660fdf19a94cd"}, - {file = "rasa_sdk-2.8.0-py3-none-any.whl", hash = "sha256:156e7e7c106f82f6ba1368cc3d69c3dc59df00835dff25a92a1350d4b925be43"}, + {file = "rasa-sdk-2.8.1.tar.gz", hash = "sha256:61752ed300fb470fbef66f7a740463c8074635e075fc8a0b598081bb5db15ad1"}, + {file = "rasa_sdk-2.8.1-py3-none-any.whl", hash = "sha256:d118a119ef412f74c3d2b81460feee10004d46f2be637fac8a04f143d310a0f7"}, ] redis = [ {file = "redis-3.5.3-py2.py3-none-any.whl", hash = "sha256:432b788c4530cfe16d8d943a09d40ca6c16149727e4afe8c2c9d5580c59d9f24"}, @@ -4573,6 +4581,10 @@ regex = [ {file = "regex-2021.7.6-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:b85ac458354165405c8a84725de7bbd07b00d9f72c31a60ffbf96bb38d3e25fa"}, {file = "regex-2021.7.6-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:3f5716923d3d0bfb27048242a6e0f14eecdb2e2a7fac47eda1d055288595f222"}, {file = "regex-2021.7.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5983c19d0beb6af88cb4d47afb92d96751fb3fa1784d8785b1cdf14c6519407"}, + {file = "regex-2021.7.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf1d2d183abc7faa101ebe0b8d04fd19cb9138820abc8589083035c9440b8ca6"}, + {file = "regex-2021.7.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1947e7de155063e1c495c50590229fb98720d4c383af5031bbcb413db33fa1be"}, + {file = "regex-2021.7.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:17d8a3f99b18d87ac54a449b836d485cc8c195bb6f5e4379c84c8519045facc9"}, + {file = "regex-2021.7.6-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d30895ec80cc80358392841add9dde81ea1d54a4949049269115e6b0555d0498"}, {file = "regex-2021.7.6-cp36-cp36m-win32.whl", hash = "sha256:c92831dac113a6e0ab28bc98f33781383fe294df1a2c3dfd1e850114da35fd5b"}, {file = "regex-2021.7.6-cp36-cp36m-win_amd64.whl", hash = "sha256:791aa1b300e5b6e5d597c37c346fb4d66422178566bbb426dd87eaae475053fb"}, {file = "regex-2021.7.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:59506c6e8bd9306cd8a41511e32d16d5d1194110b8cfe5a11d102d8b63cf945d"}, @@ -4583,6 +4595,10 @@ regex = [ {file = "regex-2021.7.6-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:173bc44ff95bc1e96398c38f3629d86fa72e539c79900283afa895694229fe6a"}, {file = "regex-2021.7.6-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:15dddb19823f5147e7517bb12635b3c82e6f2a3a6b696cc3e321522e8b9308ad"}, {file = "regex-2021.7.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ddeabc7652024803666ea09f32dd1ed40a0579b6fbb2a213eba590683025895"}, + {file = "regex-2021.7.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8244c681018423a0d1784bc6b9af33bdf55f2ab8acb1f3cd9dd83d90e0813253"}, + {file = "regex-2021.7.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a4c742089faf0e51469c6a1ad7e3d3d21afae54a16a6cead85209dfe0a1ce65"}, + {file = "regex-2021.7.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914e626dc8e75fe4fc9b7214763f141d9f40165d00dfe680b104fa1b24063bbf"}, + {file = "regex-2021.7.6-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fabb19c82ecf39832a3f5060dfea9a7ab270ef156039a1143a29a83a09a62de"}, {file = "regex-2021.7.6-cp37-cp37m-win32.whl", hash = "sha256:f080248b3e029d052bf74a897b9d74cfb7643537fbde97fe8225a6467fb559b5"}, {file = "regex-2021.7.6-cp37-cp37m-win_amd64.whl", hash = "sha256:d8bbce0c96462dbceaa7ac4a7dfbbee92745b801b24bce10a98d2f2b1ea9432f"}, {file = "regex-2021.7.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:edd1a68f79b89b0c57339bce297ad5d5ffcc6ae7e1afdb10f1947706ed066c9c"}, @@ -4593,6 +4609,10 @@ regex = [ {file = "regex-2021.7.6-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:bc84fb254a875a9f66616ed4538542fb7965db6356f3df571d783f7c8d256edd"}, {file = "regex-2021.7.6-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:598c0a79b4b851b922f504f9f39a863d83ebdfff787261a5ed061c21e67dd761"}, {file = "regex-2021.7.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875c355360d0f8d3d827e462b29ea7682bf52327d500a4f837e934e9e4656068"}, + {file = "regex-2021.7.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfc0957c4a4b91eff5ad036088769e600a25774256cd0e1154378591ce573f08"}, + {file = "regex-2021.7.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:efb4af05fa4d2fc29766bf516f1f5098d6b5c3ed846fde980c18bf8646ad3979"}, + {file = "regex-2021.7.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7423aca7cc30a6228ccdcf2ea76f12923d652c5c7c6dc1959a0b004e308f39fb"}, + {file = "regex-2021.7.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb9834c1e77493efd7343b8e38950dee9797d2d6f2d5fd91c008dfaef64684b9"}, {file = "regex-2021.7.6-cp38-cp38-win32.whl", hash = "sha256:e586f448df2bbc37dfadccdb7ccd125c62b4348cb90c10840d695592aa1b29e0"}, {file = "regex-2021.7.6-cp38-cp38-win_amd64.whl", hash = "sha256:2fe5e71e11a54e3355fa272137d521a40aace5d937d08b494bed4529964c19c4"}, {file = "regex-2021.7.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6110bab7eab6566492618540c70edd4d2a18f40ca1d51d704f1d81c52d245026"}, @@ -4603,6 +4623,10 @@ regex = [ {file = "regex-2021.7.6-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:2bceeb491b38225b1fee4517107b8491ba54fba77cf22a12e996d96a3c55613d"}, {file = "regex-2021.7.6-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:f98dc35ab9a749276f1a4a38ab3e0e2ba1662ce710f6530f5b0a6656f1c32b58"}, {file = "regex-2021.7.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:319eb2a8d0888fa6f1d9177705f341bc9455a2c8aca130016e52c7fe8d6c37a3"}, + {file = "regex-2021.7.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598ee917dbe961dcf827217bf2466bb86e4ee5a8559705af57cbabb3489dd37e"}, + {file = "regex-2021.7.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:56fc7045a1999a8d9dd1896715bc5c802dfec5b9b60e883d2cbdecb42adedea4"}, + {file = "regex-2021.7.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8363ac90ea63c3dd0872dfdb695f38aff3334bfa5712cffb238bd3ffef300e3"}, + {file = "regex-2021.7.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:716a6db91b3641f566531ffcc03ceec00b2447f0db9942b3c6ea5d2827ad6be3"}, {file = "regex-2021.7.6-cp39-cp39-win32.whl", hash = "sha256:eaf58b9e30e0e546cdc3ac06cf9165a1ca5b3de8221e9df679416ca667972035"}, {file = "regex-2021.7.6-cp39-cp39-win_amd64.whl", hash = "sha256:4c9c3155fe74269f61e27617529b7f09552fbb12e44b1189cebbdb24294e6e1c"}, {file = "regex-2021.7.6.tar.gz", hash = "sha256:8394e266005f2d8c6f0bc6780001f7afa3ef81a7a2111fa35058ded6fce79e4d"}, @@ -4722,25 +4746,25 @@ scikit-learn = [ {file = "scikit_learn-0.24.2-cp39-cp39-win_amd64.whl", hash = "sha256:40556bea1ef26ef54bc678d00cf138a63069144a0b5f3a436eecd8f3468b903e"}, ] scipy = [ - {file = "scipy-1.7.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:821e75f5c16cd7b0ab0ffe7eb9917e5af7b48c25306b4777287de8d792a5f7f3"}, - {file = "scipy-1.7.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e7df79b42c3015058a5554bfeab6fd4c9906c46560c9ddebb5c652840f3e182"}, - {file = "scipy-1.7.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0572256c10ddd058e3d315c555538671ddb2737f27eb56189bfbc3483391403f"}, - {file = "scipy-1.7.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b77ee5e3a9507622e7f98b16122242a3903397f98d1fe3bc269d904a9025e2bc"}, - {file = "scipy-1.7.0-cp37-cp37m-win32.whl", hash = "sha256:53116abd5060a5b4a58489cf689bee259b779e6b7ecd4ce366e7147aa7c9626e"}, - {file = "scipy-1.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e7b733d4d98e604109715e11f2ab9340eb45d53f803634ed730039070fc3bc11"}, - {file = "scipy-1.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4ef3d4df8af40cb6f4d4eaf7b02780109ebabeec334cda26a7899ec9d8de9176"}, - {file = "scipy-1.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd4399d4388ca0239a4825e312b3e61b60f743dd6daf49e5870837716502a92a"}, - {file = "scipy-1.7.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:80df8af7039bce92fb4cd1ceb056258631b11b3c627384e2d29bb48d44c0cae7"}, - {file = "scipy-1.7.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6130e22bf6ee506f7cddde7e0515296d97eb6c6c94f7ef5103c2b77aec5833a7"}, - {file = "scipy-1.7.0-cp38-cp38-win32.whl", hash = "sha256:97ca4552ace1c313707058e774609af59644321e278c3a539322fab2fb09b943"}, - {file = "scipy-1.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:c5d012cb82cc1dcfa72609abaabb4a4ed8113e3e8ac43464508a418c146be57d"}, - {file = "scipy-1.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5eb8f054eebb351af7490bbb57465ba9662c4e16e1786655c6c7ed530eb9a74e"}, - {file = "scipy-1.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f4b89c223bd09460b52b669e2e642cab73c28855b540e6ed029692546a86f8d"}, - {file = "scipy-1.7.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2e685fdbfa5b989af4338b29c408b9157ea6addec15d661104c437980c292be5"}, - {file = "scipy-1.7.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3595c8b64970c9e5a3f137fa1a9eb64da417e78fb7991d0b098b18a00b776d88"}, - {file = "scipy-1.7.0-cp39-cp39-win32.whl", hash = "sha256:5a983d3cebc27294897951a494cebd78af2eae37facf75d9e4ad4f1f62229860"}, - {file = "scipy-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:aef6e922aea6f2e6bbb539b413c85210a9ee32757535b84204ebd22723e69704"}, - {file = "scipy-1.7.0.tar.gz", hash = "sha256:998c5e6ea649489302de2c0bc026ed34284f531df89d2bdc8df3a0d44d165739"}, + {file = "scipy-1.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2a0eeaab01258e0870c4022a6cd329aef3b7c6c2b606bd7cf7bb2ba9820ae561"}, + {file = "scipy-1.7.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f52470e0548cdb74fb8ddf06773ffdcca7c97550f903b1c51312ec19243a7f7"}, + {file = "scipy-1.7.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:787749110a23502031fb1643c55a2236c99c6b989cca703ea2114d65e21728ef"}, + {file = "scipy-1.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3304bd5bc32e00954ac4b3f4cc382ca8824719bf348aacbec6347337d6b125fe"}, + {file = "scipy-1.7.1-cp37-cp37m-win32.whl", hash = "sha256:d1388fbac9dd591ea630da75c455f4cc637a7ca5ecb31a6b6cef430914749cde"}, + {file = "scipy-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:d648aa85dd5074b1ed83008ae987c3fbb53d68af619fce1dee231f4d8bd40e2f"}, + {file = "scipy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc61e3e5ff92d2f32bb263621d54a9cff5e3f7c420af3d1fa122ce2529de2bd9"}, + {file = "scipy-1.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a496b42dbcd04ea9924f5e92be63af3d8e0f43a274b769bfaca0a297327d54ee"}, + {file = "scipy-1.7.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d13f31457f2216e5705304d9f28e2826edf75487410a57aa99263fa4ffd792c2"}, + {file = "scipy-1.7.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:90c07ba5f34f33299a428b0d4fa24c30d2ceba44d63f8385b2b05be460819fcb"}, + {file = "scipy-1.7.1-cp38-cp38-win32.whl", hash = "sha256:efdd3825d54c58df2cc394366ca4b9166cf940a0ebddeb87b6c10053deb625ea"}, + {file = "scipy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:71cfc96297617eab911e22216e8a8597703202e95636d9406df9af5c2ac99a2b"}, + {file = "scipy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ee952f39a4a4c7ba775a32b664b1f4b74818548b65f765987adc14bb78f5802"}, + {file = "scipy-1.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:611f9cb459d0707dd8e4de0c96f86e93f61aac7475fcb225e9ec71fecdc5cebf"}, + {file = "scipy-1.7.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e101bceeb9e65a90dadbc5ca31283403a2d4667b9c178db29109750568e8d112"}, + {file = "scipy-1.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4729b41a4cdaf4cd011aeac816b532f990bdf97710cef59149d3e293115cf467"}, + {file = "scipy-1.7.1-cp39-cp39-win32.whl", hash = "sha256:c9951e3746b68974125e5e3445008a4163dd6d20ae0bbdae22b38cb8951dc11b"}, + {file = "scipy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:da9c6b336e540def0b7fd65603da8abeb306c5fc9a5f4238665cbbb5ff95cf58"}, + {file = "scipy-1.7.1.tar.gz", hash = "sha256:6b47d5fa7ea651054362561a28b1ccc8da9368a39514c1bbf6c0977a1c376764"}, ] sentencepiece = [ {file = "sentencepiece-0.1.96-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc969e6694fb27fba7cee2953f350804faf03913f25ae1ee713a7b8a1bc08018"}, @@ -4790,8 +4814,8 @@ sentinels = [ {file = "sentinels-1.0.0.tar.gz", hash = "sha256:7be0704d7fe1925e397e92d18669ace2f619c92b5d4eb21a89f31e026f9ff4b1"}, ] sentry-sdk = [ - {file = "sentry-sdk-1.3.0.tar.gz", hash = "sha256:5210a712dd57d88d225c1fc3fe3a3626fee493637bcd54e204826cf04b8d769c"}, - {file = "sentry_sdk-1.3.0-py2.py3-none-any.whl", hash = "sha256:6864dcb6f7dec692635e5518c2a5c80010adf673c70340817f1a1b713d65bb41"}, + {file = "sentry-sdk-1.3.1.tar.gz", hash = "sha256:ebe99144fa9618d4b0e7617e7929b75acd905d258c3c779edcd34c0adfffe26c"}, + {file = "sentry_sdk-1.3.1-py2.py3-none-any.whl", hash = "sha256:f33d34c886d0ba24c75ea8885a8b3a172358853c7cbde05979fc99c29ef7bc52"}, ] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, @@ -4845,36 +4869,36 @@ spacy-legacy = [ {file = "spacy_legacy-3.0.8-py2.py3-none-any.whl", hash = "sha256:eb37a3540bb461b5fe9348d4976784f18a0e345982e41e2c5c7cd8229889e825"}, ] sqlalchemy = [ - {file = "SQLAlchemy-1.4.21-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:e10be2b717979260db0f0fa6a531e6ddccf0d85cca11983b41d04049214fa0fc"}, - {file = "SQLAlchemy-1.4.21-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6774f2001e6359b041b8af3b9bc7669afc6adce39438fae99bfacf4b03490d54"}, - {file = "SQLAlchemy-1.4.21-cp27-cp27m-win32.whl", hash = "sha256:ba84fb12826e4db193d5fbfdcf475f85c07fdfb76b84b3fb1504905f540db7ab"}, - {file = "SQLAlchemy-1.4.21-cp27-cp27m-win_amd64.whl", hash = "sha256:4c8dc1ca3330b716c48317b4d91911e00a54c0f2de486c9c25ec0c54ebf12b5f"}, - {file = "SQLAlchemy-1.4.21-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:20a5ecd03134c7ed2c05dfdf5bd96d84480afeebe3484e416f7d7ec8c92596ae"}, - {file = "SQLAlchemy-1.4.21-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:8a98e38cb07b63459070c3a63abd5059f254d2ddec7afe77824e160f6b9e26c3"}, - {file = "SQLAlchemy-1.4.21-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da11e254ab264f515b59d16f5d1ff24f5f02fbf0b9de2d2981e704176a75c03a"}, - {file = "SQLAlchemy-1.4.21-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8f77ad5628e82f76ace2ff9a5b10ee87688bda0867f3e269cab5ed8be7e4ccc5"}, - {file = "SQLAlchemy-1.4.21-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba8fd99b546aacac74c97bb0676dd5270a1cd84c44fb67adc71d00ccabcb34a8"}, - {file = "SQLAlchemy-1.4.21-cp36-cp36m-win32.whl", hash = "sha256:bee8b2a399c6be1642d5cfcfb9d0d438fcacdd5188e0b16366fa15dbd49ec667"}, - {file = "SQLAlchemy-1.4.21-cp36-cp36m-win_amd64.whl", hash = "sha256:ef998f03ee92e6c98acdfac464c145e0a9949301b6e83688d7194e746314fcba"}, - {file = "SQLAlchemy-1.4.21-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:decb9caf3a5695a8a4ebe7153b8ef7dcc57f85dc16896e3a33d5cf3e629ac396"}, - {file = "SQLAlchemy-1.4.21-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89dbe4a792f28fd21d3319d26ceea32a3132f1c5ae578ec513f77e4c2adb9b91"}, - {file = "SQLAlchemy-1.4.21-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:340fb8eda79e5b116f761c953879c98c423eca82481d5cdad762beb108ee763e"}, - {file = "SQLAlchemy-1.4.21-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:538544799d537684e83e697298fd5078252ee68f23b44d8271f77647f225bca3"}, - {file = "SQLAlchemy-1.4.21-cp37-cp37m-win32.whl", hash = "sha256:53b17656bacdb3b194bc6cff1bd2e044879cf015ab5352c932173c2172a4b99d"}, - {file = "SQLAlchemy-1.4.21-cp37-cp37m-win_amd64.whl", hash = "sha256:cfa0c25e4c87517a679d97d0617ddaccb46337f558beac72e7d85c2f34365a35"}, - {file = "SQLAlchemy-1.4.21-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:dae7ab0c4d34d40895e92b71149bcd72a2f7c5971dc013d1c29393b6067448e3"}, - {file = "SQLAlchemy-1.4.21-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92c9f6dbe3b3d7059beea12e5601b0b37dd7a51f9bb29fbc98ab314e2a8ffdb7"}, - {file = "SQLAlchemy-1.4.21-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eb418ec022538b24d73260b694ddb5f3878d554614a4611decb433d8eee69acd"}, - {file = "SQLAlchemy-1.4.21-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:628120ce7ef7f31824929c244894ee22a98d706d8879fb5441e1c572e02ca2ae"}, - {file = "SQLAlchemy-1.4.21-cp38-cp38-win32.whl", hash = "sha256:70b978fb1bbb629e9ce41235511d89ef9d694e3933b5a52dd6d0a4040b6c7830"}, - {file = "SQLAlchemy-1.4.21-cp38-cp38-win_amd64.whl", hash = "sha256:5dbcb3fd1d64d0835e383ea091037ca6aa70a43bd1cabb0c71c27796f2c5173f"}, - {file = "SQLAlchemy-1.4.21-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:2ad74f0a7ae8c4fa374d3be26cdf8c0897669ba3fd8bad4607710bc2fb7f132d"}, - {file = "SQLAlchemy-1.4.21-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b7af10ecd1c3829ddf824e39129e026476af6a261388db4d26bf11525fd8d05"}, - {file = "SQLAlchemy-1.4.21-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:87cf4054632c20160592ca2917aec93bb83b12b3a39c865feab1ba44e0ed120d"}, - {file = "SQLAlchemy-1.4.21-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc28702213988c96e394685ad4103a4e347305cf90569693bef8e3d12f233ae"}, - {file = "SQLAlchemy-1.4.21-cp39-cp39-win32.whl", hash = "sha256:640fc3556a1022a781f3f07fd5dc9da842ef87f873139402d5d98d64d776360f"}, - {file = "SQLAlchemy-1.4.21-cp39-cp39-win_amd64.whl", hash = "sha256:5042a7d43a8e0a8ffc8d2acacbd5fad1edf8336c376714632a5c61eff56ac06e"}, - {file = "SQLAlchemy-1.4.21.tar.gz", hash = "sha256:07e9054f4df612beadd12ca8a5342246bffcad74a1fa8df1368d1f2bb07d8fc7"}, + {file = "SQLAlchemy-1.4.22-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:488608953385d6c127d2dcbc4b11f8d7f2f30b89f6bd27c01b042253d985cc2f"}, + {file = "SQLAlchemy-1.4.22-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5d856cc50fd26fc8dd04892ed5a5a3d7eeb914fea2c2e484183e2d84c14926e0"}, + {file = "SQLAlchemy-1.4.22-cp27-cp27m-win32.whl", hash = "sha256:a00d9c6d3a8afe1d1681cd8a5266d2f0ed684b0b44bada2ca82403b9e8b25d39"}, + {file = "SQLAlchemy-1.4.22-cp27-cp27m-win_amd64.whl", hash = "sha256:5908ea6c652a050d768580d01219c98c071e71910ab8e7b42c02af4010608397"}, + {file = "SQLAlchemy-1.4.22-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b7fb937c720847879c7402fe300cfdb2aeff22349fa4ea3651bca4e2d6555939"}, + {file = "SQLAlchemy-1.4.22-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:9bfe882d5a1bbde0245dca0bd48da0976bd6634cf2041d2fdf0417c5463e40e5"}, + {file = "SQLAlchemy-1.4.22-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eedd76f135461cf237534a6dc0d1e0f6bb88a1dc193678fab48a11d223462da5"}, + {file = "SQLAlchemy-1.4.22-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6a16c7c4452293da5143afa3056680db2d187b380b3ef4d470d4e29885720de3"}, + {file = "SQLAlchemy-1.4.22-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d23ea797a5e0be71bc5454b9ae99158ea0edc79e2393c6e9a2354de88329c0"}, + {file = "SQLAlchemy-1.4.22-cp36-cp36m-win32.whl", hash = "sha256:a5e14cb0c0a4ac095395f24575a0e7ab5d1be27f5f9347f1762f21505e3ba9f1"}, + {file = "SQLAlchemy-1.4.22-cp36-cp36m-win_amd64.whl", hash = "sha256:bc34a007e604091ca3a4a057525efc4cefd2b7fe970f44d20b9cfa109ab1bddb"}, + {file = "SQLAlchemy-1.4.22-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:756f5d2f5b92d27450167247fb574b09c4cd192a3f8c2e493b3e518a204ee543"}, + {file = "SQLAlchemy-1.4.22-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fcbb4b4756b250ed19adc5e28c005b8ed56fdb5c21efa24c6822c0575b4964d"}, + {file = "SQLAlchemy-1.4.22-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:09dbb4bc01a734ccddbf188deb2a69aede4b3c153a72b6d5c6900be7fb2945b1"}, + {file = "SQLAlchemy-1.4.22-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f028ef6a1d828bc754852a022b2160e036202ac8658a6c7d34875aafd14a9a15"}, + {file = "SQLAlchemy-1.4.22-cp37-cp37m-win32.whl", hash = "sha256:68393d3fd31469845b6ba11f5b4209edbea0b58506be0e077aafbf9aa2e21e11"}, + {file = "SQLAlchemy-1.4.22-cp37-cp37m-win_amd64.whl", hash = "sha256:891927a49b2363a4199763a9d436d97b0b42c65922a4ea09025600b81a00d17e"}, + {file = "SQLAlchemy-1.4.22-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:fd2102a8f8a659522719ed73865dff3d3cc76eb0833039dc473e0ad3041d04be"}, + {file = "SQLAlchemy-1.4.22-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4014978de28163cd8027434916a92d0f5bb1a3a38dff5e8bf8bff4d9372a9117"}, + {file = "SQLAlchemy-1.4.22-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f814d80844969b0d22ea63663da4de5ca1c434cfbae226188901e5d368792c17"}, + {file = "SQLAlchemy-1.4.22-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d09a760b0a045b4d799102ae7965b5491ccf102123f14b2a8cc6c01d1021a2d9"}, + {file = "SQLAlchemy-1.4.22-cp38-cp38-win32.whl", hash = "sha256:26daa429f039e29b1e523bf763bfab17490556b974c77b5ca7acb545b9230e9a"}, + {file = "SQLAlchemy-1.4.22-cp38-cp38-win_amd64.whl", hash = "sha256:12bac5fa1a6ea870bdccb96fe01610641dd44ebe001ed91ef7fcd980e9702db5"}, + {file = "SQLAlchemy-1.4.22-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:39b5d36ab71f73c068cdcf70c38075511de73616e6c7fdd112d6268c2704d9f5"}, + {file = "SQLAlchemy-1.4.22-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5102b9face693e8b2db3b2539c7e1a5d9a5b4dc0d79967670626ffd2f710d6e6"}, + {file = "SQLAlchemy-1.4.22-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c9373ef67a127799027091fa53449125351a8c943ddaa97bec4e99271dbb21f4"}, + {file = "SQLAlchemy-1.4.22-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36a089dc604032d41343d86290ce85d4e6886012eea73faa88001260abf5ff81"}, + {file = "SQLAlchemy-1.4.22-cp39-cp39-win32.whl", hash = "sha256:b48148ceedfb55f764562e04c00539bb9ea72bf07820ca15a594a9a049ff6b0e"}, + {file = "SQLAlchemy-1.4.22-cp39-cp39-win_amd64.whl", hash = "sha256:1fdae7d980a2fa617d119d0dc13ecb5c23cc63a8b04ffcb5298f2c59d86851e9"}, + {file = "SQLAlchemy-1.4.22.tar.gz", hash = "sha256:ec1be26cdccd60d180359a527d5980d959a26269a2c7b1b327a1eea0cab37ed8"}, ] srsly = [ {file = "srsly-2.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f7c3374184bfb1aa852bcb8e45747b02f2dde0ebe62b4ddf4b0141affeab32e1"}, @@ -5007,8 +5031,8 @@ towncrier = [ {file = "towncrier-21.3.0.tar.gz", hash = "sha256:6eed0bc924d72c98c000cb8a64de3bd566e5cb0d11032b73fcccf8a8f956ddfe"}, ] tqdm = [ - {file = "tqdm-4.61.2-py2.py3-none-any.whl", hash = "sha256:5aa445ea0ad8b16d82b15ab342de6b195a722d75fc1ef9934a46bba6feafbc64"}, - {file = "tqdm-4.61.2.tar.gz", hash = "sha256:8bb94db0d4468fea27d004a0f1d1c02da3cdedc00fe491c0de986b76a04d6b0a"}, + {file = "tqdm-4.62.0-py2.py3-none-any.whl", hash = "sha256:706dea48ee05ba16e936ee91cb3791cd2ea6da348a0e50b46863ff4363ff4340"}, + {file = "tqdm-4.62.0.tar.gz", hash = "sha256:3642d483b558eec80d3c831e23953582c34d7e4540db86d9e5ed9dad238dabc6"}, ] transformers = [ {file = "transformers-2.11.0-py3-none-any.whl", hash = "sha256:b3e5198266f2a4b14841c70427cad46b89f473e6b0d0d3ab7461bf775f31631d"}, @@ -5070,8 +5094,8 @@ types-pytz = [ {file = "types_pytz-2021.1.0-py3-none-any.whl", hash = "sha256:ec9555397f91518b2cf028ed837a69e388763c6a5e58abffaf37732f9c581a46"}, ] types-requests = [ - {file = "types-requests-2.25.0.tar.gz", hash = "sha256:ee0d0c507210141b7d5b8639cc43eaa726084178775db2a5fb06fbf85c185808"}, - {file = "types_requests-2.25.0-py3-none-any.whl", hash = "sha256:fa5c1e5e832ff6193507d8da7e1159281383908ee193a2f4b37bc08140b51844"}, + {file = "types-requests-2.25.2.tar.gz", hash = "sha256:03122b582f5300ec35ac6692f2634207c467e602dc9ba46b5811a9f6ce0b0bc2"}, + {file = "types_requests-2.25.2-py3-none-any.whl", hash = "sha256:a4c03c654527957a70002079ca48669b53d82eac4811abf140ea93847b65529b"}, ] types-setuptools = [ {file = "types-setuptools-57.0.0.tar.gz", hash = "sha256:b3ada82b21dcb8e0cafd7658d8a16018a000e55bdb7f6f3cec033223360563ce"}, diff --git a/pyproject.toml b/pyproject.toml index a01a94f29a9f..c1ea29103b07 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ exclude = "((.eggs | .git | .pytest_cache | build | dist))" [tool.poetry] name = "rasa" -version = "2.8.0" +version = "2.8.2" description = "Open source machine learning framework to automate text- and voice-based conversations: NLU, dialogue management, connect to Slack, Facebook, and more - Create chatbots and voice assistants" authors = [ "Rasa Technologies GmbH ",] maintainers = [ "Tom Bocklisch ",] @@ -90,7 +90,7 @@ colorhash = "~1.0.2" jsonschema = "~3.2" packaging = ">=20.0,<21.0" pytz = ">=2019.1,<2022.0" -rasa-sdk = "^2.8.0" +rasa-sdk = "^2.8.1" colorclass = "~2.2" terminaltables = "~3.1.0" sanic = ">=19.12.2,<20.12.0" diff --git a/rasa/core/policies/ted_policy.py b/rasa/core/policies/ted_policy.py index 02c264ce2265..259b8d29f9be 100644 --- a/rasa/core/policies/ted_policy.py +++ b/rasa/core/policies/ted_policy.py @@ -551,9 +551,24 @@ def _create_model_data( return model_data + @staticmethod + def _get_trackers_for_training( + trackers: List[TrackerWithCachedStates], + ) -> List[TrackerWithCachedStates]: + """Filters out the list of trackers which should not be used for training. + + Args: + trackers: All trackers available for training. + + Returns: + Trackers which should be used for training. + """ + # By default, we train on all available trackers. + return trackers + def _prepare_for_training( self, - training_trackers: List[TrackerWithCachedStates], + trackers: List[TrackerWithCachedStates], domain: Domain, interpreter: NaturalLanguageInterpreter, **kwargs: Any, @@ -561,7 +576,7 @@ def _prepare_for_training( """Prepares data to be fed into the model. Args: - training_trackers: List of training trackers to be featurized. + trackers: List of training trackers to be featurized. domain: Domain of the assistant. interpreter: NLU interpreter to be used for featurizing states. **kwargs: Any other arguments. @@ -569,6 +584,7 @@ def _prepare_for_training( Returns: Featurized data to be fed to the model and corresponding label ids. """ + training_trackers = self._get_trackers_for_training(trackers) # dealing with training data tracker_state_features, label_ids, entity_tags = self._featurize_for_training( training_trackers, @@ -1007,7 +1023,9 @@ def load( model_utilities = cls._load_model_utilities(model_path) model_utilities["meta"] = cls._update_loaded_params(model_utilities["meta"]) - model_utilities["meta"][EPOCHS] = epoch_override + + if should_finetune: + model_utilities["meta"][EPOCHS] = epoch_override ( model_data_example, diff --git a/rasa/core/policies/unexpected_intent_policy.py b/rasa/core/policies/unexpected_intent_policy.py index a0976a4dd887..cc689ed4d987 100644 --- a/rasa/core/policies/unexpected_intent_policy.py +++ b/rasa/core/policies/unexpected_intent_policy.py @@ -23,6 +23,7 @@ from rasa.core.featurizers.single_state_featurizer import ( IntentTokenizerSingleStateFeaturizer, ) +from rasa.shared.core.generator import TrackerWithCachedStates from rasa.core.constants import UNLIKELY_INTENT_POLICY_PRIORITY, DIALOGUE from rasa.core.policies.policy import PolicyPrediction from rasa.core.policies.ted_policy import ( @@ -398,6 +399,37 @@ def compute_label_quantiles_post_training( # value specified in the configuration. self.label_quantiles = self._compute_label_quantiles(label_id_scores) + @staticmethod + def _get_trackers_for_training( + trackers: List[TrackerWithCachedStates], + ) -> List[TrackerWithCachedStates]: + """Filters out the list of trackers which should not be used for training. + + `UnexpecTEDIntentPolicy` cannot be trained on trackers with: + 1. `UserUttered` events with no intent. + 2. `ActionExecuted` events with no action_name. + + Trackers with such events are filtered out. + + Args: + trackers: All trackers available for training. + + Returns: + Trackers which should be used for training. + """ + trackers_for_training = [] + for tracker in trackers: + tracker_compatible = True + for event in tracker.applied_events(): + if (isinstance(event, UserUttered) and event.intent_name is None) or ( + isinstance(event, ActionExecuted) and event.action_name is None + ): + tracker_compatible = False + break + if tracker_compatible: + trackers_for_training.append(tracker) + return trackers_for_training + def run_training( self, model_data: RasaModelData, label_ids: Optional[np.ndarray] = None ) -> None: diff --git a/rasa/nlu/train.py b/rasa/nlu/train.py index 82d0bd72545d..0798aa655654 100644 --- a/rasa/nlu/train.py +++ b/rasa/nlu/train.py @@ -2,7 +2,6 @@ import typing from typing import Any, Optional, Text, Tuple, Union, Dict -import rasa.shared.utils.common from rasa.nlu import config, utils from rasa.nlu.components import ComponentBuilder from rasa.nlu.config import RasaNLUModelConfig @@ -112,10 +111,6 @@ async def train( training_data = load_data(data, nlu_config.language) training_data.print_stats() - if training_data.entity_roles_groups_used(): - rasa.shared.utils.common.mark_as_experimental_feature( - "Entity Roles and Groups feature" - ) interpreter = trainer.train(training_data, **kwargs) diff --git a/rasa/utils/endpoints.py b/rasa/utils/endpoints.py index 588ccff5cadb..c5df6d8d38e9 100644 --- a/rasa/utils/endpoints.py +++ b/rasa/utils/endpoints.py @@ -1,3 +1,5 @@ +import ssl + import aiohttp import logging import os @@ -5,6 +7,7 @@ from sanic.request import Request from typing import Any, Optional, Text, Dict +from rasa.shared.exceptions import FileNotFoundException import rasa.shared.utils.io import rasa.utils.io from rasa.constants import DEFAULT_REQUEST_TIMEOUT @@ -79,6 +82,7 @@ def __init__( basic_auth: Optional[Dict[Text, Text]] = None, token: Optional[Text] = None, token_name: Text = "token", + cafile: Optional[Text] = None, **kwargs: Any, ) -> None: """Creates an `EndpointConfig` instance.""" @@ -89,9 +93,11 @@ def __init__( self.token = token self.token_name = token_name self.type = kwargs.pop("store_type", kwargs.pop("type", None)) + self.cafile = cafile self.kwargs = kwargs def session(self) -> aiohttp.ClientSession: + """Creates and returns a configured aiohttp client session.""" # create authentication parameters if self.basic_auth: auth = aiohttp.BasicAuth( @@ -143,12 +149,24 @@ async def request( del kwargs["headers"] url = concat_url(self.url, subpath) + + sslcontext = None + if self.cafile: + try: + sslcontext = ssl.create_default_context(cafile=self.cafile) + except FileNotFoundError as e: + raise FileNotFoundException( + f"Failed to find certificate file, " + f"'{os.path.abspath(self.cafile)}' does not exist." + ) from e + async with self.session() as session: async with session.request( method, url, headers=headers, params=self.combine_parameters(kwargs), + ssl=sslcontext, **kwargs, ) as response: if response.status >= 400: diff --git a/rasa/version.py b/rasa/version.py index 8b6da31b3ec2..8efe82b7b742 100644 --- a/rasa/version.py +++ b/rasa/version.py @@ -1,3 +1,3 @@ # this file will automatically be changed, # do not add anything but the version number here! -__version__ = "2.8.0" +__version__ = "2.8.2" diff --git a/scripts/push_docs_to_branch.sh b/scripts/push_docs_to_branch.sh index 1915a2a36314..09c24d1ff79f 100755 --- a/scripts/push_docs_to_branch.sh +++ b/scripts/push_docs_to_branch.sh @@ -48,6 +48,9 @@ then EXISTING_VERSION=$NEW_VERSION fi +# install yarn dependencies in the temp directory +cd $TMP_DOCS_FOLDER/docs && yarn install && cd - || exit 1 + if [ ! -z "$EXISTING_VERSION" ] then echo "Updating docs for existing version $EXISTING_VERSION..." @@ -73,7 +76,7 @@ fi CURRENTLY_EDITING_VERSION=${EXISTING_VERSION:-$NEW_VERSION} if [ -n "$CURRENTLY_EDITING_VERSION" ] then - cd $TMP_DOCS_FOLDER/docs && yarn run update-versioned-sources -- $CURRENTLY_EDITING_VERSION && cd - || exit 1 + cd $TMP_DOCS_FOLDER/docs && yarn run update-versioned-sources $CURRENTLY_EDITING_VERSION && cd - || exit 1 fi cd $TMP_DOCS_FOLDER diff --git a/tests/core/policies/test_ted_policy.py b/tests/core/policies/test_ted_policy.py index 24a64269c0e9..b44b5f674bc7 100644 --- a/tests/core/policies/test_ted_policy.py +++ b/tests/core/policies/test_ted_policy.py @@ -1,5 +1,5 @@ from pathlib import Path -from typing import Optional, List +from typing import Optional, List, Type from unittest.mock import Mock import numpy as np import pytest @@ -47,6 +47,7 @@ SENTENCE, IDS, EVAL_NUM_EPOCHS, + EPOCHS, ) from rasa.shared.nlu.constants import ACTION_NAME from rasa.utils.tensorflow import model_data_utils @@ -102,6 +103,10 @@ def test_diagnostics(): class TestTEDPolicy(PolicyTestCollection): + @staticmethod + def _policy_class_to_test() -> Type[TEDPolicy]: + return TEDPolicy + def create_policy( self, featurizer: Optional[TrackerFeaturizer], priority: int ) -> TEDPolicy: @@ -153,6 +158,33 @@ def test_doesnt_checkpoint_with_zero_eval_num_examples(self, tmp_path: Path): assert not checkpoint_dir.is_dir() assert len([w for w in warning if warn_text in str(w.message)]) == 1 + @pytest.mark.parametrize( + "should_finetune, epoch_override, expected_epoch_value", + [ + (True, TEDPolicy.defaults[EPOCHS] + 1, TEDPolicy.defaults[EPOCHS] + 1), + ( + False, + TEDPolicy.defaults[EPOCHS] + 1, + TEDPolicy.defaults[EPOCHS], + ), # trained_policy uses default epochs during training + ], + ) + def test_epoch_override_when_loaded( + self, + trained_policy: TEDPolicy, + should_finetune: bool, + epoch_override: int, + expected_epoch_value: int, + tmp_path: Path, + ): + # persist and load in appropriate mode + trained_policy.persist(tmp_path) + loaded_policy = self._policy_class_to_test().load( + tmp_path, should_finetune=should_finetune, epoch_override=epoch_override + ) + + assert loaded_policy.config[EPOCHS] == expected_epoch_value + def test_train_fails_with_checkpoint_zero_eval_num_epochs(self, tmp_path: Path): checkpoint_dir = get_checkpoint_dir_path(tmp_path) assert not checkpoint_dir.is_dir() diff --git a/tests/core/policies/test_unexpected_intent_policy.py b/tests/core/policies/test_unexpected_intent_policy.py index dbc1c17343a4..46908f9fec5b 100644 --- a/tests/core/policies/test_unexpected_intent_policy.py +++ b/tests/core/policies/test_unexpected_intent_policy.py @@ -1,5 +1,5 @@ from pathlib import Path -from typing import Optional, List, Dict, Text +from typing import Optional, List, Dict, Text, Type import tensorflow as tf import numpy as np import pytest @@ -14,7 +14,8 @@ TrackerFeaturizer, IntentMaxHistoryTrackerFeaturizer, ) -from rasa.core.policies.ted_policy import PREDICTION_FEATURES +from rasa.shared.core.generator import TrackerWithCachedStates +from rasa.core.policies.ted_policy import PREDICTION_FEATURES, TEDPolicy from rasa.core.policies.unexpected_intent_policy import UnexpecTEDIntentPolicy from rasa.shared.core.constants import ACTION_UNLIKELY_INTENT_NAME, ACTION_LISTEN_NAME from rasa.shared.core.domain import Domain @@ -52,6 +53,10 @@ class TestUnexpecTEDIntentPolicy(TestTEDPolicy): + @staticmethod + def _policy_class_to_test() -> Type[TEDPolicy]: + return UnexpecTEDIntentPolicy + def create_policy( self, featurizer: Optional[TrackerFeaturizer], priority: int ) -> UnexpecTEDIntentPolicy: @@ -816,3 +821,288 @@ def test_individual_label_metadata( test_individual_label_metadata( label_metadata, label_thresholds, similarities, label_index ) + + @pytest.mark.parametrize( + "tracker_events_for_training, expected_trackers_with_events", + [ + # Filter because of no intent and action name + ( + [ + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello", intent={"name": "greet"}), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered( + text="happy to make it work", intent={"name": "goodbye"} + ), + ActionExecuted("utter_goodbye"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello"), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="happy to make it work"), + ActionExecuted(action_text="Great!"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + ], + [ + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello", intent={"name": "greet"}), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered( + text="happy to make it work", intent={"name": "goodbye"} + ), + ActionExecuted("utter_goodbye"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + ], + ), + # Filter because of no action name + ( + [ + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello", intent={"name": "greet"}), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered( + text="happy to make it work", intent={"name": "goodbye"} + ), + ActionExecuted("utter_goodbye"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello"), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered( + text="happy to make it work", intent={"name": "goodbye"} + ), + ActionExecuted(action_text="Great!"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + ], + [ + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello", intent={"name": "greet"}), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered( + text="happy to make it work", intent={"name": "goodbye"} + ), + ActionExecuted("utter_goodbye"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + ], + ), + # Filter because of no intent + ( + [ + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello", intent={"name": "greet"}), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered( + text="happy to make it work", intent={"name": "goodbye"} + ), + ActionExecuted("utter_goodbye"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello"), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="happy to make it work"), + ActionExecuted("utter_goodbye"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + ], + [ + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello", intent={"name": "greet"}), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered( + text="happy to make it work", intent={"name": "goodbye"} + ), + ActionExecuted("utter_goodbye"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + ], + ), + # No filter needed + ( + [ + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello", intent={"name": "greet"}), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered( + text="happy to make it work", intent={"name": "goodbye"} + ), + ActionExecuted("utter_goodbye"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + ], + [ + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello", intent={"name": "greet"}), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered( + text="happy to make it work", intent={"name": "goodbye"} + ), + ActionExecuted("utter_goodbye"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + ], + ), + # Filter to return empty list of trackers + ( + [ + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello", intent={"name": "greet"}), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered( + text="happy to make it work", intent={"name": "goodbye"} + ), + ActionExecuted(action_text="Great!"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + ], + [], + ), + ], + ) + def test_filter_training_trackers( + self, + tracker_events_for_training: List[List[Event]], + expected_trackers_with_events: List[List[Event]], + domain: Domain, + ): + trackers_for_training = [ + TrackerWithCachedStates.from_events( + sender_id=f"{tracker_index}", evts=events, domain=domain + ) + for tracker_index, events in enumerate(tracker_events_for_training) + ] + + filtered_trackers = UnexpecTEDIntentPolicy._get_trackers_for_training( + trackers_for_training + ) + assert len(filtered_trackers) == len(expected_trackers_with_events) + for collected_tracker, expected_tracker_events in zip( + filtered_trackers, expected_trackers_with_events + ): + collected_tracker_events = list(collected_tracker.events) + assert collected_tracker_events == expected_tracker_events + + +@pytest.mark.parametrize( + "tracker_events, skip_training", + [ + ( + [ + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello", intent={"name": "greet"}), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered( + text="happy to make it work", intent={"name": "goodbye"} + ), + ActionExecuted("utter_goodbye"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello"), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="happy to make it work"), + ActionExecuted(action_text="Great!"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + ], + False, + ), + ( + [ + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello"), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="happy to make it work"), + ActionExecuted(action_text="Great!"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + ], + True, + ), + ( + [ + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello"), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="happy to make it work"), + ActionExecuted("utter_goodbye"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + ], + True, + ), + ( + [ + [ + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered(text="hello"), + ActionExecuted("utter_greet"), + ActionExecuted(ACTION_LISTEN_NAME), + UserUttered( + text="happy to make it work", intent={"name": "goodbye"} + ), + ActionExecuted(action_text="Great!"), + ActionExecuted(ACTION_LISTEN_NAME), + ], + ], + True, + ), + ], +) +def test_train_with_e2e_data( + tracker_events: List[List[Event]], skip_training: bool, domain: Domain, +): + policy = UnexpecTEDIntentPolicy( + featurizer=IntentMaxHistoryTrackerFeaturizer( + IntentTokenizerSingleStateFeaturizer() + ) + ) + trackers_for_training = [ + TrackerWithCachedStates.from_events( + sender_id=f"{tracker_index}", evts=events, domain=domain + ) + for tracker_index, events in enumerate(tracker_events) + ] + if skip_training: + with pytest.warns(UserWarning): + policy.train(trackers_for_training, domain, interpreter=RegexInterpreter()) + else: + policy.train(trackers_for_training, domain, interpreter=RegexInterpreter()) diff --git a/tests/utils/test_endpoints.py b/tests/utils/test_endpoints.py index 5532e1d75e96..c945e78b1bf3 100644 --- a/tests/utils/test_endpoints.py +++ b/tests/utils/test_endpoints.py @@ -1,10 +1,12 @@ import logging +from pathlib import Path from typing import Text, Optional, Union from unittest.mock import Mock import pytest from aioresponses import aioresponses +from rasa.shared.exceptions import FileNotFoundException from tests.utilities import latest_request, json_of_latest_request import rasa.utils.endpoints as endpoint_utils @@ -92,6 +94,38 @@ async def test_endpoint_config(): assert s._default_auth.password == "pass" +async def test_endpoint_config_with_cafile(tmp_path: Path): + cafile = "data/test_endpoints/cert.pem" + + with aioresponses() as mocked: + endpoint = endpoint_utils.EndpointConfig( + "https://example.com/", cafile=str(cafile), + ) + + mocked.post( + "https://example.com/", status=200, + ) + + await endpoint.request("post",) + + request = latest_request(mocked, "post", "https://example.com/")[-1] + + ssl_context = request.kwargs["ssl"] + certs = ssl_context.get_ca_certs() + assert certs[0]["subject"][4][0] == ("organizationalUnitName", "rasa") + + +async def test_endpoint_config_with_non_existent_cafile(tmp_path: Path): + cafile = "data/test_endpoints/no_file.pem" + + endpoint = endpoint_utils.EndpointConfig( + "https://example.com/", cafile=str(cafile), + ) + + with pytest.raises(FileNotFoundException): + await endpoint.request("post",) + + def test_endpoint_config_default_token_name(): test_data = {"url": "http://test", "token": "token"} @@ -133,6 +167,17 @@ def test_read_endpoint_config(filename: Text, endpoint_type: Text): assert isinstance(conf, endpoint_utils.EndpointConfig) +@pytest.mark.parametrize( + "endpoint_type, cafile", + [("action_endpoint", "./some_test_file"), ("tracker_store", None)], +) +def test_read_endpoint_config_with_cafile(endpoint_type: Text, cafile: Optional[Text]): + conf = endpoint_utils.read_endpoint_config( + "data/test_endpoints/example_endpoints.yml", endpoint_type + ) + assert conf.cafile == cafile + + @pytest.mark.parametrize( "filename, endpoint_type", [ From 0b7485fdf92f6c3ca72419aa52f5ebcae3d37d41 Mon Sep 17 00:00:00 2001 From: ErickGiffoni Date: Sat, 7 Aug 2021 19:39:44 -0300 Subject: [PATCH 09/16] Apply suggestions from code review Co-authored-by: David --- macOS-support.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/macOS-support.md b/macOS-support.md index 95fb37f21c26..9d9523eed577 100644 --- a/macOS-support.md +++ b/macOS-support.md @@ -1,16 +1,16 @@ -# Development Internals Support for macOS users +# Development Internal Support for macOS users When trying to get virtual env and dependencies running, macOS users may experience some compiler problems. -If that is your case, this guide is intended to help you get things working. +If that is the case, this guide is intended to help you get things working. It was built based on common problems that were reported to the Rasa repository. It is possible that your problem is not listed here yet, but try reading the -bellow because it might give you an insight. +below because it might give you an insight. ## Problems with pyenv @@ -75,7 +75,7 @@ it like this: The above should work just fine, but if life doesn't go easy on you, it's possible -that an error like the one bellow showed up: +that an error like the one below showed up: Error example 3 From ee0ddb2db7de9ecd6ef39746cddf4c570d5dd5bc Mon Sep 17 00:00:00 2001 From: ErickGiffoni Date: Tue, 7 Sep 2021 17:48:30 -0300 Subject: [PATCH 10/16] remove the unused imports and comments --- tests/test_facebook.py | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/tests/test_facebook.py b/tests/test_facebook.py index 6a978d3f6d33..ec2f269f1638 100644 --- a/tests/test_facebook.py +++ b/tests/test_facebook.py @@ -1,38 +1,20 @@ import logging -from typing import Dict -from unittest.mock import patch, MagicMock from rasa.core.channels.facebook import MessengerBot from fbmessenger import MessengerClient -import pytest from _pytest.monkeypatch import MonkeyPatch -from aiohttp import ClientTimeout -from aioresponses import aioresponses -from sanic import Sanic import rasa.core.run from rasa.core import utils -from rasa.core.channels import RasaChatInput, console -from rasa.core.channels.channel import UserMessage -from rasa.core.channels.rasa_chat import ( - JWT_USERNAME_KEY, - CONVERSATION_ID_KEY, - INTERACTIVE_LEARNING_PERMISSION, -) -from rasa.core.channels.telegram import TelegramOutput -from rasa.utils.endpoints import EndpointConfig -from tests.core import utilities + # this is needed so that the tests included as code examples look better from tests.utilities import json_of_latest_request, latest_request logger = logging.getLogger(__name__) -# USED FOR DOCS - don't rename without changing in the docs - def test_facebook_channel(): - # START DOC INCLUDE from rasa.core.channels.facebook import FacebookInput input_channel = FacebookInput( @@ -44,9 +26,7 @@ def test_facebook_channel(): ) s = rasa.core.run.configure_app([input_channel], port=5004) - # END DOC INCLUDE - # the above marker marks the end of the code snipped included - # in the docs + routes_list = utils.list_routes(s) assert routes_list["fb_webhook.health"].startswith("/webhooks/facebook") From 49174dd576ea23f9fbf222075ebbaaef4c22566a Mon Sep 17 00:00:00 2001 From: ErickGiffoni Date: Tue, 7 Sep 2021 17:52:31 -0300 Subject: [PATCH 11/16] uses a Union for the json_message, as suggested here #8332 --- rasa/core/channels/facebook.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/rasa/core/channels/facebook.py b/rasa/core/channels/facebook.py index 5d214c44a46c..ef867ee4c1b9 100644 --- a/rasa/core/channels/facebook.py +++ b/rasa/core/channels/facebook.py @@ -10,7 +10,7 @@ import rasa.shared.utils.io from sanic import Blueprint, response from sanic.request import Request -from typing import Text, List, Dict, Any, Callable, Awaitable, Iterable, Optional +from typing import Text, List, Dict, Any, Callable, Awaitable, Iterable, Optional, Union from rasa.core.channels.channel import UserMessage, OutputChannel, InputChannel from sanic.response import HTTPResponse @@ -276,7 +276,10 @@ async def send_elements( self.messenger_client.send(payload, recipient_id, "RESPONSE") async def send_custom_json( - self, recipient_id: Text, json_message: Dict[Text, Any], **kwargs: Any + self, + recipient_id: Text, + json_message: Union[List, Dict[Text, Any]], + **kwargs: Any, ) -> None: """Sends custom json data to the output.""" if isinstance(json_message, dict) and "sender" in json_message.keys(): From 8a642d2f870c4389d1af888dd560a9a2ab3a5057 Mon Sep 17 00:00:00 2001 From: ErickGiffoni Date: Wed, 8 Sep 2021 18:34:32 -0300 Subject: [PATCH 12/16] removing irrelevant file --- macOS-support.md | 170 ----------------------------------------------- 1 file changed, 170 deletions(-) delete mode 100644 macOS-support.md diff --git a/macOS-support.md b/macOS-support.md deleted file mode 100644 index 9d9523eed577..000000000000 --- a/macOS-support.md +++ /dev/null @@ -1,170 +0,0 @@ -# Development Internal Support for macOS users - -When trying to get virtual env and dependencies running, macOS users may - -experience some compiler problems. - -If that is the case, this guide is intended to help you get things working. - -It was built based on common problems that were reported to the Rasa repository. - -It is possible that your problem is not listed here yet, but try reading the - -below because it might give you an insight. - - -## Problems with pyenv - - -### 1. ```pyenv install 3.7.6``` failed - - -If you tried the command above and it failed, you probably got something like - -this: - - -Error example 1 -``` -> pyenv install 3.7.6 -python-build: use openssl@1.1 from homebrew -python-build: use readline from homebrew -Downloading Python-3.7.6.tar.xz... --> https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tar.xz -Installing Python-3.7.6... -python-build: use readline from homebrew -python-build: use zlib from xcode sdk - -BUILD FAILED (OS X 11.2.1 using python-build 20180424) - -Inspect or clean up the working tree at /var/folders/g8/frp_8d7s2639spgcxqyd3kpw0000gn/T/python-build.20210215142044.19884 -Results logged to /var/folders/g8/frp_8d7s2639spgcxqyd3kpw0000gn/T/python-build.20210215142044.19884.log - -Last 10 log lines: -/usr/local/include/pthread.h:197:34: note: expanded from macro '_PTHREAD_SWIFT_IMPORTER_NULLABILITY_COMPAT' - defined(SWIFT_CLASS_EXTRA) && (!defined(SWIFT_SDK_OVERLAY_PTHREAD_EPOCH) || (SWIFT_SDK_OVERLAY_PTHREAD_EPOCH < 1)) - ^ -``` - -or even this: - - -Error example 2 -``` -[...] -./Modules/posixmodule.c:8436:15: error: implicit declaration of function 'sendfile' is invalid in C99 [-Werror,-Wimplicit-function-declaration] - ret = sendfile(in, out, offset, &sbytes, &sf, flags); - ^ -1 error generated. -make: *** [Modules/posixmodule.o] Error 1 -make: *** Waiting for unfinished jobs.... -1 warning generated. -``` - - -> **Possible solution** - - -Applying a **patch** when running the command worked for some users. You can do - -it like this: - - -```$ pyenv install --patch 3.7.6 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch)``` - - -The above should work just fine, but if life doesn't go easy on you, it's possible - -that an error like the one below showed up: - - -Error example 3 -``` -Last 10 log lines: - File "/private/var/folders/c8/05hjylz57llf63n1bhhv9n6w0000gn/T/python-build.20210804100934.72978/Python-3.7.6/Lib/ensurepip/__main__.py", line 5, in - sys.exit(ensurepip._main()) - File "/private/var/folders/c8/05hjylz57llf63n1bhhv9n6w0000gn/T/python-build.20210804100934.72978/Python-3.7.6/Lib/ensurepip/__init__.py", line 204, in _main - default_pip=args.default_pip, - File "/private/var/folders/c8/05hjylz57llf63n1bhhv9n6w0000gn/T/python-build.20210804100934.72978/Python-3.7.6/Lib/ensurepip/__init__.py", line 117, in _bootstrap - return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths) - File "/private/var/folders/c8/05hjylz57llf63n1bhhv9n6w0000gn/T/python-build.20210804100934.72978/Python-3.7.6/Lib/ensurepip/__init__.py", line 27, in _run_pip - import pip._internal -**zipimport.ZipImportError: can't decompress data; zlib not available** -make: *** [install] Error 1 -``` - - -> **More possible solutions** - - -- You may need to install *zlib*. You can do it with Homebrew: - -```$ brew install zlib``` - -- It is possible that your shell is not able to find *zilib*. To help it, - -exporting some flags may work: - -``` -$ export LDFLAGS="-L/usr/local/opt/zlib/lib" -$ export CPPFLAGS="-I/usr/local/opt/zlib/include" -$ export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig" -``` - -- Furthermore, you might need to create symbolic links regarding *zlib* so your - -include path can find it: - -``` -$ ln -s /usr/local/Cellar/zlib/1.2.11/include/* /usr/local/include/ -$ ln -s /usr/local/Cellar/zlib/1.2.11/lib/* /usr/local/lib/ -``` - -- If you did everything above and still got errors, you might also reinstall - -python with Homebrew: - -```$ brew reinstall python``` - - -After all that, **run the command again**: - -```$ pyenv install --patch 3.7.6 < <(curl -sSL https://github.com/python/cpython/commit/8ea6353.patch)``` - - -## Problems with my venv - - -- You may want to guarantee **creating your venv** with the right **python version**. - -For example, ```python3 -m venv .venv```. - -Then, activate the venv: ```$ source .venv/bin/activate```. - - -
- -## I've got no more problems !!! - - -Nice ! Now you can run one simple command and you'll be ready to work: - - -```$ make install``` - - -
- -### References - -- https://github.com/RasaHQ/rasa/issues/7956 - -- https://github.com/pyenv/pyenv/issues/1643 - -- https://github.com/python-pillow/Pillow/issues/1461 - -- https://stackoverflow.com/questions/38749403/python-no-module-named-zlib-mac-os-x-el-capitan-10-11-6 - -- https://github.com/pyenv/pyenv/issues/1764#issuecomment-758400362 - -- https://github.com/grpc/grpc/issues/24677#issuecomment-775458281 From 831e3a3ee631cd4d141236ad0fba464ac10295aa Mon Sep 17 00:00:00 2001 From: ErickGiffoni Date: Wed, 8 Sep 2021 18:35:04 -0300 Subject: [PATCH 13/16] updates README with branch main --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4150bc70044f..8f7a4ee56a2c 100644 --- a/README.md +++ b/README.md @@ -163,9 +163,7 @@ make install ``` *Note for macOS users*: under macOS Big Sur we've seen some compiler issues for -dependencies. Using `export SYSTEM_VERSION_COMPAT=1` before the installation helped. -Also, this [macOS support guide](macOS-support.md) lists common problems encountered -by other users and possible solutions. +dependencies. Using `export SYSTEM_VERSION_COMPAT=1` before the installation helped. ### Running and changing the documentation @@ -406,4 +404,4 @@ Copyright 2021 Rasa Technologies GmbH. [Copy of the license](LICENSE.txt). A list of the Licenses of the dependencies of the project can be found at the bottom of the -[Libraries Summary](https://libraries.io/github/RasaHQ/rasa). +[Libraries Summary](https://libraries.io/github/RasaHQ/rasa). \ No newline at end of file From 841e6e735b56f220d3e6736a6bd39425232e3527 Mon Sep 17 00:00:00 2001 From: ErickGiffoni Date: Wed, 8 Sep 2021 18:36:12 -0300 Subject: [PATCH 14/16] updates file test_unexpected_intent_policy with branch main --- .../policies/test_unexpected_intent_policy.py | 32 +------------------ 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/tests/core/policies/test_unexpected_intent_policy.py b/tests/core/policies/test_unexpected_intent_policy.py index 6ed74bd6c589..3a00f6dd77bb 100644 --- a/tests/core/policies/test_unexpected_intent_policy.py +++ b/tests/core/policies/test_unexpected_intent_policy.py @@ -1,6 +1,5 @@ from pathlib import Path -from typing import Optional, List, Dict, Text, Type, Any - +from typing import Optional, List, Dict, Text, Type import tensorflow as tf import numpy as np import pytest @@ -1059,35 +1058,6 @@ def test_filter_training_trackers( collected_tracker_events = list(collected_tracker.events) assert collected_tracker_events == expected_tracker_events - # TODO: This test can be dropped in favor of the implementation - # `TestTEDPolicy` once this policy has been migrated to `GraphComponent`. - @pytest.mark.parametrize( - "should_finetune, epoch_override, expected_epoch_value", - [ - (True, TEDPolicy.defaults[EPOCHS] + 1, TEDPolicy.defaults[EPOCHS] + 1), - ( - False, - TEDPolicy.defaults[EPOCHS] + 1, - TEDPolicy.defaults[EPOCHS], - ), # trained_policy uses default epochs during training - ], - ) - def test_epoch_override_when_loaded( - self, - trained_policy: TEDPolicy, - should_finetune: bool, - epoch_override: int, - expected_epoch_value: int, - tmp_path: Path, - ): - # persist and load in appropriate mode - trained_policy.persist(tmp_path) - loaded_policy = self._policy_class_to_test().load( - tmp_path, should_finetune=should_finetune, epoch_override=epoch_override - ) - - assert loaded_policy.config[EPOCHS] == expected_epoch_value - @pytest.mark.parametrize( "tracker_events, skip_training", From f8b3a284eaa6a97593f17d7f1979c500b2efdd22 Mon Sep 17 00:00:00 2001 From: ErickGiffoni Date: Wed, 8 Sep 2021 18:36:58 -0300 Subject: [PATCH 15/16] updates file test_ted_policy with branch main --- tests/core/policies/test_ted_policy.py | 29 -------------------------- 1 file changed, 29 deletions(-) diff --git a/tests/core/policies/test_ted_policy.py b/tests/core/policies/test_ted_policy.py index ef0ad61363ff..3479220a09ba 100644 --- a/tests/core/policies/test_ted_policy.py +++ b/tests/core/policies/test_ted_policy.py @@ -1,8 +1,6 @@ from pathlib import Path -from typing import Optional, List, Type from typing import Optional, List, Type, Dict, Text, Any - from unittest.mock import Mock import numpy as np import pytest @@ -127,33 +125,6 @@ class TestTEDPolicy(PolicyTestCollection): def _policy_class_to_test() -> Type[TEDPolicy]: return TEDPolicy - def _config( - self, priority: int, config_override: Optional[Dict[Text, Any]] = None - ) -> Dict[Text, Any]: - config_override = config_override or {} - return { - **TEDPolicy.get_default_config(), - POLICY_PRIORITY: priority, - **config_override, - } - - def create_policy( - self, - featurizer: Optional[TrackerFeaturizer], - priority: int, - model_storage: ModelStorage, - resource: Resource, - execution_context: ExecutionContext, - config: Optional[Dict[Text, Any]] = None, - ) -> TEDPolicy: - return TEDPolicy( - self._config(priority, config), - featurizer=featurizer, - model_storage=model_storage, - resource=resource, - execution_context=execution_context, - ) - def test_train_model_checkpointing(self, tmp_path: Path): checkpoint_dir = get_checkpoint_dir_path(tmp_path) assert not checkpoint_dir.is_dir() From a11a6b2117a6b254429d672781933793161fddef Mon Sep 17 00:00:00 2001 From: ErickGiffoni Date: Tue, 21 Sep 2021 09:58:03 -0300 Subject: [PATCH 16/16] pass recipient_id as return value when pop fails Co-authored-by: Anca Lita <27920906+ancalita@users.noreply.github.com> --- rasa/core/channels/facebook.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rasa/core/channels/facebook.py b/rasa/core/channels/facebook.py index ef867ee4c1b9..4526a9b76e0b 100644 --- a/rasa/core/channels/facebook.py +++ b/rasa/core/channels/facebook.py @@ -283,7 +283,7 @@ async def send_custom_json( ) -> None: """Sends custom json data to the output.""" if isinstance(json_message, dict) and "sender" in json_message.keys(): - recipient_id = json_message.pop("sender", {}).pop("id") or recipient_id + recipient_id = json_message.pop("sender", {}).pop("id", recipient_id) self.messenger_client.send(json_message, recipient_id, "RESPONSE")