Spaces:
Sleeping
Sleeping
| 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() |