Skip to content
This repository was archived by the owner on Jun 24, 2020. It is now read-only.

Commit 0a5ed5f

Browse files
committed
Merge remote-tracking branch 'origin/multilingual'
2 parents a7a5747 + 2a3545f commit 0a5ed5f

File tree

2 files changed

+108
-2
lines changed

2 files changed

+108
-2
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
from __future__ import absolute_import
2+
from __future__ import division
3+
from __future__ import print_function
4+
from __future__ import unicode_literals
5+
from rasa_core.utils import EndpointConfig
6+
import json
7+
import logging
8+
import requests
9+
from rasa_core import constants
10+
logger = logging.getLogger(__name__)
11+
12+
INTENT_MESSAGE_PREFIX = "/"
13+
14+
from rasa_core.interpreter import NaturalLanguageInterpreter, RasaNLUHttpInterpreter
15+
16+
class RasaMultiNLUHttpInterpreter(RasaNLUHttpInterpreter):
17+
def __init__(self, models=None, endpoint=None, project_name='default'):
18+
# type: (Text, EndpointConfig, Text) -> None
19+
20+
self.models = models
21+
self.project_name = project_name
22+
23+
if endpoint:
24+
self.endpoint = endpoint
25+
else:
26+
self.endpoint = EndpointConfig(constants.DEFAULT_SERVER_URL)
27+
28+
def get_model(self, lang):
29+
return self.models.get(lang)
30+
31+
def parse(self, text, lang):
32+
"""Parse a text message.
33+
34+
Return a default value if the parsing of the text failed."""
35+
36+
default_return = {"intent": {"name": "", "confidence": 0.0},
37+
"entities": [], "text": ""}
38+
result = self._rasa_http_parse(text, lang)
39+
40+
return result if result is not None else default_return
41+
42+
def _rasa_http_parse(self, text, lang):
43+
"""Send a text message to a running rasa NLU http server.
44+
45+
Return `None` on failure."""
46+
47+
if not self.endpoint:
48+
logger.error(
49+
"Failed to parse text '{}' using rasa NLU over http. "
50+
"No rasa NLU server specified!".format(text))
51+
return None
52+
53+
params = {
54+
"token": self.endpoint.token,
55+
"model": self.get_model(lang),
56+
"project": self.project_name,
57+
"q": text
58+
}
59+
url = "{}/parse".format(self.endpoint.url)
60+
try:
61+
result = requests.get(url, params=params)
62+
if result.status_code == 200:
63+
return result.json()
64+
else:
65+
logger.error(
66+
"Failed to parse text '{}' using rasa NLU over http. "
67+
"Error: {}".format(text, result.text))
68+
return None
69+
except Exception as e:
70+
logger.error(
71+
"Failed to parse text '{}' using rasa NLU over http. "
72+
"Error: {}".format(text, e))
73+
return None

rasa_addons/superagent.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,25 @@
11
import os
22
import logging
3+
import warnings
4+
import time
5+
36
from rasa_core.agent import Agent, start_model_pulling_in_worker, _update_model_from_server
47
from rasa_core.domain import TemplateDomain
5-
from rasa_core.interpreter import NaturalLanguageInterpreter
8+
from rasa_core.interpreter import (
9+
RegexInterpreter,
10+
NaturalLanguageInterpreter,
11+
INTENT_MESSAGE_PREFIX)
612
from rasa_core.nlg import NaturalLanguageGenerator
713
from rasa_core.policies.ensemble import PolicyEnsemble
814
from rasa_core.events import UserUttered
915
from rasa_core.processor import MessageProcessor
1016
from rasa_core.dispatcher import Dispatcher
17+
18+
from rasa_addons.multilingual_interpreter import RasaMultiNLUHttpInterpreter
1119
from rasa_addons.rules import Rules
1220
from rasa_core.utils import EndpointConfig
1321
from threading import Thread
14-
import time
22+
1523
logging.basicConfig()
1624
logger = logging.getLogger()
1725

@@ -263,6 +271,31 @@ def _predict_and_execute_next_action(self, message, tracker):
263271
# call a registered callback
264272
self.on_circuit_break(tracker, dispatcher)
265273

274+
def _parse_message(self, message):
275+
# for testing - you can short-cut the NLU part with a message
276+
# in the format _intent[entity1=val1,entity=val2]
277+
# parse_data is a dict of intent & entities
278+
if (message.text.startswith(INTENT_MESSAGE_PREFIX) or
279+
message.text.startswith("_")):
280+
if RegexInterpreter.is_using_deprecated_format(message.text):
281+
warnings.warn(
282+
"Parsing messages with leading `_` is deprecated and "
283+
"will be removed. Instead, prepend your intents with "
284+
"`{0}`, e.g. `{0}mood_greet` "
285+
"or `{0}restart`.".format(INTENT_MESSAGE_PREFIX))
286+
parse_data = RegexInterpreter().parse(message.text)
287+
else:
288+
if isinstance(self.interpreter, RasaMultiNLUHttpInterpreter):
289+
parse_data = self.interpreter.parse(message.text, message.output_channel.language)
290+
else:
291+
parse_data = self.interpreter.parse(message.text)
292+
293+
logger.debug("Received user message '{}' with intent '{}' "
294+
"and entities '{}'".format(message.text,
295+
parse_data["intent"],
296+
parse_data["entities"]))
297+
return parse_data
298+
266299

267300
def start_rules_pulling_in_worker(rules_server, wait_time_between_pulls, agent):
268301
# type: (EndpointConfig, int, Agent) -> None

0 commit comments

Comments
 (0)