Basit Anwer commited on
Commit ·
d288445
1
Parent(s): 64a5bab
Reviewed code.
Browse files- .gitignore +4 -0
- .gitignore/.gitignore +0 -2
- README +0 -39
- README.md +159 -0
- actions/actions.py +24 -56
- config.yml +0 -3
- data/nlu.yml +0 -6
- data/rules.yml +0 -5
- domain.yml +0 -4
- requirements.txt +2 -1
- server.py +0 -13
- tests/test_stories.yml +9 -74
.gitignore
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.tar.gz
|
| 2 |
+
*.pyc
|
| 3 |
+
results/
|
| 4 |
+
models/
|
.gitignore/.gitignore
DELETED
|
@@ -1,2 +0,0 @@
|
|
| 1 |
-
*.tar.gz
|
| 2 |
-
*.pyc
|
|
|
|
|
|
|
|
|
README
DELETED
|
@@ -1,39 +0,0 @@
|
|
| 1 |
-
# Readme
|
| 2 |
-
|
| 3 |
-
The source code in this repository shows a simple rasa chatbot fallback mechanism, which can get relavent information from Zir-AI search platform.
|
| 4 |
-
|
| 5 |
-
## Data
|
| 6 |
-
|
| 7 |
-
reviews.db contains the hotel reviews, its generated by using repo https://github.com/amin3141/zir-souffle
|
| 8 |
-
|
| 9 |
-
# How-to
|
| 10 |
-
|
| 11 |
-
First you need to have the rasa shell installed. You can do that by following the rasa tutorials https://rasa.com/docs/rasa/installation
|
| 12 |
-
|
| 13 |
-
Next is training the model
|
| 14 |
-
|
| 15 |
-
```
|
| 16 |
-
rasa train
|
| 17 |
-
```
|
| 18 |
-
|
| 19 |
-
Then to run in one terminal you need to run
|
| 20 |
-
|
| 21 |
-
```
|
| 22 |
-
rasa run --credentials ./credentials.yml --enable-api --auth-token XYZ123 --model ./models --endpoints ./endpoints.yml --cors "*"
|
| 23 |
-
```
|
| 24 |
-
|
| 25 |
-
And in the background or in another terminal run
|
| 26 |
-
|
| 27 |
-
```
|
| 28 |
-
rasa run actions
|
| 29 |
-
```
|
| 30 |
-
|
| 31 |
-
Lastly, to view the bot in the UI either simply load the `www/index.html` file in the browser or run `python3 server.py` and open `localhost:8080` in browser.
|
| 32 |
-
|
| 33 |
-
You could also just run the two commands and talk with the bot in shell
|
| 34 |
-
|
| 35 |
-
```
|
| 36 |
-
rasa run actions &
|
| 37 |
-
rasa shell
|
| 38 |
-
```
|
| 39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
README.md
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!--lint disable no-literal-urls-->
|
| 2 |
+
<p align="center">
|
| 3 |
+
<a href="https://zir-ai.com/">
|
| 4 |
+
<img
|
| 5 |
+
alt="Zir AI"
|
| 6 |
+
src="https://zir-ai.com/static/media/logo-light.637c616a.svg"
|
| 7 |
+
width="400"
|
| 8 |
+
/>
|
| 9 |
+
</a>
|
| 10 |
+
</p>
|
| 11 |
+
|
| 12 |
+
# Readme
|
| 13 |
+
|
| 14 |
+
The source code in this repository shows a simple Rasa chatbot fallback
|
| 15 |
+
mechanism, which gets relevant information from ZIR Semantic Search.
|
| 16 |
+
|
| 17 |
+
# Table of contents
|
| 18 |
+
|
| 19 |
+
- [Rasa Bot & Zir](#why)
|
| 20 |
+
- [Setup & Play](#setup-play)
|
| 21 |
+
- [Set-up Rasa](#setup-rasa)
|
| 22 |
+
- [Set-up repo](#setup-demo)
|
| 23 |
+
- [Running the demo](#run-demo)
|
| 24 |
+
- [Customizing the bot](#bot-customization)
|
| 25 |
+
- [Data](#data)
|
| 26 |
+
- [Rasa Custom Action](#rasa-cust-action)
|
| 27 |
+
|
| 28 |
+
## Rasa Bot & Zir
|
| 29 |
+
|
| 30 |
+
[Rasa](https://rasa.com/) is the leading conversational AI platform, for
|
| 31 |
+
personalized conversations at scale. Developers provide the questsions they
|
| 32 |
+
expect the end customer to ask and Rasa bot, using AI, predicts and matches the
|
| 33 |
+
what the customer intended to ask. With this information at hand, developers can
|
| 34 |
+
easily match what the bot should respond.
|
| 35 |
+
|
| 36 |
+
This is all well unless when the customer asks a valid question the developer
|
| 37 |
+
did not expect, for such a scenario Rasa provides a
|
| 38 |
+
[fallback mechanism](https://rasa.com/docs/rasa/fallback-handoff#fallbacks).
|
| 39 |
+
|
| 40 |
+
> Although Rasa will generalize to unseen messages, some messages might receive
|
| 41 |
+
> a low classification confidence. Using Fallbacks will help ensure that these
|
| 42 |
+
> low confidence messages are handled gracefully, giving your assistant the
|
| 43 |
+
> option to either respond with a default message or attempt to disambiguate the
|
| 44 |
+
> user input.
|
| 45 |
+
|
| 46 |
+
Using the mechanism the bot can ask fallback and search through the reviews
|
| 47 |
+
uploaded in [Zir-AI](https://zir-ai.com) with the help of
|
| 48 |
+
[custom actions](https://rasa.com/docs/rasa/custom-actions). If the reviews have
|
| 49 |
+
the relavent information, it is shown as a result otherwise if the confidence of
|
| 50 |
+
the question to review matching is low, we fallback to a generic statement.
|
| 51 |
+
|
| 52 |
+
The end results sums up to be this:
|
| 53 |
+
|
| 54 |
+
## Setup & Play
|
| 55 |
+
|
| 56 |
+
You'll need to have Rasa installed and this repository. You might want to create
|
| 57 |
+
a [virtual environment](#https://docs.python.org/3/library/venv.html) to isolate
|
| 58 |
+
the dependencies rasa requires.
|
| 59 |
+
|
| 60 |
+
### Set-up Rasa
|
| 61 |
+
|
| 62 |
+
Follow the
|
| 63 |
+
[rasa installation instrcutions](#https://rasa.com/docs/rasa/installation) or
|
| 64 |
+
copy paste the following commands in terminal
|
| 65 |
+
|
| 66 |
+
```bash
|
| 67 |
+
pip3 install -U pip
|
| 68 |
+
pip3 install rasa
|
| 69 |
+
rasa --version
|
| 70 |
+
```
|
| 71 |
+
|
| 72 |
+
This should print the rasa version similar to follow
|
| 73 |
+
|
| 74 |
+
```bash
|
| 75 |
+
Rasa Version : 2.7.0
|
| 76 |
+
Minimum Compatible Version: 2.6.0
|
| 77 |
+
Rasa SDK Version : 2.7.0
|
| 78 |
+
Rasa X Version : None
|
| 79 |
+
Python Version : 3.8.5
|
| 80 |
+
Operating System : Linux
|
| 81 |
+
Python Path : /bin/python3
|
| 82 |
+
```
|
| 83 |
+
|
| 84 |
+
> Windows & WSL works too
|
| 85 |
+
|
| 86 |
+
### Set-up repo
|
| 87 |
+
|
| 88 |
+
To install dependecies for this repository to work install python dependencies
|
| 89 |
+
from requirements.txt
|
| 90 |
+
|
| 91 |
+
```bash
|
| 92 |
+
pip install -r requirements.txt
|
| 93 |
+
python3 -m spacy download en_core_web_md
|
| 94 |
+
```
|
| 95 |
+
|
| 96 |
+
This will install the spacy model `en_core_web_md` this bot is configured with.
|
| 97 |
+
Now you'll need to train the rasa bot
|
| 98 |
+
|
| 99 |
+
```bash
|
| 100 |
+
rasa train
|
| 101 |
+
```
|
| 102 |
+
|
| 103 |
+
### Running the demo
|
| 104 |
+
|
| 105 |
+
While running the model, you are require to run the rasa action server along
|
| 106 |
+
with the rasa bot. So in one terminal run
|
| 107 |
+
|
| 108 |
+
```bash
|
| 109 |
+
rasa run actions
|
| 110 |
+
```
|
| 111 |
+
|
| 112 |
+
In another terminal you can either play with the bot in your `shell` or on the
|
| 113 |
+
browser.
|
| 114 |
+
|
| 115 |
+
To talk to the bot in shell run
|
| 116 |
+
|
| 117 |
+
```bash
|
| 118 |
+
rasa shell
|
| 119 |
+
```
|
| 120 |
+
|
| 121 |
+
Or to talk to the bot in the browser run
|
| 122 |
+
|
| 123 |
+
```bash
|
| 124 |
+
rasa run --credentials ./credentials.yml --enable-api --auth-token XYZ123 --model ./models --endpoints ./endpoints.yml --cors "*"
|
| 125 |
+
```
|
| 126 |
+
|
| 127 |
+
Now, open the `index.html` in your browser to talk to the bot.
|
| 128 |
+
|
| 129 |
+
## Customizing the bot
|
| 130 |
+
|
| 131 |
+
Use the following information to customize the bot and the source of data.
|
| 132 |
+
|
| 133 |
+
### Data
|
| 134 |
+
|
| 135 |
+
Data for the bot is sourced from [OpinRank](https://github.com/kavgan/OpinRank/)
|
| 136 |
+
and reviews for Hotel Jumeirah is specifically used for this bot. Reviews are
|
| 137 |
+
parsed from https://github.com/amin3141/zir-souffle. Use `hotels.py` to generate
|
| 138 |
+
the output `json` and the `reviews.db`.
|
| 139 |
+
|
| 140 |
+
Create a corpus on [Zir AI](http://zir-ai.com) and upload all the `json` files.
|
| 141 |
+
Create an api key for access and note down the following information
|
| 142 |
+
|
| 143 |
+
- Api key
|
| 144 |
+
- corpus id
|
| 145 |
+
- customer id
|
| 146 |
+
|
| 147 |
+
## Rasa Custom Action
|
| 148 |
+
|
| 149 |
+
Use the above collected information and replace the information in
|
| 150 |
+
`actions/actions.py` and you're good to go.
|
| 151 |
+
|
| 152 |
+
```python
|
| 153 |
+
customer_id = "1835841754"
|
| 154 |
+
corpus_id = 1
|
| 155 |
+
header = {
|
| 156 |
+
"customer-id": customer_id,
|
| 157 |
+
"x-api-key": "zqt_WvU_2atFHgqYxxT2sQswwIUgogI8K3QeWs0oqA"
|
| 158 |
+
}
|
| 159 |
+
```
|
actions/actions.py
CHANGED
|
@@ -1,31 +1,3 @@
|
|
| 1 |
-
# This files contains your custom actions which can be used to run
|
| 2 |
-
# custom Python code.
|
| 3 |
-
#
|
| 4 |
-
# See this guide on how to implement these action:
|
| 5 |
-
# https://rasa.com/docs/rasa/custom-actions
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
# This is a simple example for a custom action which utters "Hello World!"
|
| 9 |
-
|
| 10 |
-
# from typing import Any, Text, Dict, List
|
| 11 |
-
#
|
| 12 |
-
# from rasa_sdk import Action, Tracker
|
| 13 |
-
# from rasa_sdk.executor import CollectingDispatcher
|
| 14 |
-
#
|
| 15 |
-
#
|
| 16 |
-
# class ActionHelloWorld(Action):
|
| 17 |
-
#
|
| 18 |
-
# def name(self) -> Text:
|
| 19 |
-
# return "action_hello_world"
|
| 20 |
-
#
|
| 21 |
-
# def run(self, dispatcher: CollectingDispatcher,
|
| 22 |
-
# tracker: Tracker,
|
| 23 |
-
# domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
|
| 24 |
-
#
|
| 25 |
-
# dispatcher.utter_message(text="Hello World!")
|
| 26 |
-
#
|
| 27 |
-
# return []
|
| 28 |
-
|
| 29 |
from typing import Any, Text, Dict, List
|
| 30 |
import json
|
| 31 |
import requests
|
|
@@ -37,10 +9,17 @@ from rasa_sdk import Action, Tracker
|
|
| 37 |
from rasa_sdk.events import UserUtteranceReverted
|
| 38 |
from rasa_sdk.executor import CollectingDispatcher
|
| 39 |
|
|
|
|
| 40 |
class ActionDefaultFallback(Action):
|
| 41 |
"""Executes the fallback action and goes back to the previous state
|
| 42 |
of the dialogue"""
|
| 43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
con = None
|
| 45 |
|
| 46 |
def name(self) -> Text:
|
|
@@ -63,22 +42,19 @@ class ActionDefaultFallback(Action):
|
|
| 63 |
"num_results": number_results,
|
| 64 |
"corpus_key": [
|
| 65 |
{
|
| 66 |
-
"customer_id":
|
| 67 |
-
"corpus_id":
|
| 68 |
}
|
| 69 |
]
|
| 70 |
}
|
| 71 |
]
|
| 72 |
}
|
| 73 |
-
|
| 74 |
-
"customer-id": "1526022105",
|
| 75 |
-
"x-api-key": "zqt_WvU_2atFHgqYxxT2sQswwIUgogI8K3QeWs0oqA"
|
| 76 |
-
}
|
| 77 |
payload = json.dumps(data_dict)
|
| 78 |
response = requests.post(f"https://h.serving.zir-ai.io:443/v1/query",
|
| 79 |
data=payload,
|
| 80 |
verify=True,
|
| 81 |
-
headers=header,
|
| 82 |
timeout=10)
|
| 83 |
parsed = json.loads(response.text)
|
| 84 |
first_resp = parsed["responseSet"][0]["response"][0]
|
|
@@ -87,21 +63,22 @@ class ActionDefaultFallback(Action):
|
|
| 87 |
print(last_resp["score"])
|
| 88 |
print(first_resp["score"])
|
| 89 |
if last_resp["score"] < 0.3 or first_resp["score"] < 0.3:
|
| 90 |
-
textQuery.append(
|
|
|
|
| 91 |
else:
|
| 92 |
textQuery = print_responses(parsed["responseSet"][0], self.cur)
|
| 93 |
-
|
| 94 |
-
textQuery.insert(0, "
|
| 95 |
-
textQuery.insert(0, "This is what i found in the reviews:" )
|
| 96 |
textQuery = "\n".join(textQuery)
|
| 97 |
dispatcher.utter_message(text=textQuery)
|
|
|
|
| 98 |
# Revert user message which led to fallback.
|
| 99 |
return [UserUtteranceReverted()]
|
| 100 |
|
| 101 |
|
| 102 |
def print_responses(response_set, sqlite_cursor):
|
| 103 |
"""Print responses to the console."""
|
| 104 |
-
|
| 105 |
for result in response_set["response"]:
|
| 106 |
doc = response_set["document"][result["documentIndex"]]
|
| 107 |
query = f"""
|
|
@@ -110,26 +87,17 @@ def print_responses(response_set, sqlite_cursor):
|
|
| 110 |
"""
|
| 111 |
for row in sqlite_cursor.execute(query):
|
| 112 |
title, date, hotel, fulltext = row
|
| 113 |
-
|
| 114 |
if is_title(result):
|
| 115 |
-
|
| 116 |
else:
|
| 117 |
t = result["text"]
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
|
|
|
| 121 |
break
|
| 122 |
-
return
|
| 123 |
-
|
| 124 |
-
def hotel_name(hotel):
|
| 125 |
-
"""Returns a human-readable name for a hotel."""
|
| 126 |
-
if hotel == "sheraton_fisherman_s_wharf_hotel":
|
| 127 |
-
return "Sheraton Fisherman's Wharf Hotel"
|
| 128 |
-
if hotel == "the_westin_st_francis":
|
| 129 |
-
return "The Westin St. Francis San Francisco on Union Square"
|
| 130 |
-
if hotel == "best_western_tuscan_inn_fisherman_s_wharf_a_kimpton_hotel":
|
| 131 |
-
return "Best Western Fishermans Wharf"
|
| 132 |
-
return hotel
|
| 133 |
|
| 134 |
|
| 135 |
def highlight(fulltext, snippet):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
from typing import Any, Text, Dict, List
|
| 2 |
import json
|
| 3 |
import requests
|
|
|
|
| 9 |
from rasa_sdk.events import UserUtteranceReverted
|
| 10 |
from rasa_sdk.executor import CollectingDispatcher
|
| 11 |
|
| 12 |
+
|
| 13 |
class ActionDefaultFallback(Action):
|
| 14 |
"""Executes the fallback action and goes back to the previous state
|
| 15 |
of the dialogue"""
|
| 16 |
|
| 17 |
+
customer_id = "1835841754"
|
| 18 |
+
corpus_id = 1
|
| 19 |
+
header = {
|
| 20 |
+
"customer-id": customer_id,
|
| 21 |
+
"x-api-key": "zqt_WvU_2atFHgqYxxT2sQswwIUgogI8K3QeWs0oqA"
|
| 22 |
+
}
|
| 23 |
con = None
|
| 24 |
|
| 25 |
def name(self) -> Text:
|
|
|
|
| 42 |
"num_results": number_results,
|
| 43 |
"corpus_key": [
|
| 44 |
{
|
| 45 |
+
"customer_id": self.customer_id,
|
| 46 |
+
"corpus_id": self.corpus_id
|
| 47 |
}
|
| 48 |
]
|
| 49 |
}
|
| 50 |
]
|
| 51 |
}
|
| 52 |
+
|
|
|
|
|
|
|
|
|
|
| 53 |
payload = json.dumps(data_dict)
|
| 54 |
response = requests.post(f"https://h.serving.zir-ai.io:443/v1/query",
|
| 55 |
data=payload,
|
| 56 |
verify=True,
|
| 57 |
+
headers=self.header,
|
| 58 |
timeout=10)
|
| 59 |
parsed = json.loads(response.text)
|
| 60 |
first_resp = parsed["responseSet"][0]["response"][0]
|
|
|
|
| 63 |
print(last_resp["score"])
|
| 64 |
print(first_resp["score"])
|
| 65 |
if last_resp["score"] < 0.3 or first_resp["score"] < 0.3:
|
| 66 |
+
textQuery.append(
|
| 67 |
+
"I'm sorry, I don't have any information about that.")
|
| 68 |
else:
|
| 69 |
textQuery = print_responses(parsed["responseSet"][0], self.cur)
|
| 70 |
+
textQuery.insert(0, "\n")
|
| 71 |
+
textQuery.insert(0, "This is what i found in the reviews:")
|
|
|
|
| 72 |
textQuery = "\n".join(textQuery)
|
| 73 |
dispatcher.utter_message(text=textQuery)
|
| 74 |
+
|
| 75 |
# Revert user message which led to fallback.
|
| 76 |
return [UserUtteranceReverted()]
|
| 77 |
|
| 78 |
|
| 79 |
def print_responses(response_set, sqlite_cursor):
|
| 80 |
"""Print responses to the console."""
|
| 81 |
+
text_list = []
|
| 82 |
for result in response_set["response"]:
|
| 83 |
doc = response_set["document"][result["documentIndex"]]
|
| 84 |
query = f"""
|
|
|
|
| 87 |
"""
|
| 88 |
for row in sqlite_cursor.execute(query):
|
| 89 |
title, date, hotel, fulltext = row
|
| 90 |
+
text_list.append("**" + title + "**")
|
| 91 |
if is_title(result):
|
| 92 |
+
text_list.append(f"{head(fulltext)}")
|
| 93 |
else:
|
| 94 |
t = result["text"]
|
| 95 |
+
text_list.append(f"{highlight(fulltext, t)}")
|
| 96 |
+
text_list.append(
|
| 97 |
+
"*" + f"{" > \"Jumeirah Hotels & Resorts\" reviewed on {date}" + " *")
|
| 98 |
+
text_list.append("\n")
|
| 99 |
break
|
| 100 |
+
return text_list
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
|
| 102 |
|
| 103 |
def highlight(fulltext, snippet):
|
config.yml
CHANGED
|
@@ -3,9 +3,6 @@
|
|
| 3 |
language: en
|
| 4 |
|
| 5 |
pipeline:
|
| 6 |
-
# # No configuration for the NLU pipeline was provided. The following default pipeline was used to train your model.
|
| 7 |
-
# # If you'd like to customize it, uncomment and adjust the pipeline.
|
| 8 |
-
# # See https://rasa.com/docs/rasa/tuning-your-model for more information.
|
| 9 |
- name: SpacyNLP
|
| 10 |
- name: SpacyTokenizer
|
| 11 |
- name: SpacyFeaturizer
|
|
|
|
| 3 |
language: en
|
| 4 |
|
| 5 |
pipeline:
|
|
|
|
|
|
|
|
|
|
| 6 |
- name: SpacyNLP
|
| 7 |
- name: SpacyTokenizer
|
| 8 |
- name: SpacyFeaturizer
|
data/nlu.yml
CHANGED
|
@@ -92,9 +92,3 @@ nlu:
|
|
| 92 |
- Rooms available
|
| 93 |
- Book a room
|
| 94 |
- Need a place to stay for the night
|
| 95 |
-
|
| 96 |
-
- intent: out_of_scope
|
| 97 |
-
examples: |
|
| 98 |
-
- I want to order food
|
| 99 |
-
- What is 2 + 2?
|
| 100 |
-
- Who's the US President?
|
|
|
|
| 92 |
- Rooms available
|
| 93 |
- Book a room
|
| 94 |
- Need a place to stay for the night
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data/rules.yml
CHANGED
|
@@ -11,8 +11,3 @@ rules:
|
|
| 11 |
steps:
|
| 12 |
- intent: nlu_fallback
|
| 13 |
- action: zir_action_fallback
|
| 14 |
-
|
| 15 |
-
- rule: out of scope
|
| 16 |
-
steps:
|
| 17 |
-
- intent: out_of_scope
|
| 18 |
-
- action: zir_action_fallback
|
|
|
|
| 11 |
steps:
|
| 12 |
- intent: nlu_fallback
|
| 13 |
- action: zir_action_fallback
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
domain.yml
CHANGED
|
@@ -19,10 +19,6 @@ responses:
|
|
| 19 |
utter_greet:
|
| 20 |
- text: "Hey! How are you?"
|
| 21 |
|
| 22 |
-
utter_cheer_up:
|
| 23 |
-
- text: "Here is something to cheer you up:"
|
| 24 |
-
image: "https://i.imgur.com/nGF1K8f.jpg"
|
| 25 |
-
|
| 26 |
utter_did_that_help:
|
| 27 |
- text: "Did that help you?"
|
| 28 |
|
|
|
|
| 19 |
utter_greet:
|
| 20 |
- text: "Hey! How are you?"
|
| 21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
utter_did_that_help:
|
| 23 |
- text: "Did that help you?"
|
| 24 |
|
requirements.txt
CHANGED
|
@@ -1,2 +1,3 @@
|
|
| 1 |
sqlite3
|
| 2 |
-
textwrap
|
|
|
|
|
|
| 1 |
sqlite3
|
| 2 |
+
textwrap
|
| 3 |
+
spacy
|
server.py
DELETED
|
@@ -1,13 +0,0 @@
|
|
| 1 |
-
import http.server
|
| 2 |
-
import socketserver
|
| 3 |
-
import os
|
| 4 |
-
|
| 5 |
-
PORT = 8080
|
| 6 |
-
|
| 7 |
-
web_dir = os.path.join(os.path.dirname(__file__), 'web')
|
| 8 |
-
os.chdir(web_dir)
|
| 9 |
-
|
| 10 |
-
Handler = http.server.SimpleHTTPRequestHandler
|
| 11 |
-
httpd = socketserver.TCPServer(("0.0.0.0", PORT), Handler)
|
| 12 |
-
print("serving at port", PORT)
|
| 13 |
-
httpd.serve_forever()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tests/test_stories.yml
CHANGED
|
@@ -1,91 +1,26 @@
|
|
| 1 |
#### This file contains tests to evaluate that your bot behaves as expected.
|
| 2 |
#### If you want to learn more, please see the docs: https://rasa.com/docs/rasa/testing-your-assistant
|
| 3 |
-
|
| 4 |
stories:
|
| 5 |
-
- story: happy path 1
|
| 6 |
-
steps:
|
| 7 |
-
- user: |
|
| 8 |
-
hello there!
|
| 9 |
-
intent: greet
|
| 10 |
-
- action: utter_greet
|
| 11 |
-
- user: |
|
| 12 |
-
amazing
|
| 13 |
-
intent: mood_great
|
| 14 |
-
- action: utter_happy
|
| 15 |
-
|
| 16 |
-
- story: happy path 2
|
| 17 |
-
steps:
|
| 18 |
-
- user: |
|
| 19 |
-
hello there!
|
| 20 |
-
intent: greet
|
| 21 |
-
- action: utter_greet
|
| 22 |
-
- user: |
|
| 23 |
-
amazing
|
| 24 |
-
intent: mood_great
|
| 25 |
-
- action: utter_happy
|
| 26 |
-
- user: |
|
| 27 |
-
bye-bye!
|
| 28 |
-
intent: goodbye
|
| 29 |
-
- action: utter_goodbye
|
| 30 |
|
| 31 |
-
- story:
|
| 32 |
steps:
|
| 33 |
- user: |
|
| 34 |
hello
|
| 35 |
intent: greet
|
| 36 |
- action: utter_greet
|
| 37 |
- user: |
|
| 38 |
-
|
| 39 |
-
intent:
|
| 40 |
-
- action:
|
| 41 |
-
|
| 42 |
-
- user: |
|
| 43 |
-
yes
|
| 44 |
-
intent: affirm
|
| 45 |
-
- action: utter_happy
|
| 46 |
|
| 47 |
-
- story:
|
| 48 |
steps:
|
| 49 |
- user: |
|
| 50 |
hello
|
| 51 |
intent: greet
|
| 52 |
- action: utter_greet
|
| 53 |
- user: |
|
| 54 |
-
|
| 55 |
-
intent:
|
| 56 |
-
- action:
|
| 57 |
-
- action: utter_did_that_help
|
| 58 |
-
- user: |
|
| 59 |
-
not really
|
| 60 |
-
intent: deny
|
| 61 |
-
- action: utter_goodbye
|
| 62 |
-
|
| 63 |
-
- story: sad path 3
|
| 64 |
-
steps:
|
| 65 |
-
- user: |
|
| 66 |
-
hi
|
| 67 |
-
intent: greet
|
| 68 |
-
- action: utter_greet
|
| 69 |
-
- user: |
|
| 70 |
-
very terrible
|
| 71 |
-
intent: mood_unhappy
|
| 72 |
-
- action: utter_cheer_up
|
| 73 |
-
- action: utter_did_that_help
|
| 74 |
-
- user: |
|
| 75 |
-
no
|
| 76 |
-
intent: deny
|
| 77 |
-
- action: utter_goodbye
|
| 78 |
-
|
| 79 |
-
- story: say goodbye
|
| 80 |
-
steps:
|
| 81 |
-
- user: |
|
| 82 |
-
bye-bye!
|
| 83 |
-
intent: goodbye
|
| 84 |
-
- action: utter_goodbye
|
| 85 |
-
|
| 86 |
-
- story: bot challenge
|
| 87 |
-
steps:
|
| 88 |
-
- user: |
|
| 89 |
-
are you a bot?
|
| 90 |
-
intent: bot_challenge
|
| 91 |
-
- action: utter_iamabot
|
|
|
|
| 1 |
#### This file contains tests to evaluate that your bot behaves as expected.
|
| 2 |
#### If you want to learn more, please see the docs: https://rasa.com/docs/rasa/testing-your-assistant
|
|
|
|
| 3 |
stories:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
|
| 5 |
+
- story: A basic story test
|
| 6 |
steps:
|
| 7 |
- user: |
|
| 8 |
hello
|
| 9 |
intent: greet
|
| 10 |
- action: utter_greet
|
| 11 |
- user: |
|
| 12 |
+
Book a room for two please.
|
| 13 |
+
intent: reservations
|
| 14 |
+
- action: utter_reservation
|
| 15 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
+
- story: Fallback test
|
| 18 |
steps:
|
| 19 |
- user: |
|
| 20 |
hello
|
| 21 |
intent: greet
|
| 22 |
- action: utter_greet
|
| 23 |
- user: |
|
| 24 |
+
Can we play golf?
|
| 25 |
+
intent: nlu_fallback
|
| 26 |
+
- action: zir_action_fallback
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|