imgtest2 / app.py
seawolf2357's picture
Update app.py
a8c6d92 verified
raw
history blame
3.17 kB
import gradio as gr
import requests
import json
API_URL = "https://api.openai.com/v1/chat/completions"
# ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ ํ•จ์ˆ˜
def predict(inputs, top_p, temperature, openai_api_key):
narration_prompt = f"์•„๋™์šฉ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋™์˜์ƒ์— ์‚ฌ์šฉํ•  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ผ. ๋ฐ˜๋“œ์‹œ ํ•œ๊ธ€๋กœ ์ž‘์„ฑํ• ๊ฒƒ. ์ผ์ฒด์˜ ์ง€๋ฌธ์ด๋‚˜ ์ง€์‹œ, ๋ฐฐ๊ฒฝ ์„ค๋ช… ๋“ฑ์„ ๋…ธ์ถœ ํ•˜๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•˜์ง€ ๋ง๊ณ  ๊ธฐ์Šน์ „๊ฒฐ์˜ ๊ตฌ์กฐ๋กœ ๋ชจํ—˜์˜ ์ด์œ /์œ„๊ธฐ/๋„์ „/๋ฌธ์ œํ•ด๊ฒฐ/๊ตํ›ˆ์„ ํฌํ•จํ•˜์—ฌ ์ˆœ์ˆ˜ํ•œ ๋‚˜๋ ˆ์ด์…˜๋งŒ 1์ค„์”ฉ ์ถœ๋ ฅํ•˜์—ฌ ์ตœ๋Œ€ 10์ค„ ์ด๋‚ด๋กœ ์ถœ๋ ฅ. ์ž…๋ ฅ: '{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,
"max_tokens": 1000
}
response = requests.post(API_URL, headers=headers, json=payload)
if response.status_code == 200:
response_data = response.json()
generated_text = response_data['choices'][0]['message']['content']
return generated_text.split('\n') # ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ค„ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฐ˜ํ™˜
else:
return ["Error: Unable to generate response."]
# ์ด๋ฏธ์ง€ ์ƒ์„ฑ ํ•จ์ˆ˜
def generate_image(script_line, model_name="models/goofyai/3d_render_style_xl"):
# ์ด ํ•จ์ˆ˜ ๋‚ด์—์„œ๋Š” ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
# ์˜ˆ์‹œ๋กœ๋Š” gr.Interface.load ๋˜๋Š” gr.load๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.
# ์‹ค์ œ ๊ตฌํ˜„ ์‹œ์—๋Š” API ํ˜ธ์ถœ ๋˜๋Š” Gradio์˜ ์™ธ๋ถ€ ๋ชจ๋ธ ๋กœ๋”ฉ ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ์ ์ ˆํžˆ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
pass # ์—ฌ๊ธฐ์— ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ฝ”๋“œ ๊ตฌํ˜„
with gr.Blocks() as demo:
gr.Markdown("<h1 align='center'>ํ† ๋ฆฌ์˜ ๋ชจํ—˜: 3D ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ƒ์„ฑ๊ธฐ</h1>")
with gr.Row():
openai_api_key = gr.Textbox(type='password', label="Enter your OpenAI API key here")
inputs = gr.Textbox(placeholder="์—ฌ๊ธฐ์— ์ž…๋ ฅํ•˜์„ธ์š”.", label="์•„๋™์šฉ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์€ ์ฃผ์ œ์–ด๋‚˜ ๋ฌธ์žฅ์„ ์ž…๋ ฅํ•˜์„ธ์š”.")
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")
output = gr.Textbox(label="Generated Script", readonly=True)
image_output = gr.Gallery(label="Generated Images") # ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•  ๊ฐค๋Ÿฌ๋ฆฌ
submit_button = gr.Button("Generate")
def process_and_generate_images(inputs, top_p, temperature, openai_api_key):
scripts = predict(inputs, top_p, temperature, openai_api_key)
images = [generate_image(script) for script in scripts] # ๊ฐ ์Šคํฌ๋ฆฝํŠธ ์ค„์— ๋Œ€ํ•œ ์ด๋ฏธ์ง€ ์ƒ์„ฑ
return scripts, images # ์Šคํฌ๋ฆฝํŠธ์™€ ์ด๋ฏธ์ง€ URL ๋ฐ˜ํ™˜
submit_button.click(fn=process_and_generate_images, inputs=[inputs, top_p, temperature, openai_api_key], outputs=[output, image_output])
demo.launch()