Spaces:
Running
Running
import os | |
import requests | |
import gradio as gr | |
API_KEY = os.environ.get("OPENROUTER_API_KEY") | |
if not API_KEY: | |
raise ValueError("OPENROUTER_API_KEY não definida nos secrets!") | |
API_URL = "https://openrouter.ai/api/v1/chat/completions" | |
HEADERS = { | |
"Authorization": f"Bearer {API_KEY}", | |
"Content-Type": "application/json" | |
} | |
MODEL_1 = "meta-llama/llama-3.2-1b-instruct:free" | |
MODEL_2 = "mistralai/mistral-7b-instruct:free" | |
MODEL_3 = "google/gemma-2-9b-it:free" | |
def call_model(model_name, messages): | |
payload = { | |
"model": model_name, | |
"messages": messages, | |
"max_tokens": 512, | |
"temperature": 0.7, | |
"top_p": 0.95 | |
} | |
try: | |
response = requests.post(API_URL, headers=HEADERS, json=payload) | |
response.raise_for_status() | |
return response.json()["choices"][0]["message"]["content"].strip() | |
except Exception as e: | |
return f"Erro no modelo {model_name}: {str(e)}" | |
def generate_and_judge(user_input): | |
system_prompt = {"role": "system", "content": "Você é um assistente útil e objetivo."} | |
user_msg = {"role": "user", "content": user_input} | |
messages = [system_prompt, user_msg] | |
response1 = call_model(MODEL_1, messages) | |
response2 = call_model(MODEL_2, messages) | |
judge_prompt = f""" | |
Você é um avaliador imparcial. Dadas duas respostas para a mesma pergunta, escolha a melhor. | |
Pergunta: {user_input} | |
Resposta 1: {response1} | |
Resposta 2: {response2} | |
Indique qual resposta é melhor (Resposta 1 ou Resposta 2) e explique brevemente sua escolha. | |
Resposta: | |
""" | |
judgment_msg = [{"role": "system", "content": "Você é um avaliador objetivo."}, | |
{"role": "user", "content": judge_prompt}] | |
judgment = call_model(MODEL_3, judgment_msg) | |
return response1, response2, judgment | |
with gr.Blocks() as demo: | |
gr.Markdown("## 💡 Comparador de Respostas com 3 LLMs") | |
user_input = gr.Textbox(label="Digite sua pergunta") | |
generate_button = gr.Button("Gerar e Avaliar") | |
with gr.Row(): | |
response1_out = gr.Textbox(label="Resposta LLM 1") | |
response2_out = gr.Textbox(label="Resposta LLM 2") | |
judgment_out = gr.Textbox(label="🔎 Julgamento Final") | |
generate_button.click(generate_and_judge, inputs=user_input, | |
outputs=[response1_out, response2_out, judgment_out]) | |
demo.launch() |