Spaces:
Runtime error
Runtime error
| 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}") |