MaryHouse / app.py
bnvsyjy's picture
Create app.py
47b57c9 verified
raw
history blame
4.86 kB
import os
from openai import OpenAI
import time
import subprocess
gpt_api_key = os.environ['OPENAI_API_KEY']
sys_prompt = os.environ['SYSTEM_PROMPT']
client = OpenAI(api_key=gpt_api_key)
model_name = "ft:gpt-3.5-turbo-1106:personal::8oksosTP"
###ํ•จ์ˆ˜
#์–ด์‹œ์Šคํ„ดํŠธ ์‘๋‹ต ์ƒ์„ฑ ํ•จ์ˆ˜
def assistant_choice(assistantid,text):
# assistant retrieve ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
assistant = client.beta.assistants.retrieve(assistantid)
# message thread ๋งŒ๋“ค๊ธฐ
thread = client.beta.threads.create()
# message ์ถ”๊ฐ€ํ•˜๊ธฐ
message = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content=text,
)
# ์‹คํ–‰ํ•˜๊ธฐ
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id,
)
# ๊ธฐ๋‹ค๋ฆฌ๊ธฐ
print("run์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.")
while True:
if run.status == "completed":
break
run = client.beta.threads.runs.retrieve(thread_id=thread.id, run_id=run.id)
# print(run)
# print("์‹คํ–‰ ์ค‘...")
time.sleep(5)
# ๊ฒฐ๊ณผ ์ถœ๋ ฅํ•˜๊ธฐ
messages = client.beta.threads.messages.list(thread_id=thread.id)
gpt_answer = messages.data[0].content[0].text.value
return gpt_answer
#gpt์‘๋‹ต ์ƒ์„ฑ ํ•จ์ˆ˜
def fine_function_gpt(state, state_chatbot, text):
if text=="":
return state, state_chatbot, state_chatbot
messages = state + [{'role': 'user','content': text}]
res =client.chat.completions.create(
model=model_name,
messages=messages,
temperature=0.6,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
msg = res.choices[0].message.content
print(msg)
if msg == "์ปคํŠผ ๊ตฌ๋งค์˜ต์…˜":
msg = assistant_choice("asst_ni23TayvHjxOarAxVTDODm91",text)
elif msg == "๋ธ”๋ผ์ธ๋“œ ๊ตฌ๋งค์˜ต์…˜":
msg = assistant_choice("asst_qc85Yh4LjKqWMxlDakHcXsFs",text)
new_state = [{'role': 'user','content': text},
{'role': 'assistant','content': msg}]
state = state + new_state # ๋‚ด๋ถ€์ ์œผ๋กœ ๊ธฐ๋Šฅ
state_chatbot = state_chatbot + [(text, msg)] # ํ™”๋ฉด์— ๋ณด์ด๋Š” ๊ธฐ๋Šฅ
print(state)
return state, state_chatbot, state_chatbot
#์ƒ๋‹ด ์‹œ์ž‘ ๋ฒ„ํŠผ
def start_def(m):
if m == []:
return [],[],[("์ƒ๋‹ด์„ ์ง„ํ–‰ํ•  ์ œํ’ˆ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”!","")]
else:
text=f"{m} ๋ฌธ์˜๋“œ๋ฆฝ๋‹ˆ๋‹ค."
message = [{'role': 'system','content': sys_prompt},
{'role': 'user','content': text},
{'role': 'assistant','content': "์•ˆ๋…•ํ•˜์„ธ์š” ๊ณ ๊ฐ๋‹˜~ ๋ฌด์—‡์„ ๋„์™€๋“œ๋ฆด๊นŒ์š”?"} ]
state_chatbot = [("...", "์•ˆ๋…•ํ•˜์„ธ์š”. ๊ณ ๊ฐ๋‹˜! ๋ฌด์—‡์„ ๋„์™€๋“œ๋ฆด๊นŒ์š”?")] # ํŠœํ”Œ
return message,state_chatbot,state_chatbot
with gr.Blocks(theme='JohnSmith9982/small_and_pretty') as demo:
state = gr.State([]) #gpt ํ˜ธ์ถœ ์‹œ ์‚ฌ์šฉํ•˜๋Š” message
state_chatbot = gr.State([]) #gr.chatbot์˜ ์ƒํƒœ๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ์ฑ„ํŒ…๊ธฐ๋ก
with gr.Row():
gr.HTML("""<div style="text-align: center; max-width: 550px; margin: 0 auto;">
<div>
<p style="font-size: 40px; font-weight: bold;">๋งˆ๋ฆฌํ•˜์šฐ์Šค ์ฑ—๋ด‡</p>
</div>
</div>""")
with gr.Row():
with gr.Column(scale=6):
md = gr.Dropdown(["์ปคํŠผ","๋ธ”๋ผ์ธ๋“œ"],type="value",label="์ œํ’ˆ ์„ ํƒ", info="์›ํ•˜๋Š” ์ƒ๋‹ด ์ œํ’ˆ์„ ๊ณจ๋ผ์ฃผ์„ธ์š”!")
with gr.Column(scale=4):
gr.HTML("""<div style="text-align: center;">
<div>
<p style="font-size: 15px; font-weight: bold;">ํ™•์ธ</p>
</div>
</div>""")
start_btn = gr.Button("์‹œ์ž‘ํ•˜๊ธฐ")
with gr.Column(scale=1):
gr.HTML("""<div style="text-align: center;">
<div>
<p style="font-size: 15px; font-weight: bold;">๋‹คํฌ๋ชจ๋“œ ์ „ํ™˜</p>
</div>
</div>""")
toggle_dark = gr.Button(value="Toggle Dark")
toggle_dark.click(None,
js="""() => {
document.body.classList.toggle('dark');
document.querySelector('gradio-container').style.backgroundColor = 'var(--color-background-primary)'
}
"""
)
with gr.Row():
with gr.Column(scale=1):
chatbot = gr.Chatbot(elem_id='๋ฉ”์„ธ์ง€์ฐฝ',height=650)
txt = gr.Textbox(show_label=False,placeholder='๋ฉ”์„ธ์ง€๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”!')
txt_btn = gr.Button("๋ฉ”์„ธ์ง€ ๋ณด๋‚ด๊ธฐ")
txt_btn.click(fine_function_gpt, [state, state_chatbot, txt], [state, state_chatbot, chatbot])
txt_btn.click(lambda: '', None, txt)
txt.submit(fine_function_gpt, [state, state_chatbot, txt], [state, state_chatbot, chatbot]) # ํ…์ŠคํŠธ ๋ฐ•์Šค์—์„œ enter์‹œ ์ „์†ก
txt.submit(lambda: '', None, txt)
start_btn.click(start_def, inputs= [md], outputs = [state, state_chatbot, chatbot])
demo.launch(debug=True)