Skip to content

Commit

Permalink
Merge 4bb1d4f into 7456dc3
Browse files Browse the repository at this point in the history
  • Loading branch information
erohmensing committed Sep 26, 2019
2 parents 7456dc3 + 4bb1d4f commit b0d3b69
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 36 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.rst
Expand Up @@ -12,6 +12,7 @@ This project adheres to `Semantic Versioning`_ starting with version 1.0.
Fixed
-----
- re-added TLS, SRV dependencies for PyMongo
- socketio can now be run without turning on the ``--enable-api`` flag

[1.3.6] - 2019-09-21
^^^^^^^^^^^^^^^^^^^^
Expand Down
35 changes: 17 additions & 18 deletions rasa/core/run.py
Expand Up @@ -6,22 +6,21 @@
from typing import List, Optional, Text, Union

from sanic import Sanic
from sanic_cors import CORS

import rasa.core
import rasa.core.utils
import rasa.utils
import rasa.utils.io
from rasa.core import constants, utils
from rasa.core.agent import load_agent, Agent
import rasa.utils.common
from rasa import model
from rasa import server
from rasa.core import agent, channels, constants
from rasa.core.agent import Agent
from rasa.core.channels import console
from rasa.core.channels.channel import InputChannel
from rasa.core.interpreter import NaturalLanguageInterpreter
from rasa.core.lock_store import LockStore
from rasa.core.tracker_store import TrackerStore
from rasa.core.utils import AvailableEndpoints, configure_file_logging
from rasa.model import get_model_subdirectories, get_model
from rasa.utils.common import update_sanic_log_level, class_from_module_path
from rasa.server import add_root_route
from rasa.core.utils import AvailableEndpoints

logger = logging.getLogger() # get the root logger

Expand Down Expand Up @@ -57,7 +56,7 @@ def _create_single_channel(channel, credentials):
else:
# try to load channel based on class name
try:
input_channel_class = class_from_module_path(channel)
input_channel_class = rasa.utils.common.class_from_module_path(channel)
return input_channel_class.from_credentials(credentials)
except (AttributeError, ImportError):
raise Exception(
Expand All @@ -71,8 +70,8 @@ def _create_single_channel(channel, credentials):

def _create_app_without_api(cors: Optional[Union[Text, List[Text]]] = None):
app = Sanic(__name__, configure_logging=False)
add_root_route(app)
CORS(app, resources={r"/*": {"origins": cors or ""}}, automatic_options=True)
server.add_root_route(app)
server.configure_cors(app, cors)
return app


Expand All @@ -91,7 +90,7 @@ def configure_app(
"""Run the agent."""
from rasa import server

configure_file_logging(logger, log_file)
rasa.core.utils.configure_file_logging(logger, log_file)

if enable_api:
app = server.create_app(
Expand All @@ -105,12 +104,12 @@ def configure_app(
app = _create_app_without_api(cors)

if input_channels:
rasa.core.channels.channel.register(input_channels, app, route=route)
channels.channel.register(input_channels, app, route=route)
else:
input_channels = []

if logger.isEnabledFor(logging.DEBUG):
utils.list_routes(app)
rasa.core.utils.list_routes(app)

# configure async loop logging
async def configure_async_logging():
Expand Down Expand Up @@ -191,7 +190,7 @@ async def clear_model_files(app: Sanic, _loop: Text) -> None:

app.register_listener(clear_model_files, "after_server_stop")

update_sanic_log_level(log_file)
rasa.utils.common.update_sanic_log_level(log_file)

app.run(
host="0.0.0.0",
Expand All @@ -216,8 +215,8 @@ async def load_agent_on_start(
import rasa.core.brokers.utils as broker_utils

try:
with get_model(model_path) as unpacked_model:
_, nlu_model = get_model_subdirectories(unpacked_model)
with model.get_model(model_path) as unpacked_model:
_, nlu_model = model.get_model_subdirectories(unpacked_model)
_interpreter = NaturalLanguageInterpreter.create(nlu_model, endpoints.nlu)
except Exception:
logger.debug("Could not load interpreter from '{}'.".format(model_path))
Expand All @@ -231,7 +230,7 @@ async def load_agent_on_start(

model_server = endpoints.model if endpoints and endpoints.model else None

app.agent = await load_agent(
app.agent = await agent.load_agent(
model_path,
model_server=model_server,
remote_storage=remote_storage,
Expand Down
44 changes: 26 additions & 18 deletions rasa/server.py
Expand Up @@ -14,10 +14,13 @@
from sanic_jwt import Initialize, exceptions

import rasa
import rasa.core.brokers.utils as broker_utils
import rasa.core.brokers.utils
import rasa.core.utils
import rasa.utils.common
import rasa.utils.endpoints
import rasa.utils.io

from rasa import model
from rasa.constants import (
MINIMUM_COMPATIBLE_VERSION,
DEFAULT_MODELS_PATH,
Expand All @@ -36,8 +39,7 @@
from rasa.core.test import test
from rasa.core.tracker_store import TrackerStore
from rasa.core.trackers import DialogueStateTracker, EventVerbosity
from rasa.core.utils import dump_obj_as_str_to_file, AvailableEndpoints
from rasa.model import get_model_subdirectories, fingerprint_from_path
from rasa.core.utils import AvailableEndpoints
from rasa.nlu.emulators.no_emulator import NoEmulator
from rasa.nlu.test import run_evaluation
from rasa.utils.endpoints import EndpointConfig
Expand Down Expand Up @@ -281,7 +283,9 @@ async def _load_agent(
action_endpoint = None

if endpoints:
_broker = broker_utils.from_endpoint_config(endpoints.event_broker)
_broker = rasa.core.brokers.utils.from_endpoint_config(
endpoints.event_broker
)
tracker_store = TrackerStore.find_tracker_store(
None, endpoints.tracker_store, _broker
)
Expand Down Expand Up @@ -316,6 +320,17 @@ async def _load_agent(
return loaded_agent


def configure_cors(app: Sanic, cors_origins: Union[Text, List[Text]] = "") -> None:
"""Configure CORS origins for the given app."""

# Workaround so that socketio works with requests from other origins.
# https://github.com/miguelgrinberg/python-socketio/issues/205#issuecomment-493769183
app.config.CORS_AUTOMATIC_OPTIONS = True
app.config.CORS_SUPPORTS_CREDENTIALS = True

CORS(app, resources={r"/*": {"origins": cors_origins}}, automatic_options=True)


def add_root_route(app: Sanic):
@app.get("/")
async def hello(request: Request):
Expand All @@ -335,14 +350,7 @@ def create_app(

app = Sanic(__name__)
app.config.RESPONSE_TIMEOUT = 60 * 60
# Workaround so that socketio works with requests from other origins.
# https://github.com/miguelgrinberg/python-socketio/issues/205#issuecomment-493769183
app.config.CORS_AUTOMATIC_OPTIONS = True
app.config.CORS_SUPPORTS_CREDENTIALS = True

CORS(
app, resources={r"/*": {"origins": cors_origins or ""}}, automatic_options=True
)
configure_cors(app, cors_origins)

# Setup the Sanic-JWT extension
if jwt_secret and jwt_method:
Expand Down Expand Up @@ -389,7 +397,7 @@ async def status(request: Request):
return response.json(
{
"model_file": app.agent.model_directory,
"fingerprint": fingerprint_from_path(app.agent.model_directory),
"fingerprint": model.fingerprint_from_path(app.agent.model_directory),
"num_active_training_jobs": app.active_training_processes.value,
}
)
Expand Down Expand Up @@ -655,20 +663,20 @@ async def train(request: Request):
temp_dir = tempfile.mkdtemp()

config_path = os.path.join(temp_dir, "config.yml")
dump_obj_as_str_to_file(config_path, rjs["config"])
rasa.core.utils.dump_obj_as_str_to_file(config_path, rjs["config"])

if "nlu" in rjs:
nlu_path = os.path.join(temp_dir, "nlu.md")
dump_obj_as_str_to_file(nlu_path, rjs["nlu"])
rasa.core.utils.dump_obj_as_str_to_file(nlu_path, rjs["nlu"])

if "stories" in rjs:
stories_path = os.path.join(temp_dir, "stories.md")
dump_obj_as_str_to_file(stories_path, rjs["stories"])
rasa.core.utils.dump_obj_as_str_to_file(stories_path, rjs["stories"])

domain_path = DEFAULT_DOMAIN_PATH
if "domain" in rjs:
domain_path = os.path.join(temp_dir, "domain.yml")
dump_obj_as_str_to_file(domain_path, rjs["domain"])
rasa.core.utils.dump_obj_as_str_to_file(domain_path, rjs["domain"])

if rjs.get("save_to_default_model_directory", True) is True:
model_output_directory = DEFAULT_MODELS_PATH
Expand Down Expand Up @@ -789,7 +797,7 @@ async def evaluate_intents(request: Request):
raise ErrorResponse(409, "Conflict", "Loaded model file not found.")

model_directory = eval_agent.model_directory
_, nlu_model = get_model_subdirectories(model_directory)
_, nlu_model = model.get_model_subdirectories(model_directory)

try:
evaluation = run_evaluation(data_path, nlu_model)
Expand Down

0 comments on commit b0d3b69

Please sign in to comment.