-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathchat.py
72 lines (59 loc) · 2.57 KB
/
chat.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import argparse
import asyncio
from os import path, getcwd, getenv
import openai
from chatlib.utils.validator import make_non_empty_string_validator
from chatlib.chatbot import TurnTakingChatSession
from dotenv import load_dotenv
from questionary import prompt
from app.common import ChatbotLocale
from app.response_generator import EmotionChatbotResponseGenerator
from chatlib.utils import cli
from chatlib.global_config import GlobalConfig
if __name__ == "__main__":
GlobalConfig.is_cli_mode = True
parser = argparse.ArgumentParser()
parser.add_argument('-session', '--session', dest="session", type=str, help='Session ID to restore chat')
parser.set_defaults(session=None)
args = parser.parse_args()
if args.session is not None and len(args.session) > 0:
# restore existing session...
session = TurnTakingChatSession(args.session, EmotionChatbotResponseGenerator())
session.load()
asyncio.run(cli.run_chat_loop_from_session(session))
else:
configuration_questions = [
{
'type': 'text',
'name': 'user_name',
'message': "Please enter child's name:",
"validate": make_non_empty_string_validator("Please enter a valid name.")
},
{
'type': 'text',
'name': 'user_age',
'message': "Please enter child's age:",
"validate": lambda number: True if number.isnumeric() and int(
number) >= 0 else "The age should be a number equal or larger than 0."
},
{
'type': 'select',
"name": 'locale',
'choices': ['Korean', 'English'],
'default': 'Korean',
'message': 'Select language you would like to speak in:'
}
]
configuration_answers = prompt(configuration_questions)
user_name = configuration_answers['user_name'].strip()
user_age = int(configuration_answers['user_age'].strip())
locale_name = configuration_answers['locale'].strip()
if locale_name == "Korean":
locale = ChatbotLocale.Korean
elif locale_name == "English":
locale = ChatbotLocale.English
else:
raise ValueError("Unsupported locale.")
asyncio.run(cli.run_chat_loop(EmotionChatbotResponseGenerator(user_name=user_name,
user_age=user_age,
locale=locale)))