Flamengo / views /newchatgroq.py
drguilhermeapolinario's picture
Update views/newchatgroq.py
9f51b8b verified
import os
from typing import Generator
import streamlit as st
from streamlit_extras.stylable_container import stylable_container
from groq import Groq
my_secret = os.getenv('GROQ_API_KEY')
client = Groq(api_key=my_secret)
@st.fragment
def chat_imagem():
with stylable_container(
key="bot1",
css_styles="""
img {
width: 220px;
height: 280px;
overflow: hidden;
position: relative;
object-fit: cover;
border-radius: 24px;
}
"""
):
st.image("src/Images/bot.png")
cf1, cf2, cf3 = st.columns(3)
with cf1:
st.title("🤖🧠 - ChatBot UBS Flamengo")
with cf2:
chat_imagem()
with cf3:
st.markdown(':blue[## 🔍📚 Auxílio em temas gerais e administrativos!]')
@st.fragment
def clear_all_session_state():
"""
Clears all keys from the `st.session_state` dictionary.
This function iterates over all the keys in the `st.session_state` dictionary and deletes each key from the dictionary.
This is useful when you want to reset the session state and start fresh.
Parameters:
None
Returns:
None
"""
for key in list(st.session_state.keys()):
del st.session_state[key]
st.rerun()
# Inicialização do histórico do chat
if "ubs_chat_history" not in st.session_state:
st.session_state.ubs_chat_history = []
for message in st.session_state.ubs_chat_history:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Input do usuário (colocado fora e abaixo do container do histórico)
user_message = st.chat_input("Digite sua pergunta ")
if user_message:
# Adiciona a mensagem do usuário ao histórico
st.session_state.ubs_chat_history.append({"role": "user", "content": user_message})
with st.chat_message("user"):
st.markdown(user_message)
try:
context = """
Você é um assistente virtual, que atua em uma Unidade Básica de Saúde (UBS) que se
chama UBS Flamengo em Contagem - Minas Gerais.
Sua função é auxiliar profissionais de saúde e administrativos em diversas tarefas,
sempre se comunicando em português brasileiro formal.
1.Comportamento e Comunicação
Inicie perguntando o nome do usuário e use-o respeitosamente durante toda a conversa.
Mantenha um tom profissional, cortês e empático em todas as interações.
Adapte seu nível de linguagem ao do usuário, mantendo-se sempre claro e compreensível.
2.Principais Responsabilidades
Auxiliar na elaboração de relatórios médicos e administrativos.
Interpretar e explicar notas técnicas e diretrizes de saúde.
Sumarizar textos complexos relacionados à saúde pública.
Oferecer insights e análises quando solicitado, baseando-se em informações atualizadas e confiáveis.
3.Limitações e Ética
Nunca forneça diagnósticos médicos ou substitua o aconselhamento de profissionais de saúde.
Mantenha estrita confidencialidade e não solicite ou discuta informações pessoais de pacientes.
Se não tiver conhecimento sobre um tópico específico, admita honestamente e sugira que o usuário
consulte um profissional qualificado.
Em situações de emergência, oriente o usuário a buscar ajuda médica imediata.
4.Formato de Respostas
Forneça respostas completas e estruturadas, usando marcadores ou numeração quando apropriado.
Para tópicos complexos, ofereça uma visão geral concisa seguida por detalhes, se necessário.
Use analogias ou exemplos práticos para explicar conceitos difíceis, quando relevante.
5.Conhecimento e Atualizações
Mantenha-se atualizado sobre as políticas de saúde pública brasileiras e procedimentos padrão em UBS.
Esteja preparado para discutir tópicos atuais relacionados à saúde pública no Brasil.
Quando citar informações, mencione a necessidade de verificar fontes oficiais para obter os dados
mais recentes.
"""
# Chamada à API Groq
chat_rci = client.chat.completions.create(
messages=[
{
"role": "system",
"content": context
},
*st.session_state.ubs_chat_history,
],
model="llama3-70b-8192",
temperature=0.4,
max_tokens=4000,
)
# Processamento da resposta
if chat_rci.choices and len(chat_rci.choices) > 0:
response_message = chat_rci.choices[0].message.content
else:
response_message = "Não foi possível gerar uma resposta."
# Adição da resposta ao histórico
st.session_state.ubs_chat_history.append({
"role":
"assistant",
"content":
response_message
})
# Exibição da nova resposta
with st.chat_message("assistant"):
st.markdown(response_message)
except Exception as e:
st.error(f"Ocorreu um erro ao processar a resposta: {str(e)}")
# Log para análise posterior (opcional)
with open("error_log.txt", "a") as log_file:
log_file.write(f"Erro: {str(e)}\n")
#st.rerun()