DanielDJ1987 commited on
Commit
0929d70
·
verified ·
1 Parent(s): c8fc8fa

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -87
app.py CHANGED
@@ -1,64 +1,36 @@
1
 
2
  import streamlit as st
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
4
- from utils_openai import retorna_resposta_modelo
5
- from utils_files import *
6
 
7
- # INICIALIZAÇÃO ==================================================
8
- def inicializacao():
9
  if not 'mensagens' in st.session_state:
10
  st.session_state.mensagens = []
11
- if not 'conversa_atual' in st.session_state:
12
- st.session_state.conversa_atual = ''
13
- if not 'modelo' in st.session_state:
14
- st.session_state.modelo = 'gpt-3.5-turbo'
15
- if not 'api_key' in st.session_state:
16
- st.session_state.api_key = le_chave()
17
-
18
- # TABS ==================================================
19
- def tab_conversas(tab):
20
-
21
- tab.button('➕ Nova conversa',
22
- on_click=seleciona_conversa,
23
- args=('', ),
24
- use_container_width=True)
25
- tab.markdown('')
26
- conversas = listar_conversas()
27
- for nome_arquivo in conversas:
28
- nome_mensagem = desconverte_nome_mensagem(nome_arquivo).capitalize()
29
- if len(nome_mensagem) == 30:
30
- nome_mensagem += '...'
31
- tab.button(nome_mensagem,
32
- on_click=seleciona_conversa,
33
- args=(nome_arquivo, ),
34
- disabled=nome_arquivo==st.session_state['conversa_atual'],
35
- use_container_width=True)
36
-
37
- def seleciona_conversa(nome_arquivo):
38
- if nome_arquivo == '':
39
- st.session_state['mensagens'] = []
40
- else:
41
- mensagem = ler_mensagem_por_nome_arquivo(nome_arquivo)
42
- st.session_state['mensagens'] = mensagem
43
- st.session_state['conversa_atual'] = nome_arquivo
44
-
45
- def tab_configuracoes(tab):
46
- modelo_escolhido = tab.selectbox('Selecione o modelo',
47
- ['gpt-3.5-turbo', 'gpt-4'])
48
- st.session_state['modelo'] = modelo_escolhido
49
-
50
- chave = tab.text_input('Adicione sua api key', value=st.session_state['api_key'])
51
- if chave != st.session_state['api_key']:
52
- st.session_state['api_key'] = chave
53
- salva_chave(chave)
54
- tab.success('Chave salva com sucesso')
55
-
56
- # PÁGINA PRINCIPAL ==================================================
57
- def pagina_principal():
58
 
59
- mensagens = ler_mensagens(st.session_state['mensagens'])
60
 
61
- st.header('🤖 Chatbot', divider=True)
 
62
 
63
  for mensagem in mensagens:
64
  chat = st.chat_message(mensagem['role'])
@@ -66,42 +38,30 @@ def pagina_principal():
66
 
67
  prompt = st.chat_input('Fale com o chat')
68
  if prompt:
69
- if st.session_state['api_key'] == '':
70
- st.error('Adicone uma chave de api na aba de configurações')
71
- else:
72
- nova_mensagem = {'role': 'user',
73
- 'content': prompt}
74
- chat = st.chat_message(nova_mensagem['role'])
75
- chat.markdown(nova_mensagem['content'])
76
- mensagens.append(nova_mensagem)
 
 
 
 
 
 
 
 
 
 
 
 
77
 
78
- chat = st.chat_message('assistant')
79
- placeholder = chat.empty()
80
- placeholder.markdown("▌")
81
- resposta_completa = ''
82
- respostas = retorna_resposta_modelo(mensagens,
83
- st.session_state['api_key'],
84
- modelo=st.session_state['modelo'],
85
- stream=True)
86
- for resposta in respostas:
87
- resposta_completa += resposta.choices[0].delta.get('content', '')
88
- placeholder.markdown(resposta_completa + "▌")
89
- placeholder.markdown(resposta_completa)
90
- nova_mensagem = {'role': 'assistant',
91
- 'content': resposta_completa}
92
- mensagens.append(nova_mensagem)
93
 
94
- st.session_state['mensagens'] = mensagens
95
- salvar_mensagens(mensagens)
96
 
97
- # MAIN ==================================================
98
- def main():
99
- inicializacao()
100
- pagina_principal()
101
- tab1, tab2 = st.sidebar.tabs(['Conversas', 'Configurações'])
102
- tab_conversas(tab1)
103
- tab_configuracoes(tab2)
104
 
105
 
106
- if __name__ == '__main__':
107
- main()
 
1
 
2
  import streamlit as st
3
+ import openai
4
+ import dotenv
5
+ import os
6
+
7
+
8
+ def carregar_configuracoes():
9
+ dotenv.load_dotenv()
10
+ return os.environ['OPENAI_API_KEY']
11
+
12
+ def retorna_resposta_modelo(mensagens,
13
+ modelo='gpt-4o-mini',
14
+ temperatura=0,
15
+ stream=False):
16
+ openai.api_key = carregar_configuracoes()
17
+ response = openai.ChatCompletion.create(
18
+ model=modelo,
19
+ messages=mensagens,
20
+ temperature=temperatura,
21
+ stream=stream
22
+ )
23
+ return response
24
 
25
+ def pagina_principal():
 
26
 
 
 
27
  if not 'mensagens' in st.session_state:
28
  st.session_state.mensagens = []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
 
30
+ mensagens = st.session_state['mensagens']
31
 
32
+ st.markdown("<h2 style='text-align: center; margin-bottom: -100px; margin-top: -50px'>🤖 Chatbot</h2>", unsafe_allow_html=True)
33
+ st.write("---")
34
 
35
  for mensagem in mensagens:
36
  chat = st.chat_message(mensagem['role'])
 
38
 
39
  prompt = st.chat_input('Fale com o chat')
40
  if prompt:
41
+ nova_mensagem = {'role': 'user',
42
+ 'content': prompt}
43
+ chat = st.chat_message(nova_mensagem['role'])
44
+ chat.markdown(nova_mensagem['content'])
45
+ mensagens.append(nova_mensagem)
46
+
47
+ chat = st.chat_message('assistant')
48
+ placeholder = chat.empty()
49
+ placeholder.markdown("▌")
50
+ resposta_completa = ''
51
+ respostas = retorna_resposta_modelo(mensagens,
52
+ stream=True)
53
+ for resposta in respostas:
54
+ resposta_completa += resposta.choices[0].delta.get('content', '')
55
+ placeholder.markdown(resposta_completa + "▌")
56
+ placeholder.markdown(resposta_completa)
57
+ nova_mensagem = {'role': 'assistant',
58
+ 'content': resposta_completa}
59
+ mensagens.append(nova_mensagem)
60
+
61
 
62
+ st.session_state['mensagens'] = mensagens
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
 
 
 
64
 
 
 
 
 
 
 
 
65
 
66
 
67
+ pagina_principal()