File size: 2,529 Bytes
b0e607a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68a889e
 
b0e607a
 
 
 
 
 
 
 
 
 
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
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
tokenizer = AutoTokenizer.from_pretrained("microsoft/DialoGPT-medium")
model = AutoModelForCausalLM.from_pretrained("microsoft/DialoGPT-medium")

import pandas as pd
df_status_pedidos = pd.DataFrame({
    "numero_pedido": [12345, 67890, 54321],
    "status": ["Em processamento", "Enviado", "Entregue"]
})

def verificar_status_pedido(numero_pedido):
    try:
        numero_pedido = int(numero_pedido)

        print(f"Procurando o status para o pedido número: {numero_pedido}")
        if numero_pedido in df_status_pedidos["numero_pedido"].values:
            status = df_status_pedidos[df_status_pedidos["numero_pedido"] == numero_pedido]["status"].iloc[0]
            return f"O status do pedido {numero_pedido} é: {status}"
        else:
            return "Número do pedido não encontrado. Verifique e tente novamente."

    except ValueError:
        return "Número do pedido inválido. Insira um valor numérico."

palavras_chave_status = ["order", "order status", "status of my order", "check my order", "track my order", "order update"]

esperando_numero_pedido = False

def chatbot_response(usuario):
    global esperando_numero_pedido

    if usuario.lower() in ["quit", "exit", "bye", "stop"]:
        return "Goodbye!"

    if esperando_numero_pedido:
        resposta = verificar_status_pedido(usuario)
        esperando_numero_pedido = False
        return resposta

    if any(keyword in usuario.lower() for keyword in palavras_chave_status):
        esperando_numero_pedido = True
        return "Por favor, forneça o número do pedido."

    historico_chat = None
    novo_usuario_input_ids = tokenizer.encode(usuario + tokenizer.eos_token, return_tensors='pt')
    if historico_chat is not None:
        bot_input_ids = torch.cat([historico_chat, novo_usuario_input_ids], dim=-1)
    else:
        bot_input_ids = novo_usuario_input_ids

    historico_chat = model.generate(
        bot_input_ids,
        max_length=1000,
        pad_token_id=tokenizer.eos_token_id
    )
    resposta = tokenizer.decode(historico_chat[:, bot_input_ids.shape[-1]:][0], skip_special_tokens=True)

    return resposta

import gradio as gr    

app = gr.Interface(
    fn=chatbot_response,
    inputs="text",
    outputs="text",
    title="Chatbot com Verificação de Status",
    description="Digite sua mensagem para conversar com o bot. Pergunte sobre o status do pedido ou faça outra pergunta."
)

if __name__ == "__main__":
    app.launch()