Spaces:
Sleeping
Sleeping
Commit ·
ec8a1d1
1
Parent(s): 9f11cf9
Adiciona todos os arquivos na pasta
Browse files- .gitattributes +0 -0
- README.md +0 -0
- 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})
|