KK-Sequeira commited on
Commit
ec8a1d1
·
1 Parent(s): 9f11cf9

Adiciona todos os arquivos na pasta

Browse files
Files changed (3) hide show
  1. .gitattributes +0 -0
  2. README.md +0 -0
  3. app.py +141 -0
.gitattributes CHANGED
File without changes
README.md CHANGED
File without changes
app.py ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import streamlit as st
3
+ from openai import OpenAI
4
+ import os
5
+ from dotenv import load_dotenv
6
+
7
+ load_dotenv()
8
+
9
+ # inicializar o cliente
10
+ client = OpenAI(
11
+ base_url="https://api-inference.huggingface.co/v1",
12
+ api_key=os.environ.get('API_KEY') # Substitua pela sua chave API
13
+ )
14
+
15
+ # Definir mensagem do sistema para configuração inicial
16
+ smessage = """
17
+ Seu nome é Assistente.
18
+ Responda sempre em português do Brasil.
19
+ As respostas devem ser concisas.
20
+ O tom da conversa deve ser informal.
21
+ """
22
+
23
+ # Criar modelos suportados e seus limites de tokens
24
+ model_links = {
25
+ "Meta-Llama-3-8B-Instruct": ("meta-llama/Meta-Llama-3-8B-Instruct", 4096),
26
+ "Mixtral-8x7B-Instruct-v0.1": ("mistralai/Mixtral-8x7B-Instruct-v0.1", 32768),
27
+ "Nous-Hermes-2-Mixtral-8x7B-DPO": ("NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO", 32768),
28
+ "Yi-1.5-34B-Chat": ("01-ai/Yi-1.5-34B-Chat", 4096),
29
+ "Mistral-7B-Instruct-v0.1": ("mistralai/Mistral-7B-Instruct-v0.1", 8192),
30
+ "Mistral-7B-Instruct-v0.2": ("mistralai/Mistral-7B-Instruct-v0.2", 8192),
31
+ "Mistral-7B-Instruct-v0.3": ("mistralai/Mistral-7B-Instruct-v0.3", 8192),
32
+ "Zephyr-7B-Beta": ("HuggingFaceH4/zephyr-7b-beta", 8192),
33
+ "Zephyr-7B-Alpha": ("HuggingFaceH4/zephyr-7b-alpha", 8192),
34
+ "Phi-3-mini-4k-instruct": ("microsoft/Phi-3-mini-4k-instruct", 4096),
35
+ }
36
+
37
+ def reset_conversation():
38
+ '''
39
+ Reinicia a Conversa
40
+ '''
41
+ st.session_state.conversation = []
42
+ st.session_state.messages = []
43
+ st.session_state.system_message_added = False
44
+ add_system_message()
45
+ return None
46
+
47
+ def add_system_message():
48
+ system_message = {
49
+ "role": "system",
50
+ "content": smessage
51
+ }
52
+ if "system_message_added" not in st.session_state or not st.session_state.system_message_added:
53
+ st.session_state.messages.append(system_message)
54
+ st.session_state.system_message_added = True
55
+
56
+ def calculate_max_tokens(model_name, current_context_length):
57
+ repo_id, model_limit = model_links[model_name]
58
+ available_tokens = model_limit - current_context_length
59
+ return max(100, min(available_tokens - 100, 3000)) # Garante um mínimo de 100 e máximo de 3000
60
+
61
+ # Definir os modelos disponíveis
62
+ models = list(model_links.keys())
63
+
64
+ # Criar a barra lateral com o menu suspenso para seleção de modelo
65
+ selected_model = st.sidebar.selectbox("Selecione o Modelo", models)
66
+
67
+ # Criar um slider de temperatura
68
+ temp_values = st.sidebar.slider('Selecione um valor de temperatura', 0.0, 1.0, (0.5))
69
+
70
+ # Adicionar botão de reiniciar para limpar a conversa
71
+ st.sidebar.button('Reiniciar Chat', on_click=reset_conversation) # Botão de reiniciar
72
+
73
+ # Criar descrição do modelo
74
+ st.sidebar.write(f"Você está conversando com **{selected_model}**")
75
+ st.sidebar.markdown("*O conteúdo gerado pode ser impreciso ou falso.*")
76
+
77
+ if "prev_option" not in st.session_state:
78
+ st.session_state.prev_option = selected_model
79
+
80
+ if st.session_state.prev_option != selected_model:
81
+ st.session_state.messages = []
82
+ st.session_state.prev_option = selected_model
83
+ reset_conversation()
84
+
85
+ # Obter o modelo que queremos usar
86
+ repo_id = model_links[selected_model][0]
87
+
88
+ st.subheader(f'Chat com {selected_model}')
89
+
90
+ # Definir um modelo padrão
91
+ if selected_model not in st.session_state:
92
+ st.session_state[selected_model] = repo_id
93
+
94
+ # Inicializar histórico do chat
95
+ if "messages" not in st.session_state:
96
+ st.session_state.messages = []
97
+
98
+ # Adicionar mensagem do sistema para configuração inicial
99
+ add_system_message()
100
+
101
+ # Exibir mensagens do chat do histórico ao reiniciar o app
102
+ for message in st.session_state.messages:
103
+ if message["role"] != "system":
104
+ with st.chat_message(message["role"]):
105
+ st.markdown(message["content"])
106
+
107
+ # Aceitar entrada do usuário
108
+ if prompt := st.chat_input(f"Olá, sou o {selected_model}. Faça uma pergunta"):
109
+ # Exibir mensagem do usuário no container de mensagens do chat
110
+ with st.chat_message("user"):
111
+ st.markdown(prompt)
112
+ # Adicionar mensagem do usuário ao histórico do chat
113
+ st.session_state.messages.append({"role": "user", "content": prompt})
114
+
115
+ # Exibir resposta do assistente no container de mensagens do chat
116
+ with st.chat_message("assistant"):
117
+ try:
118
+ current_context_length = sum(len(m['content']) for m in st.session_state.messages)
119
+ max_tokens = calculate_max_tokens(selected_model, current_context_length)
120
+
121
+ stream = client.chat.completions.create(
122
+ model=repo_id,
123
+ messages=[
124
+ {"role": m["role"], "content": m["content"]}
125
+ for m in st.session_state.messages
126
+ ],
127
+ temperature=temp_values,
128
+ stream=True,
129
+ max_tokens=max_tokens,
130
+ )
131
+ response = st.write_stream(stream)
132
+
133
+ except Exception as e:
134
+ response = "😵 Parece que algo deu errado!\
135
+ \n O modelo pode estar sendo atualizado ou há um problema no sistema.\
136
+ \n Tente novamente mais tarde."
137
+ st.write(response)
138
+ st.write("Esta foi a mensagem de erro:")
139
+ st.write(e)
140
+
141
+ st.session_state.messages.append({"role": "assistant", "content": response})