File size: 3,739 Bytes
e1bdcab
7f54168
 
 
 
e1bdcab
7f54168
 
 
e1bdcab
7f54168
 
 
e1bdcab
7f54168
 
 
 
 
 
 
 
 
 
 
 
 
e1bdcab
7f54168
 
 
 
 
e1bdcab
7f54168
 
 
 
e1bdcab
3ff7970
 
 
 
 
 
 
e1bdcab
7f54168
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3ff7970
 
7f54168
 
 
e1bdcab
7f54168
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
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import csv
from datetime import datetime

# Load models and tokenizers
base_model_name = "unsloth/Llama-3.2-1B-Instruct"
finetuned_model_name = "exo-is/esg-context-llama-1Bst-11M"  # Replace with your model's path

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