ThIaGoOLuiZz's picture
Alterado pasta dos arquivos
7507690
import streamlit as st
from core_agent import chat_with_history, chat_especialista_with_history
from vector import buscar_contexto
from scrapping_especialistas import retornar_json
from obter_endereco import obter_endereco
import json
import re
st.set_page_config(page_title="Assistente Médico", page_icon="🩺")
st.title("Assistente Médico com IA")
if "session_id" not in st.session_state:
st.session_state.session_id = "sessao_default"
if "messages_sintomas" not in st.session_state:
st.session_state.messages_sintomas = []
if "messages_especialistas" not in st.session_state:
st.session_state.messages_especialistas = []
modo = st.radio("Escolha o tipo de assistência:", ["🩺 Sintomas", "👨‍⚕️ Especialistas"])
if modo == "🩺 Sintomas":
for msg in st.session_state.messages_sintomas:
with st.chat_message(msg["role"]):
st.markdown(msg["content"])
user_input = st.chat_input("Descreva seus sintomas aqui...")
if user_input:
st.session_state.messages_sintomas.append({"role": "user", "content": user_input})
with st.chat_message("user"):
st.markdown(user_input)
contexto = buscar_contexto(user_input)
resposta = chat_with_history.invoke(
{
"question": user_input,
"context": contexto,
},
config={"configurable": {"session_id": st.session_state.session_id + "_sintomas"}}
)
st.session_state.messages_sintomas.append({"role": "assistant", "content": resposta})
with st.chat_message("assistant"):
st.markdown(resposta)
if modo == "👨‍⚕️ Especialistas":
especialidade = st.selectbox("Escolha a especialidade:", [
"pediatras", "cardiologistas", "dermatologistas", "neurologistas", "ginecologistas"
])
cep = st.text_input("Digite seu CEP (formato 00000-000)", max_chars=9, placeholder="00000-000")
quantidade = st.slider("Quantidade de especialistas a retornar", min_value=1, max_value=10, value=5)
botao_consultar = st.button("Consultar Especialistas")
if botao_consultar:
cep_formatado = re.sub(r"[^0-9]", "", cep)
if len(cep_formatado) != 8:
st.warning("CEP inválido. Use o formato 00000-000.")
else:
cep_formatado = cep_formatado[:5] + '-' + cep_formatado[5:]
try:
endereco = obter_endereco(cep_formatado)
cidade = endereco.get("city", "").lower()
estado = endereco.get("state", "").lower()
st.info(f"🔍 Buscando especialistas em {especialidade} na região de {cidade.upper()} - {estado.upper()}...")
dados_especialistas = retornar_json(especialidade, cidade, estado)
if dados_especialistas:
st.success(f"{len(dados_especialistas)} especialistas encontrados.")
# Exibe apenas a quantidade solicitada
for i,especialista in enumerate(dados_especialistas[:quantidade]):
st.markdown(f"""
{i + 1}. **Nome:** {especialista.get('name', 'Não informado')}
- Rua: {especialista.get('rua', 'Não informado')}
- Bairro: {especialista.get('bairro', 'Não informado')}
- Cidade: {especialista.get('cidade', 'Não informado')}
- Estado: {especialista.get('estado', 'Não informado')}
- Especialidades: {', '.join(especialista.get('especialidades', [])) if especialista.get('especialidades') else 'Não informado'}
- Convênios: {', '.join(especialista.get('convenios', [])) if especialista.get('convenios') else 'Não informado'}
- Nota Total: {especialista.get('nota_total', 'Não informado')}
""")
else:
st.warning("Nenhum especialista encontrado para a região e especialidade informada.")
except Exception as e:
st.error(f"Ocorreu um erro ao buscar os especialistas: {e}")