LLMpromt / app.py
Kims12's picture
Update app.py
3b0e559 verified
raw
history blame contribute delete
No virus
5.39 kB
import gradio as gr
import random
import os
import pandas as pd
from huggingface_hub import InferenceClient
# ๋ชจ๋ธ์„ ํ•˜๋“œ์ฝ”๋”ฉ์œผ๋กœ ์„ค์ •
HARD_CODED_MODEL = "CohereForAI/c4ai-command-r-plus"
def create_client(model_name):
return InferenceClient(model_name, token=os.getenv("HF_TOKEN"))
def call_api(model_input, system_message, max_tokens, temperature, top_p):
client = create_client(HARD_CODED_MODEL)
messages = [
{"role": "system", "content": system_message},
{"role": "user", "content": model_input}
]
random_seed = random.randint(0, 1000000)
response = client.chat_completion(
messages=messages,
max_tokens=max_tokens,
temperature=temperature,
top_p=top_p,
seed=random_seed
)
return response.choices[0].message.content
# ๊ธ์ •๋ฆฌ๋ทฐ ๋ถ„์„์„ ์œ„ํ•œ LLM ํ˜ธ์ถœ
def analyze_positive_reviews(positive_reviews, positive_prompt, max_tokens, temperature, top_p):
return call_api(positive_reviews, positive_prompt, max_tokens, temperature, top_p)
# ๋ถ€์ •๋ฆฌ๋ทฐ ๋ถ„์„์„ ์œ„ํ•œ LLM ํ˜ธ์ถœ
def analyze_negative_reviews(negative_reviews, negative_prompt, max_tokens, temperature, top_p):
return call_api(negative_reviews, negative_prompt, max_tokens, temperature, top_p)
# ์—‘์…€ ํŒŒ์ผ ์ฒ˜๋ฆฌ ๋ฐ ๊ธ์ •/๋ถ€์ • ๋ฆฌ๋ทฐ ์ถ”์ถœ
def process_excel(file):
if file is not None:
# ์—‘์…€ ํŒŒ์ผ์„ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ์ฝ๊ธฐ
df = pd.read_excel(file.name)
# ์—ด ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜์—ฌ ํ™•์ธ
print(df.columns) # ์—ด ์ด๋ฆ„ ํ™•์ธ: ['๊ตฌ๋งคid', '๋ฆฌ๋ทฐ๋‚ ์งœ', '๊ตฌ๋งค์˜ต์…˜', '๋ฆฌ๋ทฐ๋‚ด์šฉ', '๋ฆฌ๋ทฐ์ ์ˆ˜', '์ˆ˜๋Ÿ‰']
# G์—ด์— ๊ธ€์ž์ˆ˜ ๊ณ„์‚ฐํ•˜์—ฌ ์ถ”๊ฐ€
df['๊ธ€์ž์ˆ˜'] = df['๋ฆฌ๋ทฐ๋‚ด์šฉ'].apply(lambda x: len(str(x)))
# G์—ด ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
df = df.sort_values(by='๊ธ€์ž์ˆ˜', ascending=False)
# ๊ธ์ •๋ฆฌ๋ทฐ 10๊ฐœ ์ถ”์ถœ (๋ฆฌ๋ทฐ์ ์ˆ˜๊ฐ€ 5, 4์ ์ด๊ณ , ๊ธ€์ž์ˆ˜๊ฐ€ 500 ์ดํ•˜์ธ ํ•ญ๋ชฉ)
positive_reviews = df[(df['๋ฆฌ๋ทฐ์ ์ˆ˜'].isin([4, 5])) & (df['๊ธ€์ž์ˆ˜'] <= 500)].head(10)
# ๋ถ€์ •๋ฆฌ๋ทฐ 10๊ฐœ ์ถ”์ถœ (๋ฆฌ๋ทฐ์ ์ˆ˜๊ฐ€ 1, 2์ ์ด๊ณ , ๊ธ€์ž์ˆ˜๊ฐ€ 500 ์ดํ•˜์ธ ํ•ญ๋ชฉ)
negative_reviews = df[(df['๋ฆฌ๋ทฐ์ ์ˆ˜'].isin([1, 2])) & (df['๊ธ€์ž์ˆ˜'] <= 500)].head(10)
# ๊ธ์ •๋ฆฌ๋ทฐ์™€ ๋ถ€์ •๋ฆฌ๋ทฐ์— ํ•„์š”ํ•œ ์ปฌ๋Ÿผ๋งŒ ์ถ”์ถœ (๋ฆฌ๋ทฐ๋‚ ์งœ, ๊ตฌ๋งค์˜ต์…˜, ๋ฆฌ๋ทฐ๋‚ด์šฉ)
# ๊ตฌ๋งค์˜ต์…˜์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋„ ๋นˆ ๋ฌธ์ž์—ด๋กœ ์ฒ˜๋ฆฌ
positive_reviews_selected = positive_reviews.apply(
lambda row: f"{row['๋ฆฌ๋ทฐ๋‚ ์งœ']}, {row['๊ตฌ๋งค์˜ต์…˜'] if '๊ตฌ๋งค์˜ต์…˜' in df.columns and pd.notna(row['๊ตฌ๋งค์˜ต์…˜']) else ''}, {row['๋ฆฌ๋ทฐ๋‚ด์šฉ']}",
axis=1
)
negative_reviews_selected = negative_reviews.apply(
lambda row: f"{row['๋ฆฌ๋ทฐ๋‚ ์งœ']}, {row['๊ตฌ๋งค์˜ต์…˜'] if '๊ตฌ๋งค์˜ต์…˜' in df.columns and pd.notna(row['๊ตฌ๋งค์˜ต์…˜']) else ''}, {row['๋ฆฌ๋ทฐ๋‚ด์šฉ']}",
axis=1
)
# ๊ธ์ • ๋ฐ ๋ถ€์ • ๋ฆฌ๋ทฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๊ฐ ์…€์— '\n'๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋„ฃ๊ธฐ
positive_reviews_str = '\n'.join(positive_reviews_selected)
negative_reviews_str = '\n'.join(negative_reviews_selected)
return positive_reviews_str, negative_reviews_str
return "์—‘์…€ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์„ธ์š”.", "์—‘์…€ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜์„ธ์š”."
title = "AI ํ…์ŠคํŠธ ์ƒ์„ฑ๊ธฐ"
with gr.Blocks() as demo:
gr.Markdown(f"# {title}")
upload_excel = gr.File(label="์—‘์…€ ํŒŒ์ผ ์—…๋กœ๋“œ") # ์—‘์…€ ์—…๋กœ๋“œ๋ฅผ ๊ฐ€์žฅ ์œ„๋กœ ์ด๋™
# ์–ธ์–ด ๋ชจ๋ธ ์„ ํƒ์„ ํ•˜๋“œ์ฝ”๋”ฉํ•˜๊ณ  UI์—์„œ ์ œ๊ฑฐ
user_message = gr.Textbox(label="๊ธ์ •๋ฆฌ๋ทฐ 10๊ฐœ", lines=5) # ๊ธ์ •๋ฆฌ๋ทฐ 10๊ฐœ
input1 = gr.Textbox(label="๋ถ€์ •๋ฆฌ๋ทฐ 10๊ฐœ", lines=5) # ๋ถ€์ •๋ฆฌ๋ทฐ 10๊ฐœ๊ฐ€ ๊ธ์ •๋ฆฌ๋ทฐ ์•„๋ž˜๋กœ ์ด๋™
system_message = gr.Textbox(label="๊ธ์ • ํ”„๋กฌํ”„ํŠธ", lines=10)
input2 = gr.Textbox(label="๋ถ€์ • ํ”„๋กฌํ”„ํŠธ", lines=10)
with gr.Accordion("๊ณ ๊ธ‰ ์„ค์ •", open=False):
max_tokens = gr.Slider(label="Max Tokens", minimum=0, maximum=4000, value=500, step=100)
temperature = gr.Slider(label="Temperature", minimum=0.1, maximum=1.0, value=0.75, step=0.05)
top_p = gr.Slider(label="Top P", minimum=0.1, maximum=1.0, value=0.95, step=0.05)
generate_btn = gr.Button("์‹คํ–‰")
output1 = gr.Textbox(label="๊ธ์ •๋ฆฌ๋ทฐ๋ถ„์„", lines=10)
output2 = gr.Textbox(label="๋ถ€์ •๋ฆฌ๋ทฐ๋ถ„์„", lines=10)
# ํŒŒ์ผ ์—…๋กœ๋“œ ํ›„ ๊ธ์ •๋ฆฌ๋ทฐ์™€ ๋ถ€์ •๋ฆฌ๋ทฐ๋ฅผ ๋ถ„์„ ์ฐฝ์— ์ถœ๋ ฅํ•˜๊ณ , ๊ฐ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ๋ทฐ 10๊ฐœ ์ž…๋ ฅ์นธ์— ๋„ฃ๊ธฐ
upload_excel.upload(fn=process_excel,
inputs=upload_excel,
outputs=[user_message, input1]) # ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๊ธ์ •๋ฆฌ๋ทฐ์™€ ๋ถ€์ •๋ฆฌ๋ทฐ ์ž…๋ ฅ์นธ์— ๋ฐ”๋กœ ๋„ฃ๊ธฐ
# ๊ธ์ •๋ฆฌ๋ทฐ๋ถ„์„ ๋ฐ ๋ถ€์ •๋ฆฌ๋ทฐ๋ถ„์„์„ LLM์œผ๋กœ ์ถ”๋ก 
generate_btn.click(fn=analyze_positive_reviews,
inputs=[user_message, system_message, max_tokens, temperature, top_p],
outputs=[output1])
generate_btn.click(fn=analyze_negative_reviews,
inputs=[input1, input2, max_tokens, temperature, top_p],
outputs=[output2])
demo.launch()