From ad778f6889fbd84dc4df2147be6093eaac7c5584 Mon Sep 17 00:00:00 2001 From: "cristiano.hoshikawa" Date: Thu, 20 Aug 2026 09:18:58 -0300 Subject: [PATCH] bugfix: route stickness precedences (transaction in the same intent) --- .../config/mcp_parameter_mapping.yaml | 12 + .../config/routing.yaml | 19 ++ .../config/tool_policies.yaml | 6 + .../config/tools.yaml | 17 ++ .../config/mcp_parameter_mapping.yaml | 12 + .../config/routing.yaml | 19 ++ .../config/tool_policies.yaml | 6 + .../agent_template_backend/config/tools.yaml | 17 ++ .../config/mcp_parameter_mapping.yaml | 12 + .../config/routing.yaml | 19 ++ .../config/tool_policies.yaml | 6 + .../agent_template_backend/config/tools.yaml | 17 ++ .../config/mcp_parameter_mapping.yaml | 12 + .../config/routing.yaml | 19 ++ .../config/tool_policies.yaml | 6 + .../agent_template_backend/config/tools.yaml | 17 ++ .../config/mcp_parameter_mapping.yaml | 12 + .../config/routing.yaml | 19 ++ .../config/tool_policies.yaml | 6 + .../config/tools.yaml | 17 ++ .../config/mcp_parameter_mapping.yaml | 12 + .../config/routing.yaml | 19 ++ .../config/tool_policies.yaml | 6 + .../agent_template_backend/config/tools.yaml | 17 ++ .../config/mcp_parameter_mapping.yaml | 12 + .../config/routing.yaml | 19 ++ .../config/tool_policies.yaml | 6 + .../config/tools.yaml | 17 ++ .../src/agent_framework.egg-info/SOURCES.txt | 2 - .../__pycache__/__init__.cpython-313.pyc | Bin 427 -> 427 bytes .../__pycache__/idempotency.cpython-313.pyc | Bin 5711 -> 5711 bytes .../__pycache__/observer.cpython-313.pyc | Bin 17571 -> 17571 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 563 -> 563 bytes .../composite_publisher.cpython-313.pyc | Bin 2518 -> 2518 bytes .../__pycache__/event_builder.cpython-313.pyc | Bin 1276 -> 1276 bytes .../__pycache__/factory.cpython-313.pyc | Bin 4012 -> 4012 bytes .../__pycache__/publisher.cpython-313.pyc | Bin 1888 -> 1888 bytes .../tim_payload_mapper.cpython-313.pyc | Bin 9302 -> 9302 bytes .../__pycache__/tim_sequence.cpython-313.pyc | Bin 17577 -> 17577 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 530 -> 530 bytes .../__pycache__/kafka.cpython-313.pyc | Bin 1828 -> 1828 bytes .../__pycache__/langfuse.cpython-313.pyc | Bin 22399 -> 22399 bytes .../__pycache__/oci_streaming.cpython-313.pyc | Bin 1837 -> 1837 bytes .../__pycache__/pubsub.cpython-313.pyc | Bin 7456 -> 7456 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 419 -> 419 bytes .../usage_repository.cpython-313.pyc | Bin 15702 -> 15702 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 229 -> 229 bytes .../cache/__pycache__/cache.cpython-313.pyc | Bin 16539 -> 16539 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 232 -> 232 bytes .../__pycache__/adapters.cpython-313.pyc | Bin 4188 -> 4188 bytes .../channels/__pycache__/base.cpython-313.pyc | Bin 1812 -> 1812 bytes .../__pycache__/gateway.cpython-313.pyc | Bin 5787 -> 5787 bytes .../__pycache__/interruption.cpython-313.pyc | Bin 6472 -> 6472 bytes .../__pycache__/transcription.cpython-313.pyc | Bin 1445 -> 1445 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 939 -> 939 bytes .../checkpoint_repository.cpython-313.pyc | Bin 27179 -> 27179 bytes .../langgraph_saver.cpython-313.pyc | Bin 11260 -> 11254 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 230 -> 230 bytes .../agent_registry.cpython-313.pyc | Bin 6963 -> 6963 bytes .../__pycache__/settings.cpython-313.pyc | Bin 12585 -> 12585 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 322 -> 322 bytes .../mcp_gateway_client.cpython-313.pyc | Bin 3348 -> 3348 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 1517 -> 1517 bytes .../__pycache__/base.cpython-313.pyc | Bin 1391 -> 1391 bytes .../__pycache__/config_loader.cpython-313.pyc | Bin 7265 -> 7265 bytes .../__pycache__/custom_rails.cpython-313.pyc | Bin 4412 -> 4412 bytes .../framework_llm_client.cpython-313.pyc | Bin 18079 -> 18079 bytes .../__pycache__/llm_rails.cpython-313.pyc | Bin 6658 -> 6658 bytes .../output_supervisor.cpython-313.pyc | Bin 16119 -> 16119 bytes .../parallel_executor.cpython-313.pyc | Bin 19927 -> 19927 bytes .../__pycache__/pipeline.cpython-313.pyc | Bin 10905 -> 10905 bytes .../__pycache__/rail_action.cpython-313.pyc | Bin 670 -> 670 bytes .../__pycache__/rail_decision.cpython-313.pyc | Bin 1621 -> 1621 bytes .../__pycache__/rail_result.cpython-313.pyc | Bin 1020 -> 1020 bytes .../__pycache__/rails.cpython-313.pyc | Bin 31612 -> 31612 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 2978 -> 2978 bytes .../__pycache__/_compat.cpython-313.pyc | Bin 2461 -> 2461 bytes .../contestation_validation.cpython-313.pyc | Bin 22886 -> 22870 bytes .../__pycache__/contracts.cpython-313.pyc | Bin 6905 -> 6905 bytes .../__pycache__/input_size.cpython-313.pyc | Bin 3562 -> 3562 bytes .../__pycache__/llm_adapter.cpython-313.pyc | Bin 3815 -> 3815 bytes .../__pycache__/llm_client.cpython-313.pyc | Bin 7349 -> 7349 bytes .../__pycache__/llm_rails.cpython-313.pyc | Bin 8897 -> 8897 bytes .../output_sanitization.cpython-313.pyc | Bin 13926 -> 13926 bytes .../__pycache__/pipeline.cpython-313.pyc | Bin 12667 -> 12667 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 489 -> 489 bytes .../__pycache__/_context.cpython-313.pyc | Bin 5391 -> 5391 bytes .../ausencia_oferta_proativa.cpython-313.pyc | Bin 9580 -> 9580 bytes .../__pycache__/coerencia.cpython-313.pyc | Bin 9496 -> 9496 bytes .../__pycache__/dlex_in.cpython-313.pyc | Bin 1320 -> 1320 bytes .../__pycache__/dlex_out.cpython-313.pyc | Bin 1607 -> 1607 bytes .../__pycache__/fallback.cpython-313.pyc | Bin 17205 -> 17205 bytes .../__pycache__/fraseologia.cpython-313.pyc | Bin 6068 -> 6068 bytes .../__pycache__/out_of_scope.cpython-313.pyc | Bin 17099 -> 17099 bytes .../prompts/__pycache__/pinj.cpython-313.pyc | Bin 8323 -> 8323 bytes .../__pycache__/ragsec.cpython-313.pyc | Bin 1121 -> 1121 bytes .../__pycache__/revprec.cpython-313.pyc | Bin 5422 -> 5422 bytes .../prompts/__pycache__/tox.cpython-313.pyc | Bin 645 -> 645 bytes .../toxicidade_output.cpython-313.pyc | Bin 939 -> 939 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 1683 -> 1683 bytes .../rails/__pycache__/alcada.cpython-313.pyc | Bin 5015 -> 5015 bytes .../rails/__pycache__/anatel.cpython-313.pyc | Bin 9164 -> 9164 bytes .../__pycache__/confirmation.cpython-313.pyc | Bin 11032 -> 11032 bytes .../rails/__pycache__/dlex_in.cpython-313.pyc | Bin 3295 -> 3295 bytes .../__pycache__/dlex_out.cpython-313.pyc | Bin 3347 -> 3347 bytes .../rails/__pycache__/ragsec.cpython-313.pyc | Bin 5429 -> 5429 bytes .../rails/__pycache__/revprec.cpython-313.pyc | Bin 5437 -> 5437 bytes .../rails/__pycache__/tox.cpython-313.pyc | Bin 8252 -> 8252 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 553 -> 553 bytes .../rules/__pycache__/alcada.cpython-313.pyc | Bin 1897 -> 1897 bytes .../__pycache__/pinj_patterns.cpython-313.pyc | Bin 3738 -> 3738 bytes .../__pycache__/tox_blocklist.cpython-313.pyc | Bin 1522 -> 1522 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 424 -> 424 bytes .../__pycache__/mcp_mapper.cpython-313.pyc | Bin 4708 -> 4708 bytes .../__pycache__/models.cpython-313.pyc | Bin 3160 -> 3160 bytes .../__pycache__/resolver.cpython-313.pyc | Bin 4729 -> 4729 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 634 -> 634 bytes .../judges/__pycache__/judge.cpython-313.pyc | Bin 36448 -> 36448 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 241 -> 241 bytes .../__pycache__/llm_client.cpython-313.pyc | Bin 6118 -> 6118 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 249 -> 249 bytes .../prompts/__pycache__/aluc.cpython-313.pyc | Bin 6464 -> 6464 bytes .../prompts/__pycache__/csi.cpython-313.pyc | Bin 1333 -> 1333 bytes .../__pycache__/fallback.cpython-313.pyc | Bin 8029 -> 8029 bytes .../prompts/__pycache__/rqlt.cpython-313.pyc | Bin 1171 -> 1171 bytes .../prompts/__pycache__/vctn.cpython-313.pyc | Bin 642 -> 642 bytes .../llm/__pycache__/__init__.cpython-313.pyc | Bin 227 -> 227 bytes .../llm/__pycache__/base.cpython-313.pyc | Bin 835 -> 835 bytes .../profile_resolver.cpython-313.pyc | Bin 9295 -> 9295 bytes .../llm/__pycache__/providers.cpython-313.pyc | Bin 35982 -> 35982 bytes .../mcp/__pycache__/__init__.cpython-313.pyc | Bin 489 -> 489 bytes .../mcp/__pycache__/client.cpython-313.pyc | Bin 18442 -> 18442 bytes .../mcp/__pycache__/models.cpython-313.pyc | Bin 2152 -> 2116 bytes .../mcp/__pycache__/registry.cpython-313.pyc | Bin 4756 -> 4750 bytes .../__pycache__/tool_policy.cpython-313.pyc | Bin 4753 -> 4753 bytes .../__pycache__/tool_router.cpython-313.pyc | Bin 14034 -> 14034 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 1151 -> 1151 bytes .../long_term_extractor.cpython-313.pyc | Bin 2529 -> 2529 bytes .../long_term_memory.cpython-313.pyc | Bin 6855 -> 6855 bytes .../long_term_models.cpython-313.pyc | Bin 1764 -> 1764 bytes .../long_term_store.cpython-313.pyc | Bin 29202 -> 29202 bytes .../message_history.cpython-313.pyc | Bin 8375 -> 8375 bytes .../summary_memory.cpython-313.pyc | Bin 12526 -> 12520 bytes .../__pycache__/summary_store.cpython-313.pyc | Bin 9536 -> 9530 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 230 -> 224 bytes .../__pycache__/identity.cpython-313.pyc | Bin 3481 -> 3481 bytes .../__pycache__/session.cpython-313.pyc | Bin 2724 -> 2718 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 1410 -> 1410 bytes .../__pycache__/context.cpython-313.pyc | Bin 7402 -> 7402 bytes .../__pycache__/event_bus.cpython-313.pyc | Bin 3648 -> 3648 bytes .../guardrail_events.cpython-313.pyc | Bin 2066 -> 2066 bytes .../__pycache__/ic_events.cpython-313.pyc | Bin 641 -> 641 bytes .../__pycache__/judge_events.cpython-313.pyc | Bin 1426 -> 1426 bytes .../langgraph_telemetry.cpython-313.pyc | Bin 4979 -> 4979 bytes .../__pycache__/llm_advisors.cpython-313.pyc | Bin 2953 -> 2953 bytes .../__pycache__/noc_contract.cpython-313.pyc | Bin 5090 -> 5090 bytes .../__pycache__/noc_otel.cpython-313.pyc | Bin 6337 -> 6337 bytes .../__pycache__/observer.cpython-313.pyc | Bin 4709 -> 4709 bytes .../__pycache__/otel.cpython-313.pyc | Bin 3427 -> 3427 bytes .../streaming_events.cpython-313.pyc | Bin 1850 -> 1850 bytes .../__pycache__/telemetry.cpython-313.pyc | Bin 51538 -> 51538 bytes .../__pycache__/token_cost.cpython-313.pyc | Bin 8612 -> 8612 bytes .../workflow_events.cpython-313.pyc | Bin 3345 -> 3345 bytes .../oci/__pycache__/__init__.cpython-313.pyc | Bin 227 -> 227 bytes .../oci/__pycache__/auth.cpython-313.pyc | Bin 3259 -> 3259 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 235 -> 229 bytes .../__pycache__/oracle_store.cpython-313.pyc | Bin 44971 -> 44971 bytes .../__pycache__/sqlite_store.cpython-313.pyc | Bin 15034 -> 15028 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 470 -> 465 bytes .../__pycache__/renderers.cpython-313.pyc | Bin 4333 -> 4328 bytes .../rag/__pycache__/__init__.cpython-313.pyc | Bin 725 -> 725 bytes .../embedding_provider.cpython-313.pyc | Bin 6542 -> 6542 bytes .../__pycache__/graph_store.cpython-313.pyc | Bin 5543 -> 5543 bytes .../rag/__pycache__/ingest.cpython-313.pyc | Bin 12596 -> 12596 bytes .../__pycache__/rag_service.cpython-313.pyc | Bin 10065 -> 10065 bytes .../__pycache__/vector_store.cpython-313.pyc | Bin 18671 -> 18671 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 236 -> 236 bytes .../session_repository.cpython-313.pyc | Bin 8605 -> 8605 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 441 -> 405 bytes .../__pycache__/config_loader.cpython-313.pyc | Bin 2312 -> 2276 bytes .../__pycache__/continuity.cpython-313.pyc | Bin 13254 -> 13218 bytes .../enterprise_router.cpython-313.pyc | Bin 14298 -> 14210 bytes .../__pycache__/models.cpython-313.pyc | Bin 2462 -> 2426 bytes .../routing/enterprise_router.py | 1 - .../__pycache__/__init__.cpython-313.pyc | Bin 364 -> 358 bytes .../__pycache__/agent_runtime.cpython-313.pyc | Bin 128156 -> 128150 bytes .../sse/__pycache__/__init__.cpython-313.pyc | Bin 227 -> 227 bytes .../sse/__pycache__/events.cpython-313.pyc | Bin 9603 -> 9603 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 234 -> 234 bytes .../__pycache__/supervisor.cpython-313.pyc | Bin 4704 -> 4704 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 894 -> 888 bytes .../__pycache__/graph.cpython-313.pyc | Bin 1431 -> 1425 bytes .../__pycache__/models.cpython-313.pyc | Bin 5248 -> 5242 bytes .../__pycache__/registry.cpython-313.pyc | Bin 2377 -> 2371 bytes .../__pycache__/repository.cpython-313.pyc | Bin 2730 -> 2724 bytes .../__pycache__/runtime.cpython-313.pyc | Bin 29143 -> 29137 bytes .../__pycache__/tool_executor.cpython-313.pyc | Bin 1982 -> 1976 bytes mcp/servers/retail_mcp_server/main.py | 11 + mcp/servers/retail_mcp_server/main_fastmcp.py | 10 + templates/agent_template_backend/.env.example | 209 ++++++++++++++++++ .../config/mcp_parameter_mapping.yaml | 12 + .../config/routing.yaml | 19 ++ .../config/tool_policies.yaml | 6 + .../agent_template_backend/config/tools.yaml | 17 ++ .../.env.example | 209 ++++++++++++++++++ .../config/mcp_parameter_mapping.yaml | 12 + .../config/routing.yaml | 19 ++ .../config/tool_policies.yaml | 6 + .../config/tools.yaml | 17 ++ ...saction_shift.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 10512 bytes ...nal_tool_flow.cpython-313-pytest-9.0.2.pyc | Bin 30624 -> 30594 bytes ...test_route_stickiness_transaction_shift.py | 82 +++++++ ...te_stickiness.cpython-313-pytest-9.0.2.pyc | Bin 0 -> 26265 bytes 213 files changed, 1007 insertions(+), 3 deletions(-) create mode 100644 templates/agent_template_backend/.env.example create mode 100644 templates/agent_template_backend_day_zero/.env.example create mode 100644 tests/__pycache__/test_route_stickiness_transaction_shift.cpython-313-pytest-9.0.2.pyc create mode 100644 tests/unit/__pycache__/test_semantic_route_stickiness.cpython-313-pytest-9.0.2.pyc diff --git a/Tuning-Performance/Authentication/agent_template_backend_authentication/config/mcp_parameter_mapping.yaml b/Tuning-Performance/Authentication/agent_template_backend_authentication/config/mcp_parameter_mapping.yaml index 5b29ccf..91d57af 100644 --- a/Tuning-Performance/Authentication/agent_template_backend_authentication/config/mcp_parameter_mapping.yaml +++ b/Tuning-Performance/Authentication/agent_template_backend_authentication/config/mcp_parameter_mapping.yaml @@ -60,6 +60,18 @@ mcp_parameter_mapping: mensagem. pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b group: 1 + cancelar_pedido: + map: + session_key: session_id + extract: + order_id: + from: message + type: string + strategy: hybrid + description: Extraia somente o identificador do pedido informado explicitamente pelo usuário. Retorne null quando não houver identificador de pedido na mensagem. + pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b + group: 1 + solicitar_troca: map: session_key: session_id diff --git a/Tuning-Performance/Authentication/agent_template_backend_authentication/config/routing.yaml b/Tuning-Performance/Authentication/agent_template_backend_authentication/config/routing.yaml index 2dbe95e..03aeaa9 100644 --- a/Tuning-Performance/Authentication/agent_template_backend_authentication/config/routing.yaml +++ b/Tuning-Performance/Authentication/agent_template_backend_authentication/config/routing.yaml @@ -79,6 +79,25 @@ intents: - Quero saber sobre meu pacote de internet. - Tenho roaming internacional? + + - name: retail_order_cancel + domain: retail + agent: orders_agent + description: Cancelamento explícito de pedido ou compra. + priority: 20 + mcp_tools: + - consultar_pedido + - cancelar_pedido + keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar a compra + - cancelar compra + examples: + - Quero cancelar meu pedido. + - Cancele o pedido. + - Quero cancelar a compra. + - name: retail_order_tracking domain: retail agent: orders_agent diff --git a/Tuning-Performance/Authentication/agent_template_backend_authentication/config/tool_policies.yaml b/Tuning-Performance/Authentication/agent_template_backend_authentication/config/tool_policies.yaml index 3c4fd05..9b1ab9e 100644 --- a/Tuning-Performance/Authentication/agent_template_backend_authentication/config/tool_policies.yaml +++ b/Tuning-Performance/Authentication/agent_template_backend_authentication/config/tool_policies.yaml @@ -7,6 +7,12 @@ defaults: require_confirmation: false tool_policies: + cancelar_pedido: + operation_type: transactional + require_confirmation: true + requires: [order_id] + + solicitar_troca: operation_type: transactional require_confirmation: true diff --git a/Tuning-Performance/Authentication/agent_template_backend_authentication/config/tools.yaml b/Tuning-Performance/Authentication/agent_template_backend_authentication/config/tools.yaml index 6273371..f8a53ca 100644 --- a/Tuning-Performance/Authentication/agent_template_backend_authentication/config/tools.yaml +++ b/Tuning-Performance/Authentication/agent_template_backend_authentication/config/tools.yaml @@ -73,6 +73,23 @@ tools: response: mode: renderer renderer: retail.delivery + cancelar_pedido: + description: Simula o cancelamento de um pedido de varejo. + mcp_server: retail + enabled: true + tool_type: action + requires: + - order_id + confirmation_required: true + args_schema: + order_id: string + selection_keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar compra + - cancelar a compra + + solicitar_troca: description: Simula abertura de solicitação de troca. mcp_server: retail diff --git a/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/mcp_parameter_mapping.yaml b/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/mcp_parameter_mapping.yaml index 5b29ccf..91d57af 100644 --- a/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/mcp_parameter_mapping.yaml +++ b/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/mcp_parameter_mapping.yaml @@ -60,6 +60,18 @@ mcp_parameter_mapping: mensagem. pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b group: 1 + cancelar_pedido: + map: + session_key: session_id + extract: + order_id: + from: message + type: string + strategy: hybrid + description: Extraia somente o identificador do pedido informado explicitamente pelo usuário. Retorne null quando não houver identificador de pedido na mensagem. + pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b + group: 1 + solicitar_troca: map: session_key: session_id diff --git a/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/routing.yaml b/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/routing.yaml index 2dbe95e..03aeaa9 100644 --- a/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/routing.yaml +++ b/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/routing.yaml @@ -79,6 +79,25 @@ intents: - Quero saber sobre meu pacote de internet. - Tenho roaming internacional? + + - name: retail_order_cancel + domain: retail + agent: orders_agent + description: Cancelamento explícito de pedido ou compra. + priority: 20 + mcp_tools: + - consultar_pedido + - cancelar_pedido + keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar a compra + - cancelar compra + examples: + - Quero cancelar meu pedido. + - Cancele o pedido. + - Quero cancelar a compra. + - name: retail_order_tracking domain: retail agent: orders_agent diff --git a/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/tool_policies.yaml b/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/tool_policies.yaml index 3c4fd05..9b1ab9e 100644 --- a/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/tool_policies.yaml +++ b/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/tool_policies.yaml @@ -7,6 +7,12 @@ defaults: require_confirmation: false tool_policies: + cancelar_pedido: + operation_type: transactional + require_confirmation: true + requires: [order_id] + + solicitar_troca: operation_type: transactional require_confirmation: true diff --git a/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/tools.yaml b/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/tools.yaml index 6273371..f8a53ca 100644 --- a/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/tools.yaml +++ b/Tuning-Performance/Deterministic_Transactional_Workflow/agent_template_backend/config/tools.yaml @@ -73,6 +73,23 @@ tools: response: mode: renderer renderer: retail.delivery + cancelar_pedido: + description: Simula o cancelamento de um pedido de varejo. + mcp_server: retail + enabled: true + tool_type: action + requires: + - order_id + confirmation_required: true + args_schema: + order_id: string + selection_keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar compra + - cancelar a compra + + solicitar_troca: description: Simula abertura de solicitação de troca. mcp_server: retail diff --git a/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/mcp_parameter_mapping.yaml b/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/mcp_parameter_mapping.yaml index 5b29ccf..91d57af 100644 --- a/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/mcp_parameter_mapping.yaml +++ b/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/mcp_parameter_mapping.yaml @@ -60,6 +60,18 @@ mcp_parameter_mapping: mensagem. pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b group: 1 + cancelar_pedido: + map: + session_key: session_id + extract: + order_id: + from: message + type: string + strategy: hybrid + description: Extraia somente o identificador do pedido informado explicitamente pelo usuário. Retorne null quando não houver identificador de pedido na mensagem. + pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b + group: 1 + solicitar_troca: map: session_key: session_id diff --git a/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/routing.yaml b/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/routing.yaml index 2dbe95e..03aeaa9 100644 --- a/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/routing.yaml +++ b/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/routing.yaml @@ -79,6 +79,25 @@ intents: - Quero saber sobre meu pacote de internet. - Tenho roaming internacional? + + - name: retail_order_cancel + domain: retail + agent: orders_agent + description: Cancelamento explícito de pedido ou compra. + priority: 20 + mcp_tools: + - consultar_pedido + - cancelar_pedido + keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar a compra + - cancelar compra + examples: + - Quero cancelar meu pedido. + - Cancele o pedido. + - Quero cancelar a compra. + - name: retail_order_tracking domain: retail agent: orders_agent diff --git a/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/tool_policies.yaml b/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/tool_policies.yaml index 66c9854..48a83d5 100644 --- a/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/tool_policies.yaml +++ b/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/tool_policies.yaml @@ -7,6 +7,12 @@ defaults: require_confirmation: false tool_policies: + cancelar_pedido: + operation_type: transactional + require_confirmation: true + requires: [order_id] + + solicitar_troca: operation_type: transactional require_confirmation: true diff --git a/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/tools.yaml b/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/tools.yaml index 6273371..f8a53ca 100644 --- a/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/tools.yaml +++ b/Tuning-Performance/Long_Term_Memory/templates/agent_template_backend/config/tools.yaml @@ -73,6 +73,23 @@ tools: response: mode: renderer renderer: retail.delivery + cancelar_pedido: + description: Simula o cancelamento de um pedido de varejo. + mcp_server: retail + enabled: true + tool_type: action + requires: + - order_id + confirmation_required: true + args_schema: + order_id: string + selection_keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar compra + - cancelar a compra + + solicitar_troca: description: Simula abertura de solicitação de troca. mcp_server: retail diff --git a/Tuning-Performance/Normal/templates/agent_template_backend/config/mcp_parameter_mapping.yaml b/Tuning-Performance/Normal/templates/agent_template_backend/config/mcp_parameter_mapping.yaml index 5b29ccf..91d57af 100644 --- a/Tuning-Performance/Normal/templates/agent_template_backend/config/mcp_parameter_mapping.yaml +++ b/Tuning-Performance/Normal/templates/agent_template_backend/config/mcp_parameter_mapping.yaml @@ -60,6 +60,18 @@ mcp_parameter_mapping: mensagem. pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b group: 1 + cancelar_pedido: + map: + session_key: session_id + extract: + order_id: + from: message + type: string + strategy: hybrid + description: Extraia somente o identificador do pedido informado explicitamente pelo usuário. Retorne null quando não houver identificador de pedido na mensagem. + pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b + group: 1 + solicitar_troca: map: session_key: session_id diff --git a/Tuning-Performance/Normal/templates/agent_template_backend/config/routing.yaml b/Tuning-Performance/Normal/templates/agent_template_backend/config/routing.yaml index 2dbe95e..03aeaa9 100644 --- a/Tuning-Performance/Normal/templates/agent_template_backend/config/routing.yaml +++ b/Tuning-Performance/Normal/templates/agent_template_backend/config/routing.yaml @@ -79,6 +79,25 @@ intents: - Quero saber sobre meu pacote de internet. - Tenho roaming internacional? + + - name: retail_order_cancel + domain: retail + agent: orders_agent + description: Cancelamento explícito de pedido ou compra. + priority: 20 + mcp_tools: + - consultar_pedido + - cancelar_pedido + keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar a compra + - cancelar compra + examples: + - Quero cancelar meu pedido. + - Cancele o pedido. + - Quero cancelar a compra. + - name: retail_order_tracking domain: retail agent: orders_agent diff --git a/Tuning-Performance/Normal/templates/agent_template_backend/config/tool_policies.yaml b/Tuning-Performance/Normal/templates/agent_template_backend/config/tool_policies.yaml index 66c9854..48a83d5 100644 --- a/Tuning-Performance/Normal/templates/agent_template_backend/config/tool_policies.yaml +++ b/Tuning-Performance/Normal/templates/agent_template_backend/config/tool_policies.yaml @@ -7,6 +7,12 @@ defaults: require_confirmation: false tool_policies: + cancelar_pedido: + operation_type: transactional + require_confirmation: true + requires: [order_id] + + solicitar_troca: operation_type: transactional require_confirmation: true diff --git a/Tuning-Performance/Normal/templates/agent_template_backend/config/tools.yaml b/Tuning-Performance/Normal/templates/agent_template_backend/config/tools.yaml index 6273371..f8a53ca 100644 --- a/Tuning-Performance/Normal/templates/agent_template_backend/config/tools.yaml +++ b/Tuning-Performance/Normal/templates/agent_template_backend/config/tools.yaml @@ -73,6 +73,23 @@ tools: response: mode: renderer renderer: retail.delivery + cancelar_pedido: + description: Simula o cancelamento de um pedido de varejo. + mcp_server: retail + enabled: true + tool_type: action + requires: + - order_id + confirmation_required: true + args_schema: + order_id: string + selection_keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar compra + - cancelar a compra + + solicitar_troca: description: Simula abertura de solicitação de troca. mcp_server: retail diff --git a/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/mcp_parameter_mapping.yaml b/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/mcp_parameter_mapping.yaml index 5b29ccf..91d57af 100644 --- a/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/mcp_parameter_mapping.yaml +++ b/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/mcp_parameter_mapping.yaml @@ -60,6 +60,18 @@ mcp_parameter_mapping: mensagem. pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b group: 1 + cancelar_pedido: + map: + session_key: session_id + extract: + order_id: + from: message + type: string + strategy: hybrid + description: Extraia somente o identificador do pedido informado explicitamente pelo usuário. Retorne null quando não houver identificador de pedido na mensagem. + pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b + group: 1 + solicitar_troca: map: session_key: session_id diff --git a/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/routing.yaml b/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/routing.yaml index 2dbe95e..03aeaa9 100644 --- a/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/routing.yaml +++ b/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/routing.yaml @@ -79,6 +79,25 @@ intents: - Quero saber sobre meu pacote de internet. - Tenho roaming internacional? + + - name: retail_order_cancel + domain: retail + agent: orders_agent + description: Cancelamento explícito de pedido ou compra. + priority: 20 + mcp_tools: + - consultar_pedido + - cancelar_pedido + keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar a compra + - cancelar compra + examples: + - Quero cancelar meu pedido. + - Cancele o pedido. + - Quero cancelar a compra. + - name: retail_order_tracking domain: retail agent: orders_agent diff --git a/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/tool_policies.yaml b/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/tool_policies.yaml index 66c9854..48a83d5 100644 --- a/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/tool_policies.yaml +++ b/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/tool_policies.yaml @@ -7,6 +7,12 @@ defaults: require_confirmation: false tool_policies: + cancelar_pedido: + operation_type: transactional + require_confirmation: true + requires: [order_id] + + solicitar_troca: operation_type: transactional require_confirmation: true diff --git a/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/tools.yaml b/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/tools.yaml index d85fae1..2329dc7 100644 --- a/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/tools.yaml +++ b/Tuning-Performance/Normal/templates/agent_template_backend_day_zero/config/tools.yaml @@ -61,6 +61,23 @@ tools: - rastreamento - transportadora - previsão + cancelar_pedido: + description: Simula o cancelamento de um pedido de varejo. + mcp_server: retail + enabled: true + tool_type: action + requires: + - order_id + confirmation_required: true + args_schema: + order_id: string + selection_keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar compra + - cancelar a compra + + solicitar_troca: description: Simula abertura de solicitação de troca. mcp_server: retail diff --git a/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/mcp_parameter_mapping.yaml b/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/mcp_parameter_mapping.yaml index 5b29ccf..91d57af 100644 --- a/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/mcp_parameter_mapping.yaml +++ b/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/mcp_parameter_mapping.yaml @@ -60,6 +60,18 @@ mcp_parameter_mapping: mensagem. pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b group: 1 + cancelar_pedido: + map: + session_key: session_id + extract: + order_id: + from: message + type: string + strategy: hybrid + description: Extraia somente o identificador do pedido informado explicitamente pelo usuário. Retorne null quando não houver identificador de pedido na mensagem. + pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b + group: 1 + solicitar_troca: map: session_key: session_id diff --git a/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/routing.yaml b/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/routing.yaml index 2dbe95e..03aeaa9 100644 --- a/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/routing.yaml +++ b/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/routing.yaml @@ -79,6 +79,25 @@ intents: - Quero saber sobre meu pacote de internet. - Tenho roaming internacional? + + - name: retail_order_cancel + domain: retail + agent: orders_agent + description: Cancelamento explícito de pedido ou compra. + priority: 20 + mcp_tools: + - consultar_pedido + - cancelar_pedido + keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar a compra + - cancelar compra + examples: + - Quero cancelar meu pedido. + - Cancele o pedido. + - Quero cancelar a compra. + - name: retail_order_tracking domain: retail agent: orders_agent diff --git a/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/tool_policies.yaml b/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/tool_policies.yaml index 66c9854..48a83d5 100644 --- a/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/tool_policies.yaml +++ b/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/tool_policies.yaml @@ -7,6 +7,12 @@ defaults: require_confirmation: false tool_policies: + cancelar_pedido: + operation_type: transactional + require_confirmation: true + requires: [order_id] + + solicitar_troca: operation_type: transactional require_confirmation: true diff --git a/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/tools.yaml b/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/tools.yaml index 6273371..f8a53ca 100644 --- a/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/tools.yaml +++ b/Tuning-Performance/Route_Stickness/templates/agent_template_backend/config/tools.yaml @@ -73,6 +73,23 @@ tools: response: mode: renderer renderer: retail.delivery + cancelar_pedido: + description: Simula o cancelamento de um pedido de varejo. + mcp_server: retail + enabled: true + tool_type: action + requires: + - order_id + confirmation_required: true + args_schema: + order_id: string + selection_keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar compra + - cancelar a compra + + solicitar_troca: description: Simula abertura de solicitação de troca. mcp_server: retail diff --git a/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/mcp_parameter_mapping.yaml b/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/mcp_parameter_mapping.yaml index 5b29ccf..91d57af 100644 --- a/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/mcp_parameter_mapping.yaml +++ b/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/mcp_parameter_mapping.yaml @@ -60,6 +60,18 @@ mcp_parameter_mapping: mensagem. pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b group: 1 + cancelar_pedido: + map: + session_key: session_id + extract: + order_id: + from: message + type: string + strategy: hybrid + description: Extraia somente o identificador do pedido informado explicitamente pelo usuário. Retorne null quando não houver identificador de pedido na mensagem. + pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b + group: 1 + solicitar_troca: map: session_key: session_id diff --git a/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/routing.yaml b/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/routing.yaml index 2dbe95e..03aeaa9 100644 --- a/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/routing.yaml +++ b/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/routing.yaml @@ -79,6 +79,25 @@ intents: - Quero saber sobre meu pacote de internet. - Tenho roaming internacional? + + - name: retail_order_cancel + domain: retail + agent: orders_agent + description: Cancelamento explícito de pedido ou compra. + priority: 20 + mcp_tools: + - consultar_pedido + - cancelar_pedido + keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar a compra + - cancelar compra + examples: + - Quero cancelar meu pedido. + - Cancele o pedido. + - Quero cancelar a compra. + - name: retail_order_tracking domain: retail agent: orders_agent diff --git a/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/tool_policies.yaml b/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/tool_policies.yaml index 66c9854..48a83d5 100644 --- a/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/tool_policies.yaml +++ b/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/tool_policies.yaml @@ -7,6 +7,12 @@ defaults: require_confirmation: false tool_policies: + cancelar_pedido: + operation_type: transactional + require_confirmation: true + requires: [order_id] + + solicitar_troca: operation_type: transactional require_confirmation: true diff --git a/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/tools.yaml b/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/tools.yaml index d85fae1..2329dc7 100644 --- a/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/tools.yaml +++ b/Tuning-Performance/Route_Stickness/templates/agent_template_backend_day_zero/config/tools.yaml @@ -61,6 +61,23 @@ tools: - rastreamento - transportadora - previsão + cancelar_pedido: + description: Simula o cancelamento de um pedido de varejo. + mcp_server: retail + enabled: true + tool_type: action + requires: + - order_id + confirmation_required: true + args_schema: + order_id: string + selection_keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar compra + - cancelar a compra + + solicitar_troca: description: Simula abertura de solicitação de troca. mcp_server: retail diff --git a/libs/agent_framework/src/agent_framework.egg-info/SOURCES.txt b/libs/agent_framework/src/agent_framework.egg-info/SOURCES.txt index 723d0a0..a8fbb5a 100644 --- a/libs/agent_framework/src/agent_framework.egg-info/SOURCES.txt +++ b/libs/agent_framework/src/agent_framework.egg-info/SOURCES.txt @@ -179,8 +179,6 @@ src/agent_framework/persistence/__init__.py src/agent_framework/persistence/mongodb_store.py src/agent_framework/persistence/oracle_store.py src/agent_framework/persistence/sqlite_store.py -src/agent_framework/presentation/__init__.py -src/agent_framework/presentation/renderers.py src/agent_framework/rag/__init__.py src/agent_framework/rag/embedding_provider.py src/agent_framework/rag/graph_store.py 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 adb49c3eeaff0e06d5ed31cdc353941b81ec9088..12a77f9b9177c1a78f47349bf55e78751f603d7e 100644 GIT binary patch delta 20 acmZ3@yqcN&GcPX}0}%ZC*0Pa%0V4oD76w!R delta 20 acmZ3@yqcN&GcPX}0}xc^w{7HJzz6_0Qw2%@ 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 96dd9a2220736f73ef8f7d1b5996ab9153c2af37..dafbb1f2ef69f884445f930c11269075ec52c715 100644 GIT binary patch delta 20 acmX@Fb6$u0GcPX}0}%ZC*0Pb?MGOE)j|Qgz delta 20 acmX@Fb6$u0GcPX}0}xc^w{7Hh5d#20%mtkQ 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 cfb87c2c36f5c49c909d08d2fd790449117fe32a..7d09d8707cbdc33a7e9b6a796c4b7dd450346e7d 100644 GIT binary patch delta 22 ccmZ47$+)k 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 79a9c4c358ffb5c7493ac2b2658ffaac5dc967ec..da880a834d6b4c63e4e30368a69ab5e7ba6a506f 100644 GIT binary patch delta 20 acmdnYvYCbZGcPX}0}%ZC*0PaXg9!jWdj;GcPX}0}%ZC*0Pa%AwK{@JO-Tr delta 20 acmZ1@zeb+>GcPX}0}xc^w{7HJ$PWNJc?FXI 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 fa87ebb47ca2ab8dbcf280c24a2aeeb765485b20..9d2f0df1359a391111730f96c25e61b341f80b27 100644 GIT binary patch delta 20 acmaFB_kfT4GcPX}0}%ZC*0Pa1lpO#@@CJ_n delta 20 acmaFB_kfT4GcPX}0}xc^w{7GOWd{I2Ed_-D 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 0fffb667e6e9d090d31695ae0c7a28acc2fe8cdb..02c8aaed6e7264a116ff223eb8127e7211707c12 100644 GIT binary patch delta 20 acmccSam|DKGcPX}0}%ZC*0Pb?TLl13r3V54 delta 20 acmccSam|DKGcPX}0}xc^w{7J1RsjG;;sy8s 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 e9ab31def78abbde9d67dd7e617dbdec3b9902ed..65c28105072b2e16f5d3b00ad81e8b0b30559281 100644 GIT binary patch delta 22 ccmZ44$+)tUk^3_*FBbz4{QK6jk$avC092j_p8x;= delta 22 ccmZ44$+)tUk^3_*FBbz4ROYvBh($ 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 3159299b3c442a53164b10650ba2da13bc8e8508..144ae86decb53a5bf4a4958867345c0e9d518def 100644 GIT binary patch delta 20 acmbQlGKq!zGcPX}0}%ZC*0PbCoe2OrQw59w delta 20 acmbQlGKq!zGcPX}0}xc^w{7HRX955+kOYDN 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 15e67e5d4a46037bfe2d2b4ed23f7938f6b001dc..a0b1b2e0954bc8a1106b91dfa3068fe7c644b210 100644 GIT binary patch delta 20 acmZ3&w}g-TGcPX}0}%ZC*0PaXk{tj&kOkWS delta 20 acmZ3&w}g-TGcPX}0}xc^w{7H>WCs8?%>>Z^ 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 d351d93ea8076e0a961f0424586e99c127a50399..4126c1128bdec4987889f2b921737ec7b3cdc22b 100644 GIT binary patch delta 22 ccmeyrj`9CGM()qNyj%=G@b6p8M(&bu0B6PsegFUf delta 22 ccmeyrj`9CGM()qNyj%=GP?_Jhk-H=u0AT|MbN~PV 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 29655c5d090eacbddc6ac1f2b1c4ecaadcc04183..845679941d7318147b0afe7f1072a38098b365d5 100644 GIT binary patch delta 20 acmZ3>x0a9lGcPX}0}%ZC*0PaXi5&nw_yzU= delta 20 acmZ3>x0a9lGcPX}0}xc^w{7HBVg~>?H3aMc diff --git a/libs/agent_framework/src/agent_framework/analytics/providers/__pycache__/pubsub.cpython-313.pyc b/libs/agent_framework/src/agent_framework/analytics/providers/__pycache__/pubsub.cpython-313.pyc index 3d88873dcce0e319b41e374bbacb5758c7d6a643..b7d99e41bf2eca7ed441ae2bbef326d2bbd6e646 100644 GIT binary patch delta 20 acmZ2rwZMw|GcPX}0}%ZC*0PaXR2Be3HU>Qa delta 20 acmZ2rwZMw|GcPX}0}xc^w{7GWl?4Dia|JU1 diff --git a/libs/agent_framework/src/agent_framework/billing/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/billing/__pycache__/__init__.cpython-313.pyc index 385e821125fe24312078c1605cce5ad4c2eb8c55..f4a8983e928abc9bfa99e8918c760487eaf3018f 100644 GIT binary patch delta 20 acmZ3?yqKB$GcPX}0}%ZC*0Pa%1|tAG)&@KP delta 20 acmZ3?yqKB$GcPX}0}xc^w{7H}!3Y3069qB= diff --git a/libs/agent_framework/src/agent_framework/billing/__pycache__/usage_repository.cpython-313.pyc b/libs/agent_framework/src/agent_framework/billing/__pycache__/usage_repository.cpython-313.pyc index e33601fa5328e5b62ca5530ac34883484aefce7a..67c4c0c652ce177c8b73fff5f4f0ac0ae078173e 100644 GIT binary patch delta 20 acmcasb*+l~GcPX}0}%ZC*0Pb?+ZF&+#s_}@ delta 20 acmcasb*+l~GcPX}0}xc^w{7J1wgmuA0|s>f diff --git a/libs/agent_framework/src/agent_framework/cache/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/cache/__pycache__/__init__.cpython-313.pyc index f1202aa9bf5c406f55986fe6259dd6131ac8d46c..2cc5683b0b9fd447f564c281b00726c9897b6abe 100644 GIT binary patch delta 19 ZcmaFL_>__RGcPX}0}%ZC)-sX%763nh2HgMv delta 19 ZcmaFL_>__RGcPX}0}xc^w@u`}1pqn61=9ck diff --git a/libs/agent_framework/src/agent_framework/cache/__pycache__/cache.cpython-313.pyc b/libs/agent_framework/src/agent_framework/cache/__pycache__/cache.cpython-313.pyc index 78b45b818687a91690cfad4dc840e990ee7021a9..1778a22acb8463ea0c8006e2e4eafa5564d23da3 100644 GIT binary patch delta 22 ccmbQ;$T+)^k^3_*FBbz4{QK6jk$Zvz08t1BVE_OC delta 22 ccmbQ;$T+)^k^3_*FBbz4ROYvB67t diff --git a/libs/agent_framework/src/agent_framework/channels/__pycache__/adapters.cpython-313.pyc b/libs/agent_framework/src/agent_framework/channels/__pycache__/adapters.cpython-313.pyc index 299197d854d5a427ffafeabb22d0f16018a682e1..df8eb6f901dee950808700d852a36ce3bb4ccbaa 100644 GIT binary patch delta 20 acmcbka7TgrGcPX}0}%ZC*0Pa1Pyhf(;Rdh( delta 20 acmcbka7TgrGcPX}0}xc^w{7GO6aWB19tEZV diff --git a/libs/agent_framework/src/agent_framework/channels/__pycache__/base.cpython-313.pyc b/libs/agent_framework/src/agent_framework/channels/__pycache__/base.cpython-313.pyc index a10e14b6e0b5b2e60bf2b788016902ff1baa1b49..337545bc9bad56af04b3b296c7c3d2ef77da118b 100644 GIT binary patch delta 20 acmbQjH-(S;GcPX}0}%ZC*0PbClN|s%5Cy9M delta 20 acmbQjH-(S;GcPX}0}xc^w{7I+WCs8=O$4C; diff --git a/libs/agent_framework/src/agent_framework/channels/__pycache__/gateway.cpython-313.pyc b/libs/agent_framework/src/agent_framework/channels/__pycache__/gateway.cpython-313.pyc index f81ae9e2e27ec43c50098afd407eae5aab46ea9a..3871ce3533a72d6f597c784b09de06fc3c3a2e61 100644 GIT binary patch delta 20 acmbQOJ6o6gGcPX}0}%ZC*0Pa%f*1fnlLn0d delta 20 acmbQOJ6o6gGcPX}0}xc^w{7H}AO-+B&;^44 diff --git a/libs/agent_framework/src/agent_framework/channels/__pycache__/interruption.cpython-313.pyc b/libs/agent_framework/src/agent_framework/channels/__pycache__/interruption.cpython-313.pyc index fb063321b42a7d77d0dee43ab4a1f8d0aeb22df0..3e20c90c65eaa7813186958fc3cd52acec98a8dd 100644 GIT binary patch delta 20 acmX?Mbi#=HGcPX}0}%ZC*0Pb?RuTY6QU;*_ delta 20 acmX?Mbi#=HGcPX}0}xc^w{7IMl>`7mj|Gp7hXqUk 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 aa50b8caaa0c8b94c35284c6707f1e3f4836546a..c0e39fddda8471bb59580f24c1b4a390d1545b92 100644 GIT binary patch delta 20 acmZ3@zM7r;GcPX}0}%ZC*0Pa%0W$zTs0LmD delta 20 acmZ3@zM7r;GcPX}0}xc^w{7HJzzhI4m&2M()qNyj%=G@b6p8Ms9^H0AGg(;Q#;t delta 22 ccmZ2|g>m&2M()qNyj%=GP?_Jhky{}P09eEZ*8l(j 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 0c863dc8fbab24672718c5231c5b272fc5209387..3612f13c404d4871e1f5c1a85675c912cd390db2 100644 GIT binary patch delta 73 zcmewp{wnn^&Trl30?cpO~JSR}!C`pI4Gt91mot7G);K a7o`>#7VJGcPX}0}%ZC)-sX%HUK}R2H*ey delta 19 ZcmaFH_>7VJGcPX}0}xc^w@u`}4FEap1=aun diff --git a/libs/agent_framework/src/agent_framework/config/__pycache__/agent_registry.cpython-313.pyc b/libs/agent_framework/src/agent_framework/config/__pycache__/agent_registry.cpython-313.pyc index 30105a0da320748cf359cc2a85ac639395a79642..600ca2f01c6b9f942328057d6327cbe6d26d1229 100644 GIT binary patch delta 20 acmdmNw%LsPGcPX}0}%ZC*0PaXLmB`@oCa(F delta 20 acmdmNw%LsPGcPX}0}xc^w{7IskOlxg*#%+% diff --git a/libs/agent_framework/src/agent_framework/config/__pycache__/settings.cpython-313.pyc b/libs/agent_framework/src/agent_framework/config/__pycache__/settings.cpython-313.pyc index b5ac2ad5c3a73b2764dac7895819153ad272bfd4..d14423b062944432dcfb310390a991beaad33cda 100644 GIT binary patch delta 20 acmZ3Pv@(hNGcPX}0}%ZC*0PaX&JX}fQU<&L delta 20 acmZ3Pv@(hNGcPX}0}xc^w{7H>GXwxbj|H*- diff --git a/libs/agent_framework/src/agent_framework/gateways/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/gateways/__pycache__/__init__.cpython-313.pyc index 296f332087a9bdfcd8f357ba086b040d60b209b0..f4d573b351b07cf2a5ef7d649e76f782715b655d 100644 GIT binary patch delta 20 acmX@abcl)jGcPX}0}%ZC*0Pb?oDl#(iUt<| delta 20 acmX@abcl)jGcPX}0}xc^w{7G$X9NH_#{~@l 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 1d1e2cc130d2cbd009109d3b8ec218001e65b26f..ee7cc1503be024325dc3721be7e334a291891831 100644 GIT binary patch delta 20 acmbOtHARa1GcPX}0}%ZC*0PbClNSIy#s$d$ delta 20 acmbOtHARa1GcPX}0}xc^w{7I+m delta 20 acmdm^v`2~iGcPX}0}xc^w{7G$6a)Z0X9Y_D 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 101812dba3003f19cc37be56c4f4e847289e9d89..3ac51858ed79bc5fdf56683fc432676c9802d92d 100644 GIT binary patch delta 22 ccmbQ=%Q(N6k^3_*FBbz4{QK6jk$Z|808@?!ivR!s delta 22 ccmbQ=%Q(N6k^3_*FBbz4ROYvB_Xg_# delta 20 acmbOkIy02}GcPX}0}xc^w{7I^(*giMGzH-R 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 06ba04d21d10e30332af657583aa1564b5d61a4b..083aa866cf066140f3aecb4e4a1847ad3ba117db 100644 GIT binary patch delta 20 acmbQoI**n6GcPX}0}%ZC*0Pa%G7|tiR|YZw delta 20 acmbQoI**n6GcPX}0}xc^w{7H}%me^6lm#dN 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 baa7d7b397ccb1b018c7a1f808652251ad6d3759..66859b2065be07fcf293282ca378b2f07cc835b2 100644 GIT binary patch delta 20 acmcc0bCrktGcPX}0}%ZC*0Pb?iwyuo?*?fA delta 20 acmcc0bCrktGcPX}0}xc^w{7J1Vgmp^ECpWx 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 d8b61160e23548c326ba4166c0b260eab8b3272b..d026f5c65ebd3945e6a641e5d7de4375a397cad7 100644 GIT binary patch delta 20 acmeyv{)e6WGcPX}0}%ZC*0PcNBQpR?PzO-} delta 20 acmeyv{)e6WGcPX}0}xc^w{7J9$P55PjRr>m 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 d1871ca841d5a5b903039c0675770854eb482165..25d63dba79306eb3da44146d3d0c4ece0f6f2eab 100644 GIT binary patch delta 22 ccmezKjq%SnM()qNyj%=G@b6p8M()CD0CHgoDF6Tf delta 22 ccmezKjq%SnM()qNyj%=GP?g`dk-M-O0BfZPAOHXW 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 2b205257f527c99b7a80812c4cdb2c64d2877faa..9a1b90492b42a1c6b8b2b353e00c406077bb4f6e 100644 GIT binary patch delta 20 acmZ1^zDS(=GcPX}0}%ZC*0Pa%IyV46hz4r_ delta 20 acmZ1^zDS(=GcPX}0}xc@w{7H}&J6%K%mrcq diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/_compat.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/_compat.cpython-313.pyc index 39c091e092b0b447bda7e08b6f3668d9a0b86d36..ddeb740429d222f81c60df34a2270c981c6fea6e 100644 GIT binary patch delta 20 acmbO$JXe_eGcPX}0}%ZC*0Pa%5+?vYE(THn delta 20 acmbO$JXe_eGcPX}0}xc@w{7H}#0da5as^2M diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/contestation_validation.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/contestation_validation.cpython-313.pyc index c0a98cd23ff5665dda1d1bf076fdc49cb108a9e0..9834ffde23169978c8056e5ee3876c5c5bda7dcd 100644 GIT binary patch delta 1743 zcmZ`)Yitx%6y~zs>9R|qG*o2zTWkgO2P`&gFcoCo+Py?tHpn7OXd^zc6Pa>gFKON?~N=n(dJzTPn zG26~8oAne-L9v4LZZdkch(V{sx|LoNNU!tRV7B)SK`XerxiBN}ks5rK9b||0{7y5x zs#0Y`d`D$R)}&C3d8h|_QfE3_8CE8+KF7Gt zqtLwsh0pERAJ&qQn79(%BouKnd$l;$F(Vn$i43C2L)ALFVs}+PA1HlONFMi>=|a>a z_C)9{6g-Q99(o7-9N=BRd;ISEN4I_=Xd9s^IwC-f@H6mYz^!g*9;xMyvb#^Cs7aS? zUtJEnZx$j9jb1^X$?2MgsEgs!`%3 zSL#REls#VG#MaONLW2Ofi%!{D+jXY=1b&S_(U8C8X+fQprXJReP?u))kVXd)3Rto3 zTahQBm-gEaHpnkD)UoS)b>m~o&j|d+`x;MY{sQ_dU>Y#Rw?8z!Q65XKWg0EEiWy2* zc_D+Vq%CgaHBF;zmVec>NpXk4S2Z^>#ygrfvE_VkvlVz1+9f`^Db~5%2^R92;7T^b z*JS1Lox#q)nSblpO}-GU*gGSlYMS%|U4lZo$pJf$l+W>L-SDiq@3#@X0GI=O0Fd(c z!Qf8%P=KnCmkIuVa&ea*LzYHgFN+FYx>z_0>0-`FC#}^;>cXJkiQpfrBC)XbsCe@w zg>}jP9rDKA2Y6MaU8dlt(gmnFB;WoRQt%Wl0LB3q`L&k1hb>UesLo zQLK(7dyQCF4|Qw(aYKu^Q~3t69{`61IO*ZI7E9<6XGQA8i0PnXy1}1&cz@pKpkDyK z2lN3h115NR>w_%YwpyDNrtmXu*#hU=3h$JsxE-fZr~*nKju7fYt1#$p|4Q;jS}m+azm?FDWRa<9+*b0jN{aMqE( z{upZIpp5JW-Th;*wKB?UI|@S5H|`oic^DQOTm!1Y2liX7qBJ9F52TX|#``x}s* B(8vG) delta 1708 zcmZ`(ZA@EL7~W~=rL;rH0*)0j5OCufy7DoW7-g}8fd$r?3Djto?%H0OYI`qvTbL|S zgF{@l?2qq$EZcBV6F?Wj$Bl?OVVVu+x6_I43Q-fC$^6#nkHw(pJ!R{Ru|J-^=Xsy= z_C4=;P8X)wHNU*xx>4wahKQE7HrtrxZSkIR1L=P+1m2DVcI-G+w35^c7zly91SZ; zH33xF%aqqv;ldOL8DQWjHsc&`GH1S}dBZviWtBN5FG#wpL> zAbr_Pdo-!WgE2h<<5<7V#U}8+Z9`6RF`G$!>gk3NHf@YH_*mgq3o-i%gfj*y65Nbo z*{(9_3K8F9ys5D6DIS`u6KY7&gI!9p2NXC!lrtIazRo;BdQnOg9mLn0yzB@3yXisc zM@s#Ik>=UlpD6s9;AMhoth;+=qd1CKi!}A>=X3Lr!bVU}K#s^q**DDQ@FQP^lo|jo z`j+OBB6LDZ6P`y2-Tsrr#v?J%aZMJ|GbCcPS#b!iOAW2{IUu|4+_u z@dC**;Hy;;uFK>LQv#JwTQf8Kx~6h(e#6PDH-)322Q-3D2wVh91oVF7b*cA|6V-b4Xh;oqD}6Ct z38$v=HOamsIKsiq48@daTn(F9E02XwhdPGeuz$yZ%cSrNg3APZ2^I+^u-Mz0j^dEW$^Xew ztrb=!ak}IRtEcObcBPRtd&4fA?I=q1Aoki*e@~*~3H-IA@RlK}wU)|=Zs>Ne8SG}k zqPw#wD14Jz6DiK)NZC-Z!iyqGD}^i5y^BkiZrGDWmBip|ING_N9mUFkTUwxgE@CjS mo(#P~C?hy4R`JjR6p diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/contracts.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/__pycache__/contracts.cpython-313.pyc index da845495ac894f24e59abbe10861fdf99f6114ef..2e8ea4348f99956453b4ee34384b06336ef3ea1f 100644 GIT binary patch delta 20 acmexq`qPyAGcPX}0}%ZC*0PcNofH63X9v3g delta 20 acmexq`qPyAGcPX}0}xc@w{7HpCj|gXs|KUGcPX}0}%ZC*0Pa%l?(t!SqAw4 delta 20 acmdmLxz&>UGcPX}0}xc@w{7HJB?ACJodxg! 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 079c6c3ca2fa6937ca88ecddae656b0b5ef1ac30..13361936cb530e7898fd9d268c1123b208b79eaf 100644 GIT binary patch delta 20 acmX@;deD{oGcPX}0}%ZC*0Pa%n-Ty@?*}^o delta 20 acmX@;deD{oGcPX}0}xc@w{7I!rUU>)GX^pM 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 918515cdfd9823136395f60a06e28fdd5cea69f4..cff1ad31e6ef5c20edc5efb4d2cf90a5bc371b62 100644 GIT binary patch delta 20 acmaEs^DKw^GcPX}0}%ZC*0Pa1+6(|yM+b}m delta 20 acmaEs^DKw^GcPX}0}xc@w{7H(HUj`oiw1)L 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 2a985320aa77c9ba234d841236325e1330a87e65..6aef87ca030a9c9b3cc27c4f38ee18b1689ffa9f 100644 GIT binary patch delta 20 acmeyJ^gD_BGcPX}0}%ZC*0Pbizz_geA_uYn delta 20 acmeyJ^gD_BGcPX}0}xc@w{7GuFa!WlW(KJM 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 7c5d9de6c8c3dd619b78d3812e65300e93770dc1..68e8eefa30c57b2534f37fec3cc47c34a107e1d5 100644 GIT binary patch delta 20 acmaFK{F0gbGcPX}0}%ZC*0PcN9wPup#s>}n delta 20 acmaFK{F0gbGcPX}0}xc@w{7IU#|QvH3I+uL diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/_context.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/_context.cpython-313.pyc index 96983540fb82ffa17d8568ec8ed2e5d3cdbb9191..3f7f8da5116d84a54fececd489f4dca5ed2de8de 100644 GIT binary patch delta 20 acmeCz>eu4_%*)Hg00jTOwQS^O5d{D~Mg`&k delta 20 ZcmeCz>eu4_%*)Hg00dR}Z5z2+L;*L71la%p diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/ausencia_oferta_proativa.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/ausencia_oferta_proativa.cpython-313.pyc index 8af6d66e16def2cab21d02777fac171659b02e8a..3c8735dd361d60cc5068bf28a84bc5573c0d7daf 100644 GIT binary patch delta 20 acmaFk^~Q_)GcPX}0}%ZC*0Pa1Q567DUI$44 delta 20 acmaFk^~Q_)GcPX}0}xc@w{7H3R0RM^q6RWd#5>;sn$H diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/dlex_out.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/dlex_out.cpython-313.pyc index b358a98a4e032467f0bff9fba79de46c2081f8c2..2a3ee05f8dc50ab36d62d7490496cdd9c47f0b89 100644 GIT binary patch delta 20 acmX@kbDW3!GcPX}0}%ZC*0Pb?h7ABhzXm@5 delta 20 acmX@kbDW3!GcPX}0}xc@w{7IMVFLg>0|hn! diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/fallback.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/fallback.cpython-313.pyc index c94d019855df50d29f37adf97ead14e14d450c1c..7938ad52a75aaca620913c8454b8a9ee2522e591 100644 GIT binary patch delta 22 ccmdnm#<;bOk^3_*FBbz4{QK6jkz30d097mpJOBUy delta 22 ccmdnm#<;bOk^3_*FBbz4ROPpAGcPX}0}%ZC*0Pa%r8odZ#0K2} delta 20 acmdm@zeS(>GcPX}0}xc@w{7HJDGmTX2nEyt diff --git a/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/out_of_scope.cpython-313.pyc b/libs/agent_framework/src/agent_framework/guardrails/calibrated/prompts/__pycache__/out_of_scope.cpython-313.pyc index d5528f05cf3600a2b9e599af01b6187685486074..27f4eadb3c08782fa51c38b59e3de09ca48822ab 100644 GIT binary patch delta 22 ccmX@z%6Ph!k^3_*FBbz4{QK6jk^6uX09m#N`v3p{ delta 22 ccmX@z%6Ph!k^3_*FBbz4ROPpA;+W- 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 70d57eecb719663e1bf76042d5706ad816ef1b55..401d5550729549f169e3178a3290dbcf93f8d524 100644 GIT binary patch delta 20 acmbQtJDHdJGcPX}0}%ZC*0PbigAD*X!v-Y) delta 20 acmbQtJDHdJGcPX}0}xc@w{7I^U;_X(2L&7e 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 bef8c2879f6c8e9854b653fbebef17b20ba4c6cc..d2b661521682a6acfc16a3b36bcc74a57157c802 100644 GIT binary patch delta 20 acmbQPK3$#rGcPX}0}%ZC*0PbiM;HJ=7zT0x delta 20 acmbQPK3$#rGcPX}0}xc@w{7I^5e5J`Tm@+W 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 a6955f390bfdec9ed2a6661c293ba84210b4003d..6a18f89abc16a42ce2c9fd974a3fc381d4486241 100644 GIT binary patch delta 20 acmX@(e#V{qGcPX}0}%ZC*0PcNpfUhV@CRW4 delta 20 acmX@(e#V{qGcPX}0}xc@w{7G;s0;u`GzM4z 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 7db49c345ba2af3d3398d0099c9f460a16dd8747..c26f95a4d602f9e08d9ed8f5517dcc5222c47f2a 100644 GIT binary patch delta 20 acmbOcHY1GtGcPX}0}%ZC*0PbCR~rCD^ag7H delta 20 acmbOcHY1GtGcPX}0}xc@w{7I+)dm1RI0a$= 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 17e3369ff85797e3450efd7b9bd7d083328f346c..8039453c61cb1f262d72c8f0446fa4a4dce981d4 100644 GIT binary patch delta 20 acmcaFd0&$IGcPX}0}%ZC*0PcN3J(BDSqCQo delta 20 acmcaFd0&$IGcPX}0}xc@w{7IU!UF(8odzBN 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 fc272623987a05fbc4e950b722a60a964b900520..1694530201f3c8726ba8c385ea5a331807e4354f 100644 GIT binary patch delta 20 acmbO%HCc-LGcPX}0}%ZC*0PbCgBJiio(0AL delta 20 acmbO%HCc-LGcPX}0}xc@w{7I+-~|9R;sm__ 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 3ecaadc73f68316bc46d492b3b8a658a307cc85e..76358fb3768b7541b24bf87808c77ba23bcc8f75 100644 GIT binary patch delta 20 acmdn0wN;DzGcPX}0}%ZC*0PaXOB4V^HU?Ax delta 20 acmdn0wN;DzGcPX}0}xc@w{7Is5(NM~dId`W 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 35c858f29527b7e1b6e6c3d32673e307ea7062af..32396bfca316fb39925ba74d41196f0c28170af7 100644 GIT binary patch delta 20 acmdn1wO5P#GcPX}0}%ZC*0Pb?NE84?b_Q$! delta 20 acmdn1wO5P#GcPX}0}xc@w{7G$5(NN0x&>nZ 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 df3ae4b25a01a32effa92f8e742388fa18bb5a9a..023b52c50016f59197a99b2c8303602bead84c4c 100644 GIT binary patch delta 20 acmdnvu*ZS>GcPX}0}%ZC*0Pb?Pyql)aR#6O delta 20 acmdnvu*ZS>GcPX}0}xc@w{7G$Q~&@$wFQ>| 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 bec637aea5704e1935e2d321c0f68891c932a9ed..3f3f905daa25b42028f47e0d9cfd7cdbabddcdd0 100644 GIT binary patch delta 20 acmZ3jlvO delta 20 acmZ3V*&s+F9gT{ 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 8035625518e1f7cedc496124ce14cacf53d4f5a4..63d722af5e1c90add9409b14a562b44f8e688cb7 100644 GIT binary patch delta 20 acmaFK_mYqMGcPX}0}%ZC*0Pa1jvW9ngGcPX}0}%ZC*0Pa%E+YUvo(4+* delta 20 acmZ3%yn>ngGcPX}0}xc@w{7H}%Lo8A;srtg 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 669dd279dff539cb88c95ad451c963384c58fd29..e7dc3ac3707bc2be4387918e51c4dd3cab307985 100644 GIT binary patch delta 20 acmaE&@7NTGcPX}0}%ZC*0Pa1PY3`_`v(yK delta 20 acmeyV@>7NTGcPX}0}xc@w{7Ik69NE7KL!W@ 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 b02a300c6a21fbce7f730a984ab4ed56cfd5ec44..93fa52b7a030a5bba57d8bc64d8f10ca187d8add 100644 GIT binary patch delta 20 acmeyx@{5K0GcPX}0}%ZC*0Pa1p9ug-lLo{9 delta 20 acmeyx@{5K0GcPX}0}xc@w{7IkX9561*9E%( 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 085b315a3d6a5c153a8430123b88eed6591da9da..1bb78aa9a8aeb4126321a9f5c62fe188a66efb53 100644 GIT binary patch delta 22 ccmaDbhv~r_ChpI?yj%=G@b6p8M()r)0AMc&HUIzs delta 22 ccmaDbhv~r_ChpI?yj%=GP?g`dkvp^x09kVfEdT%j 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 609ab11e151925bd7bf3057567c18eeaf670d4a6..23d17df5df010f0702915172c3ad2619eea17b47 100644 GIT binary patch delta 19 Zcmey!_>qzOGcPX}0}%ZC)-sX%82~{%2LS*8 delta 19 Zcmey!_>qzOGcPX}0}xc@w@u`J1^_#W1^55} diff --git a/libs/agent_framework/src/agent_framework/judges/calibrated/__pycache__/llm_client.cpython-313.pyc b/libs/agent_framework/src/agent_framework/judges/calibrated/__pycache__/llm_client.cpython-313.pyc index 7d13d56a58fbcd210ab64b5fe52d373de4c7a876..b569f03928f9327be97d562e1240e1e80425b56f 100644 GIT binary patch delta 20 acmaE+|4g6zGcPX}0}%ZC*0PcNwm1Mylm~MF delta 20 acmaE+|4g6zGcPX}0}xc@w{7IUEe-%i*am6< diff --git a/libs/agent_framework/src/agent_framework/judges/calibrated/prompts/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/judges/calibrated/prompts/__pycache__/__init__.cpython-313.pyc index b087b790aa3684b328fa8ffa554221ae543b1ec1..ceebfe041734e45dc07e0a67418be705d33e4efd 100644 GIT binary patch delta 19 Zcmey#_>++=1`q%M 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 d2052d5d5369b0bcfaeacc60ff147d9634914bfb..a4145e0ca0093fbf7f07d88bab71aa1e05b1ee64 100644 GIT binary patch delta 20 acmX?Lbij!FGcPX}0}%ZC*0Pb?R1yG35(bF? delta 20 acmX?Lbij!FGcPX}0}xc@w{7G$l>`7lRt10n 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 4f6fcb1e72b6c0e63fe3ec8214cf214bbea1358a..2558fb8e1e0a5d3ef64574aacdfef1b386cbde21 100644 GIT binary patch delta 20 acmdnWwUvweGcPX}0}%ZC*0PaXixmJrrUnE6 delta 20 acmdnWwUvweGcPX}0}xc@w{7IsVg&#=>IC}$ 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 9587d8dee4df5d6f31b9ec78e539731323790302..9d4070db146bd8fe13600fd17b9124bb02dc5256 100644 GIT binary patch delta 20 acmca>ch`>lGcPX}0}%ZC*0Pa1NFD%9PzL@0 delta 20 acmca>ch`>lGcPX}0}xc@w{7GOk_P}rlm+zw 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 5f5be047c4ec5a17cd46ff02eff8bd37f8eaab7f..4bd6ec7572f7054871b94b1ed2b3982d50b0015a 100644 GIT binary patch delta 20 acmbQtIhm9DGcPX}0}%ZC*0Pbig9QLPF$Nm| delta 20 acmbQtIhm9DGcPX}0}xc@w{7I^U;zL$bp;Xt 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 2be23c0f38125e49cf0facdc7f77bb620f8e45fc..86e84c3c4c7755f64a48fa1177e55d18439bd2c9 100644 GIT binary patch delta 20 acmZo-ZDQsA%*)Hg00jTOwQS@rX955>_XXYn delta 20 ZcmZo-ZDQsA%*)Hg00dR}Z5z4EnE)|61l0fl 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 b929ed76e7c4df26613113dba2517bf1731b056f..0e67c293283afe19fbb2c0dd4b6bed3a47f73df6 100644 GIT binary patch delta 19 ZcmaFN_?VIVGcPX}0}%ZC)-sX%1^_=c2G;-p delta 19 ZcmaFN_?VIVGcPX}0}xc@w@u`}0RTCJ1hy@z} 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 ce8be980630e9ddca20b12da65a94001ddfd4927..2c9431ac611e7aea43c6a4a7c5bb4fddb807c131 100644 GIT binary patch delta 20 acmX@_ao&UbGcPX}0}%ZC*0Pb?MFjv%jRx%i delta 20 acmX@_ao&UbGcPX}0}xc@w{7HhQ2_u&(FNoH 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 49cf8e794825585ca311f2fc9b05208087fa031e..cbab8e62d95f1cfff41c064ea6cd7386d1c75d4d 100644 GIT binary patch delta 22 ccmeC1$<#NKiTg7zFBbz4{QK6jk-NDE08;V?xBvhE delta 22 ccmeC1$<#NKiTg7zFBbz4ROPpA}n delta 20 acmaFK{F0gbGcPX}0}xc@w{7IU#|QvH3I+uL diff --git a/libs/agent_framework/src/agent_framework/mcp/__pycache__/client.cpython-313.pyc b/libs/agent_framework/src/agent_framework/mcp/__pycache__/client.cpython-313.pyc index 8bf79966cb419a84223d3fed2dd2efe8e2f85efb..758845179a5006f11e533eb0c558c82a3241e9df 100644 GIT binary patch delta 22 ccmeC0z}Pi`k^3_*FBbz4{QK6jk^8?p08xDh(*OVf delta 22 ccmeC0z}Pi`k^3_*FBbz4ROPpAi@Irv=GcPX}0}xc@Z{+f1GHcM!%`4GQ(f1AZj1MTv&q_@$Db`QREGjOEPtMOP bNi2@f%}g&!Ov%?zOi#^&32shhy3Yy#2jCnC 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 0dc48c18b57c370445dac27c45a1c4e2272a080e..2f4014bbee7cbcce7600415373156e336c8ef4d3 100644 GIT binary patch delta 73 zcmbQD+Na9(nU|M~0SH_|HgbtF8Pw?K=9TEDB$g!VC#I+7mBc6K=anQD#{=1^MVZO* ZMXALF`FX{u@nvT5<@rU~n?srG1pq&z7@z=9TED==%nH#s?JTXQd{W6zivD78RGoC+Fvt bBo@c#W~LVb delta 20 acmcbVdnuRuGcPX}0}xc@w{7G;ZUz8Mj|RyA 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 de3110514752747e8a7995b1c5710c1e5f23c9ae..fba6fecc6f532b0a00a6bc64b7b94ddae811b46e 100644 GIT binary patch delta 20 acmey*@t=eHGcPX}0}%ZC*0PbigarUf?FQWd delta 20 acmey*@t=eHGcPX}0}xc@w{7GuVF3U{F$L5B 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 63ffd966e961b0668d9a255c60cd57587f3760c3..e87aa7ea824940dcde62646a980357bc80fff6ec 100644 GIT binary patch delta 20 acmaDT{7{(tGcPX}0}%ZC*0PcN8Yciq&IcX< delta 20 acmaDT{7{(tGcPX}0}xc@w{7IU#t8sI5(X6j 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 b43fee84881144b66df0f59af2a42cd821d2b906..8e27b87b4d628f0dff11a2e0d45066e142f1cc61 100644 GIT binary patch delta 20 acmX?Zdfb%zGcPX}0}%ZC*0Pa%j}!n&mj@*P delta 20 acmX?Zdfb%zGcPX}0}xc@w{7I!BLx6L+Xfr} 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 6afd231143f87d61d7f0e3e9be08f99a1716f806..334f559c38f02153e352fa1cea485f30b79daa10 100644 GIT binary patch delta 20 acmaFD`-GSKGcPX}0}%ZC*0PcNCK~`qYX=wr delta 20 acmaFD`-GSKGcPX}0}xc@w{7IU$p!#HuLchQ 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 4ccb77156b9edd9878f5b550d767d541c7769674..d7f8b961716d7940898191504ef4d4a0df030212 100644 GIT binary patch delta 22 ccmbRAgmKanM()qNyj%=G@b6p8MsD^Z0A0)nz5oCK delta 22 ccmbRAgmKanM()qNyj%=GP?g`dk(<2;09OzOwEzGB 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 478cfdad80d1d8ace1dcbc1b6ee678ec751069c9..739b11cf76b2290e92644277fc51c6512c0b9ba9 100644 GIT binary patch delta 20 acmdn)xZRQaGcPX}0}%ZC*0Pa%jRF8j%?A?z delta 20 acmdn)xZRQaGcPX}0}xc@w{7HJqW}Ox5e5nX 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 23a63b24a26898019424cbaef5ceaab95e86ac83..6f30a8a0f9ed682aeb95a14999a99d0cca3508ba 100644 GIT binary patch delta 74 zcmaEt_#%<}GcPX}0}%ZC*0PcND6>JUer{fgeoA6VqJCm}YFom!Nc b9AA`LT#%nvoEl$d8eg7Yl)aga<%JFaG2$HG delta 79 zcmaEn_%4zAGcPX}0}xc@w{7G;%52uHpPN^rpQ7&@>=_?Wl%JKFTvDu`mRVF>5}%x( bSCUv9pPQLpl$esQpO~JS2NT@H@9 delta 80 zcmdnxb-;`JGcPX}0}xc@w{7H>Wisp1&&?~*Pto@c_KXiG%FjwoE-BVe%PcA`iBHbY cD@iPl&&^CPN=(VuPfSnEg9&bqV0xqk06FCx!vFvP 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 0d18e5edce90c9f38f9ad7d4da91158b4025bb69..b6e6beb9f92ded6b7d24bed492199eb18ff55f2a 100644 GIT binary patch delta 71 zcmaFH_<)i7GcPX}0}%ZC)-sXX*q~lNH?KrLC9xz?KQTQuuOvP>Kd&UQI3CDOEy_%e YFG?*g$j>WIjW08eFV8Q^o>)=@0Fq`J`Tzg` delta 77 zcmaFB_>7VJGcPX}0}xc@w@u_WHfz<-%`4GQ(f1AZj1MTv&q_@$Db`QREGjOEPtMOP ZNi2@f%}g&!Ov%?zOi#^&2~Nx_0s!LJ8_WOz diff --git a/libs/agent_framework/src/agent_framework/models/__pycache__/identity.cpython-313.pyc b/libs/agent_framework/src/agent_framework/models/__pycache__/identity.cpython-313.pyc index df67cd473213b8efe3a4da96df26792ab3574578..1b50229a4123a52caeb0d5b78db7837cb4c4d816 100644 GIT binary patch delta 20 acmbO!JyV+dGcPX}0}%ZG*0Pbij~4(wxdvMR delta 20 acmbO!JyV+dGcPX}0}xc@w{7I^;{^aW_61P@ 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 51f483b0c0e96da2ee3cdb2fa02e40144b2bf43c..134e279c26c497c573a4cd1471d75c244061f45a 100644 GIT binary patch delta 74 zcmZ1?I!~1QGcPX}0}%ZC*0PbCnc1LDKR2&LKP9mwQ9m&~HLoN-IX|x?u{a*cPA$qz bjxS0rF38U-PK_@!jW5qH%HHh4oWKqMu)G?2 delta 80 zcmbOyx}GcPX}0}%ZG*0PcNz6=0Qs0Wz< delta 20 acmaE5`O1>}GcPX}0}xc@w{7IUF9QHbgb3lgsGcPX}0}%ZG*0Pb?ln($y_6Ab` delta 20 acmX>gb3lgsGcPX}0}xc_w{7G$GcPX}0}%ZG*0PbCodWGcPX}0}xc@w{7HR=KugSO$4C; 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 5c37f19a30d18ac4d442bd5c74d298302803ae24..9f56a00c55e6ca0685d198d9066ef144743d8973 100644 GIT binary patch delta 20 acmZomIV|5 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 908146455b600a7d30cfa6514917d86aaa1ca21e..70ae7b12d75721ea4832cfeea0fcf5ecfd3b4294 100644 GIT binary patch delta 20 acmeyY_F0YlGcPX}0}%ZG*0Pa1Ll^)}TL%RI delta 20 acmeyY_F0YlGcPX}0}xc_w{7Ik5C#B7p9TB? 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 ead586ded083efc247578253d65390ec54bc2652..a52834f7e978ad60d59b3429632e04e04ad7fae3 100644 GIT binary patch delta 20 acmeAa?-b|$%*)Hg00jTPwQS_B;|2gbrv@Pa delta 20 ZcmeAa?-b|$%*)Hg00hGTUGcPX}0}%ZG*0Pa1N(cZ-;s(|L delta 20 acmaE=@>GTUGcPX}0}xc_w{7H(5&{53CI!s^ 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 78aa6dbb20335d30f392c98afcfb1f999ecf6c2c..f9bc52abd74477f9442d81425c5fa19dd4d7f2e0 100644 GIT binary patch delta 20 acmaDX^;nAgGcPX}0}%ZG*0Pa1f)@ZuB?h+u delta 20 acmaDX^;nAgGcPX}0}xc@w{7H(-~|9eVg;=L diff --git a/libs/agent_framework/src/agent_framework/observability/__pycache__/streaming_events.cpython-313.pyc b/libs/agent_framework/src/agent_framework/observability/__pycache__/streaming_events.cpython-313.pyc index f32b12eece4f4917699a88e1567ba6edbe507c6b..f096622b1a7fe6487c5784efebcbb681636465a4 100644 GIT binary patch delta 20 acmdnRw~LSaGcPX}0}%ZG*0PaXpB(@}2L>Jh delta 20 acmdnRw~LSaGcPX}0}xc@w{7IsX9oZ}L{RHUIzs delta 22 ccmcaKiTTnbX710tyj%=GP@Uhlk=y+w09E=2EdT%j 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 b684fe423ffaa5f22e40bad84bda051703902df7..da822db243ca3d4472d447851ff657501e921c96 100644 GIT binary patch delta 20 acmZ4Dyu_LNGcPX}0}%ZG*0Pa%rXm1FB?jOC delta 20 acmZ4Dyu_LNGcPX}0}xc@w{7H}sR#f+Vg=R! 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 693bcfca8fa00608d47e39c96484cfd89ecbc75b..2d5dbd6413c0b12a169e6b6a0d8e32a40ab882ff 100644 GIT binary patch delta 20 acmbOzHBpNDGcPX}0}%ZG*0PbCjTZnsRRzHS delta 20 acmbOzHBpNDGcPX}0}xc_w{7HR;{^aUnFP21 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 23dbf2ff7b2d94d1120f9e45dd439beb59b86fca..a7536a0231e5e492934a3023018be1d44c128bc3 100644 GIT binary patch delta 19 ZcmaFN_?VIVGcPX}0}%ZG)-sX%1^_=i2G{@q delta 19 ZcmaFN_?VIVGcPX}0}xc_w@u`}0RTCP1AI 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 297b8600384cf6b055fcb76904b544d53c6c1200..2bfe499ef9d5f1b4cbd8529f74b5fd475099f3e5 100644 GIT binary patch delta 71 zcmaFO_>__RGcPX}0}%ZC)-sXX*q}u}H?KrLC9xz?KQTQuuOvP>Kd&UQI3CDOEy_%e YFG?*g$j>WIjW08eFV8Q^o>)>20G1{j4gdfE delta 77 zcmaFL_?nUXGcPX}0}xc_w@u_WHtW*Q%`4GQ(f1AZj1MTv&q_@$Db`QREGjOEPtMOP ZNi2@f%}g&!Ov%?zOi#^&2~Nx_2LR_X8{q%| 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 fa8709d773afa2f085d8c95d8b865161f1dce3f2..d2992682cd2b83259087f615fd9ae5d789664c00 100644 GIT binary patch delta 22 ccmZ2|pK0}dChpI?yj%=G@c&!OM(zdc0b->HzW@LL delta 22 ccmZ2|pK0}dChpI?yj%=GP@Uhlk$b^<09)w?wg3PC diff --git a/libs/agent_framework/src/agent_framework/persistence/__pycache__/sqlite_store.cpython-313.pyc b/libs/agent_framework/src/agent_framework/persistence/__pycache__/sqlite_store.cpython-313.pyc index 04a15a1a1db590293a883e3f07dce77633e305a7..f77064118ed60e1ca32feebcf3f46e3b44403dbb 100644 GIT binary patch delta 74 zcmdm0x}}u+GcPX}0}%ZC*0Pa1h0&lxKR2&LKP9mwQ9m&~HLoN-IX|x?u{a*cPA$qz bjxS0rF38U-PK_@!jW5qH%HF(`QPdIu3r!pq delta 80 zcmdl|x~r7?GcPX}0}xc_w{7H3VKnR0&&?~*Pto@c_KXiG%FjwoE-BVe%PcA`iBHbY cD@iPl&&^CPN=(VuPfSnEg9&b)&nRjM0Ae2;=l}o! 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 3f10a11351d41aeb79502685a7a36dd1a158b389..c0db8033c914df779afabdd5b03df4e1a277161d 100644 GIT binary patch delta 73 zcmcb{e36;!GcPX}0}!~xZ{*@-G;Gt)%`4GQNi0d!PfSnED~V6e&nrnRjt8<+i!zhr ai&BdV^7D#Q+`kvM2j8b^-uW<{2sg delta 78 zcmcb}e2tmwGcPX}0}xc_Z{*@-H0##S%`4GQ(f1AZj1MTv&q_@$Db`QREGjOEPtMOP aNi2@f%}g&!Ov%?zOi#^&2~PH4>;wSSw;LY- 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 777eefb53c56f8dbdfa8967ddb68e4b7fa9fc621..ea3f4c95d5f6a53e3eb6d3fe00e10ccbf7e631c8 100644 GIT binary patch delta 74 zcmaE>_(GBEGcPX}0}!~xZ{)hdXxOfwn^&Trl30?cpO~JSR}!C`pI4Gt91mot7G);K b7o`>#_3H1#JKT 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 1a276ee9dc78f0c1492c991e7f9caf9bfe94c187..25ef9ea09e89ce6e3dfcfb538ffd51c02c77c404 100644 GIT binary patch delta 20 acmZ3ky_F$S#w delta 20 acmZ3ky delta 20 acmdmzv?YoAGcPX}0}xc_w{7IsGz0)eRRz@m 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 6899d3647f380299a66ebff2f79db9f3483fe124..66466a479e3d709b8e8b491c650defab380fcc83 100644 GIT binary patch delta 20 acmccUchQggGcPX}0}%ZG*0Pb?O&tJDzXt;V delta 20 acmccUchQggGcPX}0}xc_w{7HhQwIP?0|oj3 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 48c6444733cc4df2ade4cba5ce68ce7cf1b05327..bb0e6990c060ae27a6bf577227b9f66db14846ed 100644 GIT binary patch delta 22 ccmaDqk@5XRM()qNyj%=G@c&!OM(!sb0AZsDh5!Hn delta 22 ccmaDqk@5XRM()qNyj%=GP@Uhlk^6}U09xk_4F<~q delta 20 acmbR1JlC1~GcPX}0}xc_w{7H}qzC{$Q3b*P diff --git a/libs/agent_framework/src/agent_framework/routing/__pycache__/__init__.cpython-313.pyc b/libs/agent_framework/src/agent_framework/routing/__pycache__/__init__.cpython-313.pyc index 525c7c7cb50e8bd9e348b68e106091bcadcd9ade..6a14a96f00acdfbb73e395bdee5f418d2a887513 100644 GIT binary patch delta 42 wcmdnVJe8UIGcPX}0}%ZC)-sX%t5A}DZeEFgN@7W(etCXTc3Nh|WHZKQ04wwk!2kdN delta 78 zcmbQrypx&xGcPX}0}xc_w@u{!YSyNon^&TrqVF5*86QxTpOu*bD#&H5=3b diff --git a/libs/agent_framework/src/agent_framework/routing/__pycache__/config_loader.cpython-313.pyc b/libs/agent_framework/src/agent_framework/routing/__pycache__/config_loader.cpython-313.pyc index 37b97079f73b3dcd60ccbf466d7041a65e668284..883a239b5b93e182f55edad8e70b0991c09ac4f4 100644 GIT binary patch delta 44 ycmeAWdLqdEnU|M~0SNwmYuU)%&nT3xpPN^rpORRTs9&C6l%1AYvH1d{1v>yns}C{& delta 80 zcmaDN*dfIInU|M~0SKz|+ct9dGn#el=jN5@r|A0zd&UP8z9^mhGcPX}0}%ZC*0Pa1oJlA}KR2&LKP9mwQNKLDC_62)V)G0pJwpIn=?{ni delta 80 zcmZ3Kek`5)GcPX}0}xc_w{7GOXEN*1&&?~*Pto@c_KXiG%FjwoE-BVe%PcA`iBHbY cD@iPl&&^CPN=(VuPfSnEg9&afVbU`M08-T)n*aa+ diff --git a/libs/agent_framework/src/agent_framework/routing/__pycache__/enterprise_router.cpython-313.pyc b/libs/agent_framework/src/agent_framework/routing/__pycache__/enterprise_router.cpython-313.pyc index dde408bc420aaf4a2a694cc6408775b77757a9fa..b7555546ae6cdf00ebb4c7e515f5fb3069b04227 100644 GIT binary patch delta 564 zcmXAlO=uHA6vyZ7&L->D-E5PXk8RV0rmeQwbYo&`TWZDX!MY2TNI~$leiSsA&<}}T zQt?m`dQb*Dc@xCyMVYJMA%~{PB6tu#z>B>o2-ezOi!*P&On7q*H5F=`@A-mJ=$BwOzJ$$+&SC z>`B~ElblVkr*I>iXS|sN2jR_BALFJJc6_KA2S>n7BgQ!o4#v%b#Chx_^Rz5*3b>W? za~=n-lWm;>9_Jz6cml8m54Y8)I62YNBTh#21|)u)k@zHsoe^4#E(makZpUW?xKAg# z$3%EWmy#~PWBMtzBEu^>H@GLjcWRp*;M-#VvSg8qW`f+y{)S(~Hq-Rc@Dl<4(5~Y@ t1lXth1tLUenQs;S6%A=AsL#4x)2O? zQ9-1l7Z)yESEvYjUAnSD(qxJRSGsVaU5Kk%>(+WFkcDUQ-|zhAzYp#`^@}S076c2T zbw}M?HH^F#@0*g3Vx@8|R*0n+X0!7Zb+wqURb#hSD%Dyxua;}MYPPhpT*(#GSZ=vk z?wMrUv;)R1144r+jBiH!@dJ;KJhU_zVI84G!%|h(j1@!B(PzAT8=+iYcko8SWifaA z1={0I#D$*-17OFmgfTGV1K}$E%*o7k39CUD&WrEChd=s#c*M1<@kP zgmA%D6y)BNIz#&1tiG-V9r(mH1DEiO6bOWS86(P3F8AGt^qkBYJxiWS?*LplV^47@ zIwD*40Kh(Z=@zuLlb@t<(s9m#u>?rCa1_U~d#;}5VOIdf!0n3Dr)blNfnw$w z@lnc6KPXnN83^e-35v)yQwhp@G$V0)@za!BE~nx~t+Sxmxz@0ka+?9g$+cNtXVW;% zw68##u(Y0b88~@d)W!8KJ>{nT?~j diff --git a/libs/agent_framework/src/agent_framework/routing/__pycache__/models.cpython-313.pyc b/libs/agent_framework/src/agent_framework/routing/__pycache__/models.cpython-313.pyc index 9e67e6f770621c842590aff0465074edb3585aa1..4068e3d9a84dbbd3adb9aa83de41164e6095e1ac 100644 GIT binary patch delta 44 ycmbOy{7Z=YGcPX}0}%ZC*0PaXjaeu`KR2&LKP9mwQNKLDC_62)VskpPIU4{$sSb$% delta 80 zcmew*G*6iOGcPX}0}xc_w{7HBV>WBi&&?~*Pto@c_KXiG%FjwoE-BVe%PcA`iBHbY cD@iPl&&^CPN=(VuPfSnEg9&bSW;SO703kmcoB#j- 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 534269d..f4d228a 100644 --- a/libs/agent_framework/src/agent_framework/routing/enterprise_router.py +++ b/libs/agent_framework/src/agent_framework/routing/enterprise_router.py @@ -73,7 +73,6 @@ class EnterpriseRouter: if ( active_agent and keyword_candidate is not None - and keyword_candidate.agent != active_agent and keyword_candidate.intent != previous_intent and self._is_explicit_intent_shift(keyword_candidate) ): 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 99da6637f685b57623c17f4ee92ace8a17a1ac83..3cd7a85f3d377fe2f85685761c2e0d0ddedc5060 100644 GIT binary patch delta 71 zcmaFE^o)u7GcPX}0}%ZC)-sWMtwDo+ZeEFgN@7W(eqwrRUP*j%eqKppaXgTnT9la_ YUzA#0ke^qa8ee7_U!Gr-J@H)~0I;nb2><{9 delta 77 zcmaFH^oEK1GcPX}0}xc_w@u_;Yu2Wpn^&TrqVF5*86QxTpOu4gdtC9NYi^ 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 cac260cbaadc147d368b348f0550fe132b6f2efc..cfe0d87b83839abec9025443772296236a1d9f42 100644 GIT binary patch delta 79 zcmbR9l6~4scCOF7yj%=G@GN;F*9~@qR{h+(68)6Kl0^N)^whkP_~iV&lEmV8AUm}v gGdaE}wYVTZuQ)Zn%rd?_zbLy|f@8Y`2V=_{0D(~*T>t<8 delta 85 zcmbRCl6}rgcCOF7yj%=GP@TV#>jt}7w|;J3iGGT{Z?I>4Kv8~HYH~@jep+TxaY=k~ heqKppaeQuOdQoCZzJ6kQY936mS%_o15C>z+8vqH-9?t*( 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 f70e36607bd1c2cea7b38775d3302f342d826a13..a9019c88e26379c2ff436c1605729a148374fa96 100644 GIT binary patch delta 19 ZcmaFN_?VIVGcPX}0}%ZG)-sX%1^_=i2G{@q delta 19 ZcmaFN_?VIVGcPX}0}xc_w@u`}0RTCP1%*)Hg00jTPwQS_BPz3-&AqJ5E delta 20 ZcmZqnZuaK>%*)Hg00h1&9Cu 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 3bfad3b0ce884e4ac15b7fecedd120bb6e2af9f9..c26f2aff6be87f682d0bd0509119e261a230973d 100644 GIT binary patch delta 19 ZcmaFG_==JHGcPX}0}%ZG)-sX%J^(;J2JHX< delta 19 ZcmaFG_==JHGcPX}0}xc_w@u`}4*)uh1>^t# 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 2f7705a94026b506622bcd7a3cf0b14c29ba54f2..054da5c93ac9c4e4980b804581c0435623799a3d 100644 GIT binary patch delta 20 acmaE$@<4_AGcPX}0}%ZG*0Pa1R0se{8V1Jz delta 20 acmaE$@<4_AGcPX}0}xc_w{7GO6#@W5UIo4Y 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 2ea80425a222f77c000ebd2f870285036e791122..8a90d5ea743a73f75e330fadfc9e35efa4b72d4c 100644 GIT binary patch delta 73 zcmeyz_JfW4GcPX}0}%ZC*0Pa%K9fO{er{fgeoA6VqJCm}YFom!Nc a9AA`LT#%nvoEl$d9$%hcls)+Y(>ws=QXFFd delta 79 zcmeyt_K%JGGcPX}0}xc_w{7H}&t%r2pPN^rpQ7&@>=_?Wl%JKFTvDu`mRVF>5}%x( bSCUv9pPQLpl$esQpO~JS2NRrpi)kJJIgA}N 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 ca8c8f0fb32871def1d86afda73deb89c45cc12e..90cd52552ed64943fc1da1a6ce067e9212df1aa5 100644 GIT binary patch delta 74 zcmbQvJ&~LHGcPX}0}%ZC*0Pb?joF}HKR2&LKP9mwQ9m&~HLoN-IX|x?u{a*cPA$qz bjxS0rF38U-PK_@!k1x+J%HG`0EWiW+vkV%5 delta 80 zcmbQpJ)N8TGcPX}0}xc_w{7HhV>WBm&&?~*Pto@c_KXiG%FjwoE-BVe%PcA`iBHbY cD@iPl&&^CPN=(VuPfSnEg9&bKWENlo00LbbQ2+n{ 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 7cd96e200102a62e0dbadb5fbbb3283d427c5bc6..bef74f60265e89ebebcc3a05d9f7db5ccc4e68f2 100644 GIT binary patch delta 74 zcmZqB{H4MDnU|M~0SNwmYuU(smC2w%KR2&LKP9mwQ9m&~HLoN-IX|x?u{a*cPA$qz bjxS0rF38U-PK_@!k1x+J%HAx-oFxbV_{pbXbV{GcPX}0}%ZC*0PcN6r(|ter{fgeoA6VqJCm}YFom!Nc b9AA`LT#%nvoEl$d9$%hcl)ago$&MWW?*AJt delta 80 zcmX>sbW(`>GcPX}0}xc_w{7G;#c0-{pPN^rpQ7&@>=_?Wl%JKFTvDu`mRVF>5}%x( cSCUv9pPQLpl$esQpO~JS2NT@P%4Ek507M!a{r~^~ 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 accb9fd35a9f2f76a251df6a80649dc8f87ec1d6..f1bf091036ebc00b307e5c440416bafe588d12dd 100644 GIT binary patch delta 74 zcmZ1_xom!Nc b9AA`LT#%nvoEl$d9$%hcl)YJsX#xiT=_?Wl%JKFTvDu`mRVF>5}%x( cSCUv9pPQLpl$esQpO~JS2NT>Z!Zd*c05`=PIRF3v 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 353244b873ec1ed03939e5c8d42f135b52550602..45e15b4224a6ab7aefd576daba78803718b00c84 100644 GIT binary patch delta 76 zcmccqnDOFcM()qNyj%=G@b6p8Ms8+igGT+_yb}GC#F9k)#Prm>lKABOypqJ?cpy8q dC^I>}D7CmCKd(47zRWznJijP=vkUX&JOD`k9UTAw delta 82 zcmccknDP2!M()qNyj%=GP@Uhlk(-&>tX)4huS7pZ-#6GZKAb>KSU)YZsJJ9P eIX|x?u{b_AGrcG=C0{==Jv9#|xY>?*avlJq;2rJ& 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 f6f7842761f4905e03ec9d69f371478c2960e150..d57454968a2e054b8756d5b1ca9d07be6cbf0e5e 100644 GIT binary patch delta 74 zcmdnTzk{FqGcPX}0}%ZC*0Pa%Hlsnier{fgeoA6VqJCm}YFom!Nc b9AA`LT#%nvoEl$d9$%hcl)d>5<0Do8;!zw~ delta 80 zcmdnNzmK2$GcPX}0}xc_w{7H}&1lxEpPN^rpQ7&@>=_?Wl%JKFTvDu`mRVF>5}%x( cSCUv9pPQLpl$esQpO~JS2NT?UjqwpH05!-RDgXcg diff --git a/mcp/servers/retail_mcp_server/main.py b/mcp/servers/retail_mcp_server/main.py index 6f4e3e9..5d8d57e 100644 --- a/mcp/servers/retail_mcp_server/main.py +++ b/mcp/servers/retail_mcp_server/main.py @@ -17,6 +17,10 @@ TOOLS = { "description": "Consulta entrega e rastreamento do pedido.", "input_schema": {"order_id": "string"}, }, + "cancelar_pedido": { + "description": "Simula o cancelamento de um pedido de varejo.", + "input_schema": {"order_id": "string"}, + }, "solicitar_troca": { "description": "Simula abertura de solicitação de troca.", "input_schema": {"order_id": "string", "reason": "string"}, @@ -77,6 +81,13 @@ async def call_tool(call: ToolCall): {"data": "2026-05-29", "descricao": "Em trânsito para o centro de distribuição"}, ], } + elif name == "cancelar_pedido": + result = { + "protocolo": "CANCEL-2026-001", + "order_id": args.get("order_id") or "PED-1001", + "status": "CANCELAMENTO_SOLICITADO", + "orientacao": "Cancelamento registrado para processamento.", + } elif name == "solicitar_troca": result = { "protocolo": "TROCA-2026-001", diff --git a/mcp/servers/retail_mcp_server/main_fastmcp.py b/mcp/servers/retail_mcp_server/main_fastmcp.py index 5abf44d..7972f95 100644 --- a/mcp/servers/retail_mcp_server/main_fastmcp.py +++ b/mcp/servers/retail_mcp_server/main_fastmcp.py @@ -30,6 +30,16 @@ def consultar_entrega(order_id: str | None = None) -> dict[str, Any]: } +@mcp.tool() +def cancelar_pedido(order_id: str | None = None) -> dict[str, Any]: + """Solicita o cancelamento de um pedido de varejo.""" + return { + "order_id": order_id or "ORD-001", + "protocolo": "CANCEL-123456", + "status": "CANCELAMENTO_SOLICITADO", + } + + @mcp.tool() def solicitar_troca(order_id: str | None = None, reason: str | None = None) -> dict[str, Any]: """Abre solicitação de troca para um pedido.""" diff --git a/templates/agent_template_backend/.env.example b/templates/agent_template_backend/.env.example new file mode 100644 index 0000000..116eb7d --- /dev/null +++ b/templates/agent_template_backend/.env.example @@ -0,0 +1,209 @@ +############################################################################### +# AI AGENT PLATFORM - CONFIGURAÇÃO ÚNICA +# Este arquivo é lido por Pydantic Settings no framework e no backend template. +############################################################################### + +APP_NAME=ai-agent-template +APP_ENV=local +LOG_LEVEL=INFO +API_HOST=0.0.0.0 +API_PORT=8000 +CORS_ORIGINS=http://localhost:5173,http://127.0.0.1:5173 + +############################################################################### +# LLM - OCI Generative AI como provider principal +############################################################################### +# Opções: mock, oci_openai, oci_sdk, openai_compatible +LLM_PROVIDER=oci_openai +LLM_TEMPERATURE=0.2 +LLM_MAX_TOKENS=2048 +LLM_TIMEOUT_SECONDS=120 + +# OCI OpenAI-compatible endpoint +OCI_GENAI_BASE_URL=https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1 +OCI_GENAI_MODEL=openai.gpt-4.1 +OCI_GENAI_API_KEY=sk-ph3FgX6ph3FgX6ph3FgX6ph3FgX6ph3FgX6ph3FgX6 +OCI_GENAI_PROJECT_OCID= + +# OCI_AUTH_MODE=config_file|instance_principal|resource_principal +OCI_AUTH_MODE=config_file +# OCI SDK / signer / profiles +OCI_CONFIG_FILE=~/.oci/config +OCI_PROFILE=DEFAULT +OCI_COMPARTMENT_ID=ocid1.compartment.oc1..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +OCI_REGION=us-chicago-1 + +############################################################################### +# Persistência +############################################################################### +# Opções: memory, autonomous, mongodb +SESSION_REPOSITORY_PROVIDER=autonomous +MEMORY_REPOSITORY_PROVIDER=autonomous +CHECKPOINT_REPOSITORY_PROVIDER=autonomous + +# Autonomous Database +ADB_USER=admin +ADB_PASSWORD=fjhsdf04954hf +ADB_DSN=oradb23aidev_high +ADB_WALLET_LOCATION=/ORACLE/DEFAULT/Wallet_ORADB23aiDev +ADB_WALLET_PASSWORD=fjhsdf04954hf +ADB_TABLE_PREFIX=AGENTFW + +# MongoDB - também pode representar Autonomous usando API compatível com Mongo, se habilitada no ambiente +MONGODB_URI=mongodb://mongo:mongopassword@localhost:27017 +MONGODB_DATABASE=agent_platform + +# Redis +REDIS_URL=redis://localhost:6379/0 +ENABLE_REDIS_CACHE=false + +############################################################################### +# RAG / Vector / Graph +############################################################################### +VECTOR_STORE_PROVIDER=memory +GRAPH_STORE_PROVIDER=memory +RAG_TOP_K=5 +EMBEDDING_PROVIDER=mock +OCI_EMBEDDING_MODEL=cohere.embed-multilingual-v3.0 +RAG_FILE_GLOBS=*.md,*.txt,*.yaml,*.yml,*.json + +############################################################################### +# Observabilidade +############################################################################### +ENABLE_LANGFUSE=true +LANGFUSE_TRACE_MODE=verbose # Opcional: verbose, compact +LANGFUSE_ROOT_SPAN_NAME=agent.gateway_message +LANGFUSE_LEGACY_IO_FALLBACK=true +LANGFUSE_PUBLIC_KEY=pk-lf-bd9b0c7e-2b8b-4e5b-a382-284a9b4413b3 +LANGFUSE_SECRET_KEY=sk-lf-5f5cc18d-0bb5-424e-b5d0-cb3664d58c20 +LANGFUSE_HOST=http://localhost:3005 +ENABLE_OTEL=false +OTEL_EXPORTER_OTLP_ENDPOINT= +OTEL_SERVICE_NAME=ai-agent-template +ENABLE_LANGFUSE_OPENAI_AUTO_INSTRUMENTATION=true + +############################################################################### +# Analytics / Observer corporativo +############################################################################### +# Quando true, AgentObserver publica eventos IC.*, NOC.* e GRL.* nos providers abaixo. +ENABLE_ANALYTICS=false +# Providers aceitos: oci_streaming,pubsub,noop +ANALYTICS_PROVIDERS=pubsub +# Compatibilidade FIRST/TIM: pode informar AGENT_PUBSUB_TOPIC diretamente. +AGENT_PUBSUB_TOPIC= +GCP_PUBSUB_TOPIC_PATH= +GCP_PROJECT_ID= +GCP_PUBSUB_TOPIC= +GCP_PUBSUB_TIMEOUT_SECONDS=30 +# Credencial GCP segue padrão Google: +# GOOGLE_APPLICATION_CREDENTIALS=/secrets/gcp-service-account.json + +############################################################################### +# OCI Streaming +############################################################################### +ENABLE_OCI_STREAMING=false +OCI_STREAM_ENDPOINT= +OCI_STREAM_OCID= +OCI_STREAM_PARTITION_KEY=agent-events + +############################################################################### +# Guardrails, Judges, Supervisor +############################################################################### +ENABLE_INPUT_GUARDRAILS=true +ENABLE_OUTPUT_GUARDRAILS=true +ENABLE_JUDGES=true +ENABLE_SUPERVISOR=true +ENABLE_OUTPUT_SUPERVISOR=true +ENABLE_PARALLEL_GUARDRAILS=true +GUARDRAILS_FAIL_FAST=true +OUTPUT_SUPERVISOR_MAX_RETRIES=3 +GUARDRAILS_CONFIG_PATH=./config/guardrails.yaml +JUDGES_CONFIG_PATH=./config/judges.yaml +PROMPT_POLICY_PATH=./config/prompt_policy.yaml + +############################################################################### +# Gateway de canais +############################################################################### +DEFAULT_CHANNEL=web +# embedded = backend may parse simple/native channel payloads. +# external = backend only accepts GatewayRequest normalized by an external Channel Gateway. +FRAMEWORK_CHANNEL_INPUT_MODE=embedded +ENABLE_VOICE_ADAPTER=true +ENABLE_WHATSAPP_ADAPTER=true +ENABLE_TEXT_ADAPTER=true + +################################################# +# ENTERPRISE ROUTING +################################################# +# Arquivo YAML com intents, keywords, políticas de estado e fallback. +ROUTING_CONFIG_PATH=./config/routing.yaml +# true = usa LLM para classificar quando keywords/estado não resolverem. +# Em produção, costuma ser útil; em desenvolvimento, false evita custo e latência. +ENABLE_LLM_ROUTER=true + +# Semantic route stickiness (optional). +# Uses a lightweight LLM profile to decide only CONTINUE vs ROUTE. +# There are no regexes or deterministic language rules. +ENABLE_ROUTE_STICKINESS=false +ROUTE_STICKINESS_LLM_PROFILE=route_continuity +ROUTE_STICKINESS_CONFIDENCE_THRESHOLD=0.90 +ROUTE_STICKINESS_HISTORY_TURNS=2 +ROUTE_STICKINESS_MAX_TOKENS=80 +HUMAN_HANDOFF_MESSAGE=Vou encaminhar seu atendimento para uma pessoa. +END_SESSION_MESSAGE=Atendimento encerrado. Obrigado pelo contato. + +############################################################################### +# MCP / Tools +############################################################################### +ENABLE_MCP_TOOLS=true +MCP_SERVERS_CONFIG_PATH=./config/mcp_servers.yaml +TOOLS_CONFIG_PATH=./config/tools.yaml +TOOL_POLICIES_PATH=./config/tool_policies.yaml +MCP_TOOL_TIMEOUT_SECONDS=30 + +# router = EnterpriseRouter seleciona um agente; supervisor = pode acionar múltiplos agentes +ROUTING_MODE=router + +# Usage/cost accounting +USAGE_REPOSITORY_PROVIDER=autonomous +IDENTITY_CONFIG_PATH=./config/identity.yaml +MCP_PARAMETER_MAPPING_PATH=./config/mcp_parameter_mapping.yaml + +# ----------------------------------------------------------------------------- +# ConversationSummaryMemory / compressão de contexto conversacional +# ----------------------------------------------------------------------------- +ENABLE_CONVERSATION_SUMMARY_MEMORY=true +MEMORY_CONTEXT_STRATEGY=summary +MEMORY_HISTORY_LIMIT=80 +MEMORY_RECENT_MESSAGES_LIMIT=8 +MEMORY_SUMMARY_TRIGGER_MESSAGES=20 +MEMORY_MAX_SUMMARY_CHARS=6000 +MEMORY_SUMMARY_USE_LLM=true +MEMORY_INJECT_RECENT_MESSAGES=true +MEMORY_INJECT_SUMMARY=true + +############################################################################### +# MCP Gateway +############################################################################### +# true = framework routes tool calls to the dedicated MCP Gateway. +# false = framework calls MCP servers directly from mcp_servers.yaml. +MCP_GATEWAY_ENABLED=true +MCP_GATEWAY_URL=http://localhost:8300 +MCP_GATEWAY_TIMEOUT_SECONDS=60 +# MCP_GATEWAY_TOKEN= +MCP_GATEWAY_AGENT_ID=telecom_contas +MCP_GATEWAY_TENANT_ID=default + +############################################################################### +# LONG-TERM MEMORY +############################################################################### +ENABLE_LONG_TERM_MEMORY=true +LONG_TERM_MEMORY_PROVIDER=sqlite +LONG_TERM_MEMORY_SQLITE_PATH=./data/agent_framework.db +LONG_TERM_MEMORY_TABLE=agentfw_long_term_memory +# For Autonomous/Oracle, defaults to ${ADB_TABLE_PREFIX}_LONG_TERM_MEMORY +# LONG_TERM_MEMORY_ORACLE_TABLE=AGENTFW_LONG_TERM_MEMORY +LONG_TERM_MEMORY_MAX_CONTEXT_ITEMS=20 +LONG_TERM_MEMORY_MIN_CONFIDENCE=0.70 +LONG_TERM_MEMORY_AUTO_EXTRACT=true +LONG_TERM_MEMORY_INJECT_CONTEXT=true diff --git a/templates/agent_template_backend/config/mcp_parameter_mapping.yaml b/templates/agent_template_backend/config/mcp_parameter_mapping.yaml index 5b29ccf..91d57af 100644 --- a/templates/agent_template_backend/config/mcp_parameter_mapping.yaml +++ b/templates/agent_template_backend/config/mcp_parameter_mapping.yaml @@ -60,6 +60,18 @@ mcp_parameter_mapping: mensagem. pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b group: 1 + cancelar_pedido: + map: + session_key: session_id + extract: + order_id: + from: message + type: string + strategy: hybrid + description: Extraia somente o identificador do pedido informado explicitamente pelo usuário. Retorne null quando não houver identificador de pedido na mensagem. + pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b + group: 1 + solicitar_troca: map: session_key: session_id diff --git a/templates/agent_template_backend/config/routing.yaml b/templates/agent_template_backend/config/routing.yaml index 2dbe95e..03aeaa9 100644 --- a/templates/agent_template_backend/config/routing.yaml +++ b/templates/agent_template_backend/config/routing.yaml @@ -79,6 +79,25 @@ intents: - Quero saber sobre meu pacote de internet. - Tenho roaming internacional? + + - name: retail_order_cancel + domain: retail + agent: orders_agent + description: Cancelamento explícito de pedido ou compra. + priority: 20 + mcp_tools: + - consultar_pedido + - cancelar_pedido + keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar a compra + - cancelar compra + examples: + - Quero cancelar meu pedido. + - Cancele o pedido. + - Quero cancelar a compra. + - name: retail_order_tracking domain: retail agent: orders_agent diff --git a/templates/agent_template_backend/config/tool_policies.yaml b/templates/agent_template_backend/config/tool_policies.yaml index 3c4fd05..9b1ab9e 100644 --- a/templates/agent_template_backend/config/tool_policies.yaml +++ b/templates/agent_template_backend/config/tool_policies.yaml @@ -7,6 +7,12 @@ defaults: require_confirmation: false tool_policies: + cancelar_pedido: + operation_type: transactional + require_confirmation: true + requires: [order_id] + + solicitar_troca: operation_type: transactional require_confirmation: true diff --git a/templates/agent_template_backend/config/tools.yaml b/templates/agent_template_backend/config/tools.yaml index 6273371..f8a53ca 100644 --- a/templates/agent_template_backend/config/tools.yaml +++ b/templates/agent_template_backend/config/tools.yaml @@ -73,6 +73,23 @@ tools: response: mode: renderer renderer: retail.delivery + cancelar_pedido: + description: Simula o cancelamento de um pedido de varejo. + mcp_server: retail + enabled: true + tool_type: action + requires: + - order_id + confirmation_required: true + args_schema: + order_id: string + selection_keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar compra + - cancelar a compra + + solicitar_troca: description: Simula abertura de solicitação de troca. mcp_server: retail diff --git a/templates/agent_template_backend_day_zero/.env.example b/templates/agent_template_backend_day_zero/.env.example new file mode 100644 index 0000000..116eb7d --- /dev/null +++ b/templates/agent_template_backend_day_zero/.env.example @@ -0,0 +1,209 @@ +############################################################################### +# AI AGENT PLATFORM - CONFIGURAÇÃO ÚNICA +# Este arquivo é lido por Pydantic Settings no framework e no backend template. +############################################################################### + +APP_NAME=ai-agent-template +APP_ENV=local +LOG_LEVEL=INFO +API_HOST=0.0.0.0 +API_PORT=8000 +CORS_ORIGINS=http://localhost:5173,http://127.0.0.1:5173 + +############################################################################### +# LLM - OCI Generative AI como provider principal +############################################################################### +# Opções: mock, oci_openai, oci_sdk, openai_compatible +LLM_PROVIDER=oci_openai +LLM_TEMPERATURE=0.2 +LLM_MAX_TOKENS=2048 +LLM_TIMEOUT_SECONDS=120 + +# OCI OpenAI-compatible endpoint +OCI_GENAI_BASE_URL=https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/openai/v1 +OCI_GENAI_MODEL=openai.gpt-4.1 +OCI_GENAI_API_KEY=sk-ph3FgX6ph3FgX6ph3FgX6ph3FgX6ph3FgX6ph3FgX6 +OCI_GENAI_PROJECT_OCID= + +# OCI_AUTH_MODE=config_file|instance_principal|resource_principal +OCI_AUTH_MODE=config_file +# OCI SDK / signer / profiles +OCI_CONFIG_FILE=~/.oci/config +OCI_PROFILE=DEFAULT +OCI_COMPARTMENT_ID=ocid1.compartment.oc1..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +OCI_REGION=us-chicago-1 + +############################################################################### +# Persistência +############################################################################### +# Opções: memory, autonomous, mongodb +SESSION_REPOSITORY_PROVIDER=autonomous +MEMORY_REPOSITORY_PROVIDER=autonomous +CHECKPOINT_REPOSITORY_PROVIDER=autonomous + +# Autonomous Database +ADB_USER=admin +ADB_PASSWORD=fjhsdf04954hf +ADB_DSN=oradb23aidev_high +ADB_WALLET_LOCATION=/ORACLE/DEFAULT/Wallet_ORADB23aiDev +ADB_WALLET_PASSWORD=fjhsdf04954hf +ADB_TABLE_PREFIX=AGENTFW + +# MongoDB - também pode representar Autonomous usando API compatível com Mongo, se habilitada no ambiente +MONGODB_URI=mongodb://mongo:mongopassword@localhost:27017 +MONGODB_DATABASE=agent_platform + +# Redis +REDIS_URL=redis://localhost:6379/0 +ENABLE_REDIS_CACHE=false + +############################################################################### +# RAG / Vector / Graph +############################################################################### +VECTOR_STORE_PROVIDER=memory +GRAPH_STORE_PROVIDER=memory +RAG_TOP_K=5 +EMBEDDING_PROVIDER=mock +OCI_EMBEDDING_MODEL=cohere.embed-multilingual-v3.0 +RAG_FILE_GLOBS=*.md,*.txt,*.yaml,*.yml,*.json + +############################################################################### +# Observabilidade +############################################################################### +ENABLE_LANGFUSE=true +LANGFUSE_TRACE_MODE=verbose # Opcional: verbose, compact +LANGFUSE_ROOT_SPAN_NAME=agent.gateway_message +LANGFUSE_LEGACY_IO_FALLBACK=true +LANGFUSE_PUBLIC_KEY=pk-lf-bd9b0c7e-2b8b-4e5b-a382-284a9b4413b3 +LANGFUSE_SECRET_KEY=sk-lf-5f5cc18d-0bb5-424e-b5d0-cb3664d58c20 +LANGFUSE_HOST=http://localhost:3005 +ENABLE_OTEL=false +OTEL_EXPORTER_OTLP_ENDPOINT= +OTEL_SERVICE_NAME=ai-agent-template +ENABLE_LANGFUSE_OPENAI_AUTO_INSTRUMENTATION=true + +############################################################################### +# Analytics / Observer corporativo +############################################################################### +# Quando true, AgentObserver publica eventos IC.*, NOC.* e GRL.* nos providers abaixo. +ENABLE_ANALYTICS=false +# Providers aceitos: oci_streaming,pubsub,noop +ANALYTICS_PROVIDERS=pubsub +# Compatibilidade FIRST/TIM: pode informar AGENT_PUBSUB_TOPIC diretamente. +AGENT_PUBSUB_TOPIC= +GCP_PUBSUB_TOPIC_PATH= +GCP_PROJECT_ID= +GCP_PUBSUB_TOPIC= +GCP_PUBSUB_TIMEOUT_SECONDS=30 +# Credencial GCP segue padrão Google: +# GOOGLE_APPLICATION_CREDENTIALS=/secrets/gcp-service-account.json + +############################################################################### +# OCI Streaming +############################################################################### +ENABLE_OCI_STREAMING=false +OCI_STREAM_ENDPOINT= +OCI_STREAM_OCID= +OCI_STREAM_PARTITION_KEY=agent-events + +############################################################################### +# Guardrails, Judges, Supervisor +############################################################################### +ENABLE_INPUT_GUARDRAILS=true +ENABLE_OUTPUT_GUARDRAILS=true +ENABLE_JUDGES=true +ENABLE_SUPERVISOR=true +ENABLE_OUTPUT_SUPERVISOR=true +ENABLE_PARALLEL_GUARDRAILS=true +GUARDRAILS_FAIL_FAST=true +OUTPUT_SUPERVISOR_MAX_RETRIES=3 +GUARDRAILS_CONFIG_PATH=./config/guardrails.yaml +JUDGES_CONFIG_PATH=./config/judges.yaml +PROMPT_POLICY_PATH=./config/prompt_policy.yaml + +############################################################################### +# Gateway de canais +############################################################################### +DEFAULT_CHANNEL=web +# embedded = backend may parse simple/native channel payloads. +# external = backend only accepts GatewayRequest normalized by an external Channel Gateway. +FRAMEWORK_CHANNEL_INPUT_MODE=embedded +ENABLE_VOICE_ADAPTER=true +ENABLE_WHATSAPP_ADAPTER=true +ENABLE_TEXT_ADAPTER=true + +################################################# +# ENTERPRISE ROUTING +################################################# +# Arquivo YAML com intents, keywords, políticas de estado e fallback. +ROUTING_CONFIG_PATH=./config/routing.yaml +# true = usa LLM para classificar quando keywords/estado não resolverem. +# Em produção, costuma ser útil; em desenvolvimento, false evita custo e latência. +ENABLE_LLM_ROUTER=true + +# Semantic route stickiness (optional). +# Uses a lightweight LLM profile to decide only CONTINUE vs ROUTE. +# There are no regexes or deterministic language rules. +ENABLE_ROUTE_STICKINESS=false +ROUTE_STICKINESS_LLM_PROFILE=route_continuity +ROUTE_STICKINESS_CONFIDENCE_THRESHOLD=0.90 +ROUTE_STICKINESS_HISTORY_TURNS=2 +ROUTE_STICKINESS_MAX_TOKENS=80 +HUMAN_HANDOFF_MESSAGE=Vou encaminhar seu atendimento para uma pessoa. +END_SESSION_MESSAGE=Atendimento encerrado. Obrigado pelo contato. + +############################################################################### +# MCP / Tools +############################################################################### +ENABLE_MCP_TOOLS=true +MCP_SERVERS_CONFIG_PATH=./config/mcp_servers.yaml +TOOLS_CONFIG_PATH=./config/tools.yaml +TOOL_POLICIES_PATH=./config/tool_policies.yaml +MCP_TOOL_TIMEOUT_SECONDS=30 + +# router = EnterpriseRouter seleciona um agente; supervisor = pode acionar múltiplos agentes +ROUTING_MODE=router + +# Usage/cost accounting +USAGE_REPOSITORY_PROVIDER=autonomous +IDENTITY_CONFIG_PATH=./config/identity.yaml +MCP_PARAMETER_MAPPING_PATH=./config/mcp_parameter_mapping.yaml + +# ----------------------------------------------------------------------------- +# ConversationSummaryMemory / compressão de contexto conversacional +# ----------------------------------------------------------------------------- +ENABLE_CONVERSATION_SUMMARY_MEMORY=true +MEMORY_CONTEXT_STRATEGY=summary +MEMORY_HISTORY_LIMIT=80 +MEMORY_RECENT_MESSAGES_LIMIT=8 +MEMORY_SUMMARY_TRIGGER_MESSAGES=20 +MEMORY_MAX_SUMMARY_CHARS=6000 +MEMORY_SUMMARY_USE_LLM=true +MEMORY_INJECT_RECENT_MESSAGES=true +MEMORY_INJECT_SUMMARY=true + +############################################################################### +# MCP Gateway +############################################################################### +# true = framework routes tool calls to the dedicated MCP Gateway. +# false = framework calls MCP servers directly from mcp_servers.yaml. +MCP_GATEWAY_ENABLED=true +MCP_GATEWAY_URL=http://localhost:8300 +MCP_GATEWAY_TIMEOUT_SECONDS=60 +# MCP_GATEWAY_TOKEN= +MCP_GATEWAY_AGENT_ID=telecom_contas +MCP_GATEWAY_TENANT_ID=default + +############################################################################### +# LONG-TERM MEMORY +############################################################################### +ENABLE_LONG_TERM_MEMORY=true +LONG_TERM_MEMORY_PROVIDER=sqlite +LONG_TERM_MEMORY_SQLITE_PATH=./data/agent_framework.db +LONG_TERM_MEMORY_TABLE=agentfw_long_term_memory +# For Autonomous/Oracle, defaults to ${ADB_TABLE_PREFIX}_LONG_TERM_MEMORY +# LONG_TERM_MEMORY_ORACLE_TABLE=AGENTFW_LONG_TERM_MEMORY +LONG_TERM_MEMORY_MAX_CONTEXT_ITEMS=20 +LONG_TERM_MEMORY_MIN_CONFIDENCE=0.70 +LONG_TERM_MEMORY_AUTO_EXTRACT=true +LONG_TERM_MEMORY_INJECT_CONTEXT=true diff --git a/templates/agent_template_backend_day_zero/config/mcp_parameter_mapping.yaml b/templates/agent_template_backend_day_zero/config/mcp_parameter_mapping.yaml index 5b29ccf..91d57af 100644 --- a/templates/agent_template_backend_day_zero/config/mcp_parameter_mapping.yaml +++ b/templates/agent_template_backend_day_zero/config/mcp_parameter_mapping.yaml @@ -60,6 +60,18 @@ mcp_parameter_mapping: mensagem. pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b group: 1 + cancelar_pedido: + map: + session_key: session_id + extract: + order_id: + from: message + type: string + strategy: hybrid + description: Extraia somente o identificador do pedido informado explicitamente pelo usuário. Retorne null quando não houver identificador de pedido na mensagem. + pattern: (?i)\\b(?:pedido|order)\\s*[:#-]?\\s*([A-Z0-9-]+)\\b + group: 1 + solicitar_troca: map: session_key: session_id diff --git a/templates/agent_template_backend_day_zero/config/routing.yaml b/templates/agent_template_backend_day_zero/config/routing.yaml index 34c9781..187a070 100644 --- a/templates/agent_template_backend_day_zero/config/routing.yaml +++ b/templates/agent_template_backend_day_zero/config/routing.yaml @@ -84,6 +84,25 @@ intents: - Quero saber sobre meu pacote de internet. - Tenho roaming internacional? + + - name: retail_order_cancel + domain: retail + agent: orders_agent + description: Cancelamento explícito de pedido ou compra. + priority: 20 + mcp_tools: + - consultar_pedido + - cancelar_pedido + keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar a compra + - cancelar compra + examples: + - Quero cancelar meu pedido. + - Cancele o pedido. + - Quero cancelar a compra. + - name: retail_order_tracking domain: retail agent: orders_agent diff --git a/templates/agent_template_backend_day_zero/config/tool_policies.yaml b/templates/agent_template_backend_day_zero/config/tool_policies.yaml index 66c9854..48a83d5 100644 --- a/templates/agent_template_backend_day_zero/config/tool_policies.yaml +++ b/templates/agent_template_backend_day_zero/config/tool_policies.yaml @@ -7,6 +7,12 @@ defaults: require_confirmation: false tool_policies: + cancelar_pedido: + operation_type: transactional + require_confirmation: true + requires: [order_id] + + solicitar_troca: operation_type: transactional require_confirmation: true diff --git a/templates/agent_template_backend_day_zero/config/tools.yaml b/templates/agent_template_backend_day_zero/config/tools.yaml index d85fae1..2329dc7 100644 --- a/templates/agent_template_backend_day_zero/config/tools.yaml +++ b/templates/agent_template_backend_day_zero/config/tools.yaml @@ -61,6 +61,23 @@ tools: - rastreamento - transportadora - previsão + cancelar_pedido: + description: Simula o cancelamento de um pedido de varejo. + mcp_server: retail + enabled: true + tool_type: action + requires: + - order_id + confirmation_required: true + args_schema: + order_id: string + selection_keywords: + - cancelar pedido + - cancelamento do pedido + - cancelar compra + - cancelar a compra + + solicitar_troca: description: Simula abertura de solicitação de troca. mcp_server: retail diff --git a/tests/__pycache__/test_route_stickiness_transaction_shift.cpython-313-pytest-9.0.2.pyc b/tests/__pycache__/test_route_stickiness_transaction_shift.cpython-313-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e3e12c1f3f0f5d169c5d1c04a50819b96f46e6ae GIT binary patch literal 10512 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 delta 74 zcmZpA&$!?{Bj;ycUM>b8u-?e|ipwBVKR2&LKP9mwQ9m&~HLoN-IX|x?u{a*cPA$qz bjxS0rF38U-PK_@!k1x+J%HGV%U7G^{##kEl diff --git a/tests/test_route_stickiness_transaction_shift.py b/tests/test_route_stickiness_transaction_shift.py index 7a7b93e..fee3400 100644 --- a/tests/test_route_stickiness_transaction_shift.py +++ b/tests/test_route_stickiness_transaction_shift.py @@ -1,3 +1,4 @@ +import pytest from types import SimpleNamespace from agent_framework.routing.enterprise_router import EnterpriseRouter @@ -12,3 +13,84 @@ def test_explicit_keyword_shift_preempts_stickiness(): def test_short_generic_keyword_does_not_preempt(): d = RouteDecision(route="x", agent="x", intent="x", method="keyword", metadata={"matched_keyword": "id"}) assert EnterpriseRouter._is_explicit_intent_shift(d) is False + + +def test_same_agent_explicit_intent_shift_must_preempt_stickiness(): + router = object.__new__(EnterpriseRouter) + router.intents = [] + # This test documents the key regression: changing from a read-only intent + # to a transactional intent handled by the SAME agent must still be treated + # as an explicit intent shift. The route() integration tests exercise the + # full async path; here we lock the explicitness predicate itself. + d = RouteDecision( + route="orders_agent", + agent="orders_agent", + intent="retail_order_cancel", + method="keyword", + metadata={"matched_keyword": "cancelar pedido"}, + ) + assert EnterpriseRouter._is_explicit_intent_shift(d) is True + +@pytest.mark.asyncio +async def test_same_agent_transaction_keyword_preempts_continuity(monkeypatch): + """Regression: tracking -> cancelar pedido must not reuse tracking intent.""" + from agent_framework.routing.models import IntentDefinition + + class _Continuity: + async def evaluate(self, state, *, intents): + raise AssertionError("continuity must be preempted by explicit intent shift") + + router = object.__new__(EnterpriseRouter) + router.state_policies = [] + router.intents = [ + IntentDefinition( + name="retail_order_cancel", + domain="retail", + agent="orders_agent", + description="cancelamento", + priority=20, + mcp_tools=["consultar_pedido", "cancelar_pedido"], + keywords=["cancelar pedido"], + examples=[], + enabled=True, + ), + IntentDefinition( + name="retail_order_tracking", + domain="retail", + agent="orders_agent", + description="tracking", + priority=30, + mcp_tools=["consultar_pedido", "consultar_entrega"], + keywords=["pedido"], + examples=[], + enabled=True, + ), + ] + router.continuity = _Continuity() + router.enable_llm_router = False + router.llm = None + router.telemetry = None + router.fallback_agent = "billing_agent" + + decision = await router.route({ + "user_text": "quero cancelar pedido", + "sanitized_input": "quero cancelar pedido", + "active_agent": "orders_agent", + "intent": "retail_order_tracking", + "route_decision": { + "route": "orders_agent", + "agent": "orders_agent", + "intent": "retail_order_tracking", + "domain": "retail", + "mcp_tools": ["consultar_pedido", "consultar_entrega"], + }, + "context": {"session": {}}, + }) + + assert decision.agent == "orders_agent" + assert decision.intent == "retail_order_cancel" + assert decision.method == "keyword" + assert decision.mcp_tools == ["consultar_pedido", "cancelar_pedido"] + assert decision.metadata["route_stickiness_preempted"] is True + assert decision.metadata["previous_agent"] == "orders_agent" + assert decision.metadata["previous_intent"] == "retail_order_tracking" diff --git a/tests/unit/__pycache__/test_semantic_route_stickiness.cpython-313-pytest-9.0.2.pyc b/tests/unit/__pycache__/test_semantic_route_stickiness.cpython-313-pytest-9.0.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..454695e8ac1f6f4cc765faf436259c8764f3c01e GIT binary patch literal 26265 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 literal 0 HcmV?d00001