File size: 2,114 Bytes
6ddd4f9
ea3c1f8
7e35420
 
 
 
 
 
 
 
 
 
 
 
 
5dd3265
 
 
 
 
 
7e35420
 
 
 
 
 
 
 
5dd3265
 
 
 
 
7e35420
 
 
 
 
 
 
 
 
 
 
5dd3265
 
 
 
 
 
 
ea3c1f8
6ddd4f9
5dd3265
 
 
 
 
 
 
 
 
 
 
f810d4e
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
# app.py
import gradio as gr
from emotion_predictor import analyze_dialogue

INTRO = """\
감정 흐름 예츑 + κΈ‰λ³€ 탐지 + κ°ˆλ“± 유발자 μΆ”μ • 데λͺ¨
μž…λ ₯ ν˜•μ‹: μ€„λ§ˆλ‹€ "ν™”μž:λ¬Έμž₯"
예)
A: λ„ˆ μ™œ 또 λŠ¦μ—ˆμ–΄?
B: λ―Έμ•ˆν•΄, μ°¨κ°€ λ§‰ν˜”μ–΄.
A: λ³€λͺ…ν•˜μ§€ 마.
B: λ„ˆ μ§„μ§œ μ™œ 이래?
"""

def run_pipeline(text, alpha, z, steps):
    report, img_b64, struct = analyze_dialogue(
        text,
        smooth_alpha=alpha,
        z_thresh=z,
        forecast_steps=steps
    )
    img_md = f"![plot](data:image/png;base64,{img_b64})" if img_b64 else ""
    return report, img_md, str(struct)

with gr.Blocks() as demo:
    gr.Markdown("# λŒ€ν™” 감정 λΆ„μ„Β·μ˜ˆμΈ‘Β·κ°ˆλ“± νŒλ‹¨")
    gr.Markdown(INTRO)

    with gr.Row():
        text = gr.Textbox(
            label="λŒ€ν™” μž…λ ₯",
            lines=12,
            value="A: λ„ˆ μ™œ 또 λŠ¦μ—ˆμ–΄?\nB: λ―Έμ•ˆν•΄, μ°¨κ°€ λ§‰ν˜”μ–΄.\nA: λ³€λͺ…ν•˜μ§€ 마.\nB: λ„ˆ μ§„μ§œ μ™œ 이래?"
        )
        with gr.Column():
            alpha = gr.Slider(0.1, 0.9, value=0.4, step=0.05, label="EMA Ξ±(μŠ€λ¬΄λ”© 강도)")
            z = gr.Slider(1.0, 3.0, value=1.8, step=0.1, label="κΈ‰λ³€ Z μž„κ³„κ°’")
            steps = gr.Slider(1, 6, value=3, step=1, label="예츑 ν„΄ 수")

    btn = gr.Button("뢄석 μ‹€ν–‰")

    report = gr.Textbox(label="리포트", lines=18)
    img = gr.Markdown()
    struct = gr.Textbox(label="디버그/ꡬ쑰 데이터", lines=10)

    # REST λ…ΈμΆœμ„ μœ„ν•΄ api_name μœ μ§€
    btn.click(
        run_pipeline,
        inputs=[text, alpha, z, steps],
        outputs=[report, img, struct],
        api_name="predict"
    )

if __name__ == "__main__":
    # Gradio 버전 차이λ₯Ό ν‘μˆ˜ν•˜λŠ” queue() 호좜
    try:
        # gradio>=4 계열
        demo.queue(default_concurrency_limit=1, max_size=128)
    except TypeError:
        try:
            # 일뢀 3.x 계열
            demo.queue(concurrency_count=1, max_size=128)
        except TypeError:
            # 더 ꡬ버전: 인자 없이
            demo.queue()
    demo.launch(server_name="0.0.0.0", server_port=7860, show_error=True)