ssatonet commited on
Commit
f72b0d9
โ€ข
1 Parent(s): 69c708b

first commit

Browse files
Files changed (2) hide show
  1. app.py +299 -0
  2. requirements.txt +16 -0
app.py ADDED
@@ -0,0 +1,299 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import os
3
+ import random
4
+
5
+ import gradio as gr
6
+ import openai
7
+ import requests
8
+ from langchain.callbacks.base import CallbackManager
9
+ from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
10
+ from langchain.chains import ConversationChain
11
+ from langchain.chat_models import ChatOpenAI
12
+ from langchain.memory import ConversationBufferWindowMemory
13
+ from langchain.prompts.chat import (ChatPromptTemplate,
14
+ HumanMessagePromptTemplate,
15
+ MessagesPlaceholder,
16
+ SystemMessagePromptTemplate)
17
+ from pydub import AudioSegment
18
+ from pydub.playback import play
19
+
20
+ # ไผš่ฉฑใƒใ‚งใƒผใƒณ
21
+ conversation = None
22
+
23
+ # APIใ‚ญใƒผใฎ่จญๅฎš
24
+ #os.environ["OPENAI_API_KEY"] = ""
25
+ openai.api_key = os.getenv('OPENAI_API_KEY')
26
+
27
+ # ๆคœ็ดขAPIURL
28
+ search_url = 'https://greendb.shanri.co.jp/gd/search/'
29
+
30
+ # ่จญๅฎšใƒ—ใƒญใƒณใƒ—ใƒˆ
31
+ character_setting = "ใ‚ใชใŸใฏ20ไปฃใฎ็œ‹่ญทๅธซใ•ใ‚“ใงใ™ใ€‚ๆ˜Žใ‚‹ใ„ๆ€งๆ ผใงไธๅฏงใชๅฃ่ชฟใงๅ›ž็ญ”ใ—ใฆใใ ใ•ใ„"
32
+
33
+ def get_search_result(kw):
34
+ # getใƒกใ‚ฝใƒƒใƒ‰ใงsearch urlใซๅฏพใ—ใฆGETใƒชใ‚ฏใ‚จใ‚นใƒˆใ‚’้€ใ‚‹
35
+ r = requests.get(search_url, params={'kw':kw})
36
+
37
+ # JSONใƒฌใ‚นใƒใƒณใ‚นใ‹ใ‚‰kotoba_shoujouใ‚’ใ™ในใฆๅ–ๅพ—
38
+ kotoba_shoujou = []
39
+ for hit in r.json()['hits']:
40
+ kotoba_shoujou.append(hit['_source']['kotoba_shoujou'])
41
+
42
+ # kotoba_shoujouๆ–‡ๅญ—ๅˆ—้…ๅˆ—ใ‚’/ใง้€ฃ็ต
43
+ kotoba_shoujou_str = '/'.join(kotoba_shoujou)
44
+
45
+ return kotoba_shoujou_str
46
+
47
+ def speechRecognitionModel(input, chatbot, shoujou, bui, when, how, status):
48
+ global conversation
49
+ if not conversation:
50
+ # ใƒใƒฃใƒƒใƒˆใƒ—ใƒญใƒณใƒ—ใƒˆใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆ
51
+ prompt = ChatPromptTemplate.from_messages([
52
+ SystemMessagePromptTemplate.from_template(character_setting),
53
+ MessagesPlaceholder(variable_name="history"),
54
+ HumanMessagePromptTemplate.from_template("{input}")
55
+ ])
56
+
57
+ # ใƒใƒฃใƒƒใƒˆใƒขใƒ‡ใƒซ
58
+ llm = ChatOpenAI(
59
+ model_name="gpt-3.5-turbo",
60
+ max_tokens=512,
61
+ temperature=0.2,
62
+ streaming=True,
63
+ callback_manager=CallbackManager([StreamingStdOutCallbackHandler()])
64
+ )
65
+
66
+ # ใƒกใƒขใƒช
67
+ memory = ConversationBufferWindowMemory(k=3, return_messages=True)
68
+
69
+ # ไผš่ฉฑใƒใ‚งใƒผใƒณ
70
+ conversation = ConversationChain(memory=memory, prompt=prompt, llm=llm, verbose=False)
71
+
72
+ os.rename(input, input + '.wav')
73
+ file = open(input + '.wav', "rb")
74
+ result = openai.Audio.transcribe(file=file, model="whisper-1", response_format="text", language="ja")
75
+ message = f'ไปฅไธ‹ใซ็—‡็Šถใ‚’็คบใ™ใƒ†ใ‚ญใ‚นใƒˆใŒใ‚ใ‚Šใพใ™ใ€‚็—‡็Šถใ€ใ„ใคใ‹ใ‚‰ใ€ใฉใ‚“ใชใ€ใคใ‚‰ใ„ๅ ดๆ‰€ใซใคใ„ใฆjsonๅฝขๅผใงใพใจใ‚ใฆใใ ใ•ใ„ใ€‚\n{result}'
76
+ response = conversation.predict(input=message)
77
+
78
+ # ๆ–‡ๅญ—ๅˆ—ใ‚’่พžๆ›ธใซๅค‰ๆ›
79
+ dict_data = json.loads(response)
80
+
81
+ # ่พžๆ›ธใฎใ‚ญใƒผใงๅ€คใซใ‚ขใ‚ฏใ‚ปใ‚น
82
+ shoujou = dict_data["็—‡็Šถ"]
83
+ when = dict_data["ใ„ใคใ‹ใ‚‰"]
84
+ how = dict_data["ใฉใ‚“ใช"]
85
+ bui = dict_data["ใคใ‚‰ใ„ๅ ดๆ‰€"]
86
+
87
+ message = f'ไปฅไธ‹ใซๆ‚ฃ่€…ใ•ใ‚“ใŒ็—‡็Šถใซใคใ„ใฆ่ชฌๆ˜Žใ—ใŸๆ–‡็ซ ใŒใ‚ใ‚Šใพใ™ใ€‚ๅ›ž็ญ”ใฎใŠ็คผใจ็—‡็Šถใ€ใ„ใคใ‹ใ‚‰ใ€ใฉใ‚“ใชใ€ใคใ‚‰ใ„ๅ ดๆ‰€ใชใฉใซใคใ„ใฆใพใจใ‚ใฆใญใŽใ‚‰ใฃใฆใใ ใ•ใ„ใ€‚\n{result}'
88
+ response = conversation.predict(input=message)
89
+
90
+ chatbot += [[result, response]]
91
+ chatbot += [[None, 'ๅผ•ใ็ถšใ่ณชๅ•ใ•ใ›ใฆใ„ใŸใ ใใพใ™ใญใ€‚']]
92
+ if shoujou == 'ไธๆ˜Ž':
93
+ status = START
94
+ chatbot += [[None, '็—‡็Šถใซใคใ„ใฆๆ•™ใˆใฆใใ ใ•ใ„ใ€‚']]
95
+ elif bui == 'ไธๆ˜Ž':
96
+ chatbot += [[None, 'ไฝ“ใฎใฉใฎใ‚ใŸใ‚Š๏ผˆ้ƒจไฝ๏ผ‰ใŒใคใ‚‰ใ„ใ‹่ฉณใ—ใๆ•™ใˆใฆใใ ใ•ใ„ใ€‚']]
97
+ status = BUI
98
+ elif when == 'ไธๆ˜Ž':
99
+ chatbot += [[None, 'ใ„ใคใ‹ใ‚‰็—‡็ŠถใŒๅง‹ใพใ‚Šใพใ—ใŸใ‹๏ผŸ็ตŒ้Žใ‚’ๆ•™ใˆใฆใใ ใ•ใ„ใ€‚']]
100
+ status = WHEN
101
+ elif how == 'ไธๆ˜Ž':
102
+ chatbot += [[None, 'ไป–ใ€ใฉใฎใใ‚‰ใ„็—‡็ŠถใฏใŠ่พ›ใ„ใงใ™ใ‹?']]
103
+ status = HOW
104
+ else:
105
+ chatbot += [[None, 'ไป–ใ€ใ„ใคใ‚‚ใจ้•ใ†ใชใจๆ€ใ†็—‡็Šถใ‚„ๆ€ใ„ๅฝ“ใŸใ‚‹ใ“ใจใฏใ‚ใฃใŸใ‚Šใ—ใพใ™ใ‹ใ€‚']]
106
+ status = RELEVANCE
107
+ return chatbot, shoujou, bui, when, how, status
108
+
109
+ def user(message, history):
110
+ return "", history + [[message, None]]
111
+
112
+ def chat(history, status, suggest, shoujou, bui, hosoku, when, how, relevance, kiou, fukuyaku, allergy, family, job, drink, smoke, sports, stress, etc, result):
113
+ user_message = history[-1][0]
114
+ if status == START:
115
+ if shoujou == 'ไธๆ˜Ž':
116
+ history[-1][1] = '็—‡็Šถใซใคใ„ใฆๆ•™ใˆใฆใใ ใ•ใ„ใ€‚'
117
+ else:
118
+ status += 1
119
+ if status == SYOUJOU:
120
+ status +=1
121
+ shoujou = user_message
122
+ history[-1][1] = 'ไฝ“ใฎใฉใฎใ‚ใŸใ‚Š๏ผˆ้ƒจไฝ๏ผ‰ใŒใคใ‚‰ใ„ใ‹่ฉณใ—ใๆ•™ใˆใฆใใ ใ•ใ„ใ€‚'
123
+ elif status == BUI:
124
+ status += 1
125
+ bui = user_message
126
+ history[-1][1] = 'ๅ€™่ฃœใฎไธญใ‹ใ‚‰็—‡็Šถใซ่ฟ‘ใ„ใ€Œ็—‡็Šถใ“ใจใฐใ€ใŒใ‚ใ‚Œใฐๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚\n็‰นใซใชใ‘ใ‚Œใฐใ‚จใƒณใ‚ฟใƒผใ‚’ๅ…ฅๅŠ›ใ—ใฆใใ ใ•ใ„ใ€‚'
127
+ suggest = get_search_result(shoujou).split('/')
128
+ suggest = random.sample(suggest, 20)
129
+ suggest = ' '.join(suggest)
130
+ elif status == HOSOKU:
131
+ hosoku = user_message
132
+ suggest = '็—‡็Šถใ“ใจใฐใฎๅ€™่ฃœใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚'
133
+ message = f'็งใฏ็œ‹่ญทๅธซใงใ™ใ€‚็งใฏใ€ๆ‚ฃ่€…ๆง˜ใซใ€ŒไปŠๆ—ฅใฏใฉใ‚“ใช็—‡็ŠถใงใŠๅ›ฐใ‚Šใงใ™ใ‹๏ผŸใ€ใจ่ณชๅ•ใ—ใ€ๆ‚ฃ่€…ๆง˜ใฏใ€Œ{shoujou}ใ€ใจ็ญ”ใˆใพใ—ใŸใ€‚ใ•ใ‚‰ใซใ€็งใฏใ€Œไฝ“ใฎใฉใฎใ‚ใŸใ‚Š๏ผˆ้ƒจไฝ๏ผ‰ใŒใคใ‚‰ใ„ใ‹่ฉณใ—ใๆ•™ใˆใฆใใ ใ•ใ„ใ€‚ใ€ใจ่ณชๅ•ใ—ใ€ๆ‚ฃ่€…ๆง˜ใฏใ€Œ{bui}ใ€ใจ็ญ”ใˆใพใ—ใŸใ€‚ไธŠ่จ˜ใฏ็—‡็Šถใซ้–ขใ‚ใ‚‹ๅ›ž็ญ”ใงใ™ใ‹ใ€‚ใฏใ„ใ€ใ„ใ„ใˆใง็ญ”ใˆใฆใใ ใ•ใ„ใ€‚'
134
+ response = conversation.predict(input=message)
135
+ history[-1][1] = response
136
+ if 'ใฏใ„' in response:
137
+ status += 1
138
+ message = f'ไปฅไธ‹ใฎๆ–‡็ซ ใ‚’ใพใจใ‚ใ€็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚\n{shoujou}ใ€‚{bui}ใ€‚{hosoku}'
139
+ response = conversation.predict(input=message)
140
+ history[-1][1] = f'{response}\nใ“ใ‚Œใ‹ใ‚‰ไธŠๆ‰‹ใ็—‡็Šถใ‚’ใŠไผใˆใงใใ‚‹ใ‚ˆใ†ใซ่‰ฒใ€…่ณชๅ•ใ—ใพใ™ใ€‚\nใ„ใคใ‹ใ‚‰็—‡็ŠถใŒๅง‹ใพใ‚Šใพใ—ใŸใ‹๏ผŸ็ตŒ้Žใ‚’ๆ•™ใˆใฆใใ ใ•ใ„ใ€‚'
141
+ else:
142
+ history[-1][1] = f'{response}\nใŠๅŠ›ใซใชใ‚Œใ‚‹ใ‚ˆใ†ใ€ๆ”นใ‚ใฆใ‚‚ใ†ๅฐ‘ใ—่ฉณใ—ใ็—‡็Šถใ‚’ใŠไผบใ„ใงใใพใ™ใ‹๏ผŸ'
143
+ elif status == WHEN:
144
+ status += 1
145
+ when = user_message
146
+ history[-1][1] = 'ใฉใฎใใ‚‰ใ„็—‡็ŠถใฏใŠ่พ›ใ„ใงใ™ใ‹๏ผŸ'
147
+ elif status == HOW:
148
+ status += 1
149
+ how = user_message
150
+ history[-1][1] = 'ไป–ใ€ใ„ใคใ‚‚ใจ้•ใ†ใชใจๆ€ใ†็—‡็Šถใ‚„ๆ€ใ„ๅฝ“ใŸใ‚‹ใ“ใจใฏใ‚ใฃใŸใ‚Šใ—ใพใ™ใ‹ใ€‚'
151
+ elif status == RELEVANCE:
152
+ status += 1
153
+ relevance = user_message
154
+ message = f'็งใฏ็œ‹่ญทๅธซใงใ™ใ€‚ไปฅไธ‹ใ‚’ใพใจใ‚ใ€ใพใจใ‚ใŸๆ–‡็ซ ใ ใ‘ใ‚’่จ˜่ผ‰ใ—ใฆใใ ใ•ใ„ใ€‚\n{shoujou}ใ€‚{bui}ใ€‚{hosoku}ใ€‚{when}ใ€‚{how}ใ€‚{relevance}ใ€‚'
155
+ response = conversation.predict(input=message)
156
+ history[-1][1] = response + '\nไปŠใพใงใ‹ใ‹ใฃใŸ็—…ๆฐ—ใ‚„็พๅœจๆฒป็™‚ไธญใฎ็—…ๆฐ—ใฏใ‚ใ‚Šใพใ™ใ‹๏ผŸ'
157
+ elif status == KIOU:
158
+ status += 1
159
+ kiou = user_message
160
+ history[-1][1] = '็พๅœจ้ฃฒใพใ‚Œใฆใ„ใ‚‹ใŠ่–ฌใ‚„ใ‚ตใƒ—ใƒชใƒกใƒณใƒˆใฏใ‚ใ‚Šใพใ™ใ‹๏ผŸ'
161
+ elif status == FUKUYAKU:
162
+ status += 1
163
+ fukuyaku = user_message
164
+ history[-1][1] = 'ไฝ“่ณชใซใคใ„ใฆใŠไผบใ„ใ•ใ›ใฆใใ ใ•ใ„ใ€‚\nใƒป็‰นใซใชใ—\nใƒปใ‚ขใƒฌใƒซใ‚ฎใƒผใ‚ใ‚Š\nใƒปไพฟ็ง˜ใ—ใ‚„ใ™ใ„\nใƒปไธ‹็—ขใ—ใ‚„ใ™ใ„\nใƒปใ‹ใถใ‚Œใ‚„ใ™ใ„\nใƒป่ƒƒใŒๅผฑใ„\nใƒปๅ†ทใˆๆ€ง\nใƒปใใฎไป–'
165
+ elif status == ALLERGY:
166
+ status += 1
167
+ allergy = user_message
168
+ message = f'็งใฏ็œ‹่ญทๅธซใงใ™ใ€‚ไปฅไธ‹ใ‚’ใพใจใ‚ใ€ใพใจใ‚ใŸๆ–‡็ซ ใ ใ‘ใ‚’่จ˜่ผ‰ใ—ใฆใใ ใ•ใ„ใ€‚{kiou}ใ€‚{fukuyaku}, {allergy}ใ€‚'
169
+ response = conversation.predict(input=message)
170
+ history[-1][1] = f'{response}\nๅŒปๅธซใฏใ‚ใชใŸใ‚’ใ‚ˆใ็†่งฃใ—ใฆๆฒป็™‚ใ‚’ใ—ใŸใ„ใจ่€ƒใˆใฆใ„ใพใ™ใ‚ˆใ€‚\nใ‚ใชใŸใฎใƒฉใ‚คใƒ•ใ‚นใ‚ฟใ‚คใƒซใ‚’ๅฐ‘ใ—ใŠไผบใ„ใ•ใ›ใฆใใ ใ•ใ„ใ€‚\nใ”ๅฎถๆ—ใจไธ€็ท’ใซไฝใ‚“ใงใ„ใพใ™ใ‹๏ผŸใใ‚Œใจใ‚‚ไธ€ไบบๆšฎใ‚‰ใ—ใงใ™ใ‹๏ผŸ'
171
+ elif status == FAMILY:
172
+ status += 1
173
+ family = user_message
174
+ message = f'็งใฏ็œ‹่ญทๅธซใงใ™ใ€‚็งใฏใ€ๆ‚ฃ่€…ๆง˜ใซใ€Œใ”ๅฎถๆ—ใจไธ€็ท’ใซไฝใ‚“ใงใ„ใพใ™ใ‹๏ผŸใใ‚Œใจใ‚‚ไธ€ไบบๆšฎใ‚‰ใ—ใงใ™ใ‹๏ผŸใ€ใจ่ณชๅ•ใ—ใ€ๆ‚ฃ่€…ๆง˜ใฏ\nใ€Œ{family}ใ€ใจๅ›ž็ญ”ใ—ใพใ—ใŸใ€‚ใ“ใ‚Œใฏ่ณชๅ•ใซๅฏพใ™ใ‚‹้ฉๅˆ‡ใชๅ›ž็ญ”ใงใ™ใ‹ใ€‚ใฏใ„ใ€ใ„ใ„ใˆใง็ญ”ใˆใฆใใ ใ•ใ„ใ€‚'
175
+ response = conversation.predict(input=message)
176
+ if 'ใฏใ„' in response:
177
+ history[-1][1] = 'ใฉใ‚“ใชใŠไป•ไบ‹ใ‚’ใ•ใ‚Œใฆใ„ใ‚‰ใฃใ—ใ‚ƒใ„ใพใ™ใ‹ใ€‚'
178
+ else:
179
+ history[-1][1] = 'ๆฌกใฎ่ณชๅ•ใธใ†ใคใ‚Šใพใ™ใญใ€‚\nใฉใ‚“ใชใŠไป•ไบ‹ใ‚’ใ•ใ‚Œใฆใ„ใ‚‰ใฃใ—ใ‚ƒใ„ใพใ™ใ‹ใ€‚'
180
+ elif status == JOB:
181
+ status += 1
182
+ job = user_message
183
+ message = f'็งใฏ็œ‹่ญทๅธซใงใ™ใ€‚็งใฏใ€ๆ‚ฃ่€…ๆง˜ใซใ€Œใฉใ‚“ใชใŠไป•ไบ‹ใ‚’ใ•ใ‚Œใฆใ„ใ‚‰ใฃใ—ใ‚ƒใ„ใพใ™ใ‹ใ€‚ใ€ใจ่ณชๅ•ใ—ใ€ๆ‚ฃ่€…ๆง˜ใฏ\nใ€Œ{job}ใ€ใจๅ›ž็ญ”ใ—ใพใ—ใŸใ€‚ใ“ใ‚Œใฏ่ณชๅ•ใซๅฏพใ™ใ‚‹้ฉๅˆ‡ใชๅ›ž็ญ”ใงใ™ใ‹ใ€‚ใฏใ„ใ€ใ„ใ„ใˆใง็ญ”ใˆใฆใใ ใ•ใ„ใ€‚'
184
+ response = conversation.predict(input=message)
185
+ if 'ใฏใ„' in response:
186
+ history[-1][1] = 'ใŠ้…’ใ‚’้ฃฒใพใ‚Œใพใ™ใ‹๏ผŸ\nใƒปใŠ้…’ใฏ้ฃฒใพใชใ„\nใƒปใŠ้…’ใ‚’้ฃฒใ‚€โ†’๏ผˆใŠ้…’ใฎ็จฎ้กžใƒป้‡ใƒป้ ปๅบฆใ‚’ๆ•™ใˆใฆใใ ใ•ใ„ใ€‚ไพ‹๏ผš็ผถใƒ“ใƒผใƒซ2ๆœฌใ‚’ๆฏŽๆ—ฅ๏ผ‰'
187
+ else:
188
+ history[-1][1] = 'ๆฌกใฎ่ณชๅ•ใธใ†ใคใ‚Šใพใ™ใญใ€‚\nใŠ้…’ใ‚’้ฃฒใพใ‚Œใพใ™ใ‹๏ผŸ\nใƒปใŠ้…’ใฏ้ฃฒใพใชใ„\nใƒปใŠ้…’ใ‚’้ฃฒใ‚€โ†’๏ผˆใŠ้…’ใฎ็จฎ้กžใƒป้‡ใƒป้ ปๅบฆใ‚’ๆ•™ใˆใฆใใ ใ•ใ„ใ€‚ไพ‹๏ผš๏ฟฝ๏ฟฝ๏ฟฝใƒ“ใƒผใƒซ2ๆœฌใ‚’ๆฏŽๆ—ฅ๏ผ‰'
189
+ elif status == DRINK:
190
+ status += 1
191
+ drink = user_message
192
+ message = f'็งใฏ็œ‹่ญทๅธซใงใ™ใ€‚็งใฏใ€ๆ‚ฃ่€…ๆง˜ใซใ€ŒใŠ้…’ใ‚’้ฃฒใพใ‚Œใพใ™ใ‹๏ผŸใŠ้…’ใฎ็จฎ้กžใƒป้‡ใƒป้ ปๅบฆใ‚’ๆ•™ใˆใฆใใ ใ•ใ„ใ€‚ใ€ใจ่ณชๅ•ใ—ใ€ๆ‚ฃ่€…ๆง˜ใฏ\nใ€Œ{drink}ใ€ใจๅ›ž็ญ”ใ—ใพใ—ใŸใ€‚ใ“ใ‚Œใฏ่ณชๅ•ใซๅฏพใ™ใ‚‹้ฉๅˆ‡ใชๅ›ž็ญ”ใงใ™ใ‹ใ€‚ใฏใ„ใ€ใ„ใ„ใˆใง็ญ”ใˆใฆใใ ใ•ใ„ใ€‚'
193
+ response = conversation.predict(input=message)
194
+ if 'ใฏใ„' in response:
195
+ history[-1][1] = 'ใ‚ฟใƒใ‚ณใ‚’ๅธใ‚ใ‚Œใพใ™ใ‹๏ผŸ\nใƒปใ‚ฟใƒใ‚ณใฏๅธใ‚ใชใ„\nใƒปใ‚ฟใƒใ‚ณใฏไปฅๅ‰ๅธใฃใฆใ„ใŸใŒใ‚„ใ‚ใŸใƒปใ‚ฟใƒใ‚ณใ‚’ๅธใ†โ†’๏ผˆไธ€ๆ—ฅไฝ•ๆœฌๅธใ„ใพใ™ใ‹๏ผŸ๏ผ‰'
196
+ else:
197
+ history[-1][1] = 'ๆฌกใฎ่ณชๅ•ใธใ†ใคใ‚Šใพใ™ใญใ€‚\nใ‚ฟใƒใ‚ณใ‚’ๅธใ‚ใ‚Œใพใ™ใ‹๏ผŸ\nใƒปใ‚ฟใƒใ‚ณใฏๅธใ‚ใชใ„\nใƒปใ‚ฟใƒใ‚ณใฏไปฅๅ‰ๅธใฃใฆใ„ใŸใŒใ‚„ใ‚ใŸใƒปใ‚ฟใƒใ‚ณใ‚’ๅธใ†โ†’๏ผˆไธ€ๆ—ฅไฝ•ๆœฌๅธใ„ใพใ™ใ‹๏ผŸ๏ผ‰'
198
+ elif status == SMOKE:
199
+ status += 1
200
+ smoke = user_message
201
+ message = f'็งใฏ็œ‹่ญทๅธซใงใ™ใ€‚็งใฏใ€ๆ‚ฃ่€…ๆง˜ใซใ€Œใ‚ฟใƒใ‚ณใ‚’ๅธใ‚ใ‚Œใพใ™ใ‹๏ผŸไธ€ๆ—ฅไฝ•ๆœฌๅธใ„ใพใ™ใ‹๏ผŸใ€ใจ่ณชๅ•ใ—ใ€ๆ‚ฃ่€…ๆง˜ใฏ\nใ€Œ{smoke}ใ€ใจๅ›ž็ญ”ใ—ใพใ—ใŸใ€‚ใ“ใ‚Œใฏ่ณชๅ•ใซๅฏพใ™ใ‚‹้ฉๅˆ‡ใชๅ›ž็ญ”ใงใ™ใ‹ใ€‚ใฏใ„ใ€ใ„ใ„ใˆใง็ญ”ใˆใฆใใ ใ•ใ„ใ€‚'
202
+ response = conversation.predict(input=message)
203
+ if 'ใฏใ„' in response:
204
+ history[-1][1] = '้‹ๅ‹•ใฏใ•ใ‚Œใพใ™ใ‹๏ผŸ\nใƒป้‹ๅ‹•ใฏใ—ใชใ„\nใƒป้‹ๅ‹•ใ‚’ใ™ใ‚‹โ†’๏ผˆใฉใ‚“ใช้‹ๅ‹•ใ‚’ใ•ใ‚Œใพใ™ใ‹๏ผŸ้ ปๅบฆใฏ๏ผŸ๏ผ‰'
205
+ else:
206
+ history[-1][1] = 'ๆฌกใฎ่ณชๅ•ใธใ†ใคใ‚Šใพใ™ใญใ€‚\n้‹ๅ‹•ใฏใ•ใ‚Œใพใ™ใ‹๏ผŸ\nใƒป้‹ๅ‹•ใฏใ—ใชใ„\nใƒป้‹ๅ‹•ใ‚’ใ™ใ‚‹โ†’๏ผˆใฉใ‚“ใช้‹ๅ‹•ใ‚’ใ•ใ‚Œใพใ™ใ‹๏ผŸ้ ปๅบฆใฏ๏ผŸ๏ผ‰'
207
+ elif status == SPORTS:
208
+ status += 1
209
+ sports = user_message
210
+ message = f'็งใฏ็œ‹่ญทๅธซใงใ™ใ€‚็งใฏใ€ๆ‚ฃ่€…ๆง˜ใซใ€Œ้‹ๅ‹•ใฏใ•ใ‚Œใพใ™ใ‹๏ผŸใฉใ‚“ใช้‹ๅ‹•ใ‚’ใ•ใ‚Œใพใ™ใ‹๏ผŸ้ ปๅบฆใฏ๏ผŸใ€ใจ่ณชๅ•ใ—ใ€ๆ‚ฃ่€…ๆง˜ใฏ\nใ€Œ{sports}ใ€ใจๅ›ž็ญ”ใ—ใพใ—ใŸใ€‚ใ“ใ‚Œใฏ่ณชๅ•ใซๅฏพใ™ใ‚‹้ฉๅˆ‡ใชๅ›ž็ญ”ใงใ™ใ‹ใ€‚ใฏใ„ใ€ใ„ใ„ใˆใง็ญ”ใˆใฆใใ ใ•ใ„ใ€‚'
211
+ response = conversation.predict(input=message)
212
+ if 'ใฏใ„' in response:
213
+ history[-1][1] = 'ๅคœใฏๅๅˆ†็ก็œ ใŒใจใ‚Œใฆใ„ใพใ™ใ‹๏ผŸ\nใƒป็ก็œ ใŒใจใ‚Œใฆใ„ใ‚‹\nใƒป็ก็œ ใŒใจใ‚Œใฆใ„ใชใ„โ†’๏ผˆใฉใ‚“ใชใ“ใจใงใŠๅ›ฐใ‚Šใงใ™ใ‹๏ผŸ๏ผ‰'
214
+ else:
215
+ history[-1][1] = 'ๆฌกใฎ่ณชๅ•ใธใ†ใคใ‚Šใพใ™ใญใ€‚\nๅคœใฏๅๅˆ†็ก็œ ใŒใจใ‚Œใฆใ„ใพใ™ใ‹๏ผŸ\nใƒป็ก็œ ใŒใจใ‚Œใฆใ„ใ‚‹\nใƒป็ก็œ ใŒใจใ‚Œใฆใ„ใชใ„โ†’๏ผˆใฉใ‚“ใชใ“ใจใงใŠๅ›ฐใ‚Šใงใ™ใ‹๏ผŸ๏ผ‰'
216
+ elif status == STRESS:
217
+ status += 1
218
+ stress = user_message
219
+ message = f'็งใฏ็œ‹่ญทๅธซใงใ™ใ€‚ไปฅไธ‹ใ‚’ใพใจใ‚ใ€ใพใจใ‚ใŸๆ–‡็ซ ใ ใ‘ใ‚’่จ˜่ผ‰ใ—ใฆใใ ใ•ใ„ใ€‚{family}ใ€{job}ใ€{drink}ใ€{smoke}ใ€{sports}ใ€{stress}ใ€{etc}ใ€‚'
220
+ response = conversation.predict(input=message)
221
+ history[-1][1] = f'{response}\nๆœ€ๅพŒใซไฝ•ใ‹ๅŒปๅธซใซใŠไผใˆใ•ใ‚ŒใŸใ„ใ“ใจใ€ใŠ่žใใซใชใ‚ŠใŸใ„ใ“ใจใฏใ‚ใ‚Šใพใ™ใ‹ใ€‚'
222
+ elif status == ETC:
223
+ etc = user_message
224
+ message = f'็งใฏ็œ‹่ญทๅธซใงใ™ใ€‚ไปฅไธ‹ใ‚’ใพใจใ‚ใ€็ฎ‡ๆกๆ›ธใใง่จ˜่ผ‰ใ—ใฆใใ ใ•ใ„ใ€‚{shoujou}ใ€{bui}ใ€{hosoku}ใ€{when}ใ€{relevance}ใ€{kiou}ใ€{fukuyaku}ใ€{allergy}ใ€{family}ใ€{job}ใ€{drink}ใ€{smoke}ใ€{sports}ใ€{stress}ใ€{etc}ใ€‚'
225
+ history[-1][1] = conversation.predict(input=message)
226
+ message = f'็งใฏ็œ‹่ญทๅธซใงใ™ใ€‚ไปฅไธ‹ใ‚’ใพใจใ‚ใ€็ฎ‡ๆกๆ›ธใใง่จ˜่ผ‰ใ—ใฆใใ ใ•ใ„ใ€‚็—‡็Šถ๏ผš{shoujou}ใ€้ƒจไฝ๏ผš{bui}ใ€่ฃœ่ถณ๏ผš{hosoku}ใ€ใ„ใคใ‹ใ‚‰๏ผš{when}ใ€ใ„ใคใ‚‚ใจ้•ใ†๏ผš{relevance}ใ€ๆ—ขๅพ€็—‡๏ผš{kiou}ใ€ๆœ่–ฌ๏ผš{fukuyaku}ใ€ใ‚ขใƒฌใƒซใ‚ฎใƒผ๏ผš{allergy}ใ€ๅฎถๆ—ๆญด๏ผš{family}ใ€่ทๆญด๏ผš{job}ใ€้ฃฒ้…’๏ผš{drink}ใ€ๅ–ซ็…™๏ผš{smoke}ใ€้‹ๅ‹•๏ผš{sports}ใ€ใ‚นใƒˆใƒฌใ‚น๏ผš{stress}ใ€ใใฎไป–๏ผš{etc}ใ€‚'
227
+ result = conversation.predict(input=message)
228
+
229
+ return history, status, suggest, shoujou, bui, hosoku, when, how, relevance, kiou, fukuyaku, allergy, family, job, drink, smoke, sports, stress, etc, result
230
+
231
+ def init_firstmsg():
232
+ history = [[None, 'ๅŒปๅธซใซ็—‡็Šถใ‚’ไผใˆใ‚‹ใจใใซๅฝน็ซ‹ใคๅˆ่จบๅ•่จบใ‚’ใ‚นใ‚ฟใƒผใƒˆใ—ใพใ™ใญ๏ผ']]
233
+ history += [[None, 'ไปŠๆ—ฅใฏใฉใ‚“ใช็—‡็ŠถใงใŠๅ›ฐใ‚Šใงใ™ใ‹๏ผŸ']]
234
+ history += [[None, 'ใ„ใคใ‹ใ‚‰ใ€ใฉใ‚“ใชใ€ใฉใฎใใ‚‰ใ„ใฎ็—‡็ŠถใŒใ‚ใ‚‹ใงใ—ใ‚‡ใ†ใ‹ใ€‚ใพใŸใ€ใคใ‚‰ใ„ๅ ดๆ‰€ใชใฉใ‚‚ใŠไผใˆไธ‹ใ•ใ„ใ€‚']]
235
+ history += [[None, 'ใใ‚Œใงใฏ้Œฒ้Ÿณใƒœใ‚ฟใƒณใ‚’ๆŠผใ—ใฆใŠ่ฉฑใใ ใ•ใ„ใ€‚็ต‚ใ‚ใ‚Šใพใ—ใŸใ‚‰ใ‚‚ใ†ไธ€ๅบฆ้Œฒ้Ÿณใƒœใ‚ฟใƒณใ‚’ๆŠผใ—ใฆใใ ใ•ใ„ใ€‚']]
236
+
237
+ return history
238
+
239
+ START = 0
240
+ SYOUJOU = 1
241
+ BUI = 2
242
+ HOSOKU = 3
243
+ WHEN = 4
244
+ HOW = 5
245
+ RELEVANCE = 6
246
+ KIOU = 7
247
+ FUKUYAKU = 8
248
+ ALLERGY = 9
249
+ FAMILY = 10
250
+ JOB = 11
251
+ DRINK = 12
252
+ SMOKE = 13
253
+ SPORTS = 14
254
+ STRESS = 15
255
+ ETC = 16
256
+
257
+ # ใƒ•ใƒญใƒณใƒˆใ‚จใƒณใƒ‰
258
+ with gr.Blocks() as demo:
259
+ with gr.Column(scale=0.6):
260
+ # ใ‚ณใƒณใƒใƒผใƒใƒณใƒˆ
261
+ firstmsg = gr.Chatbot()
262
+ audio = gr.inputs.Audio(source="microphone", type="filepath")
263
+ chatbot = gr.Chatbot()
264
+ msg = gr.Textbox(show_label = False)
265
+ gr.Markdown('---')
266
+ suggest = gr.Textbox(label = 'ๅ€™่ฃœ', interactive = False, value = '็—‡็Šถใ“ใจใฐใฎๅ€™่ฃœใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚')
267
+ status = gr.Number(value = START, visible = False)
268
+ shoujou = gr.Textbox(visible = False)
269
+ bui = gr.Textbox(visible = False)
270
+ hosoku = gr.Textbox(visible = False)
271
+ when = gr.Textbox(visible = False)
272
+ how = gr.Textbox(visible = False)
273
+ relevance = gr.Textbox(visible = False)
274
+ kiou = gr.Textbox(visible = False)
275
+ fukuyaku = gr.Textbox(visible = False)
276
+ allergy = gr.Textbox(visible = False)
277
+ family = gr.Textbox(visible = False)
278
+ job = gr.Textbox(visible = False)
279
+ drink = gr.Textbox(visible = False)
280
+ smoke = gr.Textbox(visible = False)
281
+ sports = gr.Textbox(visible = False)
282
+ stress = gr.Textbox(visible = False)
283
+ etc = gr.Textbox(visible = False)
284
+ result = gr.Textbox(label = 'ใพใจใ‚', interactive = False)
285
+
286
+ demo.load(init_firstmsg, None, firstmsg, queue=False)
287
+
288
+ audio.change(speechRecognitionModel, inputs=[audio, chatbot, shoujou, bui, when, how, status], outputs=[chatbot, shoujou, bui, when, how, status])
289
+ # audio.change(chat, [chatbot, status, suggest, shoujou, bui, hosoku, when, how, relevance, kiou, fukuyaku, allergy, family, job, drink, smoke, sports, stress, etc, result], [chatbot, status, suggest, shoujou, bui, hosoku, when, how, relevance, kiou, fukuyaku, allergy, family, job, drink, smoke, sports, stress, etc, result])
290
+
291
+ # demo.load(init_chatbot, None, chatbot, queue=False)
292
+
293
+ msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
294
+ chat, [chatbot, status, suggest, shoujou, bui, hosoku, when, how, relevance, kiou, fukuyaku, allergy, family, job, drink, smoke, sports, stress, etc, result],
295
+ [chatbot, status, suggest, shoujou, bui, hosoku, when, how, relevance, kiou, fukuyaku, allergy, family, job, drink, smoke, sports, stress, etc, result]
296
+ )
297
+
298
+ if __name__ == "__main__":
299
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ langchain==0.0.125
2
+ openai==0.27.2
3
+ chromadb==0.3.14
4
+ pypdf==3.7.0
5
+ tiktoken==0.3.3
6
+ gradio
7
+ requests
8
+ gtts
9
+ pydub
10
+
11
+ transformers==4.24.0
12
+ torch==1.11.0
13
+ gradio==3.9.1
14
+ sentencepiece==0.1.97
15
+ fugashi==1.2.0
16
+ unidic-lite==1.0.8