brignt commited on
Commit
89b4563
ยท
verified ยท
1 Parent(s): 5d1455b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -23
app.py CHANGED
@@ -57,11 +57,35 @@ SOCRATIC_PROMPT = """\
57
 
58
  ADVICE_PROMPT = """\
59
  ๋‹น์‹ ์€ ์ •์‹ ์˜ํ•™๊ณผ ์ „๋ฌธ์˜์ด๋ฉฐ Socratic CBT ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ์‹ฌ๋ฆฌ์ƒ๋‹ด ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.
60
- ์•„๋ž˜ ํžŒํŠธ(๋Œ€ํ™” ์š”์•ฝ)๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ, ์‚ฌ์šฉ์ž ๋งž์ถคํ˜•์œผ๋กœ ๊ตฌ์ฒด์ ์ด๊ณ  ๊ณต๊ฐ ์–ด๋ฆฐ ์กฐ์–ธ์„ ํ•œ๊ตญ์–ด๋กœ ์ž‘์„ฑํ•˜์„ธ์š”.
61
 
62
- - ๋ถˆ์•ˆ์„ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ CBT ๊ธฐ๋ฒ•(์ธ์ง€ ์žฌ๊ตฌ์กฐํ™”, ์ ์ง„์  ๊ทผ์œก ์ด์™„, ํ˜ธํก์กฐ์ ˆ, ๊ฑฑ์ • ์‹œ๊ฐ„ ์ •ํ•˜๊ธฐ ๋“ฑ)์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋…น์ด๋˜
63
- ์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ ์ƒํ™ฉ๊ณผ ์—ฐ๊ฒฐํ•ด ์ด์•ผ๊ธฐํ•ด์ฃผ์„ธ์š”.
64
- - ๋„ˆ๋ฌด ๋”ฑ๋”ฑํ•˜์ง€ ์•Š๊ฒŒ ๋ถ€๋“œ๋Ÿฝ๊ณ  ์นœ์ ˆํ•œ ๋งํˆฌ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
 
66
  ํžŒํŠธ:
67
  {hints}
@@ -164,37 +188,35 @@ def predict(user_input: str, state: dict):
164
 
165
  # ============== 4) Gradio UI ==============
166
  def gradio_predict(user_input, chat_state):
167
- """Gradio callback"""
168
  new_history, new_state = predict(user_input, chat_state)
169
 
170
- # Gradio Chatbot expects list of [user, bot] pairs
171
  display_history = []
172
  for (role, txt) in new_history:
173
  if role == "User":
174
- display_history.append([txt, ""]) # user in left
175
  else:
176
- if len(display_history)==0:
177
  display_history.append(["", txt])
178
  else:
179
- display_history[-1][1] = txt # bot in right
180
 
181
- return display_history, new_state
 
182
 
183
  def create_app():
184
  with gr.Blocks() as demo:
185
- gr.Markdown("## ๋‹ค์ค‘ํ„ด ์†Œํฌ๋ผํ…Œ์Šค CBT ์ฑ—๋ด‡")
186
-
187
- chatbot = gr.Chatbot(label="CBT Chatbot")
188
- chat_state = gr.State({
189
- "history": [],
190
- "stage":"EMPATHY",
191
- "turn":0,
192
- "hints":[]
193
- })
194
- txt = gr.Textbox(show_label=False, placeholder="๋ญ๋“  ๋ฌผ์–ด๋ณด์„ธ์š”")
195
-
196
- # submit
197
- txt.submit(fn=gradio_predict, inputs=[txt, chat_state], outputs=[chatbot, chat_state])
198
  return demo
199
 
200
  app = create_app()
 
57
 
58
  ADVICE_PROMPT = """\
59
  ๋‹น์‹ ์€ ์ •์‹ ์˜ํ•™๊ณผ ์ „๋ฌธ์˜์ด๋ฉฐ Socratic CBT ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ์‹ฌ๋ฆฌ์ƒ๋‹ด ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.
 
60
 
61
+ ์•„๋ž˜ ํžŒํŠธ(๋Œ€ํ™” ์š”์•ฝ)์™€ ํ•จ๊ป˜, ๋‹ค์Œ์— ์ œ์‹œ๋œ 5๊ฐ€์ง€ CBT ๊ธฐ๋ฒ•์„ ์ ์ ˆํžˆ ์ฐธ๊ณ ํ•˜์—ฌ,
62
+ ์‚ฌ์šฉ์ž ๋งž์ถคํ˜•์œผ๋กœ ๊ตฌ์ฒด์ ์ด๊ณ  ๊ณต๊ฐ ์–ด๋ฆฐ ์กฐ์–ธ์„ ํ•œ๊ตญ์–ด๋กœ ์ž‘์„ฑํ•˜์„ธ์š”:
63
+
64
+ (1) ์ˆ˜๋ฉด ์ œํ•œ ์š”๋ฒ• (Sleep Restriction):
65
+ "์ˆ˜๋ฉด ์ œํ•œ ์š”๋ฒ•์€ ์นจ๋Œ€์— ๋จธ๋ฌด๋Š” ์‹œ๊ฐ„์„ ์˜๋„์ ์œผ๋กœ ์ค„์—ฌ, ์นจ๋Œ€์™€ ์ˆ˜๋ฉด ์‚ฌ์ด์˜ ์˜ฌ๋ฐ”๋ฅธ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ๋ฅผ ์žฌ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
66
+ ์˜ˆ๋ฅผ ๋“ค์–ด, ์นจ๋Œ€์— 10์‹œ๊ฐ„ ๋จธ๋ฌผ์ง€๋งŒ ์‹ค์ œ ์ˆ˜๋ฉด ์‹œ๊ฐ„์ด 5์‹œ๊ฐ„์ธ ๊ฒฝ์šฐ, ์ฒ˜์Œ์—๋Š” 5์‹œ๊ฐ„๋งŒ ์นจ๋Œ€์—์„œ ์ž๊ณ  ์ ์ฐจ ์‹œ๊ฐ„์„ ๋Š˜๋ ค๊ฐ€๋ฉฐ
67
+ '์นจ๋Œ€๋Š” ์ˆ˜๋ฉด์„ ์œ„ํ•œ ์žฅ์†Œ'๋กœ ์ธ์‹ํ•˜๋„๋ก ๋•์Šต๋‹ˆ๋‹ค."
68
+
69
+ (2) ์ž๊ทน ์กฐ์ ˆ ์š”๋ฒ• (Stimulus Control):
70
+ "์ž๊ทน ์กฐ์ ˆ ์š”๋ฒ•์€ ์นจ๋Œ€์™€ ์ˆ˜๋ฉด์˜ ํ™˜๊ฒฝ์„ ์žฌ์ •๋ฆฝํ•˜๋ฉฐ, ์นจ๋Œ€๋ฅผ ์˜ค์ง ์ˆ˜๋ฉด๋งŒ์„ ์œ„ํ•œ ์žฅ์†Œ๋กœ ์ธ์‹ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์น˜๋ฃŒ๋ฒ•์ž…๋‹ˆ๋‹ค.
71
+ ์˜ˆ๋ฅผ ๋“ค์–ด, ์นจ๋Œ€์— ๋ˆ„์›Œ ์žˆ์„ ๋•Œ๋Š” ์ฆ‰์‹œ ์ž ๋“ค์ง€ ๋ชปํ•˜๋”๋ผ๋„, ์นจ๋Œ€์—์„œ๋Š” ์˜ค์ง ์ˆ˜๋ฉด์„ ์ทจํ•˜๋Š” ์Šต๊ด€์„ ๊ธฐ๋ฅด๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค."
72
+
73
+ (3) ์ˆ˜๋ฉด ์œ„์ƒ ๊ต์œก (Sleep Hygiene):
74
+ "์ˆ˜๋ฉด ์œ„์ƒ ๊ต์œก์€ ๊ฑด๊ฐ•ํ•œ ์ˆ˜๋ฉด์„ ์œ„ํ•ด ์ƒํ™œ ์Šต๊ด€์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
75
+ ์นดํŽ˜์ธ ์„ญ์ทจ๋ฅผ ์ค„์ด๊ฑฐ๋‚˜ ๋Šฆ์€ ์‹œ๊ฐ„์˜ ์ „์ž๊ธฐ๊ธฐ ์‚ฌ์šฉยท๋ฐ์€ ์กฐ๋ช… ๋“ฑ์„ ํ”ผํ•˜๊ณ , ๋‚ฎ์—๋Š” ๊ฐ€๋ฒผ์šด ์šด๋™์„ ํ•ด๋‘๋Š” ๋“ฑ์˜ ์Šต๊ด€์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค."
76
+
77
+ (4) ์ด์™„ ๊ธฐ๋ฒ• (Relaxation Techniques):
78
+ "์ด์™„ ๊ธฐ๋ฒ•์€ ์‹ฌํ˜ธํก, ์ ์ง„์  ๊ทผ์œก์ด์™„, ๋ช…์ƒ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ์ž์—ฐ์Šค๋Ÿฌ์šด ์ˆ˜๋ฉด์„ ์œ ๋„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
79
+ ๋ชธ์„ ์Šค์บ”ํ•˜๊ณ , ๊ฑฐ๋ถํ•œ ์ŠคํŠธ๋ ˆ์นญ์„ ํ’€๊ณ , ๊ทผ์œก ์ด์™„์„ ์—ฐ์Šตํ•˜๋ฉฐ ๊ธด์žฅ์„ ๋‚ฎ์ถ”๋Š” ๊ฒƒ์ด ์ฃผ๋œ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค."
80
+
81
+ (5) ์ธ์ง€ ์žฌ๊ตฌ์„ฑ (Cognitive Restructuring):
82
+ "์ธ์ง€ ์žฌ๊ตฌ์„ฑ์€ โ€˜์šฐ๋ฆฌ๊ฐ€ ์ƒํ™ฉ์„ ์–ด๋–ป๊ฒŒ ๋ฐ”๋ผ๋ณด๋А๋ƒ์— ๋”ฐ๋ผ ๋ชธ์˜ ๋ฐ˜์‘๋„ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹คโ€™๋Š” ๊ธ์ •์  ๊ด€์ ์œผ๋กœ ์ „ํ™˜์‹œํ‚ค๋ฉฐ,
83
+ ๊ฑฑ์ •์ด๋‚˜ ๋ถˆ์•ˆ, ๋ถ€์ •์ ์ธ ์‚ฌ๊ณ  ํŒจํ„ด์„ ์ ๊ฒ€ยท์กฐ์ ˆํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ๊ฑฑ์ •์„ ์™„ํ™”ํ•˜๊ณ 
84
+ ์ž๊ธฐํšจ๋Šฅ๊ฐ์„ ๋†’์ด๋„๋ก ๋•์Šต๋‹ˆ๋‹ค."
85
+
86
+ ์•„๋ž˜ ์‚ฌํ•ญ์„ ๊ผญ ๋ฐ˜์˜ํ•ด ์ฃผ์„ธ์š”:
87
+ - ๋ถˆ์•ˆ์„ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์œ„ ๊ธฐ๋ฒ•๋“ค์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋…น์ด๋˜, ์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ ์ƒํ™ฉ(ํžŒํŠธ์— ๋‹ด๊ธด ๊ณ ๋ฏผ)๊ณผ ์—ฐ๊ฒฐํ•ด ์ด์•ผ๊ธฐํ•˜์„ธ์š”.
88
+ - ๋„ˆ๋ฌด ๋”ฑ๋”ฑํ•˜์ง€ ์•Š๊ฒŒ, ๋ถ€๋“œ๋Ÿฝ๊ณ  ์นœ์ ˆํ•œ ๋งํˆฌ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
89
 
90
  ํžŒํŠธ:
91
  {hints}
 
188
 
189
  # ============== 4) Gradio UI ==============
190
  def gradio_predict(user_input, chat_state):
 
191
  new_history, new_state = predict(user_input, chat_state)
192
 
193
+ # display_history: list of [์‚ฌ์šฉ์ž๋ฌธ์ž์—ด, ์ฑ—๋ด‡๋ฌธ์ž์—ด]
194
  display_history = []
195
  for (role, txt) in new_history:
196
  if role == "User":
197
+ display_history.append([txt, ""])
198
  else:
199
+ if len(display_history) == 0:
200
  display_history.append(["", txt])
201
  else:
202
+ display_history[-1][1] = txt
203
 
204
+ # ์„ธ ๋ฒˆ์งธ ๊ฐ’์œผ๋กœ "" ๋ฐ˜ํ™˜ํ•˜๋ฉด, textbox๊ฐ€ ์ž๋™์œผ๋กœ ๋น„์›Œ์ง
205
+ return display_history, new_state, ""
206
 
207
  def create_app():
208
  with gr.Blocks() as demo:
209
+ chatbot = gr.Chatbot()
210
+ chat_state = gr.State({"history": [], "stage": "EMPATHY", "turn": 0, "hints": []})
211
+ txt = gr.Textbox(show_label=False, placeholder="๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”")
212
+
213
+ # outputs์— txt๋ฅผ ์ถ”๊ฐ€ + ์ฝœ๋ฐฑ์—์„œ ์„ธ ๋ฒˆ์งธ ๊ฐ’์„ ""๋กœ ๋ฆฌํ„ด
214
+ txt.submit(
215
+ fn=gradio_predict,
216
+ inputs=[txt, chat_state],
217
+ outputs=[chatbot, chat_state, txt]
218
+ )
219
+
 
 
220
  return demo
221
 
222
  app = create_app()