File size: 3,252 Bytes
723fe48
 
1ec6af9
82871f4
1ec6af9
 
 
723fe48
be2fac2
 
723fe48
82a021e
 
 
 
 
 
 
 
 
 
 
1ec6af9
 
95dfd79
 
 
82a021e
a200765
 
 
 
5e4ebb0
 
 
 
d8f1368
5e4ebb0
 
 
a200765
1ec6af9
45cb5c0
 
 
 
 
1ec6af9
48eef38
 
723fe48
be2fac2
 
1ec6af9
 
be2fac2
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
70
71
72
73
74
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')

df = pd.read_csv('anomalies.csv')
df['Feedback'] = None

# Preprocessing steps
df['ds'] = pd.to_datetime(df['ds']).dt.strftime('%Y-%m-%d')  # Format the datetime values
df['real'] = df['real'].apply(lambda x: f"{x:.2f}")  # Format the float values to two decimal places

# Convert each row into a structured natural language sentence
def tokenize_row(row):
    return f"On {row['ds']}, the expense in the group '{row['Group']}' was ${row['real']}."

# Apply the tokenization function to each row
df['tokenized'] = df.apply(tokenize_row, axis=1)

# 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 as seguintes sentenças: {df['tokenized'].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 grupo in df['Group'].values:
        df.loc[df['Group'] == grupo, 'Feedback'] = feedback
        return "Feedback adicionado com sucesso."
    else:
        return "Dado 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()