Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -463,7 +463,68 @@ RETORNE JSON:
|
|
| 463 |
# ============================================================================
|
| 464 |
# ORQUESTADOR PRINCIPAL v10 (SEM TRY-EXCEPT PARA DEPURAÇÃO)
|
| 465 |
# ============================================================================
|
| 466 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 467 |
if dna is None or not isinstance(dna, dict):
|
| 468 |
dna = criar_dna()
|
| 469 |
|
|
|
|
| 463 |
# ============================================================================
|
| 464 |
# ORQUESTADOR PRINCIPAL v10 (SEM TRY-EXCEPT PARA DEPURAÇÃO)
|
| 465 |
# ============================================================================
|
| 466 |
+
PIPELINE PRINCIPAL
|
| 467 |
+
def processar_pipeline(pergunta: str, historico: List, arquivo_anexo=None, dna=None) -> tuple:
|
| 468 |
+
if dna is None or not isinstance(dna, dict):
|
| 469 |
+
dna = criar_dna()
|
| 470 |
+
log("🧬 DNA inicializado")
|
| 471 |
+
|
| 472 |
+
log(f"🚀 PIPELINE v10: {pergunta[:60]}...")
|
| 473 |
+
|
| 474 |
+
if not pergunta.strip():
|
| 475 |
+
return "Digite uma pergunta válida", historico, dna
|
| 476 |
+
|
| 477 |
+
# Processa anexo
|
| 478 |
+
conteudo_anexo, tipo_anexo = processar_anexo(arquivo_anexo)
|
| 479 |
+
pergunta_completa = prompt_com_anexo(pergunta, conteudo_anexo, tipo_anexo)
|
| 480 |
+
|
| 481 |
+
|
| 482 |
+
# PASSOS 0-2
|
| 483 |
+
try:
|
| 484 |
+
p0 = passo_0_aluno(pergunta_completa, historico)
|
| 485 |
+
p1 = passo_1_triagem(pergunta_completa, p0, historico)
|
| 486 |
+
x1 = passo_x1_perguntas(pergunta_completa, p1, historico)
|
| 487 |
+
x2 = passo_x2_respostas(pergunta_completa, p1, x1)
|
| 488 |
+
|
| 489 |
+
# CENÁRIOS
|
| 490 |
+
p2 = passo_2_cenarios(pergunta_completa, p1, x1, x2)
|
| 491 |
+
p3 = passo_3_isolar(p2)
|
| 492 |
+
p4 = passo_4_validar(p1, p2, p3)
|
| 493 |
+
|
| 494 |
+
|
| 495 |
+
# LACUNAS
|
| 496 |
+
p5 = passo_5_lacunas(p1, p4)
|
| 497 |
+
if p5.get("decisao") == "INTERROMPIDO":
|
| 498 |
+
esclarecimento = p5.get("pergunta_clarificacao", "Preciso de mais informações")
|
| 499 |
+
return f"❓ **ESCLARECIMENTO NECESSÁRIO**:\n{esclarecimento}", historico, dna
|
| 500 |
+
|
| 501 |
+
# DECISÃO FINAL
|
| 502 |
+
p6 = passo_6_decidir(p2, p4, p5)
|
| 503 |
+
p7 = passo_7_sintetizar(p6)
|
| 504 |
+
|
| 505 |
+
# FORMATA RESPOSTA FINAL
|
| 506 |
+
resposta_final = formatar_resposta_para_chat(p7)
|
| 507 |
+
|
| 508 |
+
# NOVO HISTÓRICO
|
| 509 |
+
novo_historico = historico + [
|
| 510 |
+
{"role": "user", "content": pergunta},
|
| 511 |
+
{"role": "assistant", "content": resposta_final}
|
| 512 |
+
]
|
| 513 |
+
|
| 514 |
+
# ATUALIZA DNA
|
| 515 |
+
dna["historico_chat"].append({"user": pergunta, "assistant": resposta_final})
|
| 516 |
+
dna["metadados"]["total_turnos"] += 1
|
| 517 |
+
|
| 518 |
+
log("✅ PIPELINE CONCLUÍDA")
|
| 519 |
+
return resposta_final, novo_historico, dna
|
| 520 |
+
|
| 521 |
+
except Exception as e:
|
| 522 |
+
erro_msg = f"❌ Erro na pipeline: {str(e)}"
|
| 523 |
+
log(f"ERRO: {e}", "ERROR")
|
| 524 |
+
return erro_msg, historico, dna
|
| 525 |
+
|
| 526 |
+
|
| 527 |
+
def processar_pipeline2(pergunta: str, historico: List, arquivo_anexo=None, dna=None) -> Tuple[str, List, Dict]:
|
| 528 |
if dna is None or not isinstance(dna, dict):
|
| 529 |
dna = criar_dna()
|
| 530 |
|