From 1711575abe65c8e446457cce4dc16fca5122b4f5 Mon Sep 17 00:00:00 2001 From: "cristiano.hoshikawa" Date: Mon, 7 Sep 2026 22:57:36 -0300 Subject: [PATCH] bugfix reconciliation extractor --- .../__pycache__/__init__.cpython-313.pyc | Bin 411 -> 411 bytes .../__pycache__/extensions.cpython-313.pyc | Bin 2139 -> 2139 bytes .../__pycache__/idempotency.cpython-313.pyc | Bin 8912 -> 8912 bytes .../__pycache__/observer.cpython-313.pyc | Bin 17555 -> 17555 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 547 -> 547 bytes .../composite_publisher.cpython-313.pyc | Bin 2502 -> 2502 bytes .../__pycache__/event_builder.cpython-313.pyc | Bin 1260 -> 1260 bytes .../__pycache__/factory.cpython-313.pyc | Bin 3996 -> 3996 bytes .../__pycache__/publisher.cpython-313.pyc | Bin 1872 -> 1872 bytes .../tim_payload_mapper.cpython-313.pyc | Bin 9286 -> 9286 bytes .../__pycache__/tim_sequence.cpython-313.pyc | Bin 17561 -> 17561 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 514 -> 514 bytes .../__pycache__/kafka.cpython-313.pyc | Bin 1812 -> 1812 bytes .../__pycache__/langfuse.cpython-313.pyc | Bin 23172 -> 23172 bytes .../__pycache__/oci_streaming.cpython-313.pyc | Bin 1821 -> 1821 bytes .../__pycache__/pubsub.cpython-313.pyc | Bin 7440 -> 7440 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 403 -> 403 bytes .../usage_repository.cpython-313.pyc | Bin 15686 -> 15686 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 213 -> 213 bytes .../cache/__pycache__/cache.cpython-313.pyc | Bin 16523 -> 16523 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 216 -> 216 bytes .../__pycache__/adapters.cpython-313.pyc | Bin 4172 -> 4172 bytes .../channels/__pycache__/base.cpython-313.pyc | Bin 1796 -> 1796 bytes .../__pycache__/gateway.cpython-313.pyc | Bin 5771 -> 5771 bytes .../__pycache__/interruption.cpython-313.pyc | Bin 6456 -> 6456 bytes .../__pycache__/transcription.cpython-313.pyc | Bin 1429 -> 1429 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 923 -> 923 bytes .../checkpoint_repository.cpython-313.pyc | Bin 27163 -> 27163 bytes .../langgraph_saver.cpython-313.pyc | Bin 33265 -> 33265 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 214 -> 214 bytes .../agent_registry.cpython-313.pyc | Bin 6947 -> 6947 bytes .../__pycache__/settings.cpython-313.pyc | Bin 13789 -> 13789 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 306 -> 306 bytes .../mcp_gateway_client.cpython-313.pyc | Bin 3332 -> 3332 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 1501 -> 1501 bytes .../__pycache__/base.cpython-313.pyc | Bin 1375 -> 1375 bytes .../__pycache__/config_loader.cpython-313.pyc | Bin 9160 -> 9160 bytes .../__pycache__/custom_rails.cpython-313.pyc | Bin 4404 -> 4404 bytes .../framework_llm_client.cpython-313.pyc | Bin 19673 -> 19673 bytes .../__pycache__/llm_rails.cpython-313.pyc | Bin 5923 -> 5923 bytes .../output_supervisor.cpython-313.pyc | Bin 24306 -> 24306 bytes .../parallel_executor.cpython-313.pyc | Bin 21862 -> 21862 bytes .../__pycache__/pipeline.cpython-313.pyc | Bin 10889 -> 10889 bytes .../__pycache__/rail_action.cpython-313.pyc | Bin 654 -> 654 bytes .../__pycache__/rail_decision.cpython-313.pyc | Bin 1605 -> 1605 bytes .../__pycache__/rail_result.cpython-313.pyc | Bin 1004 -> 1004 bytes .../__pycache__/rails.cpython-313.pyc | Bin 43324 -> 43324 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 2994 -> 2994 bytes .../__pycache__/_compat.cpython-313.pyc | Bin 2445 -> 2445 bytes .../contestation_validation.cpython-313.pyc | Bin 2177 -> 2177 bytes .../__pycache__/contracts.cpython-313.pyc | Bin 6901 -> 6901 bytes .../__pycache__/input_size.cpython-313.pyc | Bin 3649 -> 3649 bytes .../__pycache__/llm_adapter.cpython-313.pyc | Bin 3799 -> 3799 bytes .../__pycache__/llm_client.cpython-313.pyc | Bin 7454 -> 7454 bytes .../__pycache__/llm_rails.cpython-313.pyc | Bin 8894 -> 8894 bytes .../output_sanitization.cpython-313.pyc | Bin 13910 -> 13910 bytes .../__pycache__/pipeline.cpython-313.pyc | Bin 12661 -> 12661 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 473 -> 473 bytes .../__pycache__/_context.cpython-313.pyc | Bin 5871 -> 5871 bytes .../ausencia_oferta_proativa.cpython-313.pyc | Bin 12205 -> 12205 bytes .../__pycache__/coerencia.cpython-313.pyc | Bin 4157 -> 4157 bytes .../__pycache__/dlex_in.cpython-313.pyc | Bin 1304 -> 1304 bytes .../__pycache__/dlex_out.cpython-313.pyc | Bin 1815 -> 1815 bytes .../__pycache__/fallback.cpython-313.pyc | Bin 17652 -> 17652 bytes .../__pycache__/fraseologia.cpython-313.pyc | Bin 7633 -> 7633 bytes .../__pycache__/out_of_scope.cpython-313.pyc | Bin 17493 -> 17493 bytes .../prompts/__pycache__/pinj.cpython-313.pyc | Bin 8424 -> 8424 bytes .../__pycache__/ragsec.cpython-313.pyc | Bin 1120 -> 1120 bytes .../__pycache__/revprec.cpython-313.pyc | Bin 3150 -> 3150 bytes .../prompts/__pycache__/tox.cpython-313.pyc | Bin 644 -> 644 bytes .../toxicidade_output.cpython-313.pyc | Bin 928 -> 928 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 1663 -> 1663 bytes .../rails/__pycache__/alcada.cpython-313.pyc | Bin 4999 -> 4999 bytes .../rails/__pycache__/anatel.cpython-313.pyc | Bin 9148 -> 9148 bytes .../__pycache__/confirmation.cpython-313.pyc | Bin 11042 -> 11042 bytes .../rails/__pycache__/dlex_in.cpython-313.pyc | Bin 3279 -> 3279 bytes .../__pycache__/dlex_out.cpython-313.pyc | Bin 3331 -> 3331 bytes .../rails/__pycache__/ragsec.cpython-313.pyc | Bin 5462 -> 5462 bytes .../rails/__pycache__/revprec.cpython-313.pyc | Bin 5470 -> 5470 bytes .../rails/__pycache__/tox.cpython-313.pyc | Bin 8293 -> 8293 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 533 -> 533 bytes .../rules/__pycache__/alcada.cpython-313.pyc | Bin 1881 -> 1881 bytes .../__pycache__/pinj_patterns.cpython-313.pyc | Bin 3730 -> 3730 bytes .../__pycache__/tox_blocklist.cpython-313.pyc | Bin 1506 -> 1506 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 408 -> 408 bytes .../__pycache__/mcp_mapper.cpython-313.pyc | Bin 4692 -> 4692 bytes .../__pycache__/models.cpython-313.pyc | Bin 3144 -> 3144 bytes .../__pycache__/resolver.cpython-313.pyc | Bin 4713 -> 4713 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 618 -> 618 bytes .../judges/__pycache__/judge.cpython-313.pyc | Bin 41125 -> 41125 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 225 -> 225 bytes .../__pycache__/llm_client.cpython-313.pyc | Bin 5404 -> 5404 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 233 -> 233 bytes .../prompts/__pycache__/aluc.cpython-313.pyc | Bin 6529 -> 6529 bytes .../prompts/__pycache__/csi.cpython-313.pyc | Bin 1332 -> 1332 bytes .../__pycache__/fallback.cpython-313.pyc | Bin 8035 -> 8035 bytes .../prompts/__pycache__/rqlt.cpython-313.pyc | Bin 1165 -> 1165 bytes .../prompts/__pycache__/vctn.cpython-313.pyc | Bin 626 -> 626 bytes .../llm/__pycache__/__init__.cpython-313.pyc | Bin 476 -> 476 bytes .../llm/__pycache__/base.cpython-313.pyc | Bin 1623 -> 1623 bytes .../profile_resolver.cpython-313.pyc | Bin 9322 -> 9322 bytes .../llm/__pycache__/providers.cpython-313.pyc | Bin 46978 -> 46978 bytes .../structured_output.cpython-313.pyc | Bin 7459 -> 7459 bytes .../llm/__pycache__/types.cpython-313.pyc | Bin 1274 -> 1274 bytes .../mcp/__pycache__/__init__.cpython-313.pyc | Bin 473 -> 473 bytes .../mcp/__pycache__/client.cpython-313.pyc | Bin 18426 -> 18426 bytes .../mcp/__pycache__/models.cpython-313.pyc | Bin 2136 -> 2136 bytes .../mcp/__pycache__/registry.cpython-313.pyc | Bin 4740 -> 4740 bytes .../__pycache__/tool_policy.cpython-313.pyc | Bin 5685 -> 5685 bytes .../__pycache__/tool_router.cpython-313.pyc | Bin 14189 -> 14189 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 1135 -> 1135 bytes .../long_term_extractor.cpython-313.pyc | Bin 2513 -> 2513 bytes .../long_term_memory.cpython-313.pyc | Bin 6839 -> 6839 bytes .../long_term_models.cpython-313.pyc | Bin 1748 -> 1748 bytes .../long_term_store.cpython-313.pyc | Bin 29186 -> 29186 bytes .../message_history.cpython-313.pyc | Bin 8359 -> 8359 bytes .../summary_memory.cpython-313.pyc | Bin 12510 -> 12510 bytes .../__pycache__/summary_store.cpython-313.pyc | Bin 9520 -> 9520 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 214 -> 214 bytes .../__pycache__/identity.cpython-313.pyc | Bin 3465 -> 3465 bytes .../__pycache__/session.cpython-313.pyc | Bin 2708 -> 2708 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 1394 -> 1394 bytes .../__pycache__/code_mapper.cpython-313.pyc | Bin 21447 -> 21447 bytes .../__pycache__/context.cpython-313.pyc | Bin 7386 -> 7386 bytes .../__pycache__/event_bus.cpython-313.pyc | Bin 3632 -> 3632 bytes .../guardrail_events.cpython-313.pyc | Bin 2050 -> 2050 bytes .../__pycache__/ic_events.cpython-313.pyc | Bin 625 -> 625 bytes .../__pycache__/judge_events.cpython-313.pyc | Bin 1410 -> 1410 bytes .../langgraph_telemetry.cpython-313.pyc | Bin 4963 -> 4963 bytes .../__pycache__/llm_advisors.cpython-313.pyc | Bin 2937 -> 2937 bytes .../__pycache__/noc_contract.cpython-313.pyc | Bin 5074 -> 5074 bytes .../__pycache__/noc_otel.cpython-313.pyc | Bin 6321 -> 6321 bytes .../__pycache__/observer.cpython-313.pyc | Bin 5104 -> 5104 bytes .../__pycache__/otel.cpython-313.pyc | Bin 3411 -> 3411 bytes .../streaming_events.cpython-313.pyc | Bin 1834 -> 1834 bytes .../__pycache__/telemetry.cpython-313.pyc | Bin 52427 -> 52427 bytes .../__pycache__/token_cost.cpython-313.pyc | Bin 8690 -> 8690 bytes .../workflow_events.cpython-313.pyc | Bin 3329 -> 3329 bytes .../oci/__pycache__/__init__.cpython-313.pyc | Bin 211 -> 211 bytes .../oci/__pycache__/auth.cpython-313.pyc | Bin 3243 -> 3243 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 219 -> 219 bytes .../__pycache__/oracle_store.cpython-313.pyc | Bin 45931 -> 45931 bytes .../__pycache__/sqlite_store.cpython-313.pyc | Bin 15018 -> 15018 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 454 -> 454 bytes .../__pycache__/renderers.cpython-313.pyc | Bin 4317 -> 4317 bytes .../rag/__pycache__/__init__.cpython-313.pyc | Bin 709 -> 709 bytes .../embedding_provider.cpython-313.pyc | Bin 6516 -> 6516 bytes .../__pycache__/graph_store.cpython-313.pyc | Bin 5527 -> 5527 bytes .../rag/__pycache__/ingest.cpython-313.pyc | Bin 12580 -> 12580 bytes .../__pycache__/kbdb_service.cpython-313.pyc | Bin 10011 -> 10011 bytes .../__pycache__/rag_service.cpython-313.pyc | Bin 10897 -> 10897 bytes .../__pycache__/vector_store.cpython-313.pyc | Bin 18655 -> 18655 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 220 -> 220 bytes .../session_repository.cpython-313.pyc | Bin 8589 -> 8589 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 425 -> 425 bytes .../__pycache__/config_loader.cpython-313.pyc | Bin 2296 -> 2296 bytes .../__pycache__/continuity.cpython-313.pyc | Bin 15933 -> 15933 bytes .../enterprise_router.cpython-313.pyc | Bin 62132 -> 61971 bytes .../__pycache__/models.cpython-313.pyc | Bin 2446 -> 2446 bytes .../routing/enterprise_router.py | 40 ++- .../__pycache__/__init__.cpython-313.pyc | Bin 348 -> 348 bytes .../__pycache__/agent_runtime.cpython-313.pyc | Bin 210431 -> 200597 bytes .../transaction_parameters.cpython-313.pyc | Bin 32568 -> 14476 bytes .../agent_framework/runtime/agent_runtime.py | 247 ++----------- .../runtime/transaction_parameters.py | 335 +----------------- .../sse/__pycache__/__init__.cpython-313.pyc | Bin 211 -> 211 bytes .../sse/__pycache__/events.cpython-313.pyc | Bin 9587 -> 9587 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 218 -> 218 bytes .../__pycache__/supervisor.cpython-313.pyc | Bin 4943 -> 4943 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 878 -> 878 bytes .../__pycache__/graph.cpython-313.pyc | Bin 1415 -> 1415 bytes .../input_contract.cpython-313.pyc | Bin 8790 -> 8790 bytes .../__pycache__/models.cpython-313.pyc | Bin 7669 -> 7669 bytes .../__pycache__/registry.cpython-313.pyc | Bin 2361 -> 2361 bytes .../__pycache__/repository.cpython-313.pyc | Bin 2714 -> 2714 bytes .../__pycache__/runtime.cpython-313.pyc | Bin 36152 -> 36152 bytes .../__pycache__/tool_executor.cpython-313.pyc | Bin 1966 -> 1966 bytes 177 files changed, 64 insertions(+), 558 deletions(-) diff --git a/libs/agent_framework/src/agent_framework/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/__pycache__/__init__.cpython-313.pyc index c8644504dadbf4361aa73d3aad724fdde447bda5..ce1e9f932ef9681c3ac6d82b0b3abcf39917f394 100644 GIT binary patch delta 19 ZcmbQuJe!&8GcPX}0}$NK+{iVN5dbj^1n&R< delta 19 ZcmbQuJe!&8GcPX}0}!-ZZ{(WD2mmfF1Z@BS diff --git a/libs/agent_framework/src/agent_framework/__pycache__/extensions.cpython-313.pyc b/libs/agent_framework/src/agent_framework/__pycache__/extensions.cpython-313.pyc index 0b3673ef0959f13c6f96f42df240e6de9cff65be..807caa308a05696a980d0132b0f4a131280a78af 100644 GIT binary patch delta 19 ZcmcaDa9e=uGcPX}0}$NK+{hKk0RTHq1yBG0 delta 19 ZcmcaDa9e=uGcPX}0}!-ZZ{!N(001~|1kL~e diff --git a/libs/agent_framework/src/agent_framework/__pycache__/idempotency.cpython-313.pyc b/libs/agent_framework/src/agent_framework/__pycache__/idempotency.cpython-313.pyc index 01a427cf7061dcc4f94ea30209a6aa6b9a851bbd..6f08ffe36b73995050c0785b03287d184464dab4 100644 GIT binary patch delta 19 ZcmccMdcl?JGcPX}0}$NK+{krI2>?OQ1~UKv delta 19 ZcmccMdcl?JGcPX}0}!-ZZ{#|r1OPtq1+f4C diff --git a/libs/agent_framework/src/agent_framework/__pycache__/observer.cpython-313.pyc b/libs/agent_framework/src/agent_framework/__pycache__/observer.cpython-313.pyc index 9f2cc95ada629fb719a3a4df8933b18bad6c5e43..91e70cbde5248387d855fa5a5b8f9450e8b82efd 100644 GIT binary patch delta 21 bcmbQ-$vC-_k?S)rFBbz4+|Jy{)#(BNMPvpj delta 21 bcmbQ-$vC-_k?S)rFBbz4v|DfF>U04BLWTvV diff --git a/libs/agent_framework/src/agent_framework/analytics/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/analytics/__pycache__/__init__.cpython-313.pyc index 5d2df1d91522c863aa7bb6856a5c1d1d62d62992..fb49d21249dc76d215aae01ae8558e99a0dfe131 100644 GIT binary patch delta 19 ZcmZ3?vY3VIGcPX}0}$NK+{h)#1OPE#1d0Fv delta 19 ZcmZ3?vY3VIGcPX}0}!-ZZ{(6>0st<71PA~C diff --git a/libs/agent_framework/src/agent_framework/analytics/__pycache__/composite_publisher.cpython-313.pyc b/libs/agent_framework/src/agent_framework/analytics/__pycache__/composite_publisher.cpython-313.pyc index d0bf3578b90877a06740f796af072f9e8ac41454..e981f8015b7461b23cb310b3750aa1817929347d 100644 GIT binary patch delta 19 ZcmX>md`y_@GcPX}0}$NK+{m?u6974u1(*N; delta 19 ZcmX>md`y_@GcPX}0}!-ZZ{*s;2>>>@1r`7R diff --git a/libs/agent_framework/src/agent_framework/analytics/__pycache__/event_builder.cpython-313.pyc b/libs/agent_framework/src/agent_framework/analytics/__pycache__/event_builder.cpython-313.pyc index 86e20b7e129bb941ec30dc1f5ef20c7ff83af479..1d9aa3cbb521b36ca4fb43488d913feae4bb8496 100644 GIT binary patch delta 19 ZcmaFE`G%A0GcPX}0}$NK+{pEa1pqza1@Qm? delta 19 ZcmaFE`G%A0GcPX}0}!-ZZ{&K!0suP$1#bWV diff --git a/libs/agent_framework/src/agent_framework/analytics/__pycache__/factory.cpython-313.pyc b/libs/agent_framework/src/agent_framework/analytics/__pycache__/factory.cpython-313.pyc index 6c1576622286d7c40c2edb1cb959df8e2f0c417f..765ccd7de86b1570bc1622630d8431b6cd280316 100644 GIT binary patch delta 19 ZcmbOuKS!SHGcPX}0}$NK+{iVF9{@D?1vmfz delta 19 ZcmbOuKS!SHGcPX}0}!-ZZ{(W94*)V61hxPG diff --git a/libs/agent_framework/src/agent_framework/analytics/__pycache__/publisher.cpython-313.pyc b/libs/agent_framework/src/agent_framework/analytics/__pycache__/publisher.cpython-313.pyc index 4a48fe975da9e23ea9d635f12509237b9e0ee701..c229aea4baf9f9a73d6e22a6ce2670e9f4207c3e 100644 GIT binary patch delta 19 Zcmcb>cY%-VGcPX}0}$NK+{op|4gfi31u6gl delta 19 Zcmcb>cY%-VGcPX}0}!-ZZ{%`g2LLvR1gHQ2 diff --git a/libs/agent_framework/src/agent_framework/analytics/__pycache__/tim_payload_mapper.cpython-313.pyc b/libs/agent_framework/src/agent_framework/analytics/__pycache__/tim_payload_mapper.cpython-313.pyc index e54ad9bc4183565dab6a48e1a3b05cb707c17462..1283c1078a048d6fc08587964b5efe9576b4165c 100644 GIT binary patch delta 19 ZcmX@+am<73GcPX}0}$NK+{k640sud|1)Tr@ delta 19 ZcmX@+am<73GcPX}0}!-ZZ{)I30RTMR1sebW diff --git a/libs/agent_framework/src/agent_framework/analytics/__pycache__/tim_sequence.cpython-313.pyc b/libs/agent_framework/src/agent_framework/analytics/__pycache__/tim_sequence.cpython-313.pyc index fb3e4decaad2fe199e52f474bee71a695bd84478..696a9cad26ad465dc634876eed1211932254ec94 100644 GIT binary patch delta 21 bcmbQ)$vCrURMELwp6e diff --git a/libs/agent_framework/src/agent_framework/analytics/providers/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/analytics/providers/__pycache__/__init__.cpython-313.pyc index db8287d1aa0c9816e2bcfc6424fe5060f3ae3b0f..777d08ad2cb4da14b492e91b505e8a6ee389903e 100644 GIT binary patch delta 19 ZcmZo-X=35}%*)Hg00g%)H*)=81OP601ttIh delta 19 ZcmZo-X=35}%*)Hg00iyU8@YZk0st$T1f&1} diff --git a/libs/agent_framework/src/agent_framework/analytics/providers/__pycache__/kafka.cpython-313.pyc b/libs/agent_framework/src/agent_framework/analytics/providers/__pycache__/kafka.cpython-313.pyc index 3c07bb4db4a6e5b1c847f8015442e58dc33bbedb..1de30648167f05abed817b4765865c9ce59c33a3 100644 GIT binary patch delta 19 ZcmbQjH-(SuGcPX}0}$NK+{nen4gfHI1a<%b delta 19 ZcmbQjH-(SuGcPX}0}!-ZZ{*@)2LLUg1M~m@ diff --git a/libs/agent_framework/src/agent_framework/analytics/providers/__pycache__/langfuse.cpython-313.pyc b/libs/agent_framework/src/agent_framework/analytics/providers/__pycache__/langfuse.cpython-313.pyc index 4070c5c20ab236bbf699944d3ce24ad36f782137..97d50e4236dee604530cce4ce7fa2211fa43e604 100644 GIT binary patch delta 21 bcmZqK%Gk1%k?S)rFBbz4+|Jy{RTTvQNpA*e delta 21 bcmZqK%Gk1%k?S)rFBbz4v|DfFs)_;tMv(>Q diff --git a/libs/agent_framework/src/agent_framework/analytics/providers/__pycache__/oci_streaming.cpython-313.pyc b/libs/agent_framework/src/agent_framework/analytics/providers/__pycache__/oci_streaming.cpython-313.pyc index df4431a0f09f366066e28488aadf429496bcb0d6..d79f3db27efb638aca926455b195f2889595e41d 100644 GIT binary patch delta 19 ZcmbQsH?2<1v~%% delta 19 ZcmdmCw8Mz&GcPX}0}!-ZZ{*UG1OPYE1iAnK diff --git a/libs/agent_framework/src/agent_framework/channels/__pycache__/transcription.cpython-313.pyc b/libs/agent_framework/src/agent_framework/channels/__pycache__/transcription.cpython-313.pyc index 1f899dde96589568ac7c0bc22d2f8a2918791581..f9581836a70b199742d219a1cad872040b766773 100644 GIT binary patch delta 19 ZcmbQrJ(Zj5GcPX}0}$NK+{o3<3IH)Y1n~d> delta 19 ZcmbQrJ(Zj5GcPX}0}!-ZZ{+G`1pqEy1aANU diff --git a/libs/agent_framework/src/agent_framework/checkpoints/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/checkpoints/__pycache__/__init__.cpython-313.pyc index c2fd46843afb6af8005e8c566c4c499b7f41917f..f0d1c0a3d27435f2caf378446bccd912f15a1bc8 100644 GIT binary patch delta 19 ZcmbQuKAWBEGcPX}0}$NK+{iVN82~Ys1o;2} delta 19 ZcmbQuKAWBEGcPX}0}!-ZZ{(WD3;-^;1a|-c diff --git a/libs/agent_framework/src/agent_framework/checkpoints/__pycache__/checkpoint_repository.cpython-313.pyc b/libs/agent_framework/src/agent_framework/checkpoints/__pycache__/checkpoint_repository.cpython-313.pyc index 9e5786b2d556f4bb2ea8e7396e2338a9ec85e5b1..1de528d25fb6d7ba79286df61294222352517c2f 100644 GIT binary patch delta 21 bcmbPzg>m*3My}7iyj%=Ga65A&mtYnEP^kud delta 21 bcmbPzg>m*3My}7iyj%=G&~CkvOE3!nP0I!P diff --git a/libs/agent_framework/src/agent_framework/checkpoints/__pycache__/langgraph_saver.cpython-313.pyc b/libs/agent_framework/src/agent_framework/checkpoints/__pycache__/langgraph_saver.cpython-313.pyc index 33c0b82e72114c829bb766b82c3faae21936474a..5b1b72e52b354a656b251737e60f951f5b1f4999 100644 GIT binary patch delta 21 bcmey^%=EFDiR&{jFBbz4+|Jy{^}G=PQ}hRQ delta 21 bcmey^%=EFDiR&{jFBbz4v|DfFdfo^CQ5FXC diff --git a/libs/agent_framework/src/agent_framework/config/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/config/__pycache__/__init__.cpython-313.pyc index e10a46fda96acd540ae1e3b62f2e1fcad32cf624..d425540198f6eade2b8d2ebf7be4c147ccd9cc5e 100644 GIT binary patch delta 18 Ycmcb{c#Vr diff --git a/libs/agent_framework/src/agent_framework/gateways/__pycache__/mcp_gateway_client.cpython-313.pyc b/libs/agent_framework/src/agent_framework/gateways/__pycache__/mcp_gateway_client.cpython-313.pyc index a12b9560a59d4c600ea4495194dee479f61aa362..35c314ee5b3c43c701992554fdf2b30ea8c9c7fa 100644 GIT binary patch delta 19 ZcmZpXYLVjl%*)Hg00g%)H*)>r0RS<(1!DjJ delta 19 ZcmZpXYLVjl%*)Hg00bS@8@Yb*001uI1mXYy diff --git a/libs/agent_framework/src/agent_framework/guardrails/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/__pycache__/__init__.cpython-313.pyc index 4c92ecd39ca143dcd0cd5fee50ca166160da247d..9d7ec1f172bbf2e2aad34879f80a2271fd0da34f 100644 GIT binary patch delta 19 Zcmcc1eV3c-GcPX}0}$NK+{ksA6#zTz1<3#a delta 19 Zcmcc1eV3c-GcPX}0}ymrZ{)hn3II721xNq@ diff --git a/libs/agent_framework/src/agent_framework/guardrails/__pycache__/base.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/__pycache__/base.cpython-313.pyc index 613c2b32ab06baba643f4839375f526aeb57a87f..411bdd790a2732a4ce62d656584992034bf581af 100644 GIT binary patch delta 19 Zcmcc5b)SptGcPX}0}$NK+{hKm3IID61x)|| delta 19 Zcmcc5b)SptGcPX}0}ymrZ{!MP1pqic1k3;c diff --git a/libs/agent_framework/src/agent_framework/guardrails/__pycache__/config_loader.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/__pycache__/config_loader.cpython-313.pyc index 0d971ac27bb5aaab3ee37cff23be1c6b33568392..83fc0fbe9968cd118ef53fca59904173915b6e5f 100644 GIT binary patch delta 19 ZcmX@%e!`vWGcPX}0}$NK+{m?082~`!1|R?c delta 19 ZcmX@%e!`vWGcPX}0}ymrZ{*si3;;e11)l%_ diff --git a/libs/agent_framework/src/agent_framework/guardrails/__pycache__/custom_rails.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/__pycache__/custom_rails.cpython-313.pyc index c7409ffbe1a49d2744fe84a57fa5dc698788ec60..46aba4528cd469cfb65e0d02f6a692b4ab8da1d7 100644 GIT binary patch delta 19 Zcmdm@v_*;QGcPX}0}$NK+{mRR2mm+m1qc8D delta 19 Zcmdm@v_*;QGcPX}0}ymrZ{*Sv1OPP{1cv|s diff --git a/libs/agent_framework/src/agent_framework/guardrails/__pycache__/framework_llm_client.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/__pycache__/framework_llm_client.cpython-313.pyc index e794c9bad9b751e89af97a01ea8696697c319abf..37a3be28a91e1f83bedc1b86c176591245db0216 100644 GIT binary patch delta 21 bcmcaPlkw(EMy}7iyj%=Ga65A&*LfcRQt}5P delta 21 bcmcaPlkw(EMy}7iyj%=G&|$ri>%0#DP#OlI diff --git a/libs/agent_framework/src/agent_framework/guardrails/__pycache__/llm_rails.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/__pycache__/llm_rails.cpython-313.pyc index 551e4fdae582748bf8cac4bbe52a2a53068dd109..15525708ce5cd7693985d5cfa2ae98412c4b59ed 100644 GIT binary patch delta 19 ZcmZ3iw^)zsGcPX}0}$NK+{h&<4gfa@1oHp@ delta 19 ZcmZ3iw^)zsGcPX}0}ymrZ{(5`2LLoM1abfX diff --git a/libs/agent_framework/src/agent_framework/guardrails/__pycache__/output_supervisor.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/__pycache__/output_supervisor.cpython-313.pyc index 8c8dbfde303015698221600d56591aa914584f1b..cba5b65bab9e4a5a8d899af2e18002a14488462b 100644 GIT binary patch delta 21 bcmeygm+{kHMy}7iyj%=Ga65A&*NZp+Tsa5F delta 21 bcmeygm+{kHMy}7iyj%=G&|$ri>qQ&@Sz!l8 diff --git a/libs/agent_framework/src/agent_framework/guardrails/__pycache__/parallel_executor.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/__pycache__/parallel_executor.cpython-313.pyc index bf2bc30a3c2768c80518bd266b801b2683836830..7e6aac259fe338f6d76810aa3eafceb6211cbe8e 100644 GIT binary patch delta 21 bcmaF1it*VhMy}7iyj%=Ga65A&S4=1XR)q%i delta 21 bcmaF1it*VhMy}7iyj%=G&|$riD<%{GQ>_Mb diff --git a/libs/agent_framework/src/agent_framework/guardrails/__pycache__/pipeline.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/__pycache__/pipeline.cpython-313.pyc index 1a2aa4dfe7b167bff3be54cf8aee75325ad3c343..8dde16feb181034fe7ba63f795f7e35f98b711a4 100644 GIT binary patch delta 19 ZcmeAS?F{Am%*)Hg00g%)H*(c$0RTB|1%?0s delta 19 YcmeAS?F{Am%*)Hg00bS@8@cMW05+8c1poj5 diff --git a/libs/agent_framework/src/agent_framework/guardrails/__pycache__/rail_action.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/__pycache__/rail_action.cpython-313.pyc index 6408ba934a053d88ab393ab2ea20b9d1c4843458..9c73700d2813445e62300af94bd16ceec3662bc5 100644 GIT binary patch delta 19 ZcmeBU?PKNo%*)Hg00g%)H*&Qw0RS&!1kC^d delta 19 YcmeBU?PKNo%*)Hg00bS@8@XDT04$3HOaK4? diff --git a/libs/agent_framework/src/agent_framework/guardrails/__pycache__/rail_decision.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/__pycache__/rail_decision.cpython-313.pyc index 5e4f560096a7502d13bb47e3fae427cbc57777f9..15d43753ba9b2a84fac78b18ea10f89de07b65fa 100644 GIT binary patch delta 19 ZcmX@gbCiecGcPX}0}$NK+{k6k1^_pI1q1*9 delta 19 ZcmX@gbCiecGcPX}0}ymrZ{)IO0{}Fq1cLwo diff --git a/libs/agent_framework/src/agent_framework/guardrails/__pycache__/rail_result.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/__pycache__/rail_result.cpython-313.pyc index e4861d3fead9bae895cb805dec778fc44b77b5fc..e4a777cefa3d75953bd2195f7651c549824b5cc2 100644 GIT binary patch delta 19 ZcmaFE{)V0FGcPX}0}$NK+{pEa82~+;1?&I- delta 19 ZcmaFE{)V0FGcPX}0}ymrZ{&K!3;;UB1#18R diff --git a/libs/agent_framework/src/agent_framework/guardrails/__pycache__/rails.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/__pycache__/rails.cpython-313.pyc index f91e7d199721d81d4528277ae03c04e97c21cb1d..81567b4f75d597629543b6d2ccc90bc99e42d382 100644 GIT binary patch delta 21 bcmdmUiD}OzCa%xCyj%=Ga65A&m(fZ9Rtg6k delta 21 bcmdmUiD}OzCa%xCyj%=G&|$ri%V;G4Q!)md diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/__init__.cpython-313.pyc index 47e364facaeda8efc259cd639c1fa1bd925f445f..744f80f5c5d7318b22bd66a166614d1a7a28f7d6 100644 GIT binary patch delta 19 ZcmdlazDb3IIhb273Si delta 19 Zcmexr`qh-{GcPX}0}ymrZ{&I{1pq=#1^EB~ diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/input_size.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/input_size.cpython-313.pyc index 77f3ef5a93ac6f43ce07f1897868f35748267855..84347c885a8a4f09766e64d734d1357fbc64c07d 100644 GIT binary patch delta 19 ZcmX>ob5MrsGcPX}0}$NK+{k6l2LL$_1t0(b delta 19 ZcmX>ob5MrsGcPX}0}ymrZ{#xP0{}KR1fKu^ diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/llm_adapter.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/llm_adapter.cpython-313.pyc index a670b4acac0531badf6c5b9c3281d095a11102ea..0366ecf2ff1b033d61a5370c37a5af783c9465e4 100644 GIT binary patch delta 19 ZcmcaEdtH|6GcPX}0}$NK+{ks74*)%N1>^t# delta 19 ZcmcaEdtH|6GcPX}0}ymrZ{#}52LL*q1!DjJ diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/llm_client.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/llm_client.cpython-313.pyc index d4f4b07e47d81e6f66caf8938055559fde9c8d48..8435c79964d1aef42f5e0a215f4da581bfb3f895 100644 GIT binary patch delta 19 ZcmbPdHP4FcGcPX}0}$NK+{h&&3jjCh1p)v7 delta 19 ZcmbPdHP4FcGcPX}0}ymrZ{!k@1pqY=1c3km diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/llm_rails.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/llm_rails.cpython-313.pyc index 2687ec92da8002f8047ffbba491283a947cb77b0..9f11ca3c5ffb34802a11f668a2e4595be112873a 100644 GIT binary patch delta 19 Zcmdnzy3dvCGcPX}0}$NK+{m>>2>?GM1^oa3 delta 19 Zcmdnzy3dvCGcPX}0}ymrZ{*sd1OPls1$+Pi diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/output_sanitization.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/output_sanitization.cpython-313.pyc index a5d3af3e62706ed754d84f1293cfb4fb2d59214f..401fe78747fa6765ff6d5e4aa7f1adf40cf4abf0 100644 GIT binary patch delta 19 ZcmcbXb1jGKGcPX}0}$NK+{oo)1^`C&1}6Xj delta 19 ZcmcbXb1jGKGcPX}0}ymrZ{+eZ0{}!F1*QN1 diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/pipeline.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/pipeline.cpython-313.pyc index 63511e79505f82555aef825d3434f770aa93449f..69494e732a706979de39af6aa3fb89d8c196b8f9 100644 GIT binary patch delta 19 ZcmeyG^fig=GcPX}0}$NK+{l$}2mnep25SHS delta 19 ZcmeyG^fig=GcPX}0}ymrZ{*501OP`~1?m6* diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/__init__.cpython-313.pyc index 6068ff8e6fb100eeb2c80bd021c59e4bf90db0d0..c2e493eb3f2fffb4c91e94b009d3fdadd868fa7d 100644 GIT binary patch delta 19 Zcmcb~e3O~$GcPX}0}$NF+{ksF5db diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/ragsec.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/ragsec.cpython-313.pyc index 9de8beb68fa2b0fce74cfc419e5cba429683cb9e..288c058af36d21749a2d6d7ae3982ba9fedf07f2 100644 GIT binary patch delta 19 ZcmaFB@qmNtGcPX}0}$NF+{hKi0suPw1xx?{ delta 19 ZcmaFB@qmNtGcPX}0}ymrZ{!MN0RT831j+ya diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/revprec.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/revprec.cpython-313.pyc index e6ed86321cf1f9249e76cbdb2bd30e6ab5f14d8b..1140c6aaf99ffcca67206a0df2888a06e1b75666 100644 GIT binary patch delta 19 ZcmX>naZZBkGcPX}0}$NF+{op^0{}XC1wH@( delta 19 ZcmX>naZZBkGcPX}0}ymrZ{%{}0RT6f1iSzM diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/tox.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/tox.cpython-313.pyc index 002f8cc3fe346941655c9d357a99af69386e1be0..0e61c16a7f8ae6733763faed965fe024aa1c18a4 100644 GIT binary patch delta 19 ZcmZo+ZDHm5%*)Hg00eh3H*!@m0RS!S1h4=A delta 19 YcmZo+ZDHm5%*)Hg00bS@8@Z~O04om!E&u=k diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/toxicidade_output.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/toxicidade_output.cpython-313.pyc index 58400365e1465e68a04f551a633807bb0c56b9d6..3299142be1a5054fc5c3869830bbdeea20142beb 100644 GIT binary patch delta 19 ZcmZ3$zJQ(UGcPX}0}$NF+{iVJ82~a`1qlEE delta 19 ZcmZ3$zJQ(UGcPX}0}ymrZ{(WB3;-{D1cv|s diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/__init__.cpython-313.pyc index d36213833f1886657bd86d230e868ca6d330be79..463c0bef084488da3435791a26d1971da3eefd30 100644 GIT binary patch delta 19 Zcmey*^Ph+7GcPX}0}$NF+{jhR1^_@I1+xGE delta 19 Zcmey*^Ph+7GcPX}0}ymrZ{#Xv0{}fk1u*~s diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/alcada.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/alcada.cpython-313.pyc index ab7d4782c86891561a885ca8a3766647ad1ad6f7..8e6db06e0b92999e4f7823b53b09e1d19f3fdaec 100644 GIT binary patch delta 19 ZcmZoyZ&&B~%*)Hg00eh3H*(bq0{}Ag1r7iJ delta 19 YcmZoyZ&&B~%*)Hg00bS@8@XzQ0WcN>i~s-t diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/anatel.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/anatel.cpython-313.pyc index 83c2bda1028d432afeff085ff8472d043ff6e8ed..c11fe045c7868d0df77f418b26a915d5260541d6 100644 GIT binary patch delta 19 ZcmdnvzQ>*GGcPX}0}$NF+{m>_82~>b1^oa3 delta 19 ZcmdnvzQ>*GGcPX}0}ymrZ{*sf3;;Yt1$zJh diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/confirmation.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/confirmation.cpython-313.pyc index cd0623856f903574e1c8aa3e3c85eb959ec8820d..cc0ecfdaaa98bd87996476b9892c47cd699b882a 100644 GIT binary patch delta 19 ZcmZ1!wkVA2GcPX}0}$NF+{h)N4FEh$1yuk5 delta 19 ZcmZ1!wkVA2GcPX}0}ymrZ{(8D1^_v31k(Tj diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/dlex_in.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/dlex_in.cpython-313.pyc index a096035621ab81a69daba30d46728a2818ff1e19..c0af6cba1317f5dbf4a35bca10d653980aee474c 100644 GIT binary patch delta 19 ZcmX>vd0vw1GcPX}0}$NF+{ks52LL<41;YRU delta 19 ZcmX>vd0vw1GcPX}0}ymrZ{#}40{}SV1wjA+ diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/dlex_out.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/dlex_out.cpython-313.pyc index fff88a07faf257f2f6fa58b6a62d254526c52049..5ba6e9b7eff2d1c3b99375ed704cb2d3ea26ad9e 100644 GIT binary patch delta 19 ZcmZpcYL?>q%*)Hg00eh3H*)>t0RSq%*)Hg00bS@8@Yb+001t%1m6Gv diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/ragsec.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/ragsec.cpython-313.pyc index ffbc949c3ffb0c97efb2b92cdefeb2abc0e4c592..5131d4d0a6674019fae99a2f6c1953abe000ae87 100644 GIT binary patch delta 19 Zcmcbnbxn)wGcPX}0}$NF+{oo43IIM91%m(p delta 19 Zcmcbnbxn)wGcPX}0}ymrZ{+e31pqrZ1pxp6 diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/revprec.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/revprec.cpython-313.pyc index 3f75fb4dc1d0a611f95a57e4f395b3e36a52d5d0..65cc96c33437694d3dc1ff285cdc87083bf2df0f 100644 GIT binary patch delta 19 Zcmcbobx(`yGcPX}0}$NF+{hIo3IIPw1)Bf> delta 19 Zcmcbobx(`yGcPX}0}ymrZ{!LQ1pqu~1sMPU diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/tox.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/rails/__pycache__/tox.cpython-313.pyc index 69e442e873a3b354d7d564d8f86d5b9ddcfd6c6c..8e03ce6e98a51c116428e70c1d97752931e436bb 100644 GIT binary patch delta 19 ZcmaFr@YI3pGcPX}0}$NF+{hKJ002Wr1?K<& delta 19 ZcmaFr@YI3pGcPX}0}ymrZ{&(r002N~1!VvL diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/rules/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/rules/__pycache__/__init__.cpython-313.pyc index b7192ce121d5f182d8a9651e619e1e51b30fc19a..65e10062714d88d6309bee94fdfcb8be8c039e29 100644 GIT binary patch delta 19 ZcmbQrGL?nvGcPX}0}$NF+{nev1OP8l1YrOG delta 19 ZcmbQrGL?nvGcPX}0}ymrZ{*@;0st&?1K$7u diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/rules/__pycache__/alcada.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/rules/__pycache__/alcada.cpython-313.pyc index c26edca129efca6c13bf31285cd184d893aa6f13..e41a0782449d94797eefdf20f2d760734f1a9306 100644 GIT binary patch delta 19 Zcmcb~cax9nGcPX}0}$NF+{oq64gfmB1x5e> delta 19 Zcmcb~cax9nGcPX}0}ymrZ{+f42LLzZ1jGOU diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/rules/__pycache__/pinj_patterns.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/rules/__pycache__/pinj_patterns.cpython-313.pyc index 8bb4be0b0030032ffc39948af168eeaf04a043f7..116a2fef47147d406b4edaf6e26297d54c38c0da 100644 GIT binary patch delta 19 ZcmbOvJ4u%7GcPX}0}$NF+{o3z2LLlY1r`7R delta 19 ZcmbOvJ4u%7GcPX}0}ymrZ{+IW0{}2z1e5>( diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/rules/__pycache__/tox_blocklist.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/rules/__pycache__/tox_blocklist.cpython-313.pyc index 5d61d1fb648da1481f875cf502390a64d5221b84..69fa2d6a6a5e45c9db53c3411caf5ef94e124142 100644 GIT binary patch delta 19 ZcmaFF{fL|EGcPX}0}$NF+{kr<6#zW21=#=q delta 19 ZcmaFF{fL|EGcPX}0}ymrZ{)hc3II9M1y=w7 diff --git a/libs/agent_framework/src/agent_framework/identity/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/identity/__pycache__/__init__.cpython-313.pyc index bb9ed415cdf234e0122c644248049069cb440165..02cfd33cdafdcfe487e67a09a4586fcf63201aff 100644 GIT binary patch delta 19 ZcmbQiJcF6*GcPX}0}$NF+{o3(2mmmk1m^$% delta 19 ZcmbQiJcF6*GcPX}0}ymrZ{+G@1OP3<1Z4mK diff --git a/libs/agent_framework/src/agent_framework/identity/__pycache__/mcp_mapper.cpython-313.pyc b/libs/agent_framework/src/agent_framework/identity/__pycache__/mcp_mapper.cpython-313.pyc index 081033bac2a7141677a3e5cb6a0e2de6a289ac66..ebfe626848cb13201d3f47d16724e2a5a3f9f34d 100644 GIT binary patch delta 19 Zcmcbjaz%yfGcPX}0}$NF+{oo61OPny1#SQU delta 19 Zcmcbjaz%yfGcPX}0}ymrZ{+e40suN41nd9+ diff --git a/libs/agent_framework/src/agent_framework/identity/__pycache__/models.cpython-313.pyc b/libs/agent_framework/src/agent_framework/identity/__pycache__/models.cpython-313.pyc index 08eb9c9c148f33e9e7c32a4ee6a966798ad38b84..c7643ed88d9fcb0c5f955f74a732bc4e3e9146fc 100644 GIT binary patch delta 19 ZcmX>haYBOYGcPX}0}$NF+{k6e0{}Ud1uOsn delta 19 ZcmX>haYBOYGcPX}0}ymrZ{)J$0RT3)1gZc4 diff --git a/libs/agent_framework/src/agent_framework/identity/__pycache__/resolver.cpython-313.pyc b/libs/agent_framework/src/agent_framework/identity/__pycache__/resolver.cpython-313.pyc index 385d9b924fb80e6c08cb2650e57421f221d3ea58..a6cfed472a36d72cc8cedaa012ff71d6150f488c 100644 GIT binary patch delta 19 ZcmaE<@=}HCGcPX}0}$NF+{hI#1OPx81+4%8 delta 19 ZcmaE<@=}HCGcPX}0}ymrZ{&&>0suWb1uFmm diff --git a/libs/agent_framework/src/agent_framework/judges/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/judges/__pycache__/__init__.cpython-313.pyc index 722d54e48c84157f932ade00432c1cee5c08a727..c1caea452ed64079c88067aee1a70f6c95baeef8 100644 GIT binary patch delta 19 ZcmaFG@`{D)GcPX}0}$NF+{l%{1OPkl1z-RG delta 19 ZcmaFG@`{D)GcPX}0}ymrZ{$i~0suJ?1l|Au diff --git a/libs/agent_framework/src/agent_framework/judges/__pycache__/judge.cpython-313.pyc b/libs/agent_framework/src/agent_framework/judges/__pycache__/judge.cpython-313.pyc index 68ef4a2cd4f68ab5df81d0b9cdc2ee6c8a847829..fbca2fb9a0a8c2206009170f483241c0381dcf0b 100644 GIT binary patch delta 21 bcmZ2_kZI{bCa%xCyj%=Ga3^yk*X#uVP~!(J delta 21 bcmZ2_kZI{bCa%xCyj%=G&|$riYxV*FP6Y<5 diff --git a/libs/agent_framework/src/agent_framework/judges/calibrated/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/judges/calibrated/__pycache__/__init__.cpython-313.pyc index 521a732ca265c1e1388c60780d1a581c9374bae3..2f95a868653bc463b2becd4da52c383697130dbf 100644 GIT binary patch delta 18 YcmaFJ_>ht7GcPX}0}$NFoXB+@05uc^od5s; delta 18 YcmaFJ_>ht7GcPX}0}ymrPvp7|05Z4*8vpz(9GcPX}0}$NFoXB+_05&WIwEzGB delta 18 YcmaFK_>z(9GcPX}0}ymrPvp7}05i}9GXMYp diff --git a/libs/agent_framework/src/agent_framework/judges/calibrated/prompts/__pycache__/aluc.cpython-313.pyc b/libs/agent_framework/src/agent_framework/judges/calibrated/prompts/__pycache__/aluc.cpython-313.pyc index 08fc36b6c425b886cf93b94bdbe020d59edafcb0..e25ed611d44eb1b6a6150b86165115fbd36818f6 100644 GIT binary patch delta 19 ZcmZoPZZzil%*)Hg00eh3H*%Fr0su3v1sVVV delta 19 YcmZoPZZzil%*)Hg00bS@8@b9Q0Wi=6m;e9( diff --git a/libs/agent_framework/src/agent_framework/judges/calibrated/prompts/__pycache__/csi.cpython-313.pyc b/libs/agent_framework/src/agent_framework/judges/calibrated/prompts/__pycache__/csi.cpython-313.pyc index 7e429d197c56f31eae1f934ea4e10d7b0a2b4423..615c00918c4526c7ee9de6095f341ed089b7250d 100644 GIT binary patch delta 19 ZcmdnOwS|l8GcPX}0}$NF+{mTH3IH^^1kC^d delta 19 ZcmdnOwS|l8GcPX}0}ymrZ{*Tq1pqPJ1WNz_ diff --git a/libs/agent_framework/src/agent_framework/judges/calibrated/prompts/__pycache__/fallback.cpython-313.pyc b/libs/agent_framework/src/agent_framework/judges/calibrated/prompts/__pycache__/fallback.cpython-313.pyc index 58913fa511fa7a1c5d57a5f249172636e093c34d..627aa3e0cf1cd059aeb92a6a251473ede1633019 100644 GIT binary patch delta 19 ZcmaEC_t=i>GcPX}0}$NF+{hIv4*){81>67t delta 19 ZcmaEC_t=i>GcPX}0}ymrZ{&)U2LM0V1zG?A diff --git a/libs/agent_framework/src/agent_framework/judges/calibrated/prompts/__pycache__/rqlt.cpython-313.pyc b/libs/agent_framework/src/agent_framework/judges/calibrated/prompts/__pycache__/rqlt.cpython-313.pyc index 612b94ccce0764fed05f9c5dced5fba51ba191d9..3de4edefcd0aaa883d0a02dad6c1c0c9e7e158ee 100644 GIT binary patch delta 19 ZcmeC>?B(S8%*)Hg00eh3H*z(z001w|1l0fl delta 19 YcmeC>?B(S8%*)Hg00bS@8@ZZU04(nWQvd(} diff --git a/libs/agent_framework/src/agent_framework/judges/calibrated/prompts/__pycache__/vctn.cpython-313.pyc b/libs/agent_framework/src/agent_framework/judges/calibrated/prompts/__pycache__/vctn.cpython-313.pyc index 5e92c07e067a75b411482961cd178ffea4aed35d..3250734d187c42e76dd191b399bf8bc92674dd2d 100644 GIT binary patch delta 19 Zcmeyw@`;7(GcPX}0}$NF+{l%|1OPoB1$Y1e delta 19 Zcmeyw@`;7(GcPX}0}ymrZ{*5g0suNe1oi*` diff --git a/libs/agent_framework/src/agent_framework/llm/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/llm/__pycache__/__init__.cpython-313.pyc index acb7f1fc7182b50dcfeeacdcc2fec8c4b04d4149..4f933a0ac3a85bffbb604f13ca6416efcb127b59 100644 GIT binary patch delta 19 Zcmcb^e21CqGcPX}0}$NK+{kr_5db=}1+oAD delta 19 Zcmcb^e21CqGcPX}0}ymrZ{)hf2mm+Q1u*~s diff --git a/libs/agent_framework/src/agent_framework/llm/__pycache__/base.cpython-313.pyc b/libs/agent_framework/src/agent_framework/llm/__pycache__/base.cpython-313.pyc index 524939efb438f240b49d0ba871008514222112f0..1cc721696070506232a4c3bdbc2104aa3c2474c3 100644 GIT binary patch delta 19 Zcmcc4bDf9lGcPX}0}$NK+{oq21^_xM1v&r# delta 19 Zcmcc4bDf9lGcPX}0}ymrZ{+f20{}Nu1i1hJ diff --git a/libs/agent_framework/src/agent_framework/llm/__pycache__/profile_resolver.cpython-313.pyc b/libs/agent_framework/src/agent_framework/llm/__pycache__/profile_resolver.cpython-313.pyc index 6727084c88411b615b7d66657103fcf21628da96..a8df724167e12f1a46531c7d27cb8158ca4c1537 100644 GIT binary patch delta 19 ZcmaFm@ydhiGcPX}0}$NK+{l%n0suu51_=NF delta 19 ZcmaFm@ydhiGcPX}0}ymrZ{$i)0RTcf1&9Cu diff --git a/libs/agent_framework/src/agent_framework/llm/__pycache__/providers.cpython-313.pyc b/libs/agent_framework/src/agent_framework/llm/__pycache__/providers.cpython-313.pyc index d473dc8da7504f1353b820fbdc969c074e994881..55667e21d4a1c237a62147b39d68e3f00203f89b 100644 GIT binary patch delta 21 bcmZpA&(!puiR&{jFBbz4+|Jy{Rk0laQU3=v delta 21 bcmZpA&(!puiR&{jFBbz4bXafXs@M(yPbUVo diff --git a/libs/agent_framework/src/agent_framework/llm/__pycache__/structured_output.cpython-313.pyc b/libs/agent_framework/src/agent_framework/llm/__pycache__/structured_output.cpython-313.pyc index 3f35e1fd066a314cb244a1afb807005c3fdef7b4..51f486a6969f6a23d417ecc607343c89d4a949fc 100644 GIT binary patch delta 19 ZcmZ2%wb+X5GcPX}0}$NK+{h&<3jjE#1rY!M delta 19 ZcmZ2%wb+X5GcPX}0}ymrZ{(7c1pqb91dsp# diff --git a/libs/agent_framework/src/agent_framework/llm/__pycache__/types.cpython-313.pyc b/libs/agent_framework/src/agent_framework/llm/__pycache__/types.cpython-313.pyc index 2ab8fa3c455f3367619fc0bf8286acb0ce4d5072..5082409e4340596536d659e8666d7c969ad73d8d 100644 GIT binary patch delta 19 Zcmeyx`HPe5GcPX}0}$NK+{pET1pq(w1{(kX delta 19 Zcmeyx`HPe5GcPX}0}ymrZ{+&G0suW71)2Z= diff --git a/libs/agent_framework/src/agent_framework/mcp/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/mcp/__pycache__/__init__.cpython-313.pyc index 9d7e74541f64c0bddc9594edd12970973f382d39..d4bfbb4b0e7b682562881676864f1043fbb418dc 100644 GIT binary patch delta 19 Zcmcb~e3O~$GcPX}0}$NK+{ksF5db&-kmKk?S)rFBbz4+|Jy{^}!tgR>TKv delta 21 bcmey>&-kmKk?S)rFBbz4bXafX`rr-#Q|t!o diff --git a/libs/agent_framework/src/agent_framework/mcp/__pycache__/models.cpython-313.pyc b/libs/agent_framework/src/agent_framework/mcp/__pycache__/models.cpython-313.pyc index 423945af892f1b69e4258eb6fdd567737aa18538..2c1f9120711765e55ee48eb043d255067cf4df44 100644 GIT binary patch delta 19 Zcmca1a6^FWGcPX}0}$NK+{op}0RTGN1xEk? delta 19 Zcmca1a6^FWGcPX}0}ymrZ{+gh001}x1jYaW diff --git a/libs/agent_framework/src/agent_framework/mcp/__pycache__/registry.cpython-313.pyc b/libs/agent_framework/src/agent_framework/mcp/__pycache__/registry.cpython-313.pyc index 549de3a2ae837ca1ca183f3bf61d03bd6bde7c80..c2d673c659ab7ef9dd560f35944e5a4f6747e8b7 100644 GIT binary patch delta 19 ZcmZosZBga=%*)Hg00g%)H*!@80RS>L1pfd4 delta 19 YcmZosZBga=%*)Hg00bS@8@Z~4054wzegFUf diff --git a/libs/agent_framework/src/agent_framework/mcp/__pycache__/tool_policy.cpython-313.pyc b/libs/agent_framework/src/agent_framework/mcp/__pycache__/tool_policy.cpython-313.pyc index d82cf4d9765ece75948a61123f2921fff1ee8631..3703011ad132fdc65420c2580ee52e56990aba29 100644 GIT binary patch delta 19 Zcmdn0vsH)dGcPX}0}$NK+{mRZ1^_v41tb6f delta 19 Zcmdn0vsH)dGcPX}0}ymrZ{*Sz0{}Lc1fu`| diff --git a/libs/agent_framework/src/agent_framework/mcp/__pycache__/tool_router.cpython-313.pyc b/libs/agent_framework/src/agent_framework/mcp/__pycache__/tool_router.cpython-313.pyc index 0b2a4c5ebcad2d22ef2f2d8547c7e255f5d125a1..78b78233a1eb585942f249c82c2e99522ba014d5 100644 GIT binary patch delta 19 ZcmaEx_co8~GcPX}0}$NK+{l$|4ggA|25|rY delta 19 ZcmaEx_co8~GcPX}0}ymrZ{$ig2LMOR1@Hg> diff --git a/libs/agent_framework/src/agent_framework/memory/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/memory/__pycache__/__init__.cpython-313.pyc index c3f6be3936d017c0ee04636ded5a36239d1e6d18..eb070c7e05299ca1835aeb4e4b30ab498154fae0 100644 GIT binary patch delta 19 ZcmaFQ@t%Y0GcPX}0}$NK+{l&60suWR1$Y1e delta 19 ZcmaFQ@t%Y0GcPX}0}ymrZ{$j40RTE#1or>{ diff --git a/libs/agent_framework/src/agent_framework/memory/__pycache__/long_term_extractor.cpython-313.pyc b/libs/agent_framework/src/agent_framework/memory/__pycache__/long_term_extractor.cpython-313.pyc index 3e11289ba63b9b41a41dd3d2f2601518a9032d5d..4d634cfb799f49cea11ef51dab12fbee15f192d5 100644 GIT binary patch delta 19 Zcmca8d{LO|GcPX}0}$NK+{ksD6979n1-SqK delta 19 Zcmca8d{LO|GcPX}0}ymrZ{#}82>>`?1vmfz diff --git a/libs/agent_framework/src/agent_framework/memory/__pycache__/long_term_memory.cpython-313.pyc b/libs/agent_framework/src/agent_framework/memory/__pycache__/long_term_memory.cpython-313.pyc index 2a331d424f68dd8d78f83b914bbf2e6fb4a6e73a..a36e263449346d2a5368c29a6bd5fd7bf0b95412 100644 GIT binary patch delta 19 ZcmdmPy4{rPGcPX}0}$NK+{m?73IIFt1;79R delta 19 ZcmdmPy4{rPGcPX}0}ymrZ{%7l1pql21wQ}) diff --git a/libs/agent_framework/src/agent_framework/memory/__pycache__/long_term_models.cpython-313.pyc b/libs/agent_framework/src/agent_framework/memory/__pycache__/long_term_models.cpython-313.pyc index 32da699d734332464c2831a6ba7fb370a0bf6a04..2193260b049aaeae9d42d8a436cb8a5696a7bc07 100644 GIT binary patch delta 19 Zcmcb@dxe+lGcPX}0}$NK+{kr`4FEdZ1+xGE delta 19 Zcmcb@dxe+lGcPX}0}ymrZ{#|~1^_q%1u_5t diff --git a/libs/agent_framework/src/agent_framework/memory/__pycache__/long_term_store.cpython-313.pyc b/libs/agent_framework/src/agent_framework/memory/__pycache__/long_term_store.cpython-313.pyc index 58493a3ee181a8dcad498fa7681144a15c6782ec..5aa19260dc11bc3b250ca1c1af8b687daf1d2d88 100644 GIT binary patch delta 21 bcmZpA!r1hLk?S)rFBbz4+|Jy{^`j5~Q2z&5 delta 21 bcmZpA!r1hLk?S)rFBbz4bXafX`cVh~PA3M} diff --git a/libs/agent_framework/src/agent_framework/memory/__pycache__/message_history.cpython-313.pyc b/libs/agent_framework/src/agent_framework/memory/__pycache__/message_history.cpython-313.pyc index fc59b6827b9f0cde08731ffbae1d688ba07def18..8d6318d37ea9c56faa41e7709032b734574327ad 100644 GIT binary patch delta 19 ZcmZ4PxZIKJGcPX}0}$NK+{iUo0RTHM1+D-9 delta 19 ZcmZ4PxZIKJGcPX}0}ymrZ{(V*001~w1uXyo diff --git a/libs/agent_framework/src/agent_framework/memory/__pycache__/summary_memory.cpython-313.pyc b/libs/agent_framework/src/agent_framework/memory/__pycache__/summary_memory.cpython-313.pyc index 9da6a97c0e2213efce7fec69976552ee03a7e64c..eb0f8b4106542bee35f4a3e88d9182285bd33b8b 100644 GIT binary patch delta 19 ZcmcbYcrTIbGcPX}0}$NK+{kss002j+2BQD~ delta 19 ZcmcbYcrTIbGcPX}0}ymrZ{)gS002bM1|k3e diff --git a/libs/agent_framework/src/agent_framework/memory/__pycache__/summary_store.cpython-313.pyc b/libs/agent_framework/src/agent_framework/memory/__pycache__/summary_store.cpython-313.pyc index 49c01984d50d0da645737d99704322eddd5340aa..8968f9f04a8a9f58a9e0c97bbf48b12f00b5ae6d 100644 GIT binary patch delta 19 ZcmdnswZV()GcPX}0}$NK+{mS-3III31z-RG delta 19 ZcmdnswZV()GcPX}0}ymrZ{$)_1pqnZ1m6Gv diff --git a/libs/agent_framework/src/agent_framework/models/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/models/__pycache__/__init__.cpython-313.pyc index 00f52bbc46483a2549db4192e368f55693f39c44..e60831ded1d1a2c7005cea4a4a216bbc59aeea1e 100644 GIT binary patch delta 18 Ycmcb{c#VG%*)Hg00g%)H*(eU0st|b1oZ#_ delta 19 YcmeB_?v&>G%*)Hg00bS@8@cLv0WQP@bN~PV diff --git a/libs/agent_framework/src/agent_framework/models/__pycache__/session.cpython-313.pyc b/libs/agent_framework/src/agent_framework/models/__pycache__/session.cpython-313.pyc index 491605e0cc248640eacb208e001cd0e5a45e0208..68e68130b9cb3a2f7b6a7cb165866deb156b3453 100644 GIT binary patch delta 19 ZcmbOtIz^Q0GcPX}0}$NK+{o3%1pqQ{1qT2C delta 19 ZcmbOtIz^Q0GcPX}0}ymrZ{+IY0st?U1cm?r diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/__init__.cpython-313.pyc index 9f0978d9923c145ef9d904576a85a67c76f06cd0..e52f92a1a3cc19934b4d110dc4c0717d23adfdf8 100644 GIT binary patch delta 19 Zcmeyw^@)q?GcPX}0}$NK+{l%|3IILm1%?0s delta 19 Zcmeyw^@)q?GcPX}0}ymrZ{*5g1pqq`1qA>A diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/code_mapper.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/code_mapper.cpython-313.pyc index 5a0749660302570aa698ae026d0d951d3153ecf8..fdade17464fd7f3d769b1661051d31ee531424c6 100644 GIT binary patch delta 21 bcmX@UobmW_My}7iyj%=Ga65A&*WO?NQXK~m delta 21 bcmX@UobmW_My}7iyj%=G&|$riYi}?BPelff diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/context.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/context.cpython-313.pyc index 89ff63c83c2a5a9fb8d6b64c4c253c3d78775014..f3181065f504cfdf6e2265bc0b246622d6ab9e47 100644 GIT binary patch delta 19 Zcmca*dCQXPGcPX}0}$NK+{kr71^_{=1~UKv delta 19 Zcmca*dCQXPGcPX}0}ymrZ{)fl0{}kN1+oAD diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/event_bus.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/event_bus.cpython-313.pyc index 152b90fad07a068be728a1dae6e9cb390a5a192e..a7a250c450b695e9f002c249848e021b1fc5d1a4 100644 GIT binary patch delta 19 ZcmdlWvq6UIGcPX}0}$NK+{mTI2LLvS1nmF- delta 19 ZcmdlWvq6UIGcPX}0}ymrZ{$+r0{}Cz1Z)5R diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/guardrail_events.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/guardrail_events.cpython-313.pyc index 11581865aec44bd8abfe7ddf65490a68494cbc1d..aa4a5022d33fe949dbc8b87baf13fdd6db4726fc 100644 GIT binary patch delta 19 ZcmZn?XcFN1%*)Hg00g%)H*)=82LLb@1w;S< delta 19 ZcmZn?XcFN1%*)Hg00bS@8@Yb40{|^P1j7IT diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/ic_events.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/ic_events.cpython-313.pyc index c58ea89d7651f84d7c41798f336ab16f24ca916e..10a61af95e5a4a4452abfdde49a3103a1116b0f5 100644 GIT binary patch delta 19 Zcmey!@{xt>GcPX}0}$NK+{l&A1OPnq1#|!a delta 19 Zcmey!@{xt>GcPX}0}ymrZ{$j60suN21oHp@ diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/judge_events.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/judge_events.cpython-313.pyc index 12b0f8820127955502c4abc9d7b18ba7984469fa..47e173e2c70480a3060307dfc7f5fa03b8eab301 100644 GIT binary patch delta 19 ZcmZqTZsO+p%*)Hg00g%)H*!_50st;*1h@bI delta 19 YcmZqTZsO+p%*)Hg00bS@8@Vc20V|ROHvj+t diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/langgraph_telemetry.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/langgraph_telemetry.cpython-313.pyc index 20d68af936a437bbda6f013a798e6d7c6d4d17de..a09c898da6fb0ad3a314cce151d76a1ebb186d7e 100644 GIT binary patch delta 19 ZcmaE?_E?SUGcPX}0}$NK+{hIv3;;iL1)l%_ delta 19 ZcmaE?_E?SUGcPX}0}ymrZ{&&;1^_&q1s(tZ diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/llm_advisors.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/llm_advisors.cpython-313.pyc index 8faa9094a48f49308fb214d4e4dfc2bee4ee2116..f6a537b0a8dba3a28ead07668c2eacda9f94b5c7 100644 GIT binary patch delta 19 Zcmew<_EU`OGcPX}0}$NK+{l&B4FEup1-SqK delta 19 Zcmew<_EU`OGcPX}0}ymrZ{*771^_*{1vmfz diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/noc_contract.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/noc_contract.cpython-313.pyc index a499f1a0945f7f353704db1344aee4c4d8bdd121..d117f5c2339fdeafc92734c4ec9b2b775ecefd90 100644 GIT binary patch delta 19 Zcmcbleo39{GcPX}0}$NK+{kr87yv#H1?~U< delta 19 Zcmcbleo39{GcPX}0}ymrZ{#{53;;Vg1#JKT diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/noc_otel.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/noc_otel.cpython-313.pyc index 499510eb0b76f149466a91d1417003044b4106f8..6ac05fd6c7a57e4a2962b0957b3eed3c7255d5ce 100644 GIT binary patch delta 19 ZcmdmJxY3a7GcPX}0}$NK+{m?D0suOL1*8A~ delta 19 ZcmdmJxY3a7GcPX}0}ymrZ{%7o0RT6v1tS0e diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/observer.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/observer.cpython-313.pyc index 3f443d6dd4b3fd7ac11697ecd9c59df52e3a6136..c8a30ca5d675110f11008b37027d2b7790583f52 100644 GIT binary patch delta 19 ZcmeyM{z0AVGcPX}0}$NK+{pDz7yv?q21oz^ delta 19 ZcmeyM{z0AVGcPX}0}ymrZ{&I=3;;i@1;+pY diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/otel.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/otel.cpython-313.pyc index 19a4e22a285d7896f5eb89ffc2cb27dd81fd6b08..4961d2f537277d2974c0f3fcff9b14ee92ceb959 100644 GIT binary patch delta 19 ZcmcaCby-llk;aX0Fe?yj%=Ga65A&*TFLYQF;e_ delta 21 bcmX>-llk;aX0Fe?yj%=G&|$ri>);sxPND|; diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/token_cost.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/token_cost.cpython-313.pyc index 63bb607642c51e0555958ad50daa9f3fb7458e55..676cc7dedb94dc6df122e5f6509cbfe3a8ba0116 100644 GIT binary patch delta 19 Zcmez5{K=W?GcPX}0}$NK+{pDp5dcP(29y8* delta 19 Zcmez5{K=W?GcPX}0}ymrZ{&KR2mnLA1`_}P diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/workflow_events.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/workflow_events.cpython-313.pyc index 90691c5d118c15181751f872074b738f22337984..8cfe8a502b587de0b19ae61825a16d21cb1cd2e3 100644 GIT binary patch delta 19 ZcmZpaYLw#o%*)Hg00g%)H*$UF0RS;c1zG?A delta 19 ZcmZpaYLw#o%*)Hg00bS@8@ayo001s=1la%p diff --git a/libs/agent_framework/src/agent_framework/oci/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/oci/__pycache__/__init__.cpython-313.pyc index 998eca43615aefba1e22f9f8d9ab53c7130cc7a5..199cb2d740ebca1e5f6e2e4e82dce82d6c100d52 100644 GIT binary patch delta 18 Ycmcc2c$tywGcPX}0}$NKoXB+&05c^8asU7T delta 18 Ycmcc2c$tywGcPX}0}ymrPvklY05Hx3@c;k- diff --git a/libs/agent_framework/src/agent_framework/oci/__pycache__/auth.cpython-313.pyc b/libs/agent_framework/src/agent_framework/oci/__pycache__/auth.cpython-313.pyc index 0ea7cb93df0c1256515000fd08e795616791a285..c62ed31a4e3d665ce91952986bd50d12e015d0d0 100644 GIT binary patch delta 19 ZcmZ22xmuFzGcPX}0}$NK+{m?%2LLu>1y%q6 delta 19 ZcmZ22xmuFzGcPX}0}ymrZ{%9Y0{}CN1l0fl diff --git a/libs/agent_framework/src/agent_framework/persistence/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/persistence/__pycache__/__init__.cpython-313.pyc index e25b5b770ebee9453fc23ca3c9b84d996bc17112..d4e59f695a8dc22edfab7133725bb78f654e8e8b 100644 GIT binary patch delta 18 Ycmcc3c$<;yGcPX}0}$NFoXB+%05n1civR!s delta 18 Ycmcc3c$<;yGcPX}0}ymrPvp7?05RqT2><{9 diff --git a/libs/agent_framework/src/agent_framework/persistence/__pycache__/oracle_store.cpython-313.pyc b/libs/agent_framework/src/agent_framework/persistence/__pycache__/oracle_store.cpython-313.pyc index 468a07cb23b05f5c9e2cc473117498f4fb6f4be9..99c6ac076a29b090431d5a8d31d86bcec86b5980 100644 GIT binary patch delta 21 bcmaF;jOq0=Ca%xCyj%=Ga3^ykSK?*>V1)208!$ delta 19 ZcmZ2gx~i1xGcPX}0}ymrZ{%8F1pq(G1-JkJ diff --git a/libs/agent_framework/src/agent_framework/presentation/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/presentation/__pycache__/__init__.cpython-313.pyc index 1d12793c651ecc367cc6c8d1d6a6f98f141586e8..c23bb7da8e2bd7b33448f87330d44e367274a8b1 100644 GIT binary patch delta 19 ZcmX@ce2kgvGcPX}0}$NK+{m?u5db%C1#kcW delta 19 ZcmX@ce2kgvGcPX}0}ymrZ{*s;2mmye1n&R< diff --git a/libs/agent_framework/src/agent_framework/presentation/__pycache__/renderers.cpython-313.pyc b/libs/agent_framework/src/agent_framework/presentation/__pycache__/renderers.cpython-313.pyc index 4e45ca54c9651f79cece041d38598ece36492865..68466170e26602c16899a0bade231aa135e12b60 100644 GIT binary patch delta 19 Zcmcbscvq3@GcPX}0}$NK+{krV002JY1^@s6 delta 19 Zcmcbscvq3@GcPX}0}ymrZ{)fx002A-1%Chl diff --git a/libs/agent_framework/src/agent_framework/rag/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/rag/__pycache__/__init__.cpython-313.pyc index a7bfaea1b90020991c295ec5c51b803d3ee30c72..e6c302bfcb54d0b74d1f7f79b26a6e0e87590efc 100644 GIT binary patch delta 19 ZcmX@gdX$yxGcPX}0}$NK+{m??2>>^Z1#$oY delta 19 ZcmX@gdX$yxGcPX}0}ymrZ{*s|1OPO(1n~d> diff --git a/libs/agent_framework/src/agent_framework/rag/__pycache__/embedding_provider.cpython-313.pyc b/libs/agent_framework/src/agent_framework/rag/__pycache__/embedding_provider.cpython-313.pyc index 6c0fc9fa1a14c086700b52698680539eb353dc40..fdf9cd31ec7deb781ec22a5aea1191f4319b017b 100644 GIT binary patch delta 19 Zcmexj^u>tlGcPX}0}$NK+{l$B2>?Tw1@Hg> delta 19 Zcmexj^u>tlGcPX}0}ymrZ{*671OPz51#bWV diff --git a/libs/agent_framework/src/agent_framework/rag/__pycache__/graph_store.cpython-313.pyc b/libs/agent_framework/src/agent_framework/rag/__pycache__/graph_store.cpython-313.pyc index 3467122c0378b48ec65dbc24cd2f24f8b7c0aaa5..990e8dcda335a4178ffa70a8eb2c902e9837a5f5 100644 GIT binary patch delta 19 ZcmbQPJzbmYGcPX}0}$NK+{o1{3IH|O1xEk? delta 19 ZcmbQPJzbmYGcPX}0}ymrZ{+F~1pqSu1jYaW diff --git a/libs/agent_framework/src/agent_framework/rag/__pycache__/ingest.cpython-313.pyc b/libs/agent_framework/src/agent_framework/rag/__pycache__/ingest.cpython-313.pyc index 1bcaf79f194310ef6c963ca09284ab74311bf2f3..c8a55a0147e2f7b8472a882130bad1ecafcf4329 100644 GIT binary patch delta 19 ZcmZ3Iv?Ph^GcPX}0}$NK+{h(m2mn4X1$Y1e delta 19 ZcmZ3Iv?Ph^GcPX}0}ymrZ{(6P1OPi&1or>{ diff --git a/libs/agent_framework/src/agent_framework/rag/__pycache__/kbdb_service.cpython-313.pyc b/libs/agent_framework/src/agent_framework/rag/__pycache__/kbdb_service.cpython-313.pyc index 6bee9b9853a677fef62bc5e5386836bdbd51a359..3933e8b08802110561ee102382afb686ba52b634 100644 GIT binary patch delta 19 ZcmbR3H`|ZvGcPX}0}$NK+{h)U4gfkR1uFmm delta 19 ZcmbR3H`|ZvGcPX}0}ymrZ{!kG2LLxv1gZc4 diff --git a/libs/agent_framework/src/agent_framework/rag/__pycache__/rag_service.cpython-313.pyc b/libs/agent_framework/src/agent_framework/rag/__pycache__/rag_service.cpython-313.pyc index 625161e438ea6d9257af9e12f82dae0b2a547db4..46bd04b43ef8158bb634d05edad9fbd369c33f94 100644 GIT binary patch delta 19 ZcmbOjIx&>%GcPX}0}$NK+{o3g1pqpo1)cx^ delta 19 ZcmbOjIx&>%GcPX}0}ymrZ{%v%0suF~1swnY diff --git a/libs/agent_framework/src/agent_framework/rag/__pycache__/vector_store.cpython-313.pyc b/libs/agent_framework/src/agent_framework/rag/__pycache__/vector_store.cpython-313.pyc index 760553de84208028fd629eb657beb870b1b0a1e5..5cc1572641a040630b657dca0af7d38936184766 100644 GIT binary patch delta 21 bcmcaVk@5aSMy}7iyj%=Ga65A&*HsSyQoIKs delta 21 bcmcaVk@5aSMy}7iyj%=G&|$ri>#7F;Pvi!l diff --git a/libs/agent_framework/src/agent_framework/repositories/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/repositories/__pycache__/__init__.cpython-313.pyc index 02ec67b7fc75f1cb04249ba5d1517d036508e435..2ba82514c00d0326d5771de7ac4ffe21b2f24e48 100644 GIT binary patch delta 18 Ycmcb^c!!beGcPX}0}$NKoXB+v05o6)jQ{`u delta 18 Ycmcb^c!!beGcPX}0}ymrPvp7;05S;$3;+NC diff --git a/libs/agent_framework/src/agent_framework/repositories/__pycache__/session_repository.cpython-313.pyc b/libs/agent_framework/src/agent_framework/repositories/__pycache__/session_repository.cpython-313.pyc index 44d7a8e944a10bd1dfdd67ef1e402ce6a497ef5d..24a7ade35e3f5bc2e987718e32390930d7b106bd 100644 GIT binary patch delta 19 ZcmeBm?sew+%*)Hg00g%)H*z&A0suFd1!VvL delta 19 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 delta 19 YcmeAZ?i1$v%*)Hg00f=Z8@XCI0WNd|Z~y=R diff --git a/libs/agent_framework/src/agent_framework/routing/enterprise_router.py b/libs/agent_framework/src/agent_framework/routing/enterprise_router.py index ff6e5d5e..e622918f 100644 --- a/libs/agent_framework/src/agent_framework/routing/enterprise_router.py +++ b/libs/agent_framework/src/agent_framework/routing/enterprise_router.py @@ -880,13 +880,12 @@ class EnterpriseRouter: text: str, state_decision: RouteDecision, ) -> RouteDecision | None: - """Detecta abandono explícito da transação seguido (ou não) de nova intenção. + """Detecta semanticamente mudança de intenção durante uma transação. - Durante COLLECTING_PARAMETERS/AWAITING_CONFIRMATION, uma classificação - genérica de outra intent nunca basta para interromper a transação. A saída - só é permitida quando o turno expressa semanticamente abandono explícito - do objetivo atual (por exemplo, desistir/deixar para lá) ou handoff tratado - por sua regra própria. Não há blacklist/keyword hardcoded de abandono. + Não existe lista de palavras para desistência ou mudança de assunto. Uma + interrupção nasce de uma intent diferente resolvida por uma keyword + configurada no ``routing.yaml`` ou, na ausência dela, por uma decisão + semântica do LLM com o contexto da transação pendente. """ active_tx = state.get("active_transaction") if isinstance(state.get("active_transaction"), dict) else {} started_intent = str(active_tx.get("started_from_intent") or "").strip() @@ -911,10 +910,15 @@ class EnterpriseRouter: # both failure modes: parameter extraction cannot hide a real new goal, # and a broad keyword cannot steal a legitimate parameter turn. if not (self.enable_llm_router and self.llm is not None): - # Sem classificador semântico não há evidência suficiente para - # distinguir uma nova meta explícita de uma expressão pertencente - # à própria transação (ex.: "isso mesmo, pode cancelar"). - return None + configured_candidate.metadata = { + **(configured_candidate.metadata or {}), + "transaction_interruption": "intent_shift", + "interrupted_state": state_decision.next_state, + "interrupted_agent": state_decision.agent, + "interrupted_intent": started_intent or previous_intent, + "interruption_source": "configured_routing", + } + return configured_candidate if not (self.enable_llm_router and self.llm is not None): return None @@ -947,11 +951,11 @@ class EnterpriseRouter: ), } system = ( - "Você decide somente se o usuário ABANDONA EXPLICITAMENTE a transação ativa. " - "Uma nova intent semanticamente plausível NÃO basta. Use o significado completo da mensagem e o contexto transacional; nunca use uma palavra isolada como regra. " - "Retorne CONTINUE quando a fala puder ser confirmação, correção, parâmetro, referência ou instrução ligada à operação ativa, inclusive expressões como 'pode cancelar' quando cancelar pode ser a própria ação em andamento. " - "Retorne ABANDON somente quando houver evidência explícita de desistência/abandono da operação atual; se a mesma fala também trouxer um novo objetivo, informe a nova intent/agent permitidos. " - "Exemplo semântico: 'esquece isso, quero ver minha fatura' = ABANDON + nova intent. " + "Você decide apenas se o turno atual continua a transação ativa ou muda de intenção. " + "Use o significado da mensagem e o contexto transacional; não use palavras isoladas como regra. " + "A extração dos parâmetros pendentes já foi tentada antes desta etapa e não consumiu o turno. " + "Se ainda assim a mensagem for apenas uma resposta referencial/valor/nome ao dado pendente, retorne CONTINUE. " + "Se o usuário passou claramente a perseguir outro objetivo, retorne SHIFT e a nova intent permitida. " "Retorne somente JSON válido com decision, intent, agent, confidence, reason." ) user = { @@ -977,7 +981,7 @@ class EnterpriseRouter: logger.warning("Falha ao avaliar mudança semântica de intent transacional via LLM: %s", exc) return None - if str(data.get("decision") or "").strip().upper() != "ABANDON": + if str(data.get("decision") or "").strip().upper() != "SHIFT": return None confidence = float(data.get("confidence") or 0.0) if confidence < self.intent_shift_threshold: @@ -998,11 +1002,11 @@ class EnterpriseRouter: reason=str(data.get("reason") or "Mudança semântica de intenção durante transação."), method="llm", metadata={ - "transaction_interruption": "explicit_abandonment", + "transaction_interruption": "intent_shift", "interrupted_state": state_decision.next_state, "interrupted_agent": state_decision.agent, "interrupted_intent": started_intent or previous_intent, - "interruption_source": "semantic_abandonment_classifier", + "interruption_source": "semantic_classifier", "configured_routing_hint": ( configured_candidate.intent if configured_candidate is not None else None ), diff --git a/libs/agent_framework/src/agent_framework/runtime/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/runtime/__pycache__/__init__.cpython-313.pyc index 9b34ab592ec42043fc4877c0897703d1d3db0c5b..a35920c55239c319b7f9a26329efc678d601cd51 100644 GIT binary patch delta 19 Zcmcb^bcc!SGcPX}0}$NK+{hKg2mm>d1uy^r delta 19 Zcmcb^bcc!SGcPX}0}ymtZ{!MM1OPU^1h4=A diff --git a/libs/agent_framework/src/agent_framework/runtime/__pycache__/agent_runtime.cpython-313.pyc b/libs/agent_framework/src/agent_framework/runtime/__pycache__/agent_runtime.cpython-313.pyc index c27cb0da085c70ab3d1ad8053e9a2fe526368905..7be129632969730dc1a4c132323536093b0e7c4c 100644 GIT binary patch delta 34056 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 z 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 diff --git a/libs/agent_framework/src/agent_framework/runtime/__pycache__/transaction_parameters.cpython-313.pyc b/libs/agent_framework/src/agent_framework/runtime/__pycache__/transaction_parameters.cpython-313.pyc index 27ac2787bc828c9f5593291b012f51bcc70448df..aa307ec253b77442361c76f3f19ae5937426eb8e 100644 GIT binary patch delta 4090 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 Gum1;R$_NYq diff --git a/libs/agent_framework/src/agent_framework/runtime/agent_runtime.py b/libs/agent_framework/src/agent_framework/runtime/agent_runtime.py index 4fa4428f..aeaabeca 100644 --- a/libs/agent_framework/src/agent_framework/runtime/agent_runtime.py +++ b/libs/agent_framework/src/agent_framework/runtime/agent_runtime.py @@ -12,7 +12,7 @@ from typing import Any, Iterable, Mapping from agent_framework.memory.summary_memory import MemoryContext, render_recent_messages -from agent_framework.runtime.transaction_parameters import extract_current_transaction_parameters, extract_transaction_parameters, reconcile_transaction_parameters, parse_transaction_confirmation +from agent_framework.runtime.transaction_parameters import extract_transaction_parameters, reconcile_transaction_parameters, parse_transaction_confirmation from agent_framework.workflows.input_contract import match_expected_input @@ -859,17 +859,6 @@ class AgentRuntimeMixin: if parameter: recovered_arguments = dict(arguments or {}) recovered_arguments.pop(parameter, None) - # Domain validators may declare derived fields that became invalid - # together with the rejected parameter. The framework does not - # interpret field names; it simply honors the generic clear_fields - # contract. This prevents stale derived values from contaminating - # later collection turns. - validator_clear_fields = [ - str(name) for name in (payload.get("clear_fields") or []) - if str(name).strip() - ] - for field in validator_clear_fields: - recovered_arguments.pop(field, None) recovered_policy = self._resolve_tool_execution_policy(tool_name, recovered_arguments) missing = self._missing_required_arguments(recovered_policy, recovered_arguments) if parameter not in missing: @@ -888,7 +877,6 @@ class AgentRuntimeMixin: "status": status, "parameter": parameter, "terminal": False, - "validator_clear_fields": validator_clear_fields, "result": result, } # A recoverable validator may provide a user-facing explanation @@ -1509,100 +1497,6 @@ class AgentRuntimeMixin: newest = list(reversed(blocks)) return "\n".join(f"history:{i+1}: {block}" for i, block in enumerate(newest)) - @staticmethod - def _transaction_context_priority_view(context: Any) -> str: - """Group bounded history by reconciliation priority without losing recency. - - The temporal reconciler is a fallback, so current-turn values and validated - transaction state are supplied separately. Within historical conversation, - assistant explanations are intentionally considered before older user turns: - they frequently carry grounded relationships produced from tool/evidence - results (for example item -> amount). They remain interpretive candidates - only and must still pass the configured authoritative pre-validation. - """ - ordered = AgentRuntimeMixin._transaction_context_newest_first(context) - if not ordered: - return "" - assistant: list[str] = [] - user: list[str] = [] - other: list[str] = [] - for line in ordered.splitlines(): - payload = line.split(": ", 1)[1] if ": " in line else line - low = payload.lower().lstrip() - if low.startswith(("assistant:", "agente:")): - assistant.append(line) - elif low.startswith(("user:", "cliente:")): - user.append(line) - else: - other.append(line) - - sections: list[str] = [] - if assistant: - sections.append( - "priority_3_previous_assistant_tool_or_evidence_context:\n" + "\n".join(assistant) - ) - if user: - sections.append("priority_4_previous_user_utterances:\n" + "\n".join(user)) - if other: - sections.append("priority_5_other_conversational_context:\n" + "\n".join(other)) - return "\n".join(sections) - - @staticmethod - def _apply_transaction_reconciliation( - arguments: dict[str, Any], - reconciliation: dict[str, Any] | None, - *, - protected_current_fields: set[str] | None = None, - ) -> tuple[dict[str, Any], list[str]]: - """Apply temporal reconciliation without erasing current-turn candidates. - - Current-turn extraction is the first source of truth for *what the user - just said*. Reconciliation may canonicalize that candidate, and business - pre-validation may reject it, but temporal history must not make it - disappear before the validator sees it. - """ - out = dict(arguments or {}) - rec = dict(reconciliation or {}) - protected = {str(name) for name in (protected_current_fields or set())} - ignored_clears: list[str] = [] - for field in rec.get("clear_fields") or []: - name = str(field) - if name in protected: - ignored_clears.append(name) - continue - out.pop(name, None) - # Canonicalized values are still allowed; this is not a hard field lock. - out.update(dict(rec.get("values") or {})) - return out, ignored_clears - - @staticmethod - def _apply_prevalidated_structural_candidates( - arguments: dict[str, Any], - reconciliation: dict[str, Any] | None, - policy: dict[str, Any] | None, - ) -> tuple[dict[str, Any], dict[str, str]]: - """Apply structural *candidates* only behind authoritative pre-validation. - - Candidates are not resolved parameters. They may be raw local evidence - fragments and exist solely so a configured domain validator can - canonicalize/reject them. Without enabled pre-validation they are ignored. - """ - out = dict(arguments or {}) - cfg = (policy or {}).get("pre_validation") if isinstance(policy, dict) else None - if not isinstance(cfg, dict) or not cfg.get("enabled") or not str(cfg.get("tool") or "").strip(): - return out, {} - rec = dict(reconciliation or {}) - candidates = dict(rec.get("candidates") or {}) - provenance = dict(rec.get("candidate_provenance") or {}) - applied: dict[str, str] = {} - for field, value in candidates.items(): - name = str(field) - if out.get(name) not in _EMPTY_VALUES or value in _EMPTY_VALUES: - continue - out[name] = value - applied[name] = str(provenance.get(name) or "structural_candidate") - return out, applied - async def _reconcile_transaction_parameters( self, state: dict[str, Any], @@ -1649,7 +1543,7 @@ class AgentRuntimeMixin: suffix = "\n\nCONTINUAÇÃO ATUAL DO CLIENTE:\n" if prefix in effective and suffix in effective: conversational_context = effective.split(prefix, 1)[1].split(suffix, 1)[0].strip() - ordered_context = self._transaction_context_priority_view(conversational_context) + ordered_context = self._transaction_context_newest_first(conversational_context) cached = route_meta.get("transaction_parameter_values") effective_known = dict(known_arguments or {}) if isinstance(cached, dict): @@ -1708,7 +1602,7 @@ class AgentRuntimeMixin: route_meta = ((state.get("route_decision") or {}).get("metadata") or {}) if isinstance(state.get("route_decision"), dict) else {} text = route_meta.get("original_input") if route_meta.get("contextual_reentry") else None text = text or state.get("sanitized_input") or state.get("user_text") or "" - return await extract_current_transaction_parameters( + return await extract_transaction_parameters( getattr(self, "llm", None), text=str(text), tool_name=tool_name, @@ -1716,6 +1610,7 @@ class AgentRuntimeMixin: known_arguments=dict(known_arguments or {}), parameter_schema=schema, tool_description=description, + conversational_context="", ) async def _extract_transaction_parameters( @@ -3074,12 +2969,12 @@ class AgentRuntimeMixin: # intent, a transação anterior é encerrada e seus latches são limpos. active_before_interruption = self._active_transaction(state) interruption = str(route_meta.get("transaction_interruption") or "").strip().lower() - if active_before_interruption and interruption == "explicit_abandonment": + if active_before_interruption and interruption == "intent_shift": interrupted_tool = active_before_interruption.get("tool_name") self._finish_active_transaction(state, "CANCELLED") state["transaction_pre_validation"] = None state["tool_policy_result"] = { - "action": "cancelled_by_explicit_abandonment", + "action": "cancelled_by_intent_shift", "tool_name": interrupted_tool, } @@ -3113,59 +3008,21 @@ class AgentRuntimeMixin: policy = self._resolve_tool_execution_policy(tool_name, previous_args) missing_before = self._missing_required_arguments(policy, previous_args) - # O EnterpriseRouter pode já ter consumido parâmetros pendentes - # neste MESMO turno para garantir precedência da transação sobre - # intent shift. Esses valores não são apenas telemetria: precisam - # ser materializados no estado transacional antes de qualquer nova - # extração. Eles continuam sendo candidatos e passam normalmente - # pela pre-validation autoritativa antes de confirmação/execução. + # Primeira tentativa: coleta tradicional usando SOMENTE a fala + # atual. O histórico não deve participar enquanto a mensagem corrente + # conseguir preencher o contrato normalmente. arguments = dict(previous_args) - cached_route_values: dict[str, Any] = {} - cached = route_meta.get("transaction_parameter_values") - missing_before_set = {str(name) for name in missing_before} - if isinstance(cached, dict): - cached_route_values = { - str(key): value - for key, value in cached.items() - if str(key) in missing_before_set and value not in _EMPTY_VALUES - } - arguments.update(cached_route_values) - - # A fala atual pode tanto preencher um campo faltante quanto corrigir - # explicitamente um campo já coletado. Por isso o extrator current-only - # examina TODOS os parâmetros requeridos, nunca apenas missing_parameters. - # Ele continua estritamente local à mensagem atual e só devolve campos - # explicitamente presentes; portanto não compete com a reconciliação - # temporal e não apaga estado quando o usuário não mencionou o campo. - required_fields = [str(name) for name in (policy.get("requires") or [])] - # Legacy/domain overrides historically receive only pending fields. - # Keep that extension contract intact; the base framework extractor - # is the one allowed to inspect every required field so an explicit - # current-turn correction can replace an already collected value. - legacy_override = getattr(type(self), "_extract_transaction_parameters", None) - has_legacy_override = ( - legacy_override is not None - and legacy_override is not AgentRuntimeMixin._extract_transaction_parameters - ) - current_fields = ( - self._missing_required_arguments(policy, arguments) - if has_legacy_override else required_fields - ) extracted_current = await self._extract_transaction_parameters_current_only( state, tool_name=tool_name, - missing_parameters=current_fields, - known_arguments=arguments, + missing_parameters=missing_before, + known_arguments=previous_args, ) arguments.update(dict(extracted_current or {})) state["transaction_parameter_collection"] = { "tool_name": tool_name, "mode": "current_turn", - "router_resolved_fields": sorted(cached_route_values.keys()), - "current_turn_resolved_fields": sorted(str(k) for k in (extracted_current or {}).keys()), - "resolved_fields": sorted( - set(cached_route_values.keys()) | {str(k) for k in (extracted_current or {}).keys()} - ), + "resolved_fields": sorted(str(k) for k in (extracted_current or {}).keys()), } # Segunda opção: somente se a coleta tradicional ainda deixar @@ -3181,23 +3038,15 @@ class AgentRuntimeMixin: parameter_names=required_fields, known_arguments=arguments, ) - protected_current_fields = { - str(k) - for k, v in dict(extracted_current or {}).items() - if v not in _EMPTY_VALUES - } - arguments, ignored_clears = self._apply_transaction_reconciliation( - arguments, reconciliation, protected_current_fields=protected_current_fields - ) + for field in reconciliation.get("clear_fields") or []: + arguments.pop(str(field), None) + arguments.update(dict(reconciliation.get("values") or {})) state["transaction_parameter_reconciliation"] = { "tool_name": tool_name, "trigger": "traditional_collection_unresolved", "decisions": dict(reconciliation.get("decisions") or {}), "provenance": dict(reconciliation.get("provenance") or {}), "clear_fields": list(reconciliation.get("clear_fields") or []), - "values": dict(reconciliation.get("values") or {}), - "protected_current_fields": sorted(protected_current_fields), - "ignored_clear_fields": sorted(ignored_clears), } else: state.pop("transaction_parameter_reconciliation", None) @@ -3222,12 +3071,6 @@ class AgentRuntimeMixin: tool_name, arguments, state, exclude_fields=policy.get("requires") or [] ) policy = self._resolve_tool_execution_policy(tool_name, arguments) - arguments, applied_candidates = self._apply_prevalidated_structural_candidates( - arguments, locals().get("reconciliation"), policy - ) - if applied_candidates: - state.setdefault("transaction_parameter_reconciliation", {})["applied_structural_candidates"] = applied_candidates - policy = self._resolve_tool_execution_policy(tool_name, arguments) missing = self._missing_required_arguments(policy, arguments) if missing: self._set_collecting_parameters( @@ -3478,53 +3321,21 @@ class AgentRuntimeMixin: policy = self._resolve_tool_execution_policy(selected_action, action_args) required = [str(name) for name in (policy.get("requires") or [])] - # Primeiro turno transacional segue a mesma regra de COLLECTING_PARAMETERS: - # 1) coleta tradicional SOMENTE da fala atual; 2) reconciliação temporal - # apenas como fallback se ainda houver required fields faltando. - # Isso evita que histórico altere o happy path e, ao mesmo tempo, permite - # resolver referências contextuais quando a fala atual é incompleta. + # Valores já estruturados no contexto podem satisfazer requirements sem + # parsing textual. Para qualquer required field ainda ausente, a fala do + # usuário é interpretada exclusivamente pelo extrator LLM transacional. missing_initial = self._missing_required_arguments(policy, action_args) - extracted_initial = await self._extract_transaction_parameters_current_only( + # No primeiro turno, a fala atual pode fornecer/corrigir qualquer required + # field, inclusive um valor que exista no contexto estruturado mas pertença + # a uma transação anterior. O extrator continua restrito ao contrato + # ``requires`` e só sobrescreve quando a LLM realmente extrai um valor. + extracted_initial = await self._extract_transaction_parameters( state, tool_name=selected_action, missing_parameters=required, known_arguments={k: v for k, v in action_args.items() if k not in set(required)}, ) action_args.update(extracted_initial) - state["transaction_parameter_collection"] = { - "tool_name": selected_action, - "mode": "current_turn", - "resolved_fields": sorted(str(k) for k in (extracted_initial or {}).keys()), - } - - missing_after_current = self._missing_required_arguments(policy, action_args) - if missing_after_current: - reconciliation = await self._reconcile_transaction_parameters( - state, - tool_name=selected_action, - parameter_names=required, - known_arguments=action_args, - ) - protected_current_fields = { - str(k) - for k, v in dict(extracted_initial or {}).items() - if str(k) in set(missing_initial) and v not in _EMPTY_VALUES - } - action_args, ignored_clears = self._apply_transaction_reconciliation( - action_args, reconciliation, protected_current_fields=protected_current_fields - ) - state["transaction_parameter_reconciliation"] = { - "tool_name": selected_action, - "trigger": "initial_traditional_collection_unresolved", - "decisions": dict(reconciliation.get("decisions") or {}), - "provenance": dict(reconciliation.get("provenance") or {}), - "clear_fields": list(reconciliation.get("clear_fields") or []), - "values": dict(reconciliation.get("values") or {}), - "protected_current_fields": sorted(protected_current_fields), - "ignored_clear_fields": sorted(ignored_clears), - } - else: - state.pop("transaction_parameter_reconciliation", None) # O mapper MCP continua responsável somente por parâmetros auxiliares que # não pertencem ao contrato transacional. @@ -3543,18 +3354,6 @@ class AgentRuntimeMixin: ) state["tool_policy_result"] = {**policy, "tool_name": selected_action} - action_args, applied_candidates = self._apply_prevalidated_structural_candidates( - action_args, locals().get("reconciliation"), policy - ) - if applied_candidates: - state.setdefault("transaction_parameter_reconciliation", {})["applied_structural_candidates"] = applied_candidates - selected = {"tool_name": selected_action, "arguments": action_args} - state["selected_tool_call"] = selected - self._set_active_transaction( - state, tool_name=selected_action, arguments=action_args, status="COLLECTING_PARAMETERS" - ) - policy = self._resolve_tool_execution_policy(selected_action, action_args) - missing = self._missing_required_arguments(policy, action_args) if missing: self._set_collecting_parameters( diff --git a/libs/agent_framework/src/agent_framework/runtime/transaction_parameters.py b/libs/agent_framework/src/agent_framework/runtime/transaction_parameters.py index d6c2687f..88cfbeb6 100644 --- a/libs/agent_framework/src/agent_framework/runtime/transaction_parameters.py +++ b/libs/agent_framework/src/agent_framework/runtime/transaction_parameters.py @@ -69,81 +69,6 @@ def parse_transaction_confirmation(text: str) -> str | None: return None -async def extract_current_transaction_parameters( - llm: Any, - *, - text: str, - tool_name: str, - missing_parameters: list[str], - known_arguments: Mapping[str, Any] | None = None, - parameter_schema: Mapping[str, Any] | None = None, - tool_description: str | None = None, -) -> dict[str, Any]: - """Extract only values explicitly present in the current user utterance. - - This is deliberately narrower than temporal reconciliation: no history, no - cross-turn inference and no routing. Spoken numeric expressions are normalized - according to the declared numeric type, while textual fields must satisfy the - schema description in the current message itself. - """ - names = [str(x) for x in (missing_parameters or []) if str(x).strip()] - message = str(text or "").strip() - if not names or not message or llm is None: - return {} - schema = dict(parameter_schema or {}) - field_spec = { - name: { - "type": schema.get(name, "string") if not isinstance(schema.get(name), dict) else schema.get(name, {}).get("type", "string"), - "description": None if not isinstance(schema.get(name), dict) else schema.get(name, {}).get("description"), - } - for name in names - } - output = {name: None for name in names} - prompt = ( - "Extraia SOMENTE parâmetros explicitamente expressos na mensagem atual do usuário. " - "Não use histórico, não complete referências elípticas com conhecimento anterior e não invente valores. " - "Use exclusivamente type/description do schema para decidir se um trecho preenche um campo. " - "Para campos numéricos, normalize também números falados por extenso para número (por exemplo uma expressão monetária falada deve virar number). " - "Para campos textuais que exigem uma entidade concreta, uma referência apenas por valor/posição não preenche o campo. " - "Retorne SOMENTE JSON válido com exatamente as chaves pedidas; use null quando ausente ou ambíguo.\n" - f"tool: {tool_name}\n" - f"tool_description: {tool_description or ''}\n" - f"known_arguments: {json.dumps(dict(known_arguments or {}), ensure_ascii=False, default=str)}\n" - f"parameter_schema: {json.dumps(field_spec, ensure_ascii=False, default=str)}\n" - f"current_user_message: {message}\n" - f"Formato: {json.dumps(output, ensure_ascii=False)}" - ) - try: - response = await llm.ainvoke( - [{"role": "user", "content": prompt}], - profile_name="transaction_parameter_extraction", - component_name="transaction_parameter_extraction", - generation_name="llm.transaction_parameter_current_only", - temperature=0.0, - ) - except TypeError: - response = await llm.ainvoke([{"role": "user", "content": prompt}]) - except Exception as exc: - logger.warning("transaction.parameter.current_extract_failed tool=%s fields=%s error=%s", tool_name, names, exc) - return {} - raw = _response_text(response).strip() - try: - payload = parse_json_object(raw) - except (TypeError, ValueError): - logger.warning("transaction.parameter.current_extract_invalid tool=%s raw=%r", tool_name, raw[:240]) - return {} - if not isinstance(payload, dict): - return {} - values: dict[str, Any] = {} - for name in names: - value = payload.get(name) - declared = field_spec.get(name, {}).get("type", "string") - coerced = _coerce(value, declared) - if coerced not in _EMPTY_VALUES: - values[name] = coerced - return values - - async def reconcile_transaction_parameters( llm: Any, *, @@ -188,217 +113,33 @@ async def reconcile_transaction_parameters( for name in names } } - - def _anchor_tokens(value: Any) -> list[str]: - """Return generic textual variants for a known scalar anchor.""" - if value in _EMPTY_VALUES: - return [] - raw = str(value).strip().lower() - tokens = {raw} - try: - number = float(str(value).replace(",", ".")) - tokens.add(f"{number:.2f}") - tokens.add(f"{number:.2f}".replace(".", ",")) - if number.is_integer(): - tokens.add(str(int(number))) - except (TypeError, ValueError): - pass - return [token for token in tokens if token] - - def _anchor_relation_candidates(context: str, arguments: Mapping[str, Any]) -> list[str]: - """Surface history fragments related to any already-known parameter. - - This is not a second reconciliation pass and does not resolve anything - deterministically. It only structures the SAME temporal scan so the LLM - can use known/current fields as cross-field anchors while reconciling all - pending fields coherently in one call. - """ - if not context or not arguments: - return [] - # Keep role/history prefixes but split long assistant explanations into - # smaller semantic clauses (bullets/semicolons) so one anchor is not lost - # among many unrelated entity/value pairs. - fragments: list[str] = [] - for raw_line in context.splitlines(): - line = raw_line.strip() - if not line: - continue - parts = [part.strip() for part in re.split(r"\s*\*\s*|\s*;\s*", line) if part.strip()] - fragments.extend(parts or [line]) - - candidates: list[str] = [] - for field_name, field_value in arguments.items(): - variants = _anchor_tokens(field_value) - if not variants: - continue - for fragment in fragments: - low = fragment.lower() - if any(token in low for token in variants): - candidates.append(f"anchor[{field_name}={field_value}]: {fragment}") - return list(dict.fromkeys(candidates)) - - def _structured_evidence_blocks(context: str, arguments: Mapping[str, Any]) -> list[dict[str, Any]]: - """Represent the same bounded history as explicit message evidence blocks. - - The reconciler remains a single LLM call. This helper only prevents role, - recency and anchor relationships from being hidden inside one prose blob. - It is fully domain-neutral: field meaning still comes from parameter_schema. - """ - blocks: list[dict[str, Any]] = [] - current_role = "other" - current_lines: list[str] = [] - rank = 0 - - def flush() -> None: - nonlocal rank, current_lines, current_role - if not current_lines: - return - text_block = " ".join(x.strip() for x in current_lines if x.strip()).strip() - current_lines = [] - if not text_block: - return - - # A single assistant message often contains a list of independent - # entity/attribute relations (for example several invoice items). - # Keeping the whole answer as one evidence block makes an otherwise - # exact anchor ambiguous because every entity in the list competes - # inside the same block. Segment LOCAL relations while preserving - # the original role, priority and message recency. This is still the - # same temporal reconciliation and the same single LLM call. - fragments = [ - frag.strip(" \t-•") - for frag in re.split( - r"\s+(?:\*|•)\s+|\s*;\s+|\s+(?=\d+[.)]\s+)", - text_block, - ) - if frag.strip(" \t-•") - ] - if not fragments: - fragments = [text_block] - - rank += 1 - role_priority = 3 if current_role == "assistant" else 4 if current_role == "user" else 5 - for fragment_index, fragment in enumerate(fragments, start=1): - anchor_matches: list[dict[str, Any]] = [] - low = fragment.lower() - for field_name, field_value in arguments.items(): - variants = _anchor_tokens(field_value) - matched = [token for token in variants if token in low] - if matched: - anchor_matches.append({ - "field": str(field_name), - "value": field_value, - "matched_tokens": matched, - }) - blocks.append({ - "priority": role_priority, - "recency": rank, - "fragment": fragment_index, - "role": current_role, - "text": fragment, - "anchor_matches": anchor_matches, - }) - - for raw_line in str(context or "").splitlines(): - line = raw_line.strip() - if not line: - continue - low = line.lower() - # Priority-view section headers are metadata, not conversational text. - if low.startswith("priority_3_previous_assistant"): - flush(); current_role = "assistant"; continue - if low.startswith("priority_4_previous_user"): - flush(); current_role = "user"; continue - if low.startswith("priority_5_other"): - flush(); current_role = "other"; continue - payload = line.split(": ", 1)[1] if line.startswith("history:") and ": " in line else line - plow = payload.lower().lstrip() - detected = None - if plow.startswith(("assistant:", "agente:")): - detected = "assistant" - elif plow.startswith(("user:", "cliente:")): - detected = "user" - elif plow.startswith("system:"): - detected = "other" - if detected is not None: - flush() - current_role = detected - payload = payload.split(":", 1)[1].strip() if ":" in payload else payload - current_lines.append(payload) - flush() - return blocks - - context_text = str(conversational_context or "").strip() - anchor_relations = _anchor_relation_candidates(context_text, known) - evidence_blocks = _structured_evidence_blocks(context_text, known) - missing_initial = [name for name in names if name not in known] - - # Field-targeted views do not resolve parameters and do not add another LLM - # pass. They expose the SAME local evidence blocks next to the declarative - # semantics of each still-missing field so the single temporal reconciliation - # call can correlate anchors with the correct schema-defined target instead of - # rediscovering that mapping inside a large generic JSON blob. No field names - # or domain concepts are hardcoded here. - anchored_blocks = [block for block in evidence_blocks if block.get("anchor_matches")] - field_evidence_views = { - name: { - "field_spec": field_spec.get(name, {}), - "anchored_evidence_blocks": anchored_blocks, - } - for name in missing_initial - } - - reconciliation_focus = { - "current_user_message": message, - "known_parameters": known, - "missing_parameters": missing_initial, - "missing_field_views": field_evidence_views, - } - prompt = ( - "FOCO PRINCIPAL DA RECONCILIAÇÃO (examine isto antes de qualquer contexto secundário):\n" - f"reconciliation_focus: {json.dumps(reconciliation_focus, ensure_ascii=False, default=str)}\n" - "Se um campo faltante tiver um único evidence_block ancorado semanticamente compatível com seu field_spec, resolva-o; use unresolved somente em ambiguidade real.\n\n" "Você é o conciliador temporal de parâmetros de uma transação ativa. " - "Faça UMA ÚNICA VARREDURA TEMPORAL e reconstrua UM CONJUNTO COERENTE de parâmetros. " - "Todos os campos conhecidos e faltantes devem ser avaliados juntos; não execute uma busca isolada por campo e não faça uma segunda etapa de fallback. " + "Reconstrua UM CONJUNTO COERENTE de parâmetros; não extraia cada campo de forma isolada. " "Não decida roteamento, confirmação nem execução.\n\n" "CONTRATO OBRIGATÓRIO:\n" - "1. O significado de cada campo vem EXCLUSIVAMENTE de parameter_schema e transaction_description, principalmente a descrição semântica quando disponível. O framework não conhece conceitos de domínio por nome de campo.\n" - "2. A ausência de tipo ou descrição NÃO impede a extração nem a resolução quando o restante do contrato e o contexto forem semanticamente suficientes.\n" - "3. A resolução deve obedecer ESTA PRIORIDADE, sem inverter níveis: (1) informação explicitamente fornecida pelo usuário na mensagem atual e semanticamente compatível com o schema; (2) parâmetros já conhecidos/validados da transação; (3) respostas anteriores do assistente que apresentem relações locais entre parâmetros/atributos e que possam ter sido apoiadas por tool/evidence; (4) falas anteriores do usuário; (5) demais contexto conversacional.\n" - "4. Dentro de cada nível histórico, preserve a ordem temporal decrescente (mais novo -> mais antigo). Nunca escolha fonte de prioridade menor quando uma fonte de prioridade maior resolve o mesmo campo de forma coerente.\n" - "5. known_arguments contém o estado parcial já coletado/validado. Trate CADA parâmetro conhecido, independentemente de nome ou tipo, como possível ÂNCORA para resolver QUALQUER outro campo faltante no histórico. O significado e a compatibilidade de cada âncora vêm exclusivamente do parameter_schema. Use múltiplas âncoras simultaneamente quando disponíveis.\n" - "6. anchor_relation_candidates são apenas recortes do MESMO histórico que contêm representações de parâmetros conhecidos; eles servem para facilitar a correlação entre campos dentro desta única varredura. Não são uma segunda fonte, não têm prioridade própria e não autorizam inventar relações.\n" - "7. Quando uma âncora conhecida aparecer em um mesmo contexto local com uma ou mais informações semanticamente compatíveis com campos faltantes, use essa relação local para reconciliar TODOS os campos faltantes que puderem ser resolvidos de forma coerente na mesma resposta. Não pressuponha quais tipos de campo devem coexistir; siga apenas o schema e o contexto.\n" - "8. Texto anterior do assistente é CONTEXTO INTERPRETATIVO, não evidência autoritativa: pode fornecer relações locais entre quaisquer parâmetros/atributos definidos pelo schema, mas todo candidato continua sujeito à pre-validation/tool de negócio. Não descarte uma relação apenas por estar na fala do assistente. Não trate texto do contexto como uma nova afirmação do cliente.\n" - "9. Para cada campo escolha: resolved = texto/contexto determina novo valor; preserve = o valor conhecido continua coerente; clear = contexto mais novo rompe sua associação e não há substituto seguro; unresolved = não há candidato seguro.\n" - "10. Se uma fonte mais nova muda o contexto semântico que dava sentido a campos anteriores, REAVALIE os demais campos como conjunto. Não combine automaticamente informação antiga com contexto novo.\n" - "11. Se a nova menção é inválida no mundo real, NÃO volte silenciosamente ao valor antigo. Devolva o candidato textual mais recente como resolved e deixe a pre-validation autoritativa rejeitá-lo.\n" - "12. Uma expressão só pode preencher um campo se satisfizer semanticamente type/description desse campo. Não transfira um trecho para outro campo apenas por proximidade lexical.\n" - "13. Se o usuário corrige explicitamente informação anterior, a correção prevalece nos campos compatíveis e os demais devem ser reavaliados quanto à coerência.\n" - "14. unresolved é ÚLTIMO RECURSO. Antes de devolver unresolved para um campo faltante, você DEVE verificar todos os evidence_blocks na ordem de prioridade e recência e todas as anchor_relation_candidates. Se existir uma única interpretação semanticamente compatível com type/description do campo, resolva-a.\n" - "15. Se um parâmetro conhecido aparecer como anchor_match em um evidence_block e o MESMO bloco contiver uma única informação semanticamente compatível com um campo faltante segundo o schema, use a relação para resolved desse campo; não devolva unresolved apenas porque a informação foi apresentada pelo assistente.\n" - "16. Se não houver âncora útil, mas uma fonte histórica de prioridade 3 ou 4 contiver explicitamente uma informação que satisfaça semanticamente um campo faltante segundo o schema e não houver candidato concorrente de prioridade maior, resolva esse campo. Isso cobre referências posteriores em que o usuário omite um atributo porque ele já estava explícito no diálogo.\n" - "17. field_evidence_views reorganiza os MESMOS evidence_blocks ancorados por cada campo ainda faltante e coloca ao lado a semântica declarativa desse campo. Para cada campo faltante, examine obrigatoriamente essa visão antes de unresolved. Se um bloco ancorado contiver uma única informação compatível com field_spec e não houver concorrente de prioridade/recência maior, retorne resolved. Essa visão não é uma nova fonte nem uma segunda etapa.\n" - "18. Em ambiguidade REAL — dois ou mais candidatos semanticamente plausíveis sem desempate por prioridade, recência ou âncora — prefira clear/unresolved a inventar uma associação. Em caso de dúvida razoável sobre a correspondência ou o valor, prefira null/unresolved conforme o formato de saída.\n" - "19. Responda SOMENTE JSON válido no formato pedido, sem markdown e sem chaves extras.\n\n" + "1. O significado de cada campo vem EXCLUSIVAMENTE de parameter_schema e transaction_description, considerando principalmente a descrição semântica quando disponível. O framework não conhece conceitos de domínio por nome de campo.\n" + "2. A ausência de tipo ou descrição NÃO impede a extração quando o restante do contrato e o texto forem semanticamente suficientes.\n" + "3. A busca textual é temporal, em ordem decrescente: user_message é a fonte mais nova; depois conversational_context já vem do texto mais novo para o mais antigo.\n" + "3. Textos do usuário e textos explicativos do assistente podem ser usados para interpretar referências e relações entre campos. Não trate texto do contexto como uma nova afirmação do cliente; eles são contexto, não evidência autoritativa de negócio.\n" + "4. Para cada campo escolha: resolved = um texto determina novo valor; preserve = nenhum texto mais novo invalida o valor conhecido; clear = existe mudança textual mais nova que torna o valor conhecido incompatível/sem vínculo seguro com o novo contexto e ainda não há substituto; unresolved = não há valor conhecido nem candidato textual seguro.\n" + "5. Se uma fonte mais nova muda uma entidade, objeto, escopo ou outro contexto que dava sentido a campos extraídos anteriormente, REAVALIE os demais campos como conjunto. Não combine automaticamente um atributo antigo com um contexto novo só porque ambos existem.\n" + "6. Um valor de texto anterior pode continuar válido após uma mudança somente quando os textos, considerados em conjunto, sustentarem de forma inequívoca que ele ainda pertence ao contexto mais recente. Caso contrário use clear para o campo dependente.\n" + "7. Se a nova menção é inválida no mundo real, NÃO volte silenciosamente ao valor antigo. Ainda assim devolva o candidato textual mais recente como resolved; a pre-validation autoritativa é responsável por rejeitá-lo.\n" + "8. known_arguments é fallback de estado. Use preserve somente quando nenhum texto mais novo o contradiz ou rompe sua associação contextual.\n" + "9. Uma expressão só pode preencher um campo se satisfizer semanticamente type/description desse campo. Não transfira um trecho para outro campo apenas por proximidade lexical.\n" + "10. Se um texto recente corrige explicitamente informação anterior, a correção prevalece para os campos que o schema permite inferir; os demais devem ser reavaliados quanto à coerência com a correção.\n" + "11. Em ambiguidade razoável, prefira clear/unresolved a inventar uma associação. Em caso de dúvida razoável sobre a correspondência ou o valor, prefira null.\n" + "12. Responda SOMENTE JSON válido no formato pedido, sem markdown e sem chaves extras.\n\n" f"transaction_tool: {tool_name}\n" f"transaction_description: {tool_description or ''}\n" f"parameter_names: {json.dumps(names, ensure_ascii=False)}\n" - f"known_parameters: {json.dumps(known, ensure_ascii=False, default=str)}\n" - f"missing_parameters: {json.dumps(missing_initial, ensure_ascii=False)}\n" f"pending_parameters: {json.dumps(names, ensure_ascii=False)}\n" f"parameter_schema: {json.dumps(field_spec, ensure_ascii=False, default=str)}\n" - f"anchor_relation_candidates: {json.dumps(anchor_relations, ensure_ascii=False, default=str)}\n" - f"evidence_blocks: {json.dumps(evidence_blocks, ensure_ascii=False, default=str)}\n" - f"field_evidence_views: {json.dumps(field_evidence_views, ensure_ascii=False, default=str)}\n" + f"known_arguments: {json.dumps(known, ensure_ascii=False, default=str)}\n" "conversation_sources_newest_to_oldest:\n" - f"priority_1_current_user_message: {message}\n" f"user_message: {message}\n" - f"prioritized_conversational_context: {context_text}\n" - "RELEMBRE O FOCO PRINCIPAL: examine reconciliation_focus.missing_field_views antes de unresolved. " - "Um bloco ancorado único e semanticamente compatível deve produzir resolved, independentemente do papel assistant/user, respeitada a prioridade declarada.\n" + f"conversational_context: {str(conversational_context or '').strip()}\n" f"Formato obrigatório: {json.dumps(output_shape, ensure_ascii=False)}" ) @@ -471,49 +212,11 @@ async def reconcile_transaction_parameters( else: decisions[name] = "unresolved" - # Structural candidates are intentionally NOT resolved values. They are only - # fallback material for a configured authoritative pre-validator. This lets - # the runtime carry a unique local evidence fragment (or, when no anchor - # exists, a single prior user utterance) to domain validation without letting - # the framework invent/canonicalize business entities. - structural_candidates: dict[str, Any] = {} - candidate_provenance: dict[str, str] = {} - # For a field that was already missing before reconciliation, ``clear`` has - # no distinct state effect: there is no prior value to invalidate. Treat it - # as unresolved *only for structural-candidate fallback* so a unique anchored - # history fragment can still be offered to the configured authoritative - # pre-validator. This does not promote the fragment to a resolved value and - # does not change ``clear_fields`` semantics for fields that were previously - # populated. - unresolved_missing = [ - name for name in missing_initial - if decisions.get(name) in {"unresolved", "clear"} and name not in values - ] - anchored = [b for b in evidence_blocks if b.get("anchor_matches") and str(b.get("text") or "").strip()] - prior_user = [ - b for b in evidence_blocks - if int(b.get("priority") or 99) == 4 and str(b.get("text") or "").strip() - ] - for name in unresolved_missing: - declared = str(field_spec.get(name, {}).get("type") or "string").strip().lower() - if declared not in {"string", "str", "text"}: - continue - if len(anchored) == 1: - structural_candidates[name] = str(anchored[0].get("text") or "").strip() - candidate_provenance[name] = "unique_anchored_evidence_block" - logger.info( - "transaction.parameter.reconciled tool=%s decisions=%s resolved=%s clear=%s provenance=%s candidates=%s", - tool_name, decisions, sorted(values), clear_fields, provenance, sorted(structural_candidates), + "transaction.parameter.reconciled tool=%s decisions=%s resolved=%s clear=%s provenance=%s", + tool_name, decisions, sorted(values), clear_fields, provenance, ) - return { - "values": values, - "decisions": decisions, - "provenance": provenance, - "clear_fields": clear_fields, - "candidates": structural_candidates, - "candidate_provenance": candidate_provenance, - } + return {"values": values, "decisions": decisions, "provenance": provenance, "clear_fields": clear_fields} async def extract_transaction_parameters( diff --git a/libs/agent_framework/src/agent_framework/sse/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/sse/__pycache__/__init__.cpython-313.pyc index 79f8d737b0b317327551fa26ca64e4b3a1856f3d..abd217765813067c53de17863ce66d03f5a3e817 100644 GIT binary patch delta 18 Ycmcc2c$tywGcPX}0}$NKoXB+&05c^8asU7T delta 18 Ycmcc2c$tywGcPX}0}ymtPvklY05H=8@&Et; diff --git a/libs/agent_framework/src/agent_framework/sse/__pycache__/events.cpython-313.pyc b/libs/agent_framework/src/agent_framework/sse/__pycache__/events.cpython-313.pyc index 02876344e99ca41f43c7dbec64b33eeef506f7af..27bd0c7dc1745a43259d6f9fadc98618bf3383fd 100644 GIT binary patch delta 19 ZcmezD_1TN-GcPX}0}$NK+{l%w3IIl~1}Ojl delta 19 ZcmezD_1TN-GcPX}0}ymtZ{*5U1pq_b1*rf4 diff --git a/libs/agent_framework/src/agent_framework/supervisor/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/supervisor/__pycache__/__init__.cpython-313.pyc index 1259a44692a3e4ca6eb9b814617dd34400a34d06..0db928e02476996ce1035f9937179d0c20fd7a42 100644 GIT binary patch delta 18 Ycmcb`c#DziGcPX}0}$NKoXB+n05lo}hX4Qo delta 18 Ycmcb`c#DziGcPX}0}ymtPvp7)05Qk~2LJ#7 diff --git a/libs/agent_framework/src/agent_framework/supervisor/__pycache__/supervisor.cpython-313.pyc b/libs/agent_framework/src/agent_framework/supervisor/__pycache__/supervisor.cpython-313.pyc index 3d6ec917f7399b3c485976d1c6f38e48368114b2..dcbefa0eea6db1b74cfabac4c49196316155de9b 100644 GIT binary patch delta 19 ZcmX@Fc3zF^GcPX}0}$NK+{ooB3;;ZQ1!DjJ delta 19 ZcmX@Fc3zF^GcPX}0}ymtZ{%_n1^_v#1mgez diff --git a/libs/agent_framework/src/agent_framework/workflows/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/workflows/__pycache__/__init__.cpython-313.pyc index 6a0c10f04039a5200219fa3d57daca5ff94e9a1b..def6ac65b3e37a2137224777e1b62ae56eccab5e 100644 GIT binary patch delta 19 ZcmaFI_KuC~GcPX}0}$NF+{l%}3;;aL1#tiX delta 19 ZcmaFI_KuC~GcPX}0}ymtZ{$j01^_wq1n>X= diff --git a/libs/agent_framework/src/agent_framework/workflows/__pycache__/graph.cpython-313.pyc b/libs/agent_framework/src/agent_framework/workflows/__pycache__/graph.cpython-313.pyc index 9131a481173ac6d1078228c780bd54477e964b52..856528037f3dcfbdeaf622aba6ecddd9791d301e 100644 GIT binary patch delta 19 ZcmZqYZs+Fu%*)Hg00eh3H*(do0st>A1jqmY delta 19 YcmZqYZs+Fu%*)Hg00f=Z8@Xy(0W4MoM*si- diff --git a/libs/agent_framework/src/agent_framework/workflows/__pycache__/input_contract.cpython-313.pyc b/libs/agent_framework/src/agent_framework/workflows/__pycache__/input_contract.cpython-313.pyc index 7fdc6116785a3185586e74c52dc7f211f231f694..1eb76230833fc9cc6342beef525db965132754fb 100644 GIT binary patch delta 19 ZcmccSa?OS7GcPX}0}$NF+{opl1OP#o1;hXV delta 19 ZcmccSa?OS7GcPX}0}ymtZ{+e(0sub01w#M; diff --git a/libs/agent_framework/src/agent_framework/workflows/__pycache__/models.cpython-313.pyc b/libs/agent_framework/src/agent_framework/workflows/__pycache__/models.cpython-313.pyc index 106dbd5d7a79e9665fd84a22498361b7b42a0449..b806c32462e6b69b82f3b4b99ccc546da61110dc 100644 GIT binary patch delta 19 Zcmexr{neW5GcPX}0}$NF+{pD>763*128sXx delta 19 Zcmexr{neW5GcPX}0}ymtZ{&I{3jjkR1_=NF diff --git a/libs/agent_framework/src/agent_framework/workflows/__pycache__/registry.cpython-313.pyc b/libs/agent_framework/src/agent_framework/workflows/__pycache__/registry.cpython-313.pyc index becb36666b6414b01bdbf89acc75c815b66c56cf..1180577c2d9f17939492c9ad9a85420d634885c7 100644 GIT binary patch delta 19 Zcmdlfv{Q)dGcPX}0}$NF+{mTR2>>>X1n>X= delta 19 Zcmdlfv{Q)dGcPX}0}ymtZ{*VF1OPL%1aANU diff --git a/libs/agent_framework/src/agent_framework/workflows/__pycache__/repository.cpython-313.pyc b/libs/agent_framework/src/agent_framework/workflows/__pycache__/repository.cpython-313.pyc index 6c1facfa18901d1bd63de977141fa6c2ea94fcc8..5ab0dd87182b933417206b9d5786abf5bf47de3d 100644 GIT binary patch delta 19 ZcmbOwI!l!6GcPX}0}$NF+{iV73ji}&1sVVV delta 19 ZcmbOwI!l!6GcPX}0}ymtZ{(W51pqLC1epK; diff --git a/libs/agent_framework/src/agent_framework/workflows/__pycache__/runtime.cpython-313.pyc b/libs/agent_framework/src/agent_framework/workflows/__pycache__/runtime.cpython-313.pyc index 62d17ee12ddacccd8205da39386a741182a75859..f24728d937bb19bfdc9ad9ac1dd4a2925f7cc5ae 100644 GIT binary patch delta 21 bcmdlni)qI!Ca%xCyj%=Ga3^ykmtHRbO*jUH delta 21 bcmdlni)qI!Ca%xCyj%=G&}qGqORpCIN?-;A diff --git a/libs/agent_framework/src/agent_framework/workflows/__pycache__/tool_executor.cpython-313.pyc b/libs/agent_framework/src/agent_framework/workflows/__pycache__/tool_executor.cpython-313.pyc index b3aa8244ed2f9886ab6b9a8387a9440b864c4fd6..15f1453ad726f48b72edeacf2e752bddecd388ad 100644 GIT binary patch delta 19 ZcmZ3-zmA{lGcPX}0}$NF+{m?r9RM|g1xEk? delta 19 ZcmZ3-zmA{lGcPX}0}ymtZ{%9S4gfN$1jYaW