File size: 4,380 Bytes
c35600d
00bec19
 
c35600d
 
00bec19
8b1f0bb
b38c52a
0745d65
8b1f0bb
00bec19
 
 
 
 
8b1f0bb
b38c52a
 
 
 
 
 
 
 
00bec19
8b1f0bb
c35600d
7204704
00bec19
b38c52a
00bec19
 
8b1f0bb
00bec19
 
 
 
 
7204704
 
 
 
 
 
00bec19
 
7204704
 
00bec19
7204704
00bec19
 
 
 
 
 
 
c35600d
b38c52a
8b1f0bb
c35600d
 
 
00bec19
 
 
 
59a0a73
00bec19
8b1f0bb
00bec19
 
 
8b1f0bb
00bec19
c35600d
00bec19
 
c35600d
 
863e408
00bec19
 
 
 
 
 
 
 
 
 
 
 
 
 
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import gradio as gr
import os
import json
import requests

API_URL = "https://api.openai.com/v1/chat/completions"

def predict(inputs, top_p, temperature, openai_api_key, chat_counter, chatbot=[], history=[]):
    narration_prompt = f"๋™์˜์ƒ์— ์‚ฌ์šฉํ•  ์ „๋ฌธ์ ์ธ ๋‚˜๋ ˆ์ด์…˜์„ ์ž‘์„ฑํ•˜๋ผ. ๋ฐ˜๋“œ์‹œ ํ•œ๊ธ€๋กœ ์ž‘์„ฑํ• ๊ฒƒ. ์ผ์ฒด์˜ ์ง€๋ฌธ์ด๋‚˜ ์ง€์‹œ, ๋ฐฐ๊ฒฝ ์„ค๋ช… ๋“ฑ์„ ๋…ธ์ถœ ํ•˜๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•˜์ง€ ๋ง๊ณ  ์ˆœ์ˆ˜ํ•œ ๋‚˜๋ ˆ์ด์…˜๋งŒ 2์ค„์”ฉ ๋ฌถ์–ด์„œ ์ตœ๋Œ€ 8์ค„ ์ด๋‚ด๋กœ ์ถœ๋ ฅ๋ ฅ. ์ž…๋ ฅ: '{inputs}'"

    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {openai_api_key}"
    }

    payload = {
        "model": "gpt-4-1106-preview",
        "messages": [{"role": "system", "content": narration_prompt}],
        "temperature": temperature,
        "top_p": top_p,
        "n": 1,
        "stream": True,
        "presence_penalty": 0,
        "frequency_penalty": 0,
        "max_tokens": 1000
    }


    response = requests.post(API_URL, headers=headers, json=payload, stream=True)

    partial_words = ""
    token_counter = 0

    try:
        for chunk in response.iter_lines():
            if chunk:
                try:
                    chunk_text = chunk.decode()
                    # JSON ํ˜•์‹์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธ
                    if chunk_text.strip().startswith("{"):
                        chunk_data = json.loads(chunk_text)  # JSON ํŒŒ์‹ฑ
                        # ... ๋‚˜๋จธ์ง€ ์ฝ”๋“œ ...
                    else:
                        print("Unexpected format:", chunk_text)
                except json.JSONDecodeError as e:
                    print("JSON ํŒŒ์‹ฑ ์˜ค๋ฅ˜:", e)
                except Exception as e:
                    print("์‘๋‹ต ์ฒ˜๋ฆฌ ์˜ค๋ฅ˜:", e)
    except Exception as e:
        print("์ „์ฒด ์‘๋‹ต ์ฒ˜๋ฆฌ ์˜ค๋ฅ˜:", e)

    return chatbot, history, chat_counter

# ๋‚˜๋จธ์ง€ ์ฝ”๋“œ ๋ถ€๋ถ„ (์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ, ์˜ˆ์‹œ ์ถ”๊ฐ€ ๋“ฑ)์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

# ์ฝ”๋“œ ์‹คํ–‰ ๋ถ€๋ถ„
# ์˜ˆ: demo.launch() ๋“ฑ



def reset_textbox():
    return gr.update(value='')

title = """<h1 align='center'>ํ˜œ์ž ์Šคํฌ๋ฆฝํŠธ</h1>"""
description = "์˜์ƒ ์ƒ์„ฑ์„ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ AI๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์ œ ํ‚ค์›Œ๋“œ๋‚˜ ๋ชฉ์  ๋“ฑ ํ•„์š”ํ•œ ๋‚ด์šฉ๋งŒ ๊ฐ„๋‹จํžˆ ์ž…๋ ฅํ•˜์„ธ์š”."

with gr.Blocks(css="#col_container {width: 1000px; margin-left: auto; margin-right: auto;} #chatbot {height: 520px; overflow: auto;}") as demo:
    gr.HTML(title)
    with gr.Column(elem_id="col_container"):
        openai_api_key = gr.Textbox(type='password', label="Enter your OpenAI API key here")
        chatbot = gr.Chatbot(elem_id='chatbot')
        inputs = gr.Textbox(placeholder="์—ฌ๊ธฐ์— ์ž…๋ ฅํ•˜์„ธ์š”.", label="๋‚˜๋ ˆ์ด์…˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์€ ์ฃผ์ œ์–ด๋‚˜ ๋ฌธ์žฅ์„ ์ž…๋ ฅํ•˜์„ธ์š”.")
        state = gr.State([])
        b1 = gr.Button()

        with gr.Accordion("Parameters", open=False):
            top_p = gr.Slider(minimum=0, maximum=1.0, value=1.0, step=0.05, label="Top-p (nucleus sampling)")
            temperature = gr.Slider(minimum=0, maximum=5.0, value=1.0, step=0.1, label="Temperature")
            chat_counter = gr.Number(value=0, visible=False, precision=0)

        examples = gr.Examples(examples=[
            ["์ƒํ’ˆ ์„ค๋ช…:์ƒˆ๋กœ ์ถœ์‹œ๋œ 'ํ† ๋ฆฌ' ๋ฆฝ๋ฐค์€ FDA ์Šน์ธ, ์ตœ๊ณ ์˜ ๋ณด์Šต๋ ฅ, ๊ตฌ๋งค์ง€์ˆ˜ 1์œ„"],
            ["๋ธŒ๋žœ๋”ฉ: 'ํ† ๋ฆฌ'๋ฆฝ๋ฐค์€ 20๋Œ€ ์—ฌ์„ฑ์—๊ฒŒ ์–ดํ•„ํ•  ๋ธŒ๋žœ๋”ฉ์ด ํ•„์š”ํ•ด"],
            ["๊ด‘๊ณ : ์„ค๋‚  ๋ถ€๋ชจ๋‹˜๊ณผ ์นœ์ง€ ์„ ๋ฌผ์€ ๋ฒ•์„ฑํฌ ๋ณด๋ฆฌ๊ตด๋น„ '๋ฒ•์„ฑ๊ตด๋น„'๊ฐ€ ์ตœ๊ณ ๋ž๋‹ˆ๋‹ค."],
            ["์ •๋ณด ๊ณต์œ : ๋น„ํƒ€๋ฏผC ๊ณผ๋‹ค ๋ณต์šฉ์€ ๊ฑด๊ฐ•์— ์˜คํžˆ๋ ค ํ•ด๋กญ๋‹ค."],
            ["ํ™๋ณด: 'OpenAI'๋Š” '์ฑ—GPT'์˜ ๋งž์ถค GPT '์Šคํ† ์–ด'๋ฅผ ์˜คํ”ˆํ•˜์˜€๋‹ค."],
            ["์ธ์‚ฌ: '์• ํ”Œ ๋ฒ•์ธ'์˜ ๊ณ ๊ฐ๊ณผ ์ž„์ง์›์„ ์œ„ํ•œ ์ง„์ทจ์ ์ธ 2024๋…„ ์‹ ๋…„ ์ธ์‚ฌ"]
        ], inputs=[inputs], fn=predict, outputs=[chatbot, state, chat_counter])

        inputs.submit(predict, [inputs, top_p, temperature, openai_api_key, chat_counter, chatbot, state], [chatbot, state, chat_counter])
        b1.click(predict, [inputs, top_p, temperature, openai_api_key, chat_counter, chatbot, state], [chatbot, state, chat_counter])
        b1.click(reset_textbox, [], [inputs])
        inputs.submit(reset_textbox, [], [inputs])

    demo.launch(debug=True)