CachoeiraBot / app.py
EduuGomes's picture
Update app.py
48a4d7a verified
raw
history blame
2.9 kB
import os
import gradio as gr
from openai import OpenAI
# Configuração da API e cliente OpenRouter correta
API_KEY = os.environ.get("OPENROUTER_API_KEY")
if not API_KEY:
raise ValueError("Defina a variável de ambiente OPENROUTER_API_KEY com sua chave válida.")
client = OpenAI(api_key=API_KEY, base_url="https://openrouter.ai/api/v1")
# Modelos selecionados (3 modelos diferentes)
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" # modelo para julgamento
# Função para chamada simplificada à API OpenRouter
def call_model(model_name, messages, max_tokens=512, temperature=0.7, top_p=0.95):
try:
response = client.chat.completions.create(
model=model_name,
messages=messages,
max_tokens=max_tokens,
temperature=temperature,
top_p=top_p
)
return response.choices[0].message.content.strip()
except Exception as e:
return f"Erro na chamada ao modelo {model_name}: {str(e)}"
# Função que gera as duas respostas e depois chama a LLM julgadora
def generate_and_judge(user_input):
system_prompt = "Você é um assistente útil e objetivo."
# Mensagens para LLM1 e LLM2 — simples prompt para responder a pergunta
messages = [{"role": "system", "content": system_prompt},
{"role": "user", "content": user_input}]
# Gera respostas
response1 = call_model(MODEL_1, messages)
response2 = call_model(MODEL_2, messages)
# Prepara prompt para julgamento da terceira LLM
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:
"""
judge_messages = [{"role": "system", "content": "Você é um avaliador que escolhe a melhor resposta."},
{"role": "user", "content": judge_prompt}]
judgment = call_model(MODEL_3, judge_messages)
# Retorna todas as informações para mostrar na interface
return response1, response2, judgment
# Interface Gradio minimalista
with gr.Blocks() as demo:
gr.Markdown("# Cascata de 3 LLMs - Resposta + Julgamento")
user_input = gr.Textbox(label="Digite sua pergunta aqui")
generate_button = gr.Button("Gerar respostas")
response1_out = gr.Textbox(label="Resposta da LLM 1", interactive=False)
response2_out = gr.Textbox(label="Resposta da LLM 2", interactive=False)
judgment_out = gr.Textbox(label="Julgamento da LLM 3", interactive=False)
generate_button.click(generate_and_judge, inputs=user_input,
outputs=[response1_out, response2_out, judgment_out])
if __name__ == "__main__":
demo.launch()