File size: 2,885 Bytes
723fe48
 
1ec6af9
82871f4
1ec6af9
 
 
723fe48
48eef38
723fe48
48eef38
 
 
723fe48
 
 
 
1ec6af9
 
95dfd79
 
 
1ec6af9
a200765
 
 
 
5e4ebb0
 
 
 
d8f1368
5e4ebb0
 
 
a200765
1ec6af9
45cb5c0
 
 
 
 
1ec6af9
48eef38
 
723fe48
1ec6af9
 
 
 
 
723fe48
 
48eef38
723fe48
 
48eef38
1ec6af9
48eef38
723fe48
48eef38
723fe48
1ec6af9
48eef38
1ec6af9
 
 
723fe48
95dfd79
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
import pandas as pd
import gradio as gr
from transformers import GPT2Tokenizer, GPT2LMHeadModel

# Carregando o modelo e o tokenizador do GPT-2
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')

# Dados iniciais
data = {
    'Nome': ['Alice', 'Bob', 'Charlie'],
    'Idade': [25, 30, 35],
    'Cidade': ['Nova York', 'Los Angeles', 'Chicago'],
    'Feedback': [None, None, None]
}
df = pd.DataFrame(data)

# Função para responder perguntas com GPT-2
def answer_question_with_gpt(question):
    if tokenizer.pad_token is None:
        tokenizer.pad_token = tokenizer.eos_token

    prompt = f"Considerando os dados: {df.to_string(index=False)}. Pergunta: {question} Resposta:"
    inputs = tokenizer(prompt, return_tensors='pt', padding='max_length', truncation=True, max_length=512)
    attention_mask = inputs['attention_mask']
    input_ids = inputs['input_ids']
    
    generated_ids = model.generate(
        input_ids,
        attention_mask=attention_mask,
        max_length=len(input_ids[0]) + 100,  # Aumentar o limite de geração
        temperature=0.5,  # Ajustar a criatividade
        top_p=0.9,  # Usar nucleus sampling
        no_repeat_ngram_size=2  # Evitar repetições desnecessárias
    )
    
    generated_text = tokenizer.decode(generated_ids[0], skip_special_tokens=True)
    # Processando para extrair apenas a resposta após "Resposta:"
    response_part = generated_text.split("Resposta:")[1] if "Resposta:" in generated_text else "Resposta não encontrada."
    # Limpeza adicional para remover qualquer texto indesejado após a resposta
    final_response = response_part.split(".")[0] + "."  # Isso assume que a resposta termina na primeira sentença.
    return final_response

# Função para adicionar feedback
def add_feedback(nome, feedback):
    global df
    if nome in df['Nome'].values:
        df.loc[df['Nome'] == nome, 'Feedback'] = feedback
        return "Feedback adicionado com sucesso."
    else:
        return "Nome não encontrado no DataFrame."

with gr.Blocks() as demo:
    gr.Markdown("# Sistema de Consulta e Feedback de Dados")
    with gr.Row():
        with gr.Column():
            question_input = gr.Textbox(label="Faça uma Pergunta")
            answer_output = gr.Textbox(label="Resposta", interactive=False)
            ask_button = gr.Button("Perguntar")
        with gr.Column():
            name_input = gr.Textbox(label="Nome para Feedback")
            feedback_input = gr.Textbox(label="Feedback")
            feedback_result = gr.Textbox(label="Resultado do Feedback", interactive=False)
            submit_button = gr.Button("Enviar Feedback")

    ask_button.click(fn=answer_question_with_gpt, inputs=question_input, outputs=answer_output)
    submit_button.click(fn=add_feedback, inputs=[name_input, feedback_input], outputs=feedback_result)

demo.launch()