EduuGomes commited on
Commit
90563da
·
verified ·
1 Parent(s): a802c01

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -55
app.py CHANGED
@@ -1,57 +1,44 @@
1
  import os
2
- import gradio as gr
3
  import requests
 
4
 
5
- # Verifique se a variável de ambiente está configurada
6
  API_KEY = os.environ.get("OPENROUTER_API_KEY")
7
  if not API_KEY:
8
- raise ValueError("Defina a variável de ambiente OPENROUTER_API_KEY com sua chave válida.")
9
 
10
- # Endpoint correto da OpenRouter
11
- OPENROUTER_URL = "https://openrouter.ai/api/v1/chat/completions"
 
 
 
12
 
13
- # Modelos a serem utilizados
14
  MODEL_1 = "meta-llama/llama-3.2-1b-instruct:free"
15
  MODEL_2 = "mistralai/mistral-7b-instruct:free"
16
- MODEL_3 = "google/gemma-2-9b-it:free" # LLM julgadora
17
-
18
- def call_model(model_name, messages, max_tokens=512, temperature=0.7, top_p=0.95):
19
- headers = {
20
- "Authorization": f"Bearer {API_KEY}",
21
- "Content-Type": "application/json"
22
- }
23
 
 
24
  payload = {
25
  "model": model_name,
26
  "messages": messages,
27
- "max_tokens": max_tokens,
28
- "temperature": temperature,
29
- "top_p": top_p
30
  }
31
-
32
  try:
33
- response = requests.post(OPENROUTER_URL, headers=headers, json=payload)
34
  response.raise_for_status()
35
- return response.json()['choices'][0]['message']['content'].strip()
36
  except Exception as e:
37
- return f"Erro na chamada ao modelo {model_name}: {str(e)}"
38
 
39
  def generate_and_judge(user_input):
40
- if not user_input.strip():
41
- return "Digite algo válido.", "", ""
42
-
43
- system_prompt = "Você é um assistente útil e objetivo."
44
 
45
- messages = [
46
- {"role": "system", "content": system_prompt},
47
- {"role": "user", "content": user_input}
48
- ]
49
-
50
- # Gera respostas dos dois primeiros modelos
51
  response1 = call_model(MODEL_1, messages)
52
  response2 = call_model(MODEL_2, messages)
53
 
54
- # Monta o prompt para a LLM julgadora
55
  judge_prompt = f"""
56
  Você é um avaliador imparcial. Dadas duas respostas para a mesma pergunta, escolha a melhor.
57
 
@@ -64,31 +51,23 @@ Resposta 2: {response2}
64
  Indique qual resposta é melhor (Resposta 1 ou Resposta 2) e explique brevemente sua escolha.
65
  Resposta:
66
  """
67
-
68
- judge_messages = [
69
- {"role": "system", "content": "Você é um avaliador que escolhe a melhor resposta."},
70
- {"role": "user", "content": judge_prompt}
71
- ]
72
-
73
- judgment = call_model(MODEL_3, judge_messages)
74
 
75
  return response1, response2, judgment
76
 
77
- # Interface Gradio minimalista
78
  with gr.Blocks() as demo:
79
- gr.Markdown("### Cascata de 3 LLMs com Julgamento")
80
- user_input = gr.Textbox(label="Pergunta", placeholder="Digite sua pergunta")
81
- generate_button = gr.Button("Gerar e Julgar")
82
-
83
- response1_out = gr.Textbox(label="Resposta da LLM 1", interactive=False)
84
- response2_out = gr.Textbox(label="Resposta da LLM 2", interactive=False)
85
- judgment_out = gr.Textbox(label="Julgamento da LLM 3", interactive=False)
86
-
87
- generate_button.click(
88
- fn=generate_and_judge,
89
- inputs=user_input,
90
- outputs=[response1_out, response2_out, judgment_out]
91
- )
92
-
93
- if __name__ == "__main__":
94
- demo.launch()
 
1
  import os
 
2
  import requests
3
+ import gradio as gr
4
 
 
5
  API_KEY = os.environ.get("OPENROUTER_API_KEY")
6
  if not API_KEY:
7
+ raise ValueError("OPENROUTER_API_KEY não definida nos secrets!")
8
 
9
+ API_URL = "https://openrouter.ai/api/v1/chat/completions"
10
+ HEADERS = {
11
+ "Authorization": f"Bearer {API_KEY}",
12
+ "Content-Type": "application/json"
13
+ }
14
 
 
15
  MODEL_1 = "meta-llama/llama-3.2-1b-instruct:free"
16
  MODEL_2 = "mistralai/mistral-7b-instruct:free"
17
+ MODEL_3 = "google/gemma-2-9b-it:free"
 
 
 
 
 
 
18
 
19
+ def call_model(model_name, messages):
20
  payload = {
21
  "model": model_name,
22
  "messages": messages,
23
+ "max_tokens": 512,
24
+ "temperature": 0.7,
25
+ "top_p": 0.95
26
  }
 
27
  try:
28
+ response = requests.post(API_URL, headers=HEADERS, json=payload)
29
  response.raise_for_status()
30
+ return response.json()["choices"][0]["message"]["content"].strip()
31
  except Exception as e:
32
+ return f"Erro no modelo {model_name}: {str(e)}"
33
 
34
  def generate_and_judge(user_input):
35
+ system_prompt = {"role": "system", "content": "Você é um assistente útil e objetivo."}
36
+ user_msg = {"role": "user", "content": user_input}
37
+ messages = [system_prompt, user_msg]
 
38
 
 
 
 
 
 
 
39
  response1 = call_model(MODEL_1, messages)
40
  response2 = call_model(MODEL_2, messages)
41
 
 
42
  judge_prompt = f"""
43
  Você é um avaliador imparcial. Dadas duas respostas para a mesma pergunta, escolha a melhor.
44
 
 
51
  Indique qual resposta é melhor (Resposta 1 ou Resposta 2) e explique brevemente sua escolha.
52
  Resposta:
53
  """
54
+ judgment_msg = [{"role": "system", "content": "Você é um avaliador objetivo."},
55
+ {"role": "user", "content": judge_prompt}]
56
+ judgment = call_model(MODEL_3, judgment_msg)
 
 
 
 
57
 
58
  return response1, response2, judgment
59
 
 
60
  with gr.Blocks() as demo:
61
+ gr.Markdown("## 💡 Comparador de Respostas com 3 LLMs")
62
+ user_input = gr.Textbox(label="Digite sua pergunta")
63
+ generate_button = gr.Button("Gerar e Avaliar")
64
+
65
+ with gr.Row():
66
+ response1_out = gr.Textbox(label="Resposta LLM 1")
67
+ response2_out = gr.Textbox(label="Resposta LLM 2")
68
+ judgment_out = gr.Textbox(label="🔎 Julgamento Final")
69
+
70
+ generate_button.click(generate_and_judge, inputs=user_input,
71
+ outputs=[response1_out, response2_out, judgment_out])
72
+
73
+ demo.launch()