File size: 2,649 Bytes
e257575
a802c01
90563da
e257575
 
48a4d7a
90563da
e257575
90563da
 
 
 
 
e257575
48a4d7a
 
90563da
a802c01
90563da
a802c01
 
 
90563da
 
 
a802c01
d725876
90563da
a802c01
90563da
d725876
90563da
48a4d7a
 
90563da
 
 
48a4d7a
 
 
 
 
2915431
7382d6a
 
 
48a4d7a
 
 
 
 
 
 
30e0ca1
 
 
 
 
48a4d7a
e257575
90563da
 
 
48a4d7a
 
 
e257575
7382d6a
90563da
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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 uma, seus critérios de julgamento são:
1. Pertinência
2. Objetividade
3. Veracidade

Pergunta: {user_input}

Resposta 1: {response1}

Resposta 2: {response2}

Indique qual resposta é melhor (Resposta 1 ou Resposta 2) e explique brevemente sua escolha, tambêm faça um breve resumo bem objetivo da resposta selecionada
Use linguagem clara e objetiva.
Não utilize negrito, itálico ou qualquer formatação como **asteriscos** ou _sublinhados_.
Apenas texto puro.

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()