File size: 2,751 Bytes
56c0ae0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97a16e9
467f517
97a16e9
56c0ae0
a003bf6
56c0ae0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
67
68
69
import subprocess

# ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ ๋ฐ ์—…๋ฐ์ดํŠธ
subprocess.run(["pip", "install", "--upgrade", "pip"])
subprocess.run(["pip", "install", "--upgrade", "openai", "yfinance", "gradio", "matplotlib", "Pillow"])

import os
import matplotlib.font_manager as fm
import matplotlib.pyplot as plt
import yfinance as yf
import numpy as np
import re  # ํ•œ๊ธ€, ์ˆซ์ž, ๊ธฐํ˜ธ๋ฅผ ๋‚จ๊ธฐ๊ธฐ ์œ„ํ•œ ์ •๊ทœ ํ‘œํ˜„์‹์— ์‚ฌ์šฉ
import gradio as gr
import io
from PIL import Image
from datetime import datetime, timedelta
from openai import OpenAI

# ... (์ค‘๊ฐ„ ์ฝ”๋“œ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€)

# Gradio ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ (3์—ด ๋ ˆ์ด์•„์›ƒ)
with gr.Blocks() as demo:
    gr.Markdown("## ์ฃผ๊ฐ€ ๊ทธ๋ž˜ํ”„์™€ ๋‰ด์Šค ์š”์•ฝ")

    # CSS๋กœ 3์—ด ๋‰ด์Šค ์š”์•ฝ ํƒ€์ดํ‹€์ด ๋‹ฌ๋ฆฐ ํšŒ์ƒ‰ ๋„ค๋ชจ ์นธ ์ƒ์„ฑ
    demo.css("#news_output_box { background-color: #f0f0f0; padding: 20px; }")

    with gr.Row():
        with gr.Column():  # ์ž…๋ ฅ๊ฐ’์„ ๋‹ด์„ ์ฒซ ๋ฒˆ์งธ ์—ด
            input_value = gr.Textbox(label="์ข…๋ชฉ๋ช… ๋˜๋Š” ํ‹ฐ์ปค ์ž…๋ ฅ", placeholder="์˜ˆ: SK๋ฐ”์ด์˜คํŒœ, AAPL")
            change_type = gr.Dropdown(choices=["์ƒ์Šน", "ํ•˜๋ฝ"], label="์ƒ์Šน ๋˜๋Š” ํ•˜๋ฝ ์„ ํƒ", value="์ƒ์Šน")
            percent_change = gr.Textbox(label="๋ณ€๋™ ํผ์„ผํŠธ (%)", placeholder="์˜ˆ: 10", value="10")

            submit_btn = gr.Button("Submit")

            # ์˜ˆ์ œ (์ด์ „ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ๋ณต์›)
            examples = [["SK๋ฐ”์ด์˜คํŒœ"],
                        ["๋‚˜์Šค๋‹ฅ ์‹œ์ด 1์œ„"],
                        ["๋‚˜์Šค๋‹ฅ ํ—ฌ์Šค์ผ€์–ด ์‹œ์ด 1์œ„"],
                        ["๋‚˜์Šค๋‹ฅ ๋ฐ”์ด์˜คํ… ์‹œ์ด 1์œ„"],
                        ["์ฝ”์Šคํ”ผ ์‹œ์ด 1์œ„"],
                        ["์ฝ”์Šค๋‹ฅ ์‹œ์ด 1์œ„"]]
            gr.Examples(examples=examples, inputs=[input_value])

        with gr.Column():  # ๊ทธ๋ž˜ํ”„๋ฅผ ์ถœ๋ ฅํ•  ๋‘ ๋ฒˆ์งธ ์—ด
            plot = gr.Image(label="์ฃผ๊ฐ€ ๊ทธ๋ž˜ํ”„")
            date_dropdown = gr.Dropdown(label="์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ๋‚ ์งœ ์„ ํƒ", choices=[])

        with gr.Column():  # ๋‰ด์Šค ์š”์•ฝ์„ ์ถœ๋ ฅํ•  ์„ธ ๋ฒˆ์งธ ์—ด
            # news_output์„ gr.Markdown์œผ๋กœ ๋ณ€๊ฒฝ, ๋นˆ ์นธ์„ ํšŒ์ƒ‰ ๋ฐฐ๊ฒฝ์œผ๋กœ ์„ค์ •
            news_output = gr.Markdown(label="๋‰ด์Šค ์š”์•ฝ", value="", elem_id="news_output_box")

    # Submit ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๊ทธ๋ž˜ํ”„ ๋ฐ ๋‚ ์งœ ๋“œ๋กญ๋‹ค์šด ์—…๋ฐ์ดํŠธ
    submit_btn.click(
        fn=display_stock_with_highlight,
        inputs=[input_value, change_type, percent_change],
        outputs=[plot, date_dropdown]
    )

    # ๋‚ ์งœ ์„ ํƒ ์‹œ ๋‰ด์Šค ์š”์•ฝ ์—…๋ฐ์ดํŠธ
    date_dropdown.change(
        fn=update_news,
        inputs=[input_value, date_dropdown],
        outputs=[news_output]
    )

# Gradio ์‹คํ–‰
demo.launch()