diff --git a/nemo_guardrails_tracing_project/config/config.yml b/nemo_guardrails_tracing_project/config/config.yml index bd9264b..987fb18 100644 --- a/nemo_guardrails_tracing_project/config/config.yml +++ b/nemo_guardrails_tracing_project/config/config.yml @@ -1,11 +1,11 @@ +colang_version: "1.0" + models: - type: main engine: openai model: gpt-5 -colang_version: "1.0" - rails: - dialog: + input: flows: - main \ No newline at end of file diff --git a/nemo_guardrails_tracing_project/config/rails/flows.co b/nemo_guardrails_tracing_project/config/rails/flows.co index e37f6b0..4e72756 100644 --- a/nemo_guardrails_tracing_project/config/rails/flows.co +++ b/nemo_guardrails_tracing_project/config/rails/flows.co @@ -3,5 +3,7 @@ define user express input define flow main user express input + execute executar_pipeline_validacoes + bot say $nemo_response \ No newline at end of file diff --git a/nemo_guardrails_tracing_project/src/actions.py b/nemo_guardrails_tracing_project/src/actions.py index 970a54d..4509531 100644 --- a/nemo_guardrails_tracing_project/src/actions.py +++ b/nemo_guardrails_tracing_project/src/actions.py @@ -42,6 +42,7 @@ def add_trace(trace, label, result): def executar_pipeline_validacoes(context: dict): + print("đŸ”„đŸ”„đŸ”„ ACTION FOI EXECUTADA") payload = extrair_payload(context) request_id = payload.get("request_id") or str(uuid.uuid4()) @@ -108,7 +109,7 @@ def executar_pipeline_validacoes(context: dict): # ========================= if avaliar_qualidade_resposta is not None: - r_cmp = avaliar_qualidade_resposta(final_response) + r_cmp = avaliar_qualidade_resposta(input_text, final_response) add_trace(trace, "CMP", r_cmp) if not r_cmp.allowed: failures.append(("CMP", r_cmp.reason)) diff --git a/nemo_guardrails_tracing_project/src/app_nemo.py b/nemo_guardrails_tracing_project/src/app_nemo.py index 839f6a6..f59b8a3 100644 --- a/nemo_guardrails_tracing_project/src/app_nemo.py +++ b/nemo_guardrails_tracing_project/src/app_nemo.py @@ -22,6 +22,7 @@ rails = build_rails() def executar_atendimento(user_input: str, context: dict): + request_id = str(uuid.uuid4()) payload = { @@ -30,35 +31,103 @@ def executar_atendimento(user_input: str, context: dict): "context": context or {}, } - response = rails.generate( - messages=[ + # đŸ”„ chama direto seu pipeline + executar_pipeline_validacoes({ + "messages": [ { "role": "user", - "content": json.dumps(payload, ensure_ascii=False), + "content": json.dumps(payload) } ] - ) + }) result = PIPELINE_RESULTS.pop(request_id, None) - if result: - return result - - return { - "allowed": False, - "label": "PROBLEMA", - "reason": "Pipeline nĂŁo retornou resultado estruturado", - "response": response, - "trace": [], - } + return result if __name__ == "__main__": - user_input = "quero cancelar VAS" - context = { - "ajuste_valor": 2000, - "resposta_llm": "Cancelamento realizado", - } + def rodar_teste(nome, user_input, context): + print("\n" + "="*60) + print(f"đŸ§Ș TESTE: {nome}") + print("-"*60) + print("INPUT:", user_input) + print("CONTEXT:", context) + + result = executar_atendimento(user_input, context) + + print("\n📌 RESULTADO FINAL:") + print(result) + + print("\n🔍 TRACE:") + for step in result.get("trace", []): + print(step) + + print("="*60) + + + # ========================= + # ✅ TESTE 1 - OK (CONFORME) + # ========================= + rodar_teste( + "OK - Cancelamento vĂĄlido", + "quero cancelar VAS", + { + "ajuste_valor": 20, + "resposta_llm": "Cancelamento realizado com sucesso." + } + ) + + + # ========================= + # ❌ TESTE 2 - TOXICIDADE + # ========================= + rodar_teste( + "TOX - Linguagem ofensiva", + "quero cancelar VAS seu lixo", + { + "ajuste_valor": 20, + "resposta_llm": "Cancelamento realizado." + } + ) + + + # ========================= + # ❌ TESTE 3 - ALÇADA + # ========================= + rodar_teste( + "ADJ - Valor acima da alçada", + "quero cancelar VAS", + { + "ajuste_valor": 2000, + "resposta_llm": "Cancelamento realizado." + } + ) + + + # ========================= + # ❌ TESTE 4 - GROUNDEDNESS + # ========================= + rodar_teste( + "GND - Resposta nĂŁo confiĂĄvel", + "quero cancelar VAS", + { + "ajuste_valor": 20, + "resposta_llm": "O cancelamento ativa cashback infinito e crĂ©dito ilimitado." + } + ) + + + # ========================= + # ⚠ TESTE 5 - MÚLTIPLOS PROBLEMAS + # ========================= + rodar_teste( + "MULTI - TOX + ADJ + GND", + "quero cancelar VAS seu inĂștil", + { + "ajuste_valor": 5000, + "resposta_llm": "VocĂȘ ganha benefĂ­cios ilimitados com esse cancelamento." + } + ) - print(executar_atendimento(user_input, context)) \ No newline at end of file