rasa-sdk 3.9.0.dev1__tar.gz → 3.9.0.dev2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/PKG-INFO +2 -2
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/pyproject.toml +3 -3
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/__main__.py +1 -3
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/endpoint.py +48 -17
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/tracing/utils.py +6 -14
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/version.py +1 -1
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/LICENSE.txt +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/README.md +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/__init__.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/cli/__init__.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/cli/arguments.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/constants.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/events.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/exceptions.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/executor.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/forms.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/interfaces.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/knowledge_base/__init__.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/knowledge_base/actions.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/knowledge_base/storage.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/knowledge_base/utils.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/plugin.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/slots.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/tracing/config.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/tracing/endpoints.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/tracing/instrumentation/attribute_extractors.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/tracing/instrumentation/instrumentation.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/tracing/tracer_register.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/types.py +0 -0
- {rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: rasa-sdk
|
|
3
|
-
Version: 3.9.0.
|
|
3
|
+
Version: 3.9.0.dev2
|
|
4
4
|
Summary: 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
|
|
5
5
|
Home-page: https://rasa.com
|
|
6
6
|
License: Apache-2.0
|
|
@@ -27,7 +27,7 @@ Requires-Dist: opentelemetry-sdk (>=1.15.0,<1.16.0)
|
|
|
27
27
|
Requires-Dist: pluggy (>=1.0.0,<2.0.0)
|
|
28
28
|
Requires-Dist: prompt-toolkit (>=3.0,<3.0.29)
|
|
29
29
|
Requires-Dist: ruamel.yaml (>=0.16.5,<0.18.0)
|
|
30
|
-
Requires-Dist: sanic (>=
|
|
30
|
+
Requires-Dist: sanic (>=22.12,<23.0)
|
|
31
31
|
Requires-Dist: typing-extensions (>=4.1.1,<5.0.0)
|
|
32
32
|
Requires-Dist: websockets (>=10.0,<12.0)
|
|
33
33
|
Project-URL: Documentation, https://rasa.com/docs
|
|
@@ -9,7 +9,7 @@ exclude = "((.eggs | .git | .mypy_cache | .pytest_cache | build | dist))"
|
|
|
9
9
|
|
|
10
10
|
[tool.poetry]
|
|
11
11
|
name = "rasa-sdk"
|
|
12
|
-
version = "3.9.0.
|
|
12
|
+
version = "3.9.0.dev2"
|
|
13
13
|
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"
|
|
14
14
|
authors = [ "Rasa Technologies GmbH <hi@rasa.com>",]
|
|
15
15
|
maintainers = [ "Tom Bocklisch <tom@rasa.com>",]
|
|
@@ -76,7 +76,7 @@ select = [ "D", "E", "F", "W", "RUF",]
|
|
|
76
76
|
[tool.poetry.dependencies]
|
|
77
77
|
python = ">=3.8,<3.11"
|
|
78
78
|
coloredlogs = ">=10,<16"
|
|
79
|
-
sanic = "^
|
|
79
|
+
sanic = "^22.12"
|
|
80
80
|
typing-extensions = ">=4.1.1,<5.0.0"
|
|
81
81
|
Sanic-Cors = "^2.0.0"
|
|
82
82
|
prompt-toolkit = "^3.0,<3.0.29"
|
|
@@ -99,7 +99,7 @@ toml = "^0.10.0"
|
|
|
99
99
|
pep440-version-utils = "^0.3.0"
|
|
100
100
|
semantic_version = "^2.8.5"
|
|
101
101
|
mypy = "^1.5"
|
|
102
|
-
sanic-testing = "^22.
|
|
102
|
+
sanic-testing = "^22.12"
|
|
103
103
|
|
|
104
104
|
[tool.ruff.pydocstyle]
|
|
105
105
|
convention = "google"
|
|
@@ -3,7 +3,6 @@ import logging
|
|
|
3
3
|
from rasa_sdk import utils
|
|
4
4
|
from rasa_sdk.endpoint import create_argument_parser, run
|
|
5
5
|
from rasa_sdk.constants import APPLICATION_ROOT_LOGGER_NAME
|
|
6
|
-
from rasa_sdk.tracing.utils import get_tracer_provider
|
|
7
6
|
|
|
8
7
|
|
|
9
8
|
def main_from_args(args):
|
|
@@ -18,7 +17,6 @@ def main_from_args(args):
|
|
|
18
17
|
args.logging_config_file,
|
|
19
18
|
)
|
|
20
19
|
utils.update_sanic_log_level()
|
|
21
|
-
tracer_provider = get_tracer_provider(args)
|
|
22
20
|
|
|
23
21
|
run(
|
|
24
22
|
args.actions,
|
|
@@ -28,7 +26,7 @@ def main_from_args(args):
|
|
|
28
26
|
args.ssl_keyfile,
|
|
29
27
|
args.ssl_password,
|
|
30
28
|
args.auto_reload,
|
|
31
|
-
|
|
29
|
+
args.endpoints,
|
|
32
30
|
)
|
|
33
31
|
|
|
34
32
|
|
|
@@ -5,10 +5,12 @@ import types
|
|
|
5
5
|
import warnings
|
|
6
6
|
import zlib
|
|
7
7
|
import json
|
|
8
|
+
from functools import partial
|
|
8
9
|
from typing import List, Text, Union, Optional
|
|
9
10
|
from ssl import SSLContext
|
|
10
11
|
from sanic import Sanic, response
|
|
11
12
|
from sanic.response import HTTPResponse
|
|
13
|
+
from sanic.worker.loader import AppLoader
|
|
12
14
|
|
|
13
15
|
# catching:
|
|
14
16
|
# - all `pkg_resources` deprecation warning from multiple dependencies
|
|
@@ -24,16 +26,23 @@ with warnings.catch_warnings():
|
|
|
24
26
|
category=DeprecationWarning,
|
|
25
27
|
message="distutils Version classes are deprecated",
|
|
26
28
|
)
|
|
27
|
-
from opentelemetry.sdk.trace import TracerProvider
|
|
28
29
|
from sanic_cors import CORS
|
|
29
30
|
from sanic.request import Request
|
|
30
31
|
from rasa_sdk import utils
|
|
31
32
|
from rasa_sdk.cli.arguments import add_endpoint_arguments
|
|
32
|
-
from rasa_sdk.constants import
|
|
33
|
+
from rasa_sdk.constants import (
|
|
34
|
+
DEFAULT_ENDPOINTS_PATH,
|
|
35
|
+
DEFAULT_KEEP_ALIVE_TIMEOUT,
|
|
36
|
+
DEFAULT_SERVER_PORT,
|
|
37
|
+
)
|
|
33
38
|
from rasa_sdk.executor import ActionExecutor
|
|
34
39
|
from rasa_sdk.interfaces import ActionExecutionRejection, ActionNotFoundException
|
|
35
40
|
from rasa_sdk.plugin import plugin_manager
|
|
36
|
-
from rasa_sdk.tracing.utils import
|
|
41
|
+
from rasa_sdk.tracing.utils import (
|
|
42
|
+
get_tracer_and_context,
|
|
43
|
+
get_tracer_provider,
|
|
44
|
+
set_span_attributes,
|
|
45
|
+
)
|
|
37
46
|
|
|
38
47
|
logger = logging.getLogger(__name__)
|
|
39
48
|
|
|
@@ -42,7 +51,6 @@ def configure_cors(
|
|
|
42
51
|
app: Sanic, cors_origins: Union[Text, List[Text], None] = ""
|
|
43
52
|
) -> None:
|
|
44
53
|
"""Configure CORS origins for the given app."""
|
|
45
|
-
|
|
46
54
|
CORS(
|
|
47
55
|
app, resources={r"/*": {"origins": cors_origins or ""}}, automatic_options=True
|
|
48
56
|
)
|
|
@@ -54,7 +62,6 @@ def create_ssl_context(
|
|
|
54
62
|
ssl_password: Optional[Text] = None,
|
|
55
63
|
) -> Optional[SSLContext]:
|
|
56
64
|
"""Create a SSL context if a certificate is passed."""
|
|
57
|
-
|
|
58
65
|
if ssl_certificate:
|
|
59
66
|
import ssl
|
|
60
67
|
|
|
@@ -69,7 +76,6 @@ def create_ssl_context(
|
|
|
69
76
|
|
|
70
77
|
def create_argument_parser():
|
|
71
78
|
"""Parse all the command line arguments for the run script."""
|
|
72
|
-
|
|
73
79
|
parser = argparse.ArgumentParser(description="starts the action endpoint")
|
|
74
80
|
add_endpoint_arguments(parser)
|
|
75
81
|
utils.add_logging_level_option_arguments(parser)
|
|
@@ -77,11 +83,16 @@ def create_argument_parser():
|
|
|
77
83
|
return parser
|
|
78
84
|
|
|
79
85
|
|
|
86
|
+
async def load_tracer_provider(endpoints: str, app: Sanic):
|
|
87
|
+
"""Load the tracer provider into the Sanic app."""
|
|
88
|
+
tracer_provider = get_tracer_provider(endpoints)
|
|
89
|
+
app.ctx.tracer_provider = tracer_provider
|
|
90
|
+
|
|
91
|
+
|
|
80
92
|
def create_app(
|
|
81
93
|
action_package_name: Union[Text, types.ModuleType],
|
|
82
94
|
cors_origins: Union[Text, List[Text], None] = "*",
|
|
83
95
|
auto_reload: bool = False,
|
|
84
|
-
tracer_provider: Optional[TracerProvider] = None,
|
|
85
96
|
) -> Sanic:
|
|
86
97
|
"""Create a Sanic application and return it.
|
|
87
98
|
|
|
@@ -90,7 +101,6 @@ def create_app(
|
|
|
90
101
|
from.
|
|
91
102
|
cors_origins: CORS origins to allow.
|
|
92
103
|
auto_reload: When `True`, auto-reloading of actions is enabled.
|
|
93
|
-
tracer_provider: Tracer provider to use for tracing.
|
|
94
104
|
|
|
95
105
|
Returns:
|
|
96
106
|
A new Sanic application ready to be run.
|
|
@@ -102,6 +112,8 @@ def create_app(
|
|
|
102
112
|
executor = ActionExecutor()
|
|
103
113
|
executor.register_package(action_package_name)
|
|
104
114
|
|
|
115
|
+
app.ctx.tracer_provider = None
|
|
116
|
+
|
|
105
117
|
@app.get("/health")
|
|
106
118
|
async def health(_) -> HTTPResponse:
|
|
107
119
|
"""Ping endpoint to check if the server is running and well."""
|
|
@@ -111,7 +123,9 @@ def create_app(
|
|
|
111
123
|
@app.post("/webhook")
|
|
112
124
|
async def webhook(request: Request) -> HTTPResponse:
|
|
113
125
|
"""Webhook to retrieve action calls."""
|
|
114
|
-
tracer, context, span_name = get_tracer_and_context(
|
|
126
|
+
tracer, context, span_name = get_tracer_and_context(
|
|
127
|
+
request.app.ctx.tracer_provider, request
|
|
128
|
+
)
|
|
115
129
|
|
|
116
130
|
with tracer.start_as_current_span(span_name, context=context) as span:
|
|
117
131
|
if request.headers.get("Content-Encoding") == "deflate":
|
|
@@ -173,27 +187,44 @@ def run(
|
|
|
173
187
|
ssl_keyfile: Optional[Text] = None,
|
|
174
188
|
ssl_password: Optional[Text] = None,
|
|
175
189
|
auto_reload: bool = False,
|
|
176
|
-
|
|
190
|
+
endpoints: str = DEFAULT_ENDPOINTS_PATH,
|
|
177
191
|
keep_alive_timeout: int = DEFAULT_KEEP_ALIVE_TIMEOUT,
|
|
178
192
|
) -> None:
|
|
179
193
|
"""Starts the action endpoint server with given config values."""
|
|
180
194
|
logger.info("Starting action endpoint server...")
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
195
|
+
loader = AppLoader(
|
|
196
|
+
factory=partial(
|
|
197
|
+
create_app,
|
|
198
|
+
action_package_name,
|
|
199
|
+
cors_origins=cors_origins,
|
|
200
|
+
auto_reload=auto_reload,
|
|
201
|
+
),
|
|
186
202
|
)
|
|
203
|
+
app = loader.load()
|
|
204
|
+
|
|
187
205
|
app.config.KEEP_ALIVE_TIMEOUT = keep_alive_timeout
|
|
188
|
-
|
|
206
|
+
|
|
207
|
+
app.register_listener(
|
|
208
|
+
partial(load_tracer_provider, endpoints),
|
|
209
|
+
"before_server_start",
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
# Attach additional sanic extensions: listeners, middleware and routing
|
|
189
213
|
logger.info("Starting plugins...")
|
|
190
214
|
plugin_manager().hook.attach_sanic_app_extensions(app=app)
|
|
215
|
+
|
|
191
216
|
ssl_context = create_ssl_context(ssl_certificate, ssl_keyfile, ssl_password)
|
|
192
217
|
protocol = "https" if ssl_context else "http"
|
|
193
218
|
host = os.environ.get("SANIC_HOST", "0.0.0.0")
|
|
194
219
|
|
|
195
220
|
logger.info(f"Action endpoint is up and running on {protocol}://{host}:{port}")
|
|
196
|
-
app.run(
|
|
221
|
+
app.run(
|
|
222
|
+
host=host,
|
|
223
|
+
port=port,
|
|
224
|
+
ssl=ssl_context,
|
|
225
|
+
workers=utils.number_of_sanic_workers(),
|
|
226
|
+
legacy=True,
|
|
227
|
+
)
|
|
197
228
|
|
|
198
229
|
|
|
199
230
|
if __name__ == "__main__":
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import argparse
|
|
2
1
|
from rasa_sdk.tracing import config
|
|
3
2
|
from opentelemetry import trace
|
|
4
3
|
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
|
|
@@ -9,25 +8,18 @@ from sanic.request import Request
|
|
|
9
8
|
from typing import Optional, Tuple, Any, Text
|
|
10
9
|
|
|
11
10
|
|
|
12
|
-
def get_tracer_provider(
|
|
13
|
-
cmdline_arguments: argparse.Namespace,
|
|
14
|
-
) -> Optional[TracerProvider]:
|
|
11
|
+
def get_tracer_provider(endpoints_file: str) -> Optional[TracerProvider]:
|
|
15
12
|
"""Gets the tracer provider from the command line arguments."""
|
|
16
|
-
tracer_provider =
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
endpoints_file = cmdline_arguments.endpoints
|
|
20
|
-
|
|
21
|
-
if endpoints_file is not None:
|
|
22
|
-
tracer_provider = config.get_tracer_provider(endpoints_file)
|
|
23
|
-
config.configure_tracing(tracer_provider)
|
|
13
|
+
tracer_provider = config.get_tracer_provider(endpoints_file)
|
|
14
|
+
config.configure_tracing(tracer_provider)
|
|
15
|
+
|
|
24
16
|
return tracer_provider
|
|
25
17
|
|
|
26
18
|
|
|
27
19
|
def get_tracer_and_context(
|
|
28
20
|
tracer_provider: Optional[TracerProvider], request: Request
|
|
29
21
|
) -> Tuple[Any, Any, Text]:
|
|
30
|
-
"""Gets tracer and context"""
|
|
22
|
+
"""Gets tracer and context."""
|
|
31
23
|
span_name = "create_app.webhook"
|
|
32
24
|
if tracer_provider is None:
|
|
33
25
|
tracer = trace.get_tracer(span_name)
|
|
@@ -39,7 +31,7 @@ def get_tracer_and_context(
|
|
|
39
31
|
|
|
40
32
|
|
|
41
33
|
def set_span_attributes(span: Any, action_call: dict) -> None:
|
|
42
|
-
"""Sets span attributes"""
|
|
34
|
+
"""Sets span attributes."""
|
|
43
35
|
tracker = action_call.get("tracker", {})
|
|
44
36
|
set_span_attributes = {
|
|
45
37
|
"http.method": "POST",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/tracing/instrumentation/attribute_extractors.py
RENAMED
|
File without changes
|
{rasa_sdk-3.9.0.dev1 → rasa_sdk-3.9.0.dev2}/rasa_sdk/tracing/instrumentation/instrumentation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|