cksleigen commited on
Commit
7362847
ยท
verified ยท
1 Parent(s): aa6beeb

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +123 -0
app.py ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from code import (
3
+ parse_speaker_text,
4
+ analyze_all_speakers,
5
+ stream_response
6
+ )
7
+ from config import model, tokenizer, label_mapping
8
+
9
+ def generate_scenario(api_key, conversation_data, scenario_str):
10
+ """๋Œ€ํ™” ๋ฐ์ดํ„ฐ์™€ ์‹œ๋‚˜๋ฆฌ์˜ค ์„ค๋ช…์„ ๋ฐ›์•„ ์™„์„ฑ๋œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜"""
11
+ try:
12
+ # ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
13
+ if not api_key.strip():
14
+ return "โŒ API ํ‚ค๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
15
+
16
+ if not conversation_data.strip():
17
+ return "โŒ ๋Œ€ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
18
+
19
+ if not scenario_str.strip():
20
+ return "โŒ ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒํ™ฉ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
21
+
22
+ # ํ™”์ž ๋”•์…”๋„ˆ๋ฆฌ ์ƒ์„ฑ
23
+ speaker_dict = parse_speaker_text(conversation_data)
24
+
25
+ if not speaker_dict:
26
+ return "โŒ ๋Œ€ํ™” ๋ฐ์ดํ„ฐ ํ˜•์‹์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. '๋ฒˆํ˜ธ: ๋ฐœํ™”๋‚ด์šฉ' ํ˜•์‹์œผ๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
27
+
28
+ # Big5 ๋ถ„์„
29
+ predicted_big5 = analyze_all_speakers(speaker_dict, model, tokenizer, label_mapping)
30
+
31
+ # ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒ์„ฑ ์š”์ฒญ ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑ
32
+ user_content = f"""
33
+ **๋ถ„์„ ๋ฐ์ดํ„ฐ:**
34
+ - ๋Œ€ํ™” ๋ฐ์ดํ„ฐ: {conversation_data}
35
+ - Big5 ์ ์ˆ˜: {predicted_big5}
36
+ - ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒํ™ฉ: {scenario_str}
37
+
38
+ **์š”์ฒญ ์‚ฌํ•ญ:**
39
+ ๋“ฑ์žฅ ์ธ๋ฌผ์˜ ์ด๋ฆ„์€ ์ž…๋ ฅํ•œ ๋Œ€ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ , ์ƒˆ๋กœ์šด ์ด๋ฆ„์„ ๋ถ€์—ฌํ•˜์ง€ ๋งˆ์„ธ์š”. ๊ฐ ๋“ฑ์žฅ ์ธ๋ฌผ์˜ Big5 ์ ์ˆ˜๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ฐ์ž์˜ ์„ฑ๊ฒฉ์ด ๊ทน๋ช…ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚˜๋„๋ก ํ•ด์ฃผ์„ธ์š”. ๋Œ€ํ™”์—์„œ ํŒŒ์•…ํ•œ ๋“ฑ์žฅ์ธ๋ฌผ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ๋ฐ˜์˜ํ•ด์ฃผ์„ธ์š”.
40
+ ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค ์•ˆ์—์„œ ์ด์•ผ๊ธฐ๋ฅผ ์™„๊ฒฐ์‹œ์ผœ ํ•œ scene์„ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ์œ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ 10-15ํ„ด์˜ ๋Œ€ํ™” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”:
41
+
42
+ ์”ฌ ์ œ๋ชฉ: [์ œ๋ชฉ]
43
+ - ์‹œ๊ฐ„: [์‹œ๊ฐ„]
44
+ - ์žฅ์†Œ: [์žฅ์†Œ]
45
+ - ๋“ฑ์žฅ์ธ๋ฌผ: [์ธ๋ฌผ๋“ค๊ณผ ์„ฑ๊ฒฉ ํŠน์ง•]
46
+
47
+ (์žฅ๋ฉด ์„ค๋ช…)
48
+ ์ธ๋ฌผ1: "๋Œ€์‚ฌ"
49
+ ์ธ๋ฌผ2: "๋Œ€์‚ฌ"
50
+ ...
51
+ """
52
+ # ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒ์„ฑ
53
+ generated_scenario = stream_response(user_content, api_key)
54
+ return generated_scenario
55
+
56
+ except Exception as e:
57
+ return f"โŒ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: {str(e)}"
58
+
59
+ # Gradio ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ (๋ชจ๋“  Flag ๊ด€๋ จ ํŒŒ๋ผ๋ฏธํ„ฐ ์ œ๊ฑฐ)
60
+ iface = gr.Interface(
61
+ fn=generate_scenario,
62
+ inputs=[
63
+ gr.Textbox(
64
+ label="๐Ÿ”‘ Anthropic API Key",
65
+ type="password",
66
+ placeholder="sk-ant-api03-..."
67
+ ),
68
+ gr.Textbox(
69
+ label="๐Ÿ’ฌ Conversation Data",
70
+ lines=10,
71
+ placeholder="""๋Œ€ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์ž…๋ ฅํ•˜์„ธ์š”:
72
+ 1: ์•ˆ๋…•ํ•˜์„ธ์š”, ์˜ค๋Š˜ ํšŒ์˜ ์ค€๋น„๋Š” ์ž˜ ๋˜์…จ๋‚˜์š”?
73
+ 2: ๋„ค, ๊ฑฐ์˜ ๋‹ค ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์ด ์กฐ๊ธˆ ๊ฑฑ์ •์ด๋„ค์š”.
74
+ 1: ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•จ๊ป˜ ๊ฒ€ํ† ํ•ด๋ณด์ฃ .""",
75
+ value = """1 : ์–ผ๋งˆ ์ „์— ๋™๋„ค ํ”ผ๋ถ€ ๋ฏธ์šฉ์ƒต์— ๋‹ค๋…€์™”์–ด์š”! ์—ฌ๊ธฐ ์ข‹๋”๋ผ๊ณ ์š”!
76
+ 2 : ๋™๋„ค์—ย ๊ทธ๋Ÿฐย ๊ณณ์ดย ์žˆ์–ด์š”?
77
+ 3 : ์•„ ๊ทธ ์‚ฌ๊ฑฐ๋ฆฌ์— ์žˆ๋Š” ๊ฑฐ ๋งž์ฃ ?
78
+ 1 : ๋„ค ๋งž์•„์š”! ํ™•์‹คํžˆ ๊ฐœ์ธ ๋ฏธ์šฉ์ƒต์ด๋‹ค ๋ณด๋‹ˆ๊นŒ ์‚ฌ๋žŒ๋„ ๋ณ„๋กœ ์—†๊ณ  ํ”ผ๋ถ€๋ž‘ ๋ˆˆ์น์ด๋ž‘ ์ •๋ง ๊ผผ๊ผผํžˆ ๋ด์ฃผ์…จ์–ด์š”
79
+ 2 : ์š”์ƒˆย ํ”ผ๋ถ€ย ๊ด€๋ฆฌ๋ฅผย ์ •๋งย ๋ชปํ–ˆ๋Š”๋ฐย ์ €๋„ย ํ•œย ๋ฒˆย ๊ฐ€๋ด์•ผ๊ฒ ์–ด์š”
80
+ 3 : ์˜ค์˜ค ๋ˆˆ์น! ์ „ ํ™”์žฅํ•  ๋•Œ ๋ˆˆ์น์„ ์ œ์ผ ์ค‘์š”ํ•˜๊ฒŒ ์—ฌ๊ธฐ๋Š”๋ฐ ์›๋ž˜ ์ œ ๋ˆˆ์น์„ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค๋”๋ผ๊ณ ์š”
81
+ 1 : ์Œ~ ๊ทธ๋Ÿผ ๊ฑฐ๊ธฐ ๊ฐ€๋ณด์„ธ์š”!
82
+ 1 : ๋ˆˆ์น ๋ฌธ์‹ ๋„ ํ•˜์‹œ๋”๋ผ๊ณ ์š”
83
+ 2 : ์ •๋งย ํ•œย ๋ฒˆย ๊ฐ€๋ณผ๊ฒŒ์š”!ย ์•Œ๋ ค์ค˜์„œย ๊ฐ์‚ฌํ•ด์š” ํ•˜ํ•˜
84
+ 3 : ์•„ ํ˜น์‹œ ์Œ์ปคํ’€ ์ˆ˜์ˆ  ํ•˜์‹  ๋ถ„ ๊ณ„์„ธ์š”?
85
+ 1 : ์ €๋Š” ์ž์—ฐ์ด์š”!
86
+ 1 : ์™œ์š” ์™œ์š” ๊ด€์‹ฌ ์žˆ์–ด์š”?
87
+ 2 : ์˜ค~ย ์Œ์ปคํ’€ย ์ˆ˜์ˆ ย ํ•˜๊ณ ย ์‹ถ์–ด์š”?
88
+ 3 : ํ•˜ํ•˜ ๊ทธ๊ฑด ์•„๋‹ˆ๊ณ , ์ œ๊ฐ€ ์†๋ˆˆ์น์ด ๋ง๋ ค์„œ ์ž๋ผ์„œ ์•ˆ๊ณผ ์„ ์ƒ๋‹˜๊ป˜์„œ ๊ถŒํ•˜์‹œ๋”๋ผ๊ณ ์š”
89
+ 1 : ์•„~ ์†๋ˆˆ์น ๋ง๋ ค ์ž๋ผ๋Š” ๋ถ„ ๊ฝค ์žˆ๋”๋ผ๊ณ ์š”
90
+ 2 : ์˜ค์˜คย ๊ทธ๋Ÿผย ์ˆ˜์ˆ ํ•˜๋Š”ย ๊ฑฐ์—์š”?
91
+ 3 : ์‚ฌ์‹ค ์ „ ์•„์ง ์ƒ๊ฐ ์—†์–ด์š” ํ‚คํ‚ค
92
+ 3 : ์†์Œ์ปคํ’€์ด ์žˆ์–ด์„œ ์‚ด ๋นผ๋ฉด ๊ฒ‰์Œ์ปคํ’€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์—„๋งˆ๋„ ๋ฐ˜๋Œ€ํ•˜์…จ์–ด์š”
93
+ 1 : ๊ทธ๋ž˜์š”! ์‚ฌ์‹ค ๋‹ค์ด์–ดํŠธ๊ฐ€ ์ตœ๊ณ ์˜ ์„ฑํ˜•์ด๋ผ์ž–์•„์š”
94
+ 2 : ์•„!ย ์ œย ์นœ๊ตฌ๊ฐ€ย ์ด๋ฒˆ์—ย ํ•„๋Ÿฌ๋ฅผย ๋งž์•˜๋Š”๋ฐย ์กฐ๊ธˆย ๋ถ€์ž์—ฐ์Šค๋Ÿฝ๋”๋ผ๊ณ ์š”
95
+ 3 : ์ €ํฌ ์—„๋งˆ๋„ ํ•œ ๋ฒˆ์ฏค์€ ๋ณดํ†ก์Šค๋‚˜ ํ•„๋Ÿฌ ๋งž์•„๋ณด๊ณ  ์‹ถ๋‹ค๊ณ  ํ•˜์…จ๋Š”๋ฐ...
96
+ 1 : ์ €๋„ ํ›„๊ธฐ ๋งŽ์ด ๋“ค์—ˆ๋Š”๋ฐ ์ดˆ๋ฐ˜์—๋Š” ๋ถ€์ž์—ฐ์Šค๋Ÿฌ์›Œ๋„ ์ ์  ๋ถ“๊ธฐ ๋น ์ง€๋ฉด ๋งŒ์กฑ์Šค๋Ÿฌ์›Œ ํ•˜๋˜๋ฐ์š”
97
+ 2 : ๊ทธ๋ž˜์„œย ํ•œย ๋ฒˆย ๋งž์œผ๋ฉดย ๊ณ„์†ย ๋งž๊ฒŒย ๋œ๋‹ค๊ณ ย ํ•˜๋‚˜๋ด์š”
98
+ 3 : ํ‚คํ‚ค ๊ทธ๋Ÿฐ๊ฐ€ ๋ด์š”!
99
+ 3 : ๋‚˜์ค‘์— ๋ˆ ๋งŽ์ด ๋ฒŒ๋ฉด ๊ณผ๋„ํ•˜์ง€ ์•Š์€ ์„ ์—์„œ ๋ช‡ ๋ฒˆ ๋งž์ถฐ๋“œ๋ฆด๊นŒ ์ƒ๊ฐ ์ค‘์ด์—์š”
100
+ 1 : ํ•˜ํ•˜ ์ข‹์€ ์ƒ๊ฐ์ด์—์š”!
101
+ 1 : ์š”์ƒˆ ์ด๋Ÿฐ ๊ฑด ํ”ํ•œ ์‹œ์ˆ ์ด๋‹ˆ๊นŒ!
102
+ 2 : ๋งž์•„์š”!ย ์ Š์€ย ์นœ๊ตฌ๋“ค๋„ย ์ •๋งย ๋งŽ์ดย ํ•˜๋”๋ผ๊ณ ์š”
103
+ 3 : ์Œ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™์•„์š”!
104
+ 3 : ์ œ ์นœ๊ตฌ๋“ค ์ค‘์—์„œ๋„ ํ•„๋Ÿฌ ๋งž์€ ์นœ๊ตฌ๋“ค์ด ๊ฝค ์žˆ๊ฑฐ๋“ ์š”
105
+ """
106
+ ),
107
+ gr.Textbox(
108
+ label="๐ŸŽฌ Scenario Description",
109
+ lines=2,
110
+ placeholder="์˜ˆ: ํšŒ์˜ ์ง์ „์— ํŒ€์›๋“ค๋ผ๋ฆฌ์˜ ๊ฐˆ๋“ฑ ์ƒํ™ฉ",
111
+ value="ํŒ€ํ”Œ ๋งˆ๊ฐ ํ•˜๋ฃจ ์ „, ํ•œ ๋ช…์ด '๋‚˜ ์ด๋ฒˆ ์ฃผ ๋ฐ”๋นด์–ด'๋ผ๋ฉฐ ์ž๋ฃŒ๋ฅผ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๊ฐ€์ ธ์˜จ ์ƒํ™ฉ. ๊ฐ€์žฅ ์ฑ…์ž„๊ฐ์ด ๊ฐ•ํ•œ ์‚ฌ๋žŒ์ด ์ž๋ฃŒ๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ์•Š์€ ์‚ฌ๋žŒ์„ ํƒ“ํ•œ๋‹ค."
112
+ )
113
+ ],
114
+ outputs=gr.Textbox(label="๐Ÿ“„ Generated Scenario", lines=25),
115
+ title="๐Ÿ“ ์„ฑ๊ฒฉ ๊ธฐ๋ฐ˜ ๋Œ€ํ™” ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒ์„ฑ๊ธฐ",
116
+ description="๋Œ€ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Big5 ์„ฑ๊ฒฉ ๋ถ„์„ ํ›„, ์ฃผ์–ด์ง„ ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒํ™ฉ์— ๋งž๋Š” ์™„๊ฒฐ๋œ ์žฅ๋ฉด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.",
117
+ allow_flagging=False
118
+ )
119
+
120
+ if __name__ == "__main__":
121
+ print("๐Ÿš€ ์„ฑ๊ฒฉ ๊ธฐ๋ฐ˜ ๋Œ€ํ™” ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒ์„ฑ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค...")
122
+ print("๐Ÿ’ก Anthropic API ํ‚ค๋Š” https://console.anthropic.com์—์„œ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.")
123
+ iface.launch(share=True)