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"동영상에 사용할 전문적인 나레이션을 작성하라. 반드시 한글로 작성할것. 일체의 지문이나 지시, 배경 설명 등을 노출 하거나 출력하지 말고 순수한 나레이션만 2줄씩 3개를 묶어서 1문단을 구성하고, 최대 30줄 이내로 출력할것. 제목은 의문형으로 흥미를 자극하는 내용으로 할것(예시 '신화속 삼손의 힘은 머리카락에서 나왔을까?'). 제목은 '메인키워드'와 '연관성'의 랜덤 조합 결과로 할것. 내용은 제목을 기반으로 하되, '연관성'을 반영하여 기승전결의 구조로 4개의 문단으로 작성할것. '메인키워드'와 '연관성'간의 상관 관계를 찾아서 그 이유를 논리적으로 설명하는 서사를 작성할것. '연관성'은 '신화, 역사, 과학, 경제, 사회, 미용, 문학, 영화, 음악, 미술, 전쟁, 유머, 속담, 명언'으로 구성하여 각각의 관련 '예시'를 반드시 들어보일것. 입력: '{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": 4000
}
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
else:
return "Error: Unable to generate response."
with gr.Blocks() as demo:
gr.Markdown("
'혜자 스크립트' Premium
")
with gr.Row():
openai_api_key = gr.Textbox(type='password', label="Enter your OpenAI API key here")
inputs = gr.Textbox(placeholder="여기에 입력하세요.", label="나레이션 스크립트를 생성하고 싶은 주제어나 문장, 지시문, URL(예시 참조)을 입력하세요.")
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)
submit_button = gr.Button("Generate")
submit_button.click(fn=predict, inputs=[inputs, top_p, temperature, openai_api_key], outputs=output)
examples = gr.Examples(examples=[
["상품 설명:새로 출시된 '토리' 립밤은 FDA 승인, 최고의 보습력, 구매지수 1위"],
["브랜딩: '토리'립밤은 20대 여성에게 어필할 브랜딩이 필요해"],
["광고: 설날 부모님과 친지 선물은 법성포 보리굴비 '법성굴비'가 최고랍니다."],
["정보 공유: 비타민C 과다 복용은 건강에 오히려 해롭다."],
["홍보: 'OpenAI'는 '챗GPT'의 맞춤 GPT '스토어'를 오픈하였다."],
["인사: '애플 법인'의 고객과 임직원을 위한 진취적인 2024년 신년 인사"],
["https://aitechtree.wordpress.com/2023/11/24/state-department-harnesses-ai-potential-unleashing-real-time-insights-and-leading-ethical-adoption-worldwide/ 이 url의 post를 기반으로 하라"],
["https://www.amazon.com/Cuckoo-CRP-RT0609FB-Pressure-Scorched-Options/dp/B087H24T6G?ref_=Oct_DLandingS_D_d34e1017_2&th=1/ 이 아마존 쇼핑 url의 상품정보를 기반으로 하라"],
["https://medium.com/@thakermadhav/build-your-own-rag-with-mistral-7b-and-langchain-97d0c92fa146/ 이 블로그 url의 post를 기반으로 하라"]
], inputs=[inputs], fn=predict, outputs=output)
demo.launch()