dc6079821b
CI Github Actions / Run Tests (push) Waiting to run
Automatic PR Merger / mergepal (push) Waiting to run
Semgrep / Semgrep Workflow Security Scan (push) Waiting to run
Docs Tests / Check for file changes (push) Has been cancelled
Docs Tests / Test Documentation (push) Has been cancelled
Docs Tests / Documentation Linting Checks (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-performance) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-policies) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-cli) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-core-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-full-model-training) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-nlu-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-nlu-predictors) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-other-unit-tests) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-performance) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.8, test-policies) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-cli) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-core-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-full-model-training) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-nlu-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-nlu-predictors) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-other-unit-tests) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-performance) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.9, test-policies) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-cli) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-core-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-full-model-training) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-nlu-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-nlu-predictors) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-other-unit-tests) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-performance) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.10, test-policies) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-cli) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-core-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-full-model-training) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-nlu-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-nlu-predictors) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-other-unit-tests) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-performance) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.8, test-policies) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-cli) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-core-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-full-model-training) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-nlu-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-nlu-predictors) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-other-unit-tests) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-performance) (push) Has been cancelled
Continuous Integration / Run Tests (windows-2022, 3.9, test-policies) (push) Has been cancelled
Continuous Integration / Run Flaky Tests (ubuntu-24.04, 3.10) (push) Has been cancelled
Continuous Integration / Run Flaky Tests (ubuntu-24.04, 3.8) (push) Has been cancelled
Continuous Integration / Run Flaky Tests (ubuntu-24.04, 3.9) (push) Has been cancelled
Continuous Integration / Run Flaky Tests (windows-2022, 3.10) (push) Has been cancelled
Continuous Integration / Run Flaky Tests (windows-2022, 3.8) (push) Has been cancelled
Continuous Integration / Run Flaky Tests (windows-2022, 3.9) (push) Has been cancelled
Continuous Integration / Check for file changes (push) Has been cancelled
Continuous Integration / Wait for docs tests (push) Has been cancelled
Continuous Integration / Code Quality (push) Has been cancelled
Continuous Integration / Check for changelog (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-cli) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-core-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-full-model-training) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-nlu-featurizers) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-nlu-predictors) (push) Has been cancelled
Continuous Integration / Run Tests (ubuntu-24.04, 3.10, test-other-unit-tests) (push) Has been cancelled
Continuous Integration / Upload coverage reports to codeclimate (push) Has been cancelled
Continuous Integration / Run Non-Sequential Integration Tests (push) Has been cancelled
Continuous Integration / Run Broker Integration Tests (push) Has been cancelled
Continuous Integration / Run Sequential Integration Tests (push) Has been cancelled
Continuous Integration / Build Docker base images and setup environment (push) Has been cancelled
Continuous Integration / Build Docker (default) (push) Has been cancelled
Continuous Integration / Build Docker (full) (push) Has been cancelled
Continuous Integration / Build Docker (mitie-en) (push) Has been cancelled
Continuous Integration / Build Docker (spacy-de) (push) Has been cancelled
Continuous Integration / Build Docker (spacy-en) (push) Has been cancelled
Continuous Integration / Build Docker (spacy-it) (push) Has been cancelled
Continuous Integration / Deploy to PyPI (push) Has been cancelled
Continuous Integration / Notify Slack & Publish Release Notes (push) Has been cancelled
Publish Documentation / Evaluate release tag (push) Has been cancelled
Publish Documentation / Prebuild Docs (push) Has been cancelled
Publish Documentation / Preview Docs (push) Has been cancelled
Publish Documentation / Check for file changes (push) Has been cancelled
Publish Documentation / Publish Docs (push) Has been cancelled
205 lines
6.6 KiB
Python
205 lines
6.6 KiB
Python
import argparse
|
||
import asyncio
|
||
import logging
|
||
from pathlib import Path
|
||
import signal
|
||
from typing import Iterable, List, Optional, Text, Tuple, Union
|
||
|
||
import aiohttp
|
||
import ruamel.yaml as yaml
|
||
|
||
from rasa.cli import SubParsersAction
|
||
from rasa.cli.arguments import x as arguments
|
||
import rasa.cli.utils
|
||
from rasa.shared.constants import (
|
||
DEFAULT_CREDENTIALS_PATH,
|
||
DEFAULT_ENDPOINTS_PATH,
|
||
)
|
||
from rasa.core.utils import AvailableEndpoints
|
||
import rasa.shared.utils.cli
|
||
import rasa.shared.utils.io
|
||
import rasa.utils.common
|
||
import rasa.utils.io
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
def add_subparser(
|
||
subparsers: SubParsersAction, parents: List[argparse.ArgumentParser]
|
||
) -> None:
|
||
"""Add all rasa x parsers.
|
||
|
||
Args:
|
||
subparsers: subparser we are going to attach to
|
||
parents: Parent parsers, needed to ensure tree structure in argparse
|
||
"""
|
||
x_parser_args = {
|
||
"parents": parents,
|
||
"conflict_handler": "resolve",
|
||
"formatter_class": argparse.ArgumentDefaultsHelpFormatter,
|
||
}
|
||
|
||
x_parser_args["help"] = (
|
||
"Run a Rasa server in a mode that enables connecting "
|
||
"to Rasa Enterprise as the config endpoint."
|
||
)
|
||
|
||
shell_parser = subparsers.add_parser("x", **x_parser_args)
|
||
shell_parser.set_defaults(func=rasa_x)
|
||
|
||
arguments.set_x_arguments(shell_parser)
|
||
|
||
|
||
def _rasa_service(
|
||
args: argparse.Namespace,
|
||
endpoints: AvailableEndpoints,
|
||
rasa_x_url: Optional[Text] = None,
|
||
credentials_path: Optional[Text] = None,
|
||
) -> None:
|
||
"""Starts the Rasa application."""
|
||
from rasa.core.run import serve_application
|
||
|
||
# needs separate logging configuration as it is started in its own process
|
||
rasa.utils.common.configure_logging_and_warnings(args.loglevel)
|
||
rasa.utils.io.configure_colored_logging(args.loglevel)
|
||
|
||
if not credentials_path:
|
||
credentials_path = _prepare_credentials_for_rasa_x(
|
||
args.credentials, rasa_x_url=rasa_x_url
|
||
)
|
||
|
||
serve_application(
|
||
endpoints=endpoints,
|
||
port=args.port,
|
||
credentials=credentials_path,
|
||
cors=args.cors,
|
||
auth_token=args.auth_token,
|
||
enable_api=True,
|
||
jwt_secret=args.jwt_secret,
|
||
jwt_method=args.jwt_method,
|
||
ssl_certificate=args.ssl_certificate,
|
||
ssl_keyfile=args.ssl_keyfile,
|
||
ssl_ca_file=args.ssl_ca_file,
|
||
ssl_password=args.ssl_password,
|
||
)
|
||
|
||
|
||
def _prepare_credentials_for_rasa_x(
|
||
credentials_path: Optional[Text], rasa_x_url: Optional[Text] = None
|
||
) -> Text:
|
||
if credentials_path:
|
||
credentials_path = str(
|
||
rasa.cli.utils.get_validated_path(
|
||
credentials_path, "credentials", DEFAULT_CREDENTIALS_PATH, True
|
||
)
|
||
)
|
||
credentials = rasa.shared.utils.io.read_config_file(credentials_path)
|
||
else:
|
||
credentials = {}
|
||
|
||
# this makes sure the Rasa X is properly configured no matter what
|
||
if rasa_x_url:
|
||
credentials["rasa"] = {"url": rasa_x_url}
|
||
dumped_credentials = yaml.dump(credentials, default_flow_style=False)
|
||
tmp_credentials = rasa.utils.io.create_temporary_file(dumped_credentials, "yml")
|
||
|
||
return tmp_credentials
|
||
|
||
|
||
def rasa_x(args: argparse.Namespace) -> None:
|
||
"""Run Rasa with the `x` subcommand."""
|
||
from rasa.cli.utils import signal_handler
|
||
|
||
signal.signal(signal.SIGINT, signal_handler)
|
||
|
||
if args.production:
|
||
run_in_enterprise_connection_mode(args)
|
||
else:
|
||
rasa.shared.utils.io.raise_warning(
|
||
"Running Rasa X in local mode is no longer supported as Rasa has "
|
||
"stopped supporting the Community Edition (free version) of ‘Rasa X’."
|
||
"For more information please see "
|
||
"https://rasa.com/blog/rasa-x-community-edition-changes/",
|
||
UserWarning,
|
||
)
|
||
exit()
|
||
|
||
|
||
async def _pull_runtime_config_from_server(
|
||
config_endpoint: Optional[Text],
|
||
attempts: int = 60,
|
||
wait_time_between_pulls: float = 5,
|
||
keys: Iterable[Text] = ("endpoints", "credentials"),
|
||
) -> List[Text]:
|
||
"""Pull runtime config from `config_endpoint`.
|
||
|
||
Returns a list of paths to yaml dumps, each containing the contents of one of
|
||
`keys`.
|
||
"""
|
||
while attempts:
|
||
try:
|
||
async with aiohttp.ClientSession() as session:
|
||
async with session.get(config_endpoint) as resp:
|
||
if resp.status == 200:
|
||
rjs = await resp.json()
|
||
try:
|
||
return [
|
||
rasa.utils.io.create_temporary_file(rjs[k])
|
||
for k in keys
|
||
]
|
||
except KeyError as e:
|
||
rasa.shared.utils.cli.print_error_and_exit(
|
||
"Failed to find key '{}' in runtime config. "
|
||
"Exiting.".format(e)
|
||
)
|
||
else:
|
||
logger.debug(
|
||
"Failed to get a proper response from remote "
|
||
"server. Status Code: {}. Response: '{}'"
|
||
"".format(resp.status, await resp.text())
|
||
)
|
||
except aiohttp.ClientError as e:
|
||
logger.debug(f"Failed to connect to server. Retrying. {e}")
|
||
|
||
await asyncio.sleep(wait_time_between_pulls)
|
||
attempts -= 1
|
||
|
||
rasa.shared.utils.cli.print_error_and_exit(
|
||
"Could not fetch runtime config from server at '{}'. "
|
||
"Exiting.".format(config_endpoint)
|
||
)
|
||
|
||
|
||
def run_in_enterprise_connection_mode(args: argparse.Namespace) -> None:
|
||
"""Run Rasa in a mode that enables using Rasa X as the config endpoint."""
|
||
from rasa.shared.utils.cli import print_success
|
||
|
||
print_success("Starting a Rasa server in Rasa Enterprise connection mode... 🚀")
|
||
|
||
credentials_path, endpoints_path = _get_credentials_and_endpoints_paths(args)
|
||
endpoints = AvailableEndpoints.read_endpoints(endpoints_path)
|
||
|
||
_rasa_service(args, endpoints, None, credentials_path)
|
||
|
||
|
||
def _get_credentials_and_endpoints_paths(
|
||
args: argparse.Namespace,
|
||
) -> Tuple[Optional[Text], Optional[Text]]:
|
||
config_endpoint = args.config_endpoint
|
||
endpoints_config_path: Optional[Union[Path, Text]]
|
||
|
||
if config_endpoint:
|
||
endpoints_config_path, credentials_path = asyncio.run(
|
||
_pull_runtime_config_from_server(config_endpoint)
|
||
)
|
||
else:
|
||
endpoints_config_path = rasa.cli.utils.get_validated_path(
|
||
args.endpoints, "endpoints", DEFAULT_ENDPOINTS_PATH, True
|
||
)
|
||
credentials_path = None
|
||
|
||
return (
|
||
credentials_path,
|
||
str(endpoints_config_path) if endpoints_config_path else None,
|
||
)
|