Skip to content

Commit

Permalink
fix #5 #10 bot not giving expected response or unhashable type dict
Browse files Browse the repository at this point in the history
  • Loading branch information
bhavaniravi committed Oct 2, 2018
1 parent 61c8c70 commit 308329a
Show file tree
Hide file tree
Showing 208 changed files with 16,142 additions and 43 deletions.
2 changes: 1 addition & 1 deletion AI-engine/data/sitebot-data.json
Expand Up @@ -173,7 +173,7 @@
{
"start": 52,
"end": 57,
"value": "tomorrow 10 PM",
"value": "10 PM",
"entity": "time"
},
{
Expand Down
31 changes: 17 additions & 14 deletions bot-application/app.py
Expand Up @@ -14,7 +14,9 @@ def hello_world():
return render_template('home.html')


get_random_response = lambda intent: random.choice(response[intent])
def get_random_response(intent):
print (response[intent])
return random.choice(response[intent])


def format_entities(entities):
Expand Down Expand Up @@ -52,19 +54,20 @@ def chat():
chat end point that performs NLU using rasa.ai
and constructs response from response.py
"""
try:
response = requests.get("http://localhost:5000/parse", params={"q": request.form["text"]})
response = response.json()
intent = response["intent"]
entities = format_entities(response["entities"])
if intent == "event-request":
response_text = get_event(entities["day"], entities["time"], entities["place"])
else:
response_text = get_random_response(intent)
return jsonify({"status": "success", "response": response_text})
except Exception as e:
print(e)
return jsonify({"status": "success", "response": "Sorry I am not trained to do that yet..."})
# try:
response = requests.get("http://localhost:5000/parse", params={"q": request.form["text"]})
response = response.json()
print (response)
intent = response.get("intent", {}).get("name", "default")
entities = format_entities(response.get("entities", []))
if intent == "event-request":
response_text = get_event(entities["day"], entities["time"], entities["place"])
else:
response_text = get_random_response(intent)
return jsonify({"status": "success", "response": response_text})
# except Exception as e:
# print(e)
# return jsonify({"status": "success", "response": "Sorry I am not trained to do that yet..."})


app.config["DEBUG"] = True
Expand Down
11 changes: 6 additions & 5 deletions bot-application/models.py
@@ -1,10 +1,11 @@
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
#from urllib import quote_plus as urlquote
# from urllib import quote_plus as urlquote
import urllib.parse
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
from flask_migrate import Migrate

try:
from local_settings import *
except ImportError:
Expand All @@ -15,16 +16,17 @@
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///app.db"
db = SQLAlchemy(app)
#Migrate won't work well on sqlite better to use mysql db
# Migrate won't work well on sqlite better to use mysql db
migrate = Migrate(app, db)


class Event(db.Model):
id = db.Column(db.Integer, primary_key=True,autoincrement=True)
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
event_description = db.Column(db.String(50))
date_time = db.Column(db.DateTime())
place = db.Column(db.String(50))
def __init__(self, event_description=None,date=None,time=None,place=None):

def __init__(self, event_description=None, date=None, time=None, place=None):
self.event_description = event_description
self.date = date
self.time = time
Expand All @@ -41,4 +43,3 @@ def __init__(self, model, session, name=None, category=None, endpoint=None, url=

admin = Admin(app, name='rasa-site-bot', template_mode='bootstrap3')
admin.add_view(MyModelView(Event, db.session))

57 changes: 34 additions & 23 deletions bot-application/response.py
@@ -1,48 +1,59 @@
##dict of response for each type of intent
# dict of response for each type of intent

import datetime

response = {
"greet":["hey","hello","hi"],
"goodbye":["bye","It was nice talking to you","see you","ttyl"],
"affirm":["cool","I know you would like it"],
"day_preference":["which day of conference ?"],
"time_preference":["Do you have any time preference"],
"events_link":['You can check all the events here <a href="https://conference.pydelhi.org/#schedule_table">PyDelhi events</a>'],
"no_events":["No events found"],
"intro":["I am event bot for pydelhi, I can find you event details in minutes"]
"greet": ["hey", "hello", "hi"],
"goodbye": ["bye", "It was nice talking to you", "see you", "ttyl"],
"affirm": ["cool", "I know you would like it"],
"day_preference": ["which day of conference ?"],
"time_preference": ["Do you have any time preference"],
"events_link": [
'You can check all the events here <a href="https://conference.pydelhi.org/#schedule_table">PyDelhi events</a>'],
"no_events": ["No events found"],
"intro": ["I am event bot for pydelhi, I can find you event details in minutes"],
"default": ["Sorry I am not trained to answer that yet.", "Oops I didn't understand that sorry"]
}
import datetime

mapping = {
"now":datetime.datetime.now(),
"now": datetime.datetime.now(),
"tomorrow": datetime.date.today() + datetime.timedelta(days=1),
"today":datetime.date.today(),
"same time":datetime.datetime.now(),
"second day":datetime.datetime.now()
"today": datetime.date.today(),
"same time": datetime.datetime.now(),
"second day": datetime.datetime.now()
}


def try_parsing_date(text):
"""
Parses time of string format to a time object
"""
for fmt in ('%I %p', '%I %M %p', '%I:%M %p'):
try:
return datetime.datetime.strptime(text, fmt)
except ValueError:pass
except ValueError:
pass
if ":" in text:
return datetime.datetime.strptime(text+" "+
("AM" if int(text.split(":")[0])>=8 else "PM"), '%I:%M %p')
return datetime.datetime.strptime(text+" "+
("AM" if int(text)>=8 else "PM"), '%I %p')
return datetime.datetime.strptime(text + " " +
("AM" if int(text.split(":")[0]) >= 8 else "PM"), '%I:%M %p')
return datetime.datetime.strptime(text + " " +
("AM" if int(text) >= 8 else "PM"), '%I %p')

def get_date_time(day,time):

def get_date_time(day, time):
"""
Maps words like now today tom etc., to corresponding datetime objects
"""
try:time = mapping[time]
try:
time = mapping[time]
except KeyError:
if not time:
time = datetime.datetime.now()
else:
time = try_parsing_date(time)
try:date = mapping[day]
except KeyError:date = datetime.date.today()
try:
date = mapping[day]
except KeyError:
date = datetime.date.today()

return datetime.datetime.combine(date, time.time())
Binary file not shown.
9 changes: 9 additions & 0 deletions models/nlu/default/model_20181001-224630/entity_synonyms.json
@@ -0,0 +1,9 @@
{
"10 pm": "tomorrow 10 PM",
"tommorrow": "tomorrow",
"tomorrow": "2",
"6:30 pm": "10 AM",
"6 am": "10 AM",
"6 30 pm": "10 AM",
"after": "before"
}
Binary file not shown.
84 changes: 84 additions & 0 deletions models/nlu/default/model_20181001-224630/metadata.json
@@ -0,0 +1,84 @@
{
"rasa_nlu_version": "0.13.5",
"trained_at": "20181001-224630",
"pipeline": [
{
"case_sensitive": false,
"name": "nlp_spacy",
"model": "en",
"class": "rasa_nlu.utils.spacy_utils.SpacyNLP"
},
{
"name": "tokenizer_spacy",
"class": "rasa_nlu.tokenizers.spacy_tokenizer.SpacyTokenizer"
},
{
"name": "intent_featurizer_spacy",
"class": "rasa_nlu.featurizers.spacy_featurizer.SpacyFeaturizer"
},
{
"name": "intent_entity_featurizer_regex",
"class": "rasa_nlu.featurizers.regex_featurizer.RegexFeaturizer",
"regex_file": "regex_featurizer.json"
},
{
"L2_c": 0.1,
"max_iterations": 50,
"L1_c": 0.1,
"class": "rasa_nlu.extractors.crf_entity_extractor.CRFEntityExtractor",
"name": "ner_crf",
"classifier_file": "crf_model.pkl",
"BILOU_flag": true,
"features": [
[
"low",
"title",
"upper"
],
[
"bias",
"low",
"prefix5",
"prefix2",
"suffix5",
"suffix3",
"suffix2",
"upper",
"title",
"digit",
"pattern"
],
[
"low",
"title",
"upper"
]
]
},
{
"name": "ner_synonyms",
"synonyms_file": "entity_synonyms.json",
"class": "rasa_nlu.extractors.entity_synonyms.EntitySynonymMapper"
},
{
"kernels": [
"linear"
],
"classifier_file": "intent_classifier_sklearn.pkl",
"class": "rasa_nlu.classifiers.sklearn_intent_classifier.SklearnIntentClassifier",
"C": [
1,
2,
5,
10,
20,
100
],
"max_cross_validation_folds": 5,
"scoring_function": "f1_weighted",
"name": "intent_classifier_sklearn"
}
],
"language": "en",
"training_data": "training_data.json"
}
@@ -0,0 +1 @@
[]

0 comments on commit 308329a

Please sign in to comment.