Spaces:
Running
Running
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) | |
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!]') | |
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() | |