Susi AI Bot: Create a susi ai bot.
This bot uses SUSI_SERVER API to get response.
This commit is contained in:
parent
9175c451f6
commit
5fda59dde0
|
@ -90,7 +90,9 @@ force_include = [
|
|||
"zulip_bots/zulip_bots/bots/game_handler_bot/game_handler_bot.py",
|
||||
"zulip_bots/zulip_bots/bots/game_handler_bot/test_game_handler_bot.py",
|
||||
"zulip_bots/zulip_bots/bots/trello/trello.py",
|
||||
"zulip_bots/zulip_bots/bots/trello/test_trello.py"
|
||||
"zulip_bots/zulip_bots/bots/trello/test_trello.py",
|
||||
"zulip_bots/zulip_bots/bots/susi/susi.py",
|
||||
"zulip_bots/zulip_bots/bots/susi/test_susi.py",
|
||||
]
|
||||
|
||||
parser = argparse.ArgumentParser(description="Run mypy on files tracked by git.")
|
||||
|
|
0
zulip_bots/zulip_bots/bots/susi/__init__.py
Normal file
0
zulip_bots/zulip_bots/bots/susi/__init__.py
Normal file
57
zulip_bots/zulip_bots/bots/susi/fixtures/test_reply.json
Normal file
57
zulip_bots/zulip_bots/bots/susi/fixtures/test_reply.json
Normal file
|
@ -0,0 +1,57 @@
|
|||
{
|
||||
"request": {
|
||||
"api_url": "https://api.susi.ai/susi/chat.json?q=hi"
|
||||
},
|
||||
"response": {
|
||||
"query": "hi",
|
||||
"count": 1,
|
||||
"client_id": "aG9zdF8xNzIuNjguMTQ0LjI3XzNkZWNmYjA0",
|
||||
"query_date": "2018-02-21T06:45:24.291Z",
|
||||
"answers": [{
|
||||
"data": [
|
||||
{
|
||||
"0": "hi",
|
||||
"1": "",
|
||||
"token_original": "hi",
|
||||
"token_canonical": "hi",
|
||||
"token_categorized": "hi",
|
||||
"timezoneOffset": "0",
|
||||
"language": "en",
|
||||
"answer": "Hello!",
|
||||
"skill_link": "https://github.com/fossasia/susi_server/blob/development/conf/susi/en_0700_ai_play.json",
|
||||
"query": "hi",
|
||||
"skill": "/susi_server/conf/susi/en_0700_ai_play.json",
|
||||
"_username": "ABC"
|
||||
},
|
||||
{
|
||||
"answer": "C is the third letter in the English alphabet and a letter of the alphabets of many other writing systems which inherited it from the Latin alphabet.",
|
||||
"skill_link": "https://github.com/fossasia/susi_server/blob/development/conf/susi/en_0090_fail.json",
|
||||
"query": "c",
|
||||
"skill": "/susi_server/conf/susi/en_0090_fail.json",
|
||||
"_username": "ABC"
|
||||
}
|
||||
],
|
||||
"metadata": {"count": 5},
|
||||
"actions": [{
|
||||
"type": "answer",
|
||||
"language": "en",
|
||||
"expression": "Hello!"
|
||||
}],
|
||||
"skills": ["/susi_server/conf/susi/en_0700_ai_play.json"],
|
||||
"persona": {}
|
||||
}],
|
||||
"answer_date": "2018-02-21T06:45:24.320Z",
|
||||
"answer_time": 29,
|
||||
"language": "en",
|
||||
"session": {"identity": {
|
||||
"type": "host",
|
||||
"name": "172.68.144.27_3decfb04",
|
||||
"anonymous": true
|
||||
}}
|
||||
},
|
||||
"response-headers": {
|
||||
"status": 200,
|
||||
"ok": true,
|
||||
"content-type": "application/json; charset=utf-8"
|
||||
}
|
||||
}
|
51
zulip_bots/zulip_bots/bots/susi/susi.py
Normal file
51
zulip_bots/zulip_bots/bots/susi/susi.py
Normal file
|
@ -0,0 +1,51 @@
|
|||
import requests
|
||||
import urllib
|
||||
from typing import Dict, Any, Tuple, Union
|
||||
|
||||
class SusiHandler(object):
|
||||
'''
|
||||
Susi AI Bot
|
||||
To create and know more of SUSI skills go to `https://skills.susi.ai/`
|
||||
'''
|
||||
|
||||
def usage(self) -> str:
|
||||
return '''
|
||||
Hi, I am Susi, people generally ask me these questions:
|
||||
```
|
||||
What is the exchange rate of USD to BTC
|
||||
How to cook biryani
|
||||
draw a card
|
||||
word starting with m and ending with v
|
||||
question me
|
||||
random GIF
|
||||
image of a bird
|
||||
flip a coin
|
||||
let us play
|
||||
who is Albert Einstein
|
||||
search wikipedia for artificial intelligence
|
||||
when is christmas
|
||||
what is hello in french
|
||||
name a popular movie
|
||||
news
|
||||
tell me a joke
|
||||
buy a dress
|
||||
currency of singapore
|
||||
distance between india and singapore
|
||||
tell me latest phone by LG
|
||||
```
|
||||
'''
|
||||
|
||||
def handle_message(self, message: Dict[str, str], bot_handler: Any) -> None:
|
||||
msg = message['content']
|
||||
if msg == 'help' or msg == '':
|
||||
bot_handler.send_reply(message, self.usage())
|
||||
return
|
||||
encoded_msg = urllib.parse.quote_plus(msg.encode('utf8'))
|
||||
reply = requests.get("https://api.susi.ai/susi/chat.json?q=" + encoded_msg)
|
||||
try:
|
||||
answer = reply.json()['answers'][0]['actions'][0]['expression']
|
||||
except Exception:
|
||||
answer = "I don't understand. Can you rephrase?"
|
||||
bot_handler.send_reply(message, answer)
|
||||
|
||||
handler_class = SusiHandler
|
45
zulip_bots/zulip_bots/bots/susi/test_susi.py
Normal file
45
zulip_bots/zulip_bots/bots/susi/test_susi.py
Normal file
|
@ -0,0 +1,45 @@
|
|||
from zulip_bots.test_lib import (
|
||||
BotTestCase,
|
||||
)
|
||||
|
||||
from typing import Any
|
||||
|
||||
class TestSusiBot(BotTestCase):
|
||||
bot_name = "susi"
|
||||
|
||||
def test_help(self) -> None:
|
||||
bot_response = '''
|
||||
Hi, I am Susi, people generally ask me these questions:
|
||||
```
|
||||
What is the exchange rate of USD to BTC
|
||||
How to cook biryani
|
||||
draw a card
|
||||
word starting with m and ending with v
|
||||
question me
|
||||
random GIF
|
||||
image of a bird
|
||||
flip a coin
|
||||
let us play
|
||||
who is Albert Einstein
|
||||
search wikipedia for artificial intelligence
|
||||
when is christmas
|
||||
what is hello in french
|
||||
name a popular movie
|
||||
news
|
||||
tell me a joke
|
||||
buy a dress
|
||||
currency of singapore
|
||||
distance between india and singapore
|
||||
tell me latest phone by LG
|
||||
```
|
||||
'''
|
||||
|
||||
self.verify_reply('', bot_response)
|
||||
self.verify_reply('help', bot_response)
|
||||
|
||||
def test_issue(self) -> None:
|
||||
request = 'hi'
|
||||
bot_response = 'Hello!'
|
||||
|
||||
with self.mock_http_conversation('test_reply'):
|
||||
self.verify_reply(request, bot_response)
|
Loading…
Reference in a new issue