File size: 3,030 Bytes
488762c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
"""
Data Scientist.: Dr.Eddy Giusepe Chirinos Isidro

Aqui usamos 'panel' --> https://panel.holoviz.org/

Este é um exemplo simples de ChatBot para pedir comida rápida (Delivery).
"""
import panel as pn

#Substitua sua chave de API OpenAI:
import openai
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file
openai.api_key  = os.environ['OPENAI_API_KEY']


context = [ {'role':'system', 'content':"""
Atuando como um OrderBot, você trabalha coletando pedidos em um restaurante fast food somente delivery chamado
MK Delivery. \
Primeiro recebe o cliente, de uma forma bem amigável, depois recolhe o pedido. \
Você espera para retirar todo o pedido, bebidas incluídas \
em seguida, resuma-o e verifique pela última \
vez se tudo estiver ok ou se o cliente quiser adicionar mais alguma coisa. \
Finalmente você recebe o pagamento.\
Certifique-se de esclarecer todas as opções, extras e tamanhos para \
identificar exclusivamente o item no menu.\
Você responde em um estilo curto e muito amigável. \

O cardápio inclui: \
hambúrguer 12,95, 10,00, 7,00 \
sanduíche 11,95, 9,75, 6,75\
batatas fritas 4,50, 3,50\
salada 7,25\

Coberturas: \
queijo extra 2,00, \
cogumelos 1,50\
linguiça martra 3,00 \
bacon canadense 3,50 \
molho romesco 1,50\
pimentão 1,00\

Bebidas: \
coca-cola 3,00, 2,00, 1,00 \
sprite 3,00, 2,00, 1,00 \
pisco do Perú 8,00 \
"""} ] 


def continue_conversation(messages, temperature=0):

    response = openai.ChatCompletion.create(model="gpt-3.5-turbo",
                                            messages=messages,
                                            temperature=temperature, 
    )
    #print(str(response.choices[0].message["content"]))
    return response.choices[0].message["content"]


def add_prompts_conversation(_):
    # Obtenha o valor introduzido pelo usuário:
    prompt = client_prompt.value_input
    client_prompt.value = ''
    
    # Anexe ao contexto o prompt do usuário:
    context.append({'role':'user', 'content':f"{prompt}"})
    
    # Obtenha a resposta:
    response = continue_conversation(context) 
    
    # Adicione a resposta ao contexto:
    context.append({'role':'assistant', 'content':f"{response}"})
    
    # Atualize os painéis para mostrar a conversa:
    panels.append(
        pn.Row('Usuário:', pn.pane.Markdown(prompt, width=600)))
    panels.append(
        pn.Row('Assistente Virtual:', pn.pane.Markdown(response, width=600, styles={'background-color': '#F6F6F6'})))
 

    return pn.Column(*panels)
 

# Criamos o panel: 
pn.extension()

panels = [] 

client_prompt = pn.widgets.TextInput(value="Olá!", placeholder='Insira o texto aqui . . .')
button_conversation = pn.widgets.Button(name="Enviar")

interactive_conversation = pn.bind(add_prompts_conversation, button_conversation)

dashboard = pn.Column(
    client_prompt,
    pn.Row(button_conversation),
    pn.panel(interactive_conversation, loading_indicator=True, height=300),
)


dashboard.servable()
pn.serve(dashboard)