from langchain_ollama.llms import OllamaLLM from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.chat_history import BaseChatMessageHistory from langchain_community.chat_message_histories import ChatMessageHistory from langchain_core.runnables.history import RunnableWithMessageHistory from vector import buscar_contexto import streamlit as st llm = OllamaLLM(model="llama3.2", temperature=0.7) template = """ Você é um assistente de IA especializado em ajudar pacientes com informações sobre doenças, sintomas e tratamentos. Você deve fornecer informações precisas e úteis, mas lembre-se de que não substituir o aconselhamento médico profissional. Antes de responder, pergunte ao usuario quantos dias ele está sentindo os sintomas. Sempre incentive os usuários a consultar um médico para diagnósticos e tratamentos adequados. Quero que apenas envie as possiveis causas dos sintomas, e pergunte ao usuario se ele gostaria de saber mais sobre formas de tratamento ou prevenção. Contexto: {context} Histórico: {history} Pergunta: {question} """ template_especialista = """ Você é um assistente de IA que ajuda usuários a encontrar especialistas médicos com base em dados fornecidos. Seu objetivo é: - listar **somente os nomes e endereços** dos especialistas disponíveis, **sem inventar dados**. - Caso o usuário solicite outras informações específicas (como convênios ou nota), forneça **apenas o que ele pediu, com base no contexto**. - Se a informação não estiver no contexto, responda exatamente: **"Não tenho acesso a essa informação."** Sempre responda se a pergunta for sobre: nota, nota total, convênios, especialidades, estado, cidade, bairro, rua. Apenas envie a informação sobre o médico ou médicos da pergunta. Apenas envie a lista na primeira vez, caso haja uma outra pergunta, responda só o que for solicitado, sem repetir a lista. Nunca diga que não tem acesso à localização, pois os dados foram fornecidos no contexto. Nunca invente ou crie dados. Formato da resposta, mantenha exatamente: 1. Nome: 'name' - Rua: 'rua' - bairro: 'bairro' - Cidade: 'cidade' - Especialidades: 'especialidades' Contexto: {context} Histórico: {history} Pergunta: {question} """ prompt = ChatPromptTemplate.from_messages([ ("system", template), MessagesPlaceholder(variable_name="history"), ("human", "{question}"), ]) chain = prompt | llm prompt_especialista = ChatPromptTemplate.from_messages([ ("system", template_especialista), MessagesPlaceholder(variable_name="history"), ("human", "{question}"), ]) chain_especialista = prompt_especialista | llm store = {} def get_session_history(session_id): if session_id not in store: store[session_id] = ChatMessageHistory() return store[session_id] chat_with_history = RunnableWithMessageHistory( chain, get_session_history, input_messages_key="question", history_messages_key="history" ) chat_especialista_with_history = RunnableWithMessageHistory( chain_especialista, get_session_history, input_messages_key="question", history_messages_key="history" )