ScriptFromChat / app.py
cksleigen's picture
Update app.py
179ff39 verified
import gradio as gr
from code import (
parse_speaker_text,
analyze_all_speakers,
stream_response
)
from config import model, tokenizer, label_mapping
def generate_scenario(api_key, conversation_data, scenario_str):
"""๋Œ€ํ™” ๋ฐ์ดํ„ฐ์™€ ์‹œ๋‚˜๋ฆฌ์˜ค ์„ค๋ช…์„ ๋ฐ›์•„ ์™„์„ฑ๋œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜"""
try:
# ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
if not api_key.strip():
return "โŒ API ํ‚ค๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
if not conversation_data.strip():
return "โŒ ๋Œ€ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
if not scenario_str.strip():
return "โŒ ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒํ™ฉ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
# ํ™”์ž ๋”•์…”๋„ˆ๋ฆฌ ์ƒ์„ฑ
speaker_dict = parse_speaker_text(conversation_data)
if not speaker_dict:
return "โŒ ๋Œ€ํ™” ๋ฐ์ดํ„ฐ ํ˜•์‹์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. '๋ฒˆํ˜ธ: ๋ฐœํ™”๋‚ด์šฉ' ํ˜•์‹์œผ๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
# Big5 ๋ถ„์„
predicted_big5 = analyze_all_speakers(speaker_dict, model, tokenizer, label_mapping)
# ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒ์„ฑ ์š”์ฒญ ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑ
user_content = f"""
**๋ถ„์„ ๋ฐ์ดํ„ฐ:**
- ๋Œ€ํ™” ๋ฐ์ดํ„ฐ: {conversation_data}
- Big5 ์ ์ˆ˜: {predicted_big5}
- ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒํ™ฉ: {scenario_str}
**์š”์ฒญ ์‚ฌํ•ญ:**
๋“ฑ์žฅ ์ธ๋ฌผ์˜ ์ด๋ฆ„์€ ์ž…๋ ฅํ•œ ๋Œ€ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ , ์ƒˆ๋กœ์šด ์ด๋ฆ„์„ ๋ถ€์—ฌํ•˜์ง€ ๋งˆ์„ธ์š”. ๊ฐ ๋“ฑ์žฅ ์ธ๋ฌผ์˜ Big5 ์ ์ˆ˜๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ฐ์ž์˜ ์„ฑ๊ฒฉ์ด ๊ทน๋ช…ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚˜๋„๋ก ํ•ด์ฃผ์„ธ์š”. ๋Œ€ํ™”์—์„œ ํŒŒ์•…ํ•œ ๋“ฑ์žฅ์ธ๋ฌผ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ๋ฐ˜์˜ํ•ด์ฃผ์„ธ์š”.
ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค ์•ˆ์—์„œ ์ด์•ผ๊ธฐ๋ฅผ ์™„๊ฒฐ์‹œ์ผœ ํ•œ scene์„ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ์œ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ 10-15ํ„ด์˜ ๋Œ€ํ™” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”:
์”ฌ ์ œ๋ชฉ: [์ œ๋ชฉ]
- ์‹œ๊ฐ„: [์‹œ๊ฐ„]
- ์žฅ์†Œ: [์žฅ์†Œ]
- ๋“ฑ์žฅ์ธ๋ฌผ: [์ธ๋ฌผ๋“ค๊ณผ ์„ฑ๊ฒฉ ํŠน์ง•]
(์žฅ๋ฉด ์„ค๋ช…)
์ธ๋ฌผ1: "๋Œ€์‚ฌ"
์ธ๋ฌผ2: "๋Œ€์‚ฌ"
...
"""
# ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒ์„ฑ
generated_scenario = stream_response(user_content, api_key)
return generated_scenario
except Exception as e:
return f"โŒ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: {str(e)}"
# Gradio ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ (๋ชจ๋“  Flag ๊ด€๋ จ ํŒŒ๋ผ๋ฏธํ„ฐ ์ œ๊ฑฐ)
iface = gr.Interface(
fn=generate_scenario,
inputs=[
gr.Textbox(
label="๐Ÿ”‘ Anthropic API Key",
type="password",
placeholder="sk-ant-api03-..."
),
gr.Textbox(
label="๐Ÿ’ฌ Conversation Data",
lines=10,
placeholder="""๋Œ€ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์ž…๋ ฅํ•˜์„ธ์š”:
1: ์•ˆ๋…•ํ•˜์„ธ์š”, ์˜ค๋Š˜ ํšŒ์˜ ์ค€๋น„๋Š” ์ž˜ ๋˜์…จ๋‚˜์š”?
2: ๋„ค, ๊ฑฐ์˜ ๋‹ค ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์ด ์กฐ๊ธˆ ๊ฑฑ์ •์ด๋„ค์š”.
1: ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•จ๊ป˜ ๊ฒ€ํ† ํ•ด๋ณด์ฃ .""",
value = """1 : ์–ผ๋งˆ ์ „์— ๋™๋„ค ํ”ผ๋ถ€ ๋ฏธ์šฉ์ƒต์— ๋‹ค๋…€์™”์–ด์š”! ์—ฌ๊ธฐ ์ข‹๋”๋ผ๊ณ ์š”!
2 : ๋™๋„ค์—ย ๊ทธ๋Ÿฐย ๊ณณ์ดย ์žˆ์–ด์š”?
3 : ์•„ ๊ทธ ์‚ฌ๊ฑฐ๋ฆฌ์— ์žˆ๋Š” ๊ฑฐ ๋งž์ฃ ?
1 : ๋„ค ๋งž์•„์š”! ํ™•์‹คํžˆ ๊ฐœ์ธ ๋ฏธ์šฉ์ƒต์ด๋‹ค ๋ณด๋‹ˆ๊นŒ ์‚ฌ๋žŒ๋„ ๋ณ„๋กœ ์—†๊ณ  ํ”ผ๋ถ€๋ž‘ ๋ˆˆ์น์ด๋ž‘ ์ •๋ง ๊ผผ๊ผผํžˆ ๋ด์ฃผ์…จ์–ด์š”
2 : ์š”์ƒˆย ํ”ผ๋ถ€ย ๊ด€๋ฆฌ๋ฅผย ์ •๋งย ๋ชปํ–ˆ๋Š”๋ฐย ์ €๋„ย ํ•œย ๋ฒˆย ๊ฐ€๋ด์•ผ๊ฒ ์–ด์š”
3 : ์˜ค์˜ค ๋ˆˆ์น! ์ „ ํ™”์žฅํ•  ๋•Œ ๋ˆˆ์น์„ ์ œ์ผ ์ค‘์š”ํ•˜๊ฒŒ ์—ฌ๊ธฐ๋Š”๋ฐ ์›๋ž˜ ์ œ ๋ˆˆ์น์„ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค๋”๋ผ๊ณ ์š”
1 : ์Œ~ ๊ทธ๋Ÿผ ๊ฑฐ๊ธฐ ๊ฐ€๋ณด์„ธ์š”!
1 : ๋ˆˆ์น ๋ฌธ์‹ ๋„ ํ•˜์‹œ๋”๋ผ๊ณ ์š”
2 : ์ •๋งย ํ•œย ๋ฒˆย ๊ฐ€๋ณผ๊ฒŒ์š”!ย ์•Œ๋ ค์ค˜์„œย ๊ฐ์‚ฌํ•ด์š” ํ•˜ํ•˜
3 : ์•„ ํ˜น์‹œ ์Œ์ปคํ’€ ์ˆ˜์ˆ  ํ•˜์‹  ๋ถ„ ๊ณ„์„ธ์š”?
1 : ์ €๋Š” ์ž์—ฐ์ด์š”!
1 : ์™œ์š” ์™œ์š” ๊ด€์‹ฌ ์žˆ์–ด์š”?
2 : ์˜ค~ย ์Œ์ปคํ’€ย ์ˆ˜์ˆ ย ํ•˜๊ณ ย ์‹ถ์–ด์š”?
3 : ํ•˜ํ•˜ ๊ทธ๊ฑด ์•„๋‹ˆ๊ณ , ์ œ๊ฐ€ ์†๋ˆˆ์น์ด ๋ง๋ ค์„œ ์ž๋ผ์„œ ์•ˆ๊ณผ ์„ ์ƒ๋‹˜๊ป˜์„œ ๊ถŒํ•˜์‹œ๋”๋ผ๊ณ ์š”
1 : ์•„~ ์†๋ˆˆ์น ๋ง๋ ค ์ž๋ผ๋Š” ๋ถ„ ๊ฝค ์žˆ๋”๋ผ๊ณ ์š”
2 : ์˜ค์˜คย ๊ทธ๋Ÿผย ์ˆ˜์ˆ ํ•˜๋Š”ย ๊ฑฐ์—์š”?
3 : ์‚ฌ์‹ค ์ „ ์•„์ง ์ƒ๊ฐ ์—†์–ด์š” ํ‚คํ‚ค
3 : ์†์Œ์ปคํ’€์ด ์žˆ์–ด์„œ ์‚ด ๋นผ๋ฉด ๊ฒ‰์Œ์ปคํ’€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์—„๋งˆ๋„ ๋ฐ˜๋Œ€ํ•˜์…จ์–ด์š”
1 : ๊ทธ๋ž˜์š”! ์‚ฌ์‹ค ๋‹ค์ด์–ดํŠธ๊ฐ€ ์ตœ๊ณ ์˜ ์„ฑํ˜•์ด๋ผ์ž–์•„์š”
2 : ์•„!ย ์ œย ์นœ๊ตฌ๊ฐ€ย ์ด๋ฒˆ์—ย ํ•„๋Ÿฌ๋ฅผย ๋งž์•˜๋Š”๋ฐย ์กฐ๊ธˆย ๋ถ€์ž์—ฐ์Šค๋Ÿฝ๋”๋ผ๊ณ ์š”
3 : ์ €ํฌ ์—„๋งˆ๋„ ํ•œ ๋ฒˆ์ฏค์€ ๋ณดํ†ก์Šค๋‚˜ ํ•„๋Ÿฌ ๋งž์•„๋ณด๊ณ  ์‹ถ๋‹ค๊ณ  ํ•˜์…จ๋Š”๋ฐ...
1 : ์ €๋„ ํ›„๊ธฐ ๋งŽ์ด ๋“ค์—ˆ๋Š”๋ฐ ์ดˆ๋ฐ˜์—๋Š” ๋ถ€์ž์—ฐ์Šค๋Ÿฌ์›Œ๋„ ์ ์  ๋ถ“๊ธฐ ๋น ์ง€๋ฉด ๋งŒ์กฑ์Šค๋Ÿฌ์›Œ ํ•˜๋˜๋ฐ์š”
2 : ๊ทธ๋ž˜์„œย ํ•œย ๋ฒˆย ๋งž์œผ๋ฉดย ๊ณ„์†ย ๋งž๊ฒŒย ๋œ๋‹ค๊ณ ย ํ•˜๋‚˜๋ด์š”
3 : ํ‚คํ‚ค ๊ทธ๋Ÿฐ๊ฐ€ ๋ด์š”!
3 : ๋‚˜์ค‘์— ๋ˆ ๋งŽ์ด ๋ฒŒ๋ฉด ๊ณผ๋„ํ•˜์ง€ ์•Š์€ ์„ ์—์„œ ๋ช‡ ๋ฒˆ ๋งž์ถฐ๋“œ๋ฆด๊นŒ ์ƒ๊ฐ ์ค‘์ด์—์š”
1 : ํ•˜ํ•˜ ์ข‹์€ ์ƒ๊ฐ์ด์—์š”!
1 : ์š”์ƒˆ ์ด๋Ÿฐ ๊ฑด ํ”ํ•œ ์‹œ์ˆ ์ด๋‹ˆ๊นŒ!
2 : ๋งž์•„์š”!ย ์ Š์€ย ์นœ๊ตฌ๋“ค๋„ย ์ •๋งย ๋งŽ์ดย ํ•˜๋”๋ผ๊ณ ์š”
3 : ์Œ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™์•„์š”!
3 : ์ œ ์นœ๊ตฌ๋“ค ์ค‘์—์„œ๋„ ํ•„๋Ÿฌ ๋งž์€ ์นœ๊ตฌ๋“ค์ด ๊ฝค ์žˆ๊ฑฐ๋“ ์š”
"""
),
gr.Textbox(
label="๐ŸŽฌ Scenario Description",
lines=2,
placeholder="์˜ˆ: ํšŒ์˜ ์ง์ „์— ํŒ€์›๋“ค๋ผ๋ฆฌ์˜ ๊ฐˆ๋“ฑ ์ƒํ™ฉ",
value="ํŒ€ํ”Œ ๋งˆ๊ฐ ํ•˜๋ฃจ ์ „, ํ•œ ๋ช…์ด '๋‚˜ ์ด๋ฒˆ ์ฃผ ๋ฐ”๋นด์–ด'๋ผ๋ฉฐ ์ž๋ฃŒ๋ฅผ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๊ฐ€์ ธ์˜จ ์ƒํ™ฉ. ๊ฐ€์žฅ ์ฑ…์ž„๊ฐ์ด ๊ฐ•ํ•œ ์‚ฌ๋žŒ์ด ์ž๋ฃŒ๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ์•Š์€ ์‚ฌ๋žŒ์„ ํƒ“ํ•œ๋‹ค."
)
],
outputs=gr.Textbox(label="๐Ÿ“„ Generated Scenario", lines=25),
title="๐Ÿ“ ์„ฑ๊ฒฉ ๊ธฐ๋ฐ˜ ๋Œ€ํ™” ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒ์„ฑ๊ธฐ",
description="๋Œ€ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Big5 ์„ฑ๊ฒฉ ๋ถ„์„ ํ›„, ์ฃผ์–ด์ง„ ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒํ™ฉ์— ๋งž๋Š” ์™„๊ฒฐ๋œ ์žฅ๋ฉด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.",
flagging_mode="never"
)
if __name__ == "__main__":
print("๐Ÿš€ ์„ฑ๊ฒฉ ๊ธฐ๋ฐ˜ ๋Œ€ํ™” ์‹œ๋‚˜๋ฆฌ์˜ค ์ƒ์„ฑ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค...")
print("๐Ÿ’ก Anthropic API ํ‚ค๋Š” https://console.anthropic.com์—์„œ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.")
iface.launch(share=True)