|
import gradio as gr |
|
from transformers import AutoTokenizer, AutoModelForCausalLM |
|
import torch |
|
import csv |
|
from datetime import datetime |
|
|
|
|
|
base_model_name = "unsloth/Llama-3.2-1B-Instruct" |
|
finetuned_model_name = "exo-is/esg-context-llama-1Bst-11M" |
|
|
|
tokenizer = AutoTokenizer.from_pretrained(base_model_name) |
|
base_model = AutoModelForCausalLM.from_pretrained(base_model_name, torch_dtype=torch.float32, low_cpu_mem_usage=True, device_map="cpu") |
|
finetuned_model = AutoModelForCausalLM.from_pretrained(finetuned_model_name, torch_dtype=torch.float32, low_cpu_mem_usage=True, device_map="cpu") |
|
|
|
def generate_text(model, prompt, max_new_tokens, temperature): |
|
inputs = tokenizer(prompt, return_tensors="pt") |
|
|
|
with torch.no_grad(): |
|
outputs = model.generate( |
|
**inputs, |
|
max_new_tokens=int(max_new_tokens), |
|
temperature=temperature, |
|
num_return_sequences=1, |
|
do_sample=True, |
|
) |
|
|
|
return tokenizer.decode(outputs[0], skip_special_tokens=True) |
|
|
|
def log_interaction(model, prompt, output, validation): |
|
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") |
|
with open('interaction_log.csv', 'a', newline='') as file: |
|
writer = csv.writer(file) |
|
writer.writerow([timestamp, model, prompt, output, validation]) |
|
|
|
def generate_and_compare(prompt, max_new_tokens, temperature): |
|
base_output = generate_text(base_model, prompt, max_new_tokens, temperature) |
|
finetuned_output = generate_text(finetuned_model, prompt, max_new_tokens, temperature) |
|
return base_output, finetuned_output |
|
|
|
def evaluate_base(output, score): |
|
log_interaction("Base", gr.get_state('last_prompt'), output, score) |
|
return f"Avaliação registrada para o modelo Base: {score}" |
|
|
|
def evaluate_finetuned(output, score): |
|
log_interaction("Fine-tuned", gr.get_state('last_prompt'), output, score) |
|
return f"Avaliação registrada para o modelo Fine-tuned: {score}" |
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("# Comparação de Modelos: Llama-3.2-1B-Instruct vs. Modelo Fine-tuned para Sustentabilidade") |
|
|
|
with gr.Row(): |
|
prompt = gr.Textbox(lines=5, label="Insira seu prompt aqui") |
|
max_new_tokens = gr.Slider(50, 500, value=200, step=1, label="Máximo de Novos Tokens") |
|
temperature = gr.Slider(0.1, 2.0, value=0.7, step=0.1, label="Temperatura") |
|
|
|
generate_btn = gr.Button("Gerar") |
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
base_output = gr.Textbox(label="Saída do Modelo Base", lines=10) |
|
base_rating = gr.Radio(["1", "2", "3", "4", "5"], label="Avalie a resposta do Modelo Base") |
|
base_submit = gr.Button("Enviar Avaliação (Base)") |
|
|
|
with gr.Column(): |
|
finetuned_output = gr.Textbox(label="Saída do Modelo Fine-tuned", lines=10) |
|
finetuned_rating = gr.Radio(["1", "2", "3", "4", "5"], label="Avalie a resposta do Modelo Fine-tuned") |
|
finetuned_submit = gr.Button("Enviar Avaliação (Fine-tuned)") |
|
|
|
base_feedback = gr.Textbox(label="Feedback da Avaliação (Base)") |
|
finetuned_feedback = gr.Textbox(label="Feedback da Avaliação (Fine-tuned)") |
|
|
|
generate_btn.click(generate_and_compare, inputs=[prompt, max_new_tokens, temperature], outputs=[base_output, finetuned_output]) |
|
base_submit.click(evaluate_base, inputs=[base_output, base_rating], outputs=base_feedback) |
|
finetuned_submit.click(evaluate_finetuned, inputs=[finetuned_output, finetuned_rating], outputs=finetuned_feedback) |
|
|
|
demo.load(lambda: gr.update(value=""), outputs=[prompt]) |
|
prompt.change(lambda x: gr.set_state(last_prompt=x), inputs=[prompt]) |
|
|
|
demo.launch() |