Feat: Adds parallel and async process to calls and ocr
This commit is contained in:
@@ -7,6 +7,7 @@ This agent demonstrates a basic ReAct-style agent with tool calling capabilities
|
||||
import boto3
|
||||
import csv
|
||||
import json
|
||||
import asyncio
|
||||
from pathlib import Path
|
||||
from typing import Annotated, TypedDict, Literal
|
||||
from langgraph.graph import StateGraph, END
|
||||
@@ -202,7 +203,7 @@ Para beneficiário de outras Unimed’s (importado)
|
||||
Ver item ATENDIMENTO INTERCÂMBIO.
|
||||
Para beneficiário Unimed 0032 (atendimento local):
|
||||
Todas as solicitações devem ser direcionadas para análise da Auditoria Médica,
|
||||
com a documentação mínima.""",
|
||||
com a Documentação.""",
|
||||
"4034906":"""Para beneficiário de outras Unimed’s (importado):
|
||||
Ver item ATENDIMENTO INTERCÃMBIO.
|
||||
Para beneficiário Unimed 0032 (atendimento local):
|
||||
@@ -230,7 +231,7 @@ Para beneficiário de outras Unimed’s (importado)
|
||||
Ver item ATENDIMENTO INTERCÂMBIO.
|
||||
Para beneficiário Unimed 0032 (atendimento local):
|
||||
Todas as solicitações devem ser direcionadas para análise da Auditoria Médica,
|
||||
com a documentação mínima.""",
|
||||
com a Documentação.""",
|
||||
"20103190":"""Autorizar sem o parecer da Auditoria Médica desde que a justificativa indique pelo
|
||||
menos uma das patologias abaixo ou CID’s relacionados:
|
||||
·Incontinência urinária (CID R32);
|
||||
@@ -272,7 +273,7 @@ Para beneficiário Unimed 0032 (atendimento local):
|
||||
Esse código não requer análise da Auditoria Médica, analisar baseado na cobertura e
|
||||
limite contratual do beneficiário.
|
||||
Caso seja necessário análise da auditoria médica devido alguma mensagem de
|
||||
negação, consultar o item "Documentação Mínima".
|
||||
negação, consultar o item "Documentação".
|
||||
Para beneficiário Unimed 0032 (atendimento em outra singular/Exportado):
|
||||
A liberação do procedimento não está condicionada a solicitação dos materiais, pois
|
||||
o mesmo poderá ser realizado sem a utilização da "Alça de Polipectomia" e da
|
||||
@@ -286,7 +287,7 @@ Para beneficiário Unimed 0032 (atendimento local):
|
||||
Esse código não requer análise da Auditoria Médica, analisar baseado na cobertura e
|
||||
limite contratual do beneficiário.
|
||||
Caso seja necessário análise da auditoria médica devido alguma mensagem de
|
||||
negação, consultar o item "Documentação Mínima".
|
||||
negação, consultar o item "Documentação".
|
||||
Para beneficiário Unimed 0032 (atendimento em outra singular/Exportado):
|
||||
A liberação do procedimento não está condicionada a solicitação dos materiais, pois
|
||||
o mesmo poderá ser realizado sem a utilização da "Alça de Polipectomia" e da
|
||||
@@ -311,53 +312,53 @@ Encaminhar para deliberação da Unimed origem.""",
|
||||
|
||||
}
|
||||
MIN_DOC={
|
||||
"20103190":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"20103190":"""Documentação
|
||||
Justificativa Médica e/ou indicação clínica.""",
|
||||
"20203020":"""DOCUMENTAÇÃO MÍNIMA:
|
||||
"20203020":"""Documentação:
|
||||
·
|
||||
Justificativa Médica e/ou indicação clínica.""",
|
||||
"31303293":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"31303293":"""Documentação
|
||||
Beneficiário 0032 (atendidos em Curitiba e em Outras cidades):
|
||||
·Justificativa médica e/ou indicação clínica;
|
||||
·Formulário de Solicitação - DIU Hormonal (ver anexo do script).
|
||||
Beneficiário Intercâmbio/Outras Unimeds:
|
||||
·
|
||||
Relatório Médico Detalhado (conforme racionalização).""",
|
||||
"40202542":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"40202542":"""Documentação
|
||||
Para beneficiário de outras Unimed’s (importado):
|
||||
Ver item ATENDIMENTO INTERCÃMBIO.
|
||||
Para beneficiário Unimed 0032 (atendimento local):
|
||||
Justificativa Médica e/ou indicação clínica.""",
|
||||
"40202550":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"40202550":"""Documentação
|
||||
Para beneficiário de outras Unimed’s (importado):
|
||||
Ver item ATENDIMENTO INTERCÃMBIO.
|
||||
Para beneficiário Unimed 0032 (atendimento local):
|
||||
Justificativa Médica e/ou indicação clínica.""",
|
||||
"40304906":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"40304906":"""Documentação
|
||||
Para beneficiário de outras Unimed’s (importado):
|
||||
Ver item ATENDIMENTO INTERCÃMBIO.
|
||||
Para beneficiário Unimed 0032 (atendimento local):
|
||||
Justificativa e/ou indicação clínica.""",
|
||||
"4034906":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"4034906":"""Documentação
|
||||
Para beneficiário de outras Unimed’s (importado):
|
||||
Ver item ATENDIMENTO INTERCÃMBIO.
|
||||
Para beneficiário Unimed 0032 (atendimento local):
|
||||
Justificativa e/ou indicação clínica.""",
|
||||
"40314626":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"40314626":"""Documentação
|
||||
Não há;""",
|
||||
"40314618":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"40314618":"""Documentação
|
||||
Não há;""",
|
||||
"40323676":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"40323676":"""Documentação
|
||||
Não há;""",
|
||||
"40901254":"""Justificativa Médica e/ou indicação clínica informando a idade gestacional e Laudo
|
||||
do 1º exame sonográfico gestacional realizado.""",
|
||||
"40901262":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"40901262":"""Documentação
|
||||
Relatório médico informando a idade gestacional + laudo do 1o exame sonográfico
|
||||
gestacional realizado.""",
|
||||
"4091262":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"4091262":"""Documentação
|
||||
Relatório médico informando a idade gestacional + laudo do 1o exame sonográfico
|
||||
gestacional realizado.""",
|
||||
"4101230":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"4101230":"""Documentação
|
||||
Para beneficiário de outras Unimed’s (importado)
|
||||
Ver item ATENDIMENTO INTERCÂMBIO.
|
||||
Para beneficiário Unimed 0032 (atendimento local):
|
||||
@@ -370,7 +371,7 @@ esforço físico;
|
||||
e/ ou TIMI risk;
|
||||
·
|
||||
Laudos de exames cardiológicos recentes.""",
|
||||
"4101230":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"4101230":"""Documentação
|
||||
Para beneficiário de outras Unimed’s (importado)
|
||||
Ver item ATENDIMENTO INTERCÂMBIO.
|
||||
Para beneficiário Unimed 0032 (atendimento local):
|
||||
@@ -383,7 +384,7 @@ esforço físico;
|
||||
e/ ou TIMI risk;
|
||||
·
|
||||
Laudos de exames cardiológicos recentes.""",
|
||||
"41501144":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"41501144":"""Documentação
|
||||
PARA BENEFICIÁRIOS 0032 SENDO ATENDIDO EM CURITIBA, FORA (EXPORTADO),
|
||||
E PAC:
|
||||
·
|
||||
@@ -407,18 +408,18 @@ Esclarecemos que o envio de retinografia, poderá eventualmente ser solicitado p
|
||||
auditoria para fins de elucidação diagnóstica.
|
||||
PARA BENEFICIÁRIOS INTERCÂMBIO NACIONAL:
|
||||
SEGUIR DOCUMENTAÇÃO CONFORME RACIONALIZAÇÃO.""",
|
||||
"31005101":"""DOCUMENTAÇÃO MÍNIMA:
|
||||
"31005101":"""Documentação:
|
||||
·Relatório médico detalhado;
|
||||
·Laudo RX e/ou tomografia e/ou ressonância e/ou ultrassonografia.""",
|
||||
"31005470":"""DOCUMENTAÇÃO MÍNIMA:
|
||||
"31005470":"""Documentação:
|
||||
·Relatório médico detalhado;
|
||||
·Laudo RX e/ou tomografia e/ou ressonância e/ou ultrassonografia.""",
|
||||
"40808122":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"40808122":"""Documentação
|
||||
Para beneficiário de outras Unimed’s (importado):
|
||||
Ver item ATENDIMENTO INTERCÂMBIO.
|
||||
Para beneficiário Unimed 0032 (atendimento local):
|
||||
Justificativa e/ou indicação clínica.""",
|
||||
"40808130":"""DOCUMENTAÇÃO MÍNIMA
|
||||
"40808130":"""Documentação
|
||||
Para beneficiário de outras Unimed’s (importado):
|
||||
Ver item ATENDIMENTO INTERCÂMBIO.
|
||||
Para beneficiário Unimed 0032 (atendimento local):
|
||||
@@ -531,7 +532,7 @@ def create_agent(file_content: str = ""):
|
||||
return workflow.compile()
|
||||
|
||||
|
||||
def run_agent(query: str, code: str, file_content: str = "") -> str:
|
||||
async def run_agent(query: str, code: str, file_content: str = "") -> str:
|
||||
"""
|
||||
Run the agent with a given query.
|
||||
|
||||
@@ -544,14 +545,17 @@ def run_agent(query: str, code: str, file_content: str = "") -> str:
|
||||
The agent's final response
|
||||
"""
|
||||
agent = create_agent(file_content)
|
||||
SYSTEM_PROMPT = """You are a AI assistant responsible to check if a person is Allowed or Denied acces to medical procedure based on the following rules:
|
||||
<rules>
|
||||
SYSTEM_PROMPT = """You are a AI assistant responsible to check if a person is Allowed or Denied acces to medical procedure based on the inpout data. There are a few always accepted criteira in which, any of them been met, even a single one, will be accepted, these criteria been:
|
||||
<auto-accept-criteria>
|
||||
"""+RULES[code]+""""
|
||||
<\rules>
|
||||
Also this is the required documentation or infomation for aproval, equivalent information to the required one in another is allowed, do try to indetify every document as one of these if it fits, or contains the required information, or not identified:
|
||||
"""+MIN_DOC[code]+""""
|
||||
<\auto-accept-criteria>
|
||||
If those criteria aren´t met, you can check the documents to see if the following information are present, if so, aprove the procedure:
|
||||
<additional-information>"""+MIN_DOC[code]+"""
|
||||
<\additional-information>
|
||||
If the additional information is not present, but any of the auto-accept-criteira are met, allow the procedure.
|
||||
If there aren´t any auto-accept criteria present, check the documents for the additional information, and if they are all present, even if not in the exact type of document especified in them, allow the procedure.
|
||||
Your capabilities:
|
||||
- You can check the OCR of anexed documents if the json input is not enough to determinate if it should be aproved, using the check tool.
|
||||
- You can check the OCR of all the documents anexed, at the same time, if the json input is not enough to determinate if it should be aproved, using the check tool.
|
||||
For every document, check if the name of the person in json is present, and at output list every document and if it belongs to the person in the request.
|
||||
|
||||
Start your answer with either:
|
||||
@@ -559,8 +563,38 @@ Start your answer with either:
|
||||
Reprovado: If there aren't any rules met.
|
||||
|
||||
And list the document classification and the met criteira, in case of aprovation. Be really precise and succint.
|
||||
Start the response with either Aprovado or Reprovado, do not add any characters before either of them, even "*" """
|
||||
Start the response with either Aprovado or Reprovado, do not add any characters before either of them, even "*".
|
||||
You must start the message with the result, either Aprovado or Reprovado. It must be the first word at the output.
|
||||
<examples>
|
||||
Exemplos de saída:
|
||||
Aprovado
|
||||
Critério:
|
||||
Idade superior a 25 anos
|
||||
Documentos anexados:
|
||||
Nome Documento 1 - Pertence a pessoa FUlana
|
||||
Nome documento 2- Pertence a pessoa FUlana
|
||||
|
||||
Reprovado
|
||||
Critério:
|
||||
Nenhum crtiério preenchido e informações para aprovação faltando no documento
|
||||
|
||||
|
||||
Aprovado
|
||||
Critério:
|
||||
Fornecidos documentos nescessários contendo analise médica e pedido de exame
|
||||
Documentos anexados:
|
||||
Guia - Pertence a pessoa Fulana, contém pedido de exame, mesmo não sendo pedido de exame
|
||||
Laudo- Pertence a pessoa Fula, contém análise médica
|
||||
<\examples>
|
||||
<answer_format>
|
||||
(Aprovado ou Reprovado)
|
||||
Critério:
|
||||
######
|
||||
Documentos anexados:
|
||||
######
|
||||
######
|
||||
<\answer_format>
|
||||
Follow the answer format strictly, do not list the person data nor start with phrases like (Vou analisar a solicitação de ####### par a NOME DA PESSOA) or anything like it. Just stick with the format, dont add anything else """
|
||||
user_message = query
|
||||
if file_content:
|
||||
user_message += "\n\n<documentos_anexados>\n" + file_content + "\n</documentos_anexados>"
|
||||
@@ -572,13 +606,10 @@ Start your answer with either:
|
||||
]
|
||||
}
|
||||
|
||||
print(f"\nUser: {query}")
|
||||
print("-" * 50)
|
||||
|
||||
# Run the agent
|
||||
langfuse_handler = CallbackHandler()
|
||||
config = {"callbacks": [langfuse_handler]}
|
||||
final_state = agent.invoke(initial_state, config=config)
|
||||
final_state = await agent.ainvoke(initial_state, config=config)
|
||||
|
||||
# Get the final response
|
||||
final_message = final_state["messages"][-1]
|
||||
@@ -593,9 +624,7 @@ Start your answer with either:
|
||||
input_tokens += usage.get("input_tokens", 0)
|
||||
output_tokens += usage.get("output_tokens", 0)
|
||||
|
||||
langfuse.flush()
|
||||
print(f"Agent: {response}")
|
||||
print(f"Tokens - input: {input_tokens}, output: {output_tokens}")
|
||||
await asyncio.to_thread(langfuse.flush)
|
||||
return {"response": response, "input_tokens": input_tokens, "output_tokens": output_tokens}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user