digitalkin 1.0.0.dev6__tar.gz → 1.0.0.dev8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/PKG-INFO +2 -2
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/pyproject.toml +12 -12
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/__init__.py +8 -10
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/__version__.py +1 -1
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/community/agno/__init__.py +1 -1
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/community/agno/agno_adapter.py +20 -104
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/community/agno/hitl.py +65 -303
- digitalkin-1.0.0.dev8/src/digitalkin/community/agno/models.py +28 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/common/factories.py +6 -5
- digitalkin-1.0.0.dev8/src/digitalkin/core/exceptions.py +16 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/job_manager/base_job_manager.py +3 -2
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/job_manager/single_job_manager.py +50 -80
- digitalkin-1.0.0.dev8/src/digitalkin/core/profiling/__init__.py +6 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/profiling/step_timer.py +22 -1
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/profiling/task_profiler.py +26 -71
- digitalkin-1.0.0.dev8/src/digitalkin/core/resilience/__init__.py +12 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/resilience/bulkhead.py +15 -21
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/resilience/task_supervisor.py +4 -2
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/base_task_manager.py +43 -80
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/local_task_manager.py +3 -5
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/module_runner.py +70 -50
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/redis/__init__.py +2 -1
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/redis/instrumented.py +0 -16
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/redis/proto_streams.py +48 -92
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/redis/redis_checkpoint.py +6 -10
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/redis/redis_client.py +15 -66
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/redis/redis_idempotency.py +7 -21
- digitalkin-1.0.0.dev8/src/digitalkin/core/task_manager/redis/redis_signal.py +379 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/redis/redis_state.py +6 -11
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/redis/redis_streams.py +24 -53
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/task_executor.py +36 -21
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/task_session.py +58 -109
- digitalkin-1.0.0.dev8/src/digitalkin/exceptions.py +5 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/grpc_servers/_base_server.py +84 -183
- {digitalkin-1.0.0.dev6/src/digitalkin/grpc_servers/utils → digitalkin-1.0.0.dev8/src/digitalkin/grpc_servers}/exceptions.py +10 -6
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/grpc_servers/gateway_servicer.py +259 -272
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/grpc_servers/interceptors/circuit_breaker_interceptor.py +6 -3
- digitalkin-1.0.0.dev8/src/digitalkin/grpc_servers/m2m_call_registry.py +223 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/grpc_servers/module_server.py +14 -14
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/grpc_servers/module_servicer.py +74 -58
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/grpc_servers/stream_registry.py +11 -19
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/grpc_servers/stream_session.py +1 -1
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/grpc_servers/utils/circuit_breaker.py +9 -23
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +9 -46
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +1 -1
- digitalkin-1.0.0.dev8/src/digitalkin/grpc_servers/utils/validators.py +84 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/logger.py +8 -20
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/mixins/file_history_mixin.py +3 -5
- digitalkin-1.0.0.dev8/src/digitalkin/models/core/redis.py +11 -0
- digitalkin-1.0.0.dev8/src/digitalkin/models/grpc_servers/circuit_breaker.py +11 -0
- digitalkin-1.0.0.dev8/src/digitalkin/models/grpc_servers/m2m.py +22 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/grpc_servers/models.py +25 -29
- {digitalkin-1.0.0.dev6/src/digitalkin → digitalkin-1.0.0.dev8/src/digitalkin/models}/grpc_servers/stream_error_codes.py +2 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/module/__init__.py +1 -8
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/module/ag_ui.py +0 -35
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/module/module_context.py +6 -4
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/module/setup_types.py +21 -7
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/module/tool_reference.py +13 -6
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/module/utility.py +0 -18
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/services/cost.py +11 -0
- digitalkin-1.0.0.dev8/src/digitalkin/models/services/services.py +10 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/services/storage.py +9 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/settings/consumer.py +20 -4
- digitalkin-1.0.0.dev8/src/digitalkin/models/settings/gateway.py +171 -0
- digitalkin-1.0.0.dev8/src/digitalkin/models/settings/grpc_client.py +127 -0
- digitalkin-1.0.0.dev8/src/digitalkin/models/settings/log.py +38 -0
- digitalkin-1.0.0.dev8/src/digitalkin/models/settings/module.py +31 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/settings/profiling.py +25 -0
- digitalkin-1.0.0.dev8/src/digitalkin/models/settings/queue.py +26 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/settings/redis.py +31 -6
- digitalkin-1.0.0.dev8/src/digitalkin/models/settings/resilience.py +31 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/settings/server/channel.py +13 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/settings/server/grpc.py +13 -25
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/settings/server/server.py +15 -0
- digitalkin-1.0.0.dev8/src/digitalkin/models/settings/server/servicer.py +27 -0
- digitalkin-1.0.0.dev8/src/digitalkin/models/settings/task_manager.py +57 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/settings/utils/channel.py +1 -1
- digitalkin-1.0.0.dev8/src/digitalkin/models/utils/__init__.py +1 -0
- digitalkin-1.0.0.dev8/src/digitalkin/models/utils/dynamic_schema.py +54 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/modules/_base_module.py +25 -36
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/modules/archetype_module.py +4 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/communication/__init__.py +8 -14
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/communication/communication_strategy.py +15 -15
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/communication/default_communication.py +20 -21
- digitalkin-1.0.0.dev8/src/digitalkin/services/communication/exceptions.py +13 -0
- digitalkin-1.0.0.dev8/src/digitalkin/services/communication/grpc_communication.py +510 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/cost/__init__.py +2 -1
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/cost/cost_strategy.py +1 -17
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/cost/default_cost.py +2 -3
- digitalkin-1.0.0.dev8/src/digitalkin/services/cost/exceptions.py +5 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/cost/grpc_cost.py +2 -3
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/filesystem/default_filesystem.py +1 -8
- digitalkin-1.0.0.dev8/src/digitalkin/services/filesystem/exceptions.py +5 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -4
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/filesystem/grpc_filesystem.py +1 -1
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/registry/grpc_registry.py +1 -1
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/services_config.py +3 -8
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/services_models.py +1 -8
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/setup/default_setup.py +2 -1
- digitalkin-1.0.0.dev8/src/digitalkin/services/setup/exceptions.py +5 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/setup/grpc_setup.py +3 -3
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/setup/setup_strategy.py +0 -4
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/storage/default_storage.py +1 -1
- digitalkin-1.0.0.dev8/src/digitalkin/services/storage/exceptions.py +5 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/storage/grpc_storage.py +2 -2
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/storage/storage_strategy.py +2 -14
- digitalkin-1.0.0.dev8/src/digitalkin/services/task_manager/default_task_manager.py +46 -0
- digitalkin-1.0.0.dev8/src/digitalkin/services/task_manager/exceptions.py +5 -0
- digitalkin-1.0.0.dev8/src/digitalkin/services/task_manager/redis_task_manager.py +65 -0
- digitalkin-1.0.0.dev8/src/digitalkin/services/task_manager/task_manager_strategy.py +30 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/user_profile/__init__.py +2 -1
- digitalkin-1.0.0.dev8/src/digitalkin/services/user_profile/exceptions.py +5 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/user_profile/grpc_user_profile.py +2 -1
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -4
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/utils/__init__.py +1 -1
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/utils/conditional_schema.py +3 -51
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/utils/development_mode_action.py +1 -1
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/utils/dynamic_schema.py +4 -60
- digitalkin-1.0.0.dev8/src/digitalkin/utils/exceptions.py +9 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/utils/package_discover.py +16 -23
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin.egg-info/PKG-INFO +2 -2
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin.egg-info/SOURCES.txt +28 -8
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin.egg-info/requires.txt +1 -1
- digitalkin-1.0.0.dev6/src/digitalkin/core/profiling/__init__.py +0 -5
- digitalkin-1.0.0.dev6/src/digitalkin/core/resilience/__init__.py +0 -22
- digitalkin-1.0.0.dev6/src/digitalkin/core/resilience/graceful_shutdown.py +0 -206
- digitalkin-1.0.0.dev6/src/digitalkin/core/resilience/session_reaper.py +0 -117
- digitalkin-1.0.0.dev6/src/digitalkin/core/resilience/watchdog.py +0 -166
- digitalkin-1.0.0.dev6/src/digitalkin/core/task_manager/redis/redis_signal.py +0 -430
- digitalkin-1.0.0.dev6/src/digitalkin/core/task_manager/task_wrapper.py +0 -97
- digitalkin-1.0.0.dev6/src/digitalkin/grpc_servers/gateway_constants.py +0 -145
- digitalkin-1.0.0.dev6/src/digitalkin/models/settings/gateway.py +0 -70
- digitalkin-1.0.0.dev6/src/digitalkin/services/communication/gateway_consumer.py +0 -416
- digitalkin-1.0.0.dev6/src/digitalkin/services/communication/grpc_communication.py +0 -306
- digitalkin-1.0.0.dev6/src/digitalkin/services/task_manager/default_task_manager.py +0 -89
- digitalkin-1.0.0.dev6/src/digitalkin/services/task_manager/redis_task_manager.py +0 -94
- digitalkin-1.0.0.dev6/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -52
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/LICENSE +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/README.md +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/base_server/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/base_server/mock/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/base_server/mock/mock_pb2.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/base_server/server_async_insecure.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/base_server/server_async_secure.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/base_server/server_sync_insecure.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/base_server/server_sync_secure.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/bench_module/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/bench_module/echo_module.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/bench_module/models/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/bench_module/models/input.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/bench_module/models/output.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/bench_module/models/secret.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/bench_module/models/setup.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/bench_module/server.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/bench_module/triggers/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/bench_module/triggers/message_trigger.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/modules/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/modules/archetype_with_tools_module.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/modules/cpu_intensive_module.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/modules/dynamic_setup_module.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/modules/minimal_llm_module.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/modules/text_transform_module.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/monitoring/tests/test_metrics.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/redis_demo/client.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/redis_demo/echo_module.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/redis_demo/models/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/redis_demo/models/input.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/redis_demo/models/output.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/redis_demo/models/secret.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/redis_demo/models/setup.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/redis_demo/server.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/redis_demo/triggers/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/redis_demo/triggers/message_trigger.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/services/filesystem_module.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/examples/services/storage_module.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/setup.cfg +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/community/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/community/agno/agui_tools.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/common/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/job_manager/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/redis/shadow.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/grpc_servers/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/grpc_servers/interceptors/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/mixins/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/mixins/agui_mixin.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/mixins/base_mixin.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/mixins/cost_mixin.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/mixins/logger_mixin.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/mixins/storage_mixin.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/core/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/core/job_manager_models.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/core/task_monitor.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/events/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/events/agent_events.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/grpc_servers/types.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/module/base_types.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/module/module.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/module/module_types.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/module/request_metadata.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/module/select_schema.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/module/tool_cache.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/services/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/services/registry.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/settings/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/settings/server/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/models/settings/utils/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/modules/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/modules/tool_module.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/modules/trigger_handler.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/modules/triggers/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/py.typed +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/base_strategy.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/filesystem/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/identity/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/identity/default_identity.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/identity/identity_strategy.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/registry/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/registry/default_registry.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/registry/exceptions.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/registry/registry_models.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/registry/registry_strategy.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/setup/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/storage/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/task_manager/__init__.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/utils/arg_parser.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/utils/llm_ready_schema.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/utils/proto_utils.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/utils/schema_splitter.py +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin.egg-info/dependency_links.txt +0 -0
- {digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: digitalkin
|
|
3
|
-
Version: 1.0.0.
|
|
3
|
+
Version: 1.0.0.dev8
|
|
4
4
|
Summary: SDK to build kin used in DigitalKin
|
|
5
5
|
Author-email: "DigitalKin.ai" <contact@digitalkin.ai>
|
|
6
6
|
License: Attribution-NonCommercial-ShareAlike 4.0 International
|
|
@@ -459,7 +459,7 @@ Requires-Dist: grpcio-health-checking==1.80.0
|
|
|
459
459
|
Requires-Dist: grpcio-reflection==1.80.0
|
|
460
460
|
Requires-Dist: grpcio-status==1.80.0
|
|
461
461
|
Requires-Dist: pydantic>=2.12.4
|
|
462
|
-
Requires-Dist: pydantic-settings>=2.14.
|
|
462
|
+
Requires-Dist: pydantic-settings>=2.14.1
|
|
463
463
|
Requires-Dist: redis[hiredis]<8,>=7.4.0
|
|
464
464
|
Provides-Extra: performance
|
|
465
465
|
Requires-Dist: uvloop>=0.21; extra == "performance"
|
|
@@ -34,10 +34,10 @@
|
|
|
34
34
|
"grpcio-reflection==1.80.0",
|
|
35
35
|
"grpcio-status==1.80.0",
|
|
36
36
|
"pydantic>=2.12.4",
|
|
37
|
-
"pydantic-settings>=2.14.
|
|
37
|
+
"pydantic-settings>=2.14.1",
|
|
38
38
|
"redis[hiredis]>=7.4.0,<8",
|
|
39
39
|
]
|
|
40
|
-
version = "1.0.0.
|
|
40
|
+
version = "1.0.0.dev8"
|
|
41
41
|
|
|
42
42
|
[project.optional-dependencies]
|
|
43
43
|
performance = [ "uvloop>=0.21" ]
|
|
@@ -60,16 +60,16 @@
|
|
|
60
60
|
"build>=1.5.0",
|
|
61
61
|
"bump-my-version>=1.3.0",
|
|
62
62
|
"cryptography>=48.0.0",
|
|
63
|
-
"mypy>=2.
|
|
63
|
+
"mypy>=2.1.0",
|
|
64
64
|
"pre-commit>=4.6.0",
|
|
65
65
|
"pyright>=1.1.409",
|
|
66
|
-
"ruff>=0.15.
|
|
66
|
+
"ruff>=0.15.13",
|
|
67
67
|
"twine>=6.2.0",
|
|
68
|
-
"types-grpcio-health-checking>=1.0.0.
|
|
69
|
-
"types-grpcio-reflection>=1.0.0.
|
|
70
|
-
"types-grpcio>=1.0.0.
|
|
71
|
-
"types-protobuf>=7.34.1.
|
|
72
|
-
"typos>=1.46.
|
|
68
|
+
"types-grpcio-health-checking>=1.0.0.20260518",
|
|
69
|
+
"types-grpcio-reflection>=1.0.0.20260508",
|
|
70
|
+
"types-grpcio>=1.0.0.20260518",
|
|
71
|
+
"types-protobuf>=7.34.1.20260518",
|
|
72
|
+
"typos>=1.46.2",
|
|
73
73
|
]
|
|
74
74
|
docs = [
|
|
75
75
|
"griffe-inherited-docstrings>=1.1.3",
|
|
@@ -80,9 +80,9 @@
|
|
|
80
80
|
"mkdocs-awesome-pages-plugin>=2.10.1",
|
|
81
81
|
"mkdocs-coverage>=2.0.0",
|
|
82
82
|
"mkdocs-git-committers-plugin-2>=2.5.0",
|
|
83
|
-
"mkdocs-git-revision-date-localized-plugin>=1.5.
|
|
83
|
+
"mkdocs-git-revision-date-localized-plugin>=1.5.2",
|
|
84
84
|
"mkdocs-glightbox>=0.5.2",
|
|
85
|
-
"mkdocs-include-markdown-plugin>=7.
|
|
85
|
+
"mkdocs-include-markdown-plugin>=7.3.0",
|
|
86
86
|
"mkdocs-literate-nav>=0.6.3",
|
|
87
87
|
"mkdocs-llmstxt>=0.5.0",
|
|
88
88
|
"mkdocs-material[imaging]>=9.7.6",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"freezegun>=1.5.5",
|
|
101
101
|
"grpcio-testing>=1.80.0",
|
|
102
102
|
"hdrhistogram>=0.10.3",
|
|
103
|
-
"hypothesis>=6.152.
|
|
103
|
+
"hypothesis>=6.152.8",
|
|
104
104
|
"objgraph>=3.6",
|
|
105
105
|
"psutil>=7.2.2",
|
|
106
106
|
"pytest-asyncio>=1.3.0",
|
|
@@ -10,24 +10,22 @@ from digitalkin.modules.archetype_module import ArchetypeModule
|
|
|
10
10
|
from digitalkin.modules.tool_module import ToolModule
|
|
11
11
|
from digitalkin.modules.trigger_handler import TriggerHandler
|
|
12
12
|
from digitalkin.services.communication import (
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
StartStreamRpcError,
|
|
13
|
+
GrpcCommunication,
|
|
14
|
+
M2MAtCapacityError,
|
|
15
|
+
M2MCallTimeout,
|
|
16
|
+
M2MTargetUnavailable,
|
|
18
17
|
)
|
|
19
18
|
from digitalkin.services.services_config import ServicesConfig
|
|
20
19
|
|
|
21
20
|
__all__ = [
|
|
22
21
|
"ArchetypeModule",
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
22
|
+
"GrpcCommunication",
|
|
23
|
+
"M2MAtCapacityError",
|
|
24
|
+
"M2MCallTimeout",
|
|
25
|
+
"M2MTargetUnavailable",
|
|
26
26
|
"ModuleContext",
|
|
27
27
|
"ModuleStatus",
|
|
28
28
|
"ServicesConfig",
|
|
29
|
-
"StartStreamRejected",
|
|
30
|
-
"StartStreamRpcError",
|
|
31
29
|
"ToolModule",
|
|
32
30
|
"TriggerHandler",
|
|
33
31
|
"__version__",
|
|
@@ -24,10 +24,10 @@ from digitalkin.community.agno.hitl import (
|
|
|
24
24
|
AgnoHitlRunner,
|
|
25
25
|
PausedRunRecord,
|
|
26
26
|
PausedRunStore,
|
|
27
|
-
PauseInfo,
|
|
28
27
|
emit_awaiting_tool_result,
|
|
29
28
|
emit_messages_snapshot,
|
|
30
29
|
)
|
|
30
|
+
from digitalkin.community.agno.models import PauseInfo
|
|
31
31
|
|
|
32
32
|
__all__ = [
|
|
33
33
|
"HITL_STORAGE_CONFIG",
|
{digitalkin-1.0.0.dev6 → digitalkin-1.0.0.dev8}/src/digitalkin/community/agno/agno_adapter.py
RENAMED
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
"""
|
|
2
|
-
|
|
3
|
-
This adapter bridges Agno-specific events to the DigitalKin event model,
|
|
4
|
-
allowing the core DigitalKin SDK to remain independent of Agno.
|
|
5
|
-
|
|
6
|
-
The adapter owns ALL state management: tracking reasoning/content lifecycle,
|
|
7
|
-
generating message_id and reasoning_id on each phase start, and emitting
|
|
8
|
-
proper start/completed events for text message and reasoning sequences.
|
|
9
|
-
"""
|
|
1
|
+
"""Convert Agno streaming events into framework-agnostic DigitalKin events."""
|
|
10
2
|
|
|
11
3
|
from __future__ import annotations
|
|
12
4
|
|
|
@@ -40,20 +32,10 @@ logger = logging.getLogger(__name__)
|
|
|
40
32
|
|
|
41
33
|
|
|
42
34
|
class AgnoStreamAdapter:
|
|
43
|
-
"""Stateful
|
|
44
|
-
|
|
45
|
-
Tracks reasoning and content state so that events arriving on
|
|
46
|
-
``RunEvent.run_content`` are automatically wrapped in proper
|
|
47
|
-
lifecycle events (TextMessageStarted/Completed, ReasoningStarted/Completed).
|
|
35
|
+
"""Stateful Agno→DigitalKin event converter.
|
|
48
36
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
adapter = AgnoStreamAdapter()
|
|
52
|
-
async for raw_event in agent.arun(..., stream=True, stream_events=True):
|
|
53
|
-
for event in adapter.to_digitalkin_events(raw_event):
|
|
54
|
-
await send(event)
|
|
55
|
-
for event in adapter.flush():
|
|
56
|
-
await send(event)
|
|
37
|
+
Auto-wraps ``run_content`` deltas in TextMessage/Reasoning lifecycle
|
|
38
|
+
events and tracks HITL pause state.
|
|
57
39
|
"""
|
|
58
40
|
|
|
59
41
|
def __init__(self) -> None:
|
|
@@ -69,9 +51,6 @@ class AgnoStreamAdapter:
|
|
|
69
51
|
self._active_run_id: str | None = None
|
|
70
52
|
self._completed_run_ids: set[str] = set()
|
|
71
53
|
|
|
72
|
-
# HITL pause state — populated when a RunPausedEvent is seen
|
|
73
|
-
# (tools with external_execution=True). Callers can inspect these
|
|
74
|
-
# after streaming to decide whether to persist and resume later.
|
|
75
54
|
self._is_paused: bool = False
|
|
76
55
|
self._paused_tool_executions: list[Any] = []
|
|
77
56
|
self._paused_requirements: list[Any] = []
|
|
@@ -94,20 +73,20 @@ class AgnoStreamAdapter:
|
|
|
94
73
|
return list(self._paused_requirements)
|
|
95
74
|
|
|
96
75
|
def to_digitalkin_events(self, agno_event: Any) -> list[BaseAgentRunEvent]:
|
|
97
|
-
"""Convert one Agno event into
|
|
76
|
+
"""Convert one Agno event into DigitalKin events.
|
|
98
77
|
|
|
99
78
|
Args:
|
|
100
79
|
agno_event: Event from Agno's streaming API.
|
|
101
80
|
|
|
102
81
|
Returns:
|
|
103
|
-
List of
|
|
82
|
+
List of DigitalKin events (may be empty).
|
|
104
83
|
|
|
105
84
|
Raises:
|
|
106
85
|
ImportError: If the optional 'agno' dependency is not installed.
|
|
107
86
|
"""
|
|
108
87
|
if self._dispatch is None:
|
|
109
88
|
try:
|
|
110
|
-
from agno.run.agent import RunEvent #
|
|
89
|
+
from agno.run.agent import RunEvent # pyright: ignore[reportMissingImports]
|
|
111
90
|
except ImportError as exc:
|
|
112
91
|
message = "The 'agno' package is required to use AgnoStreamAdapter. Install it with: pip install agno"
|
|
113
92
|
raise ImportError(message) from exc
|
|
@@ -137,8 +116,6 @@ class AgnoStreamAdapter:
|
|
|
137
116
|
|
|
138
117
|
return handler(agno_event, getattr(agno_event, "timestamp", None))
|
|
139
118
|
|
|
140
|
-
# ── Run Lifecycle Handlers ───────────────────────────────────────────
|
|
141
|
-
|
|
142
119
|
def _handle_run_started(self, agno_event: Any, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
143
120
|
"""Handle RunEvent.run_started.
|
|
144
121
|
|
|
@@ -219,8 +196,6 @@ class AgnoStreamAdapter:
|
|
|
219
196
|
)
|
|
220
197
|
]
|
|
221
198
|
|
|
222
|
-
# ── Reasoning Handlers (native Agno reasoning models) ───────────────
|
|
223
|
-
|
|
224
199
|
def _handle_reasoning_started(self, agno_event: Any, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
225
200
|
"""Handle RunEvent.reasoning_started.
|
|
226
201
|
|
|
@@ -263,25 +238,11 @@ class AgnoStreamAdapter:
|
|
|
263
238
|
]
|
|
264
239
|
|
|
265
240
|
def _handle_reasoning_step(self, agno_event: Any, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
266
|
-
"""Handle ``
|
|
267
|
-
|
|
268
|
-
Unlike the native reasoning events (``reasoning_started`` /
|
|
269
|
-
``reasoning_content_delta`` / ``reasoning_completed``), a
|
|
270
|
-
``reasoning_step`` may arrive without a preceding
|
|
271
|
-
``reasoning_started``. This happens when the LLM calls tool-based
|
|
272
|
-
reasoning (``think`` / ``analyze`` from ``ReasoningTools``) rather
|
|
273
|
-
than using the model's built-in extended thinking.
|
|
274
|
-
|
|
275
|
-
To comply with the AG-UI protocol — which requires every
|
|
276
|
-
``REASONING_MESSAGE_CONTENT`` to be wrapped in a
|
|
277
|
-
``REASONING_START`` … ``REASONING_END`` lifecycle — we auto-open
|
|
278
|
-
a reasoning sequence here if none is active. The sequence is
|
|
279
|
-
auto-closed by the next non-reasoning event (``_handle_run_content``,
|
|
280
|
-
``_handle_tool_call_started``, etc.) or by ``flush()``.
|
|
241
|
+
"""Handle ``reasoning_step``; auto-opens a reasoning sequence if needed.
|
|
281
242
|
|
|
282
243
|
Returns:
|
|
283
|
-
|
|
284
|
-
|
|
244
|
+
Optionally a ``ReasoningStartedEvent`` followed by the
|
|
245
|
+
``ReasoningStepEvent``.
|
|
285
246
|
"""
|
|
286
247
|
events: list[BaseAgentRunEvent] = []
|
|
287
248
|
|
|
@@ -289,11 +250,9 @@ class AgnoStreamAdapter:
|
|
|
289
250
|
if not content:
|
|
290
251
|
return events
|
|
291
252
|
|
|
292
|
-
# Close active text message if transitioning to reasoning
|
|
293
253
|
if self._content_active:
|
|
294
254
|
events.extend(self._close_content(timestamp))
|
|
295
255
|
|
|
296
|
-
# Auto-open reasoning lifecycle if not already active
|
|
297
256
|
if not self._reasoning_active:
|
|
298
257
|
self._current_reasoning_id = str(uuid.uuid4())
|
|
299
258
|
self._reasoning_active = True
|
|
@@ -328,8 +287,6 @@ class AgnoStreamAdapter:
|
|
|
328
287
|
logger.debug("Reasoning completed")
|
|
329
288
|
return self._close_reasoning(timestamp)
|
|
330
289
|
|
|
331
|
-
# ── Tool Call Handlers ──────────────────────────────────────────────
|
|
332
|
-
|
|
333
290
|
def _handle_tool_call_started(self, agno_event: Any, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
334
291
|
"""Handle RunEvent.tool_call_started.
|
|
335
292
|
|
|
@@ -395,33 +352,14 @@ class AgnoStreamAdapter:
|
|
|
395
352
|
]
|
|
396
353
|
|
|
397
354
|
def _handle_run_paused(self, agno_event: Any, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
398
|
-
"""Handle ``
|
|
399
|
-
|
|
400
|
-
Agno
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
front therefore never sees the corresponding AG-UI ``ToolCallStart``
|
|
404
|
-
/ ``ToolCallArgs`` / ``ToolCallEnd`` events unless we synthesize them.
|
|
405
|
-
|
|
406
|
-
This handler:
|
|
407
|
-
|
|
408
|
-
1. Closes any active reasoning / content sequence.
|
|
409
|
-
2. Iterates ``RunPausedEvent.tools`` and emits one pair of
|
|
410
|
-
``ToolCallStartedEvent`` + ``ToolCallCompletedEvent`` per tool.
|
|
411
|
-
The ``ToolCallCompletedEvent`` carries ``content=None`` and
|
|
412
|
-
``tool.result=None`` so the downstream AG-UI bridge emits
|
|
413
|
-
``ToolCallEnd`` *without* a ``ToolCallResult`` (guarded by the
|
|
414
|
-
``if result_content:`` check in ``AgUiMixin``).
|
|
415
|
-
3. Records pause state on the adapter (``is_paused``,
|
|
416
|
-
``paused_tool_executions``, ``paused_requirements``) so callers
|
|
417
|
-
can detect the pause after streaming and persist the run for
|
|
418
|
-
later resumption.
|
|
355
|
+
"""Handle ``run_paused``; synthesize tool-call events for external tools.
|
|
356
|
+
|
|
357
|
+
Agno suppresses tool_call_started/completed for tools with
|
|
358
|
+
``external_execution=True``; we re-emit them so the front sees
|
|
359
|
+
the call.
|
|
419
360
|
|
|
420
361
|
Returns:
|
|
421
|
-
Synthesized tool-call events for the paused tools.
|
|
422
|
-
is responsible for subsequently emitting the AG-UI
|
|
423
|
-
``RunFinished`` with ``result.status = "awaiting_tool_result"``
|
|
424
|
-
— this adapter stays protocol-agnostic.
|
|
362
|
+
Synthesized tool-call events for the paused external tools.
|
|
425
363
|
"""
|
|
426
364
|
events: list[BaseAgentRunEvent] = []
|
|
427
365
|
|
|
@@ -437,11 +375,7 @@ class AgnoStreamAdapter:
|
|
|
437
375
|
self._paused_tool_executions = list(tools)
|
|
438
376
|
self._paused_requirements = list(requirements)
|
|
439
377
|
|
|
440
|
-
#
|
|
441
|
-
# (both server-side tools already executed and external ones awaiting
|
|
442
|
-
# client execution). We must only synthesize events for external tools
|
|
443
|
-
# — the server-side ones (e.g. ReasoningTools' think/analyze) were
|
|
444
|
-
# already streamed via the normal tool_call_started/completed path.
|
|
378
|
+
# Only synthesize for external tools; server-side ones already streamed.
|
|
445
379
|
seen_ids: set[str] = set()
|
|
446
380
|
for tool_exec in tools:
|
|
447
381
|
if not getattr(tool_exec, "external_execution_required", False):
|
|
@@ -530,8 +464,6 @@ class AgnoStreamAdapter:
|
|
|
530
464
|
events.extend(self._close_reasoning(None))
|
|
531
465
|
return events
|
|
532
466
|
|
|
533
|
-
# ── Private Helpers ──────────────────────────────────────────────────
|
|
534
|
-
|
|
535
467
|
def _close_reasoning(self, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
536
468
|
"""Close active reasoning sequence.
|
|
537
469
|
|
|
@@ -575,32 +507,24 @@ class AgnoStreamAdapter:
|
|
|
575
507
|
return events
|
|
576
508
|
|
|
577
509
|
def _handle_run_content(self, agno_event: Any, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
578
|
-
"""
|
|
510
|
+
"""Dispatch a ``run_content`` event between reasoning and text channels.
|
|
579
511
|
|
|
580
|
-
|
|
581
|
-
- reasoning_content non-empty: reasoning data (close content if transitioning)
|
|
582
|
-
- content non-empty: text data (close reasoning if transitioning)
|
|
583
|
-
- reasoning_content == "": close reasoning if active
|
|
584
|
-
- content == "": close content if active
|
|
585
|
-
- None values: ignored
|
|
512
|
+
Non-empty content opens or extends its sequence; empty strings close it.
|
|
586
513
|
|
|
587
514
|
Returns:
|
|
588
|
-
|
|
515
|
+
DigitalKin events for this chunk.
|
|
589
516
|
"""
|
|
590
517
|
events: list[BaseAgentRunEvent] = []
|
|
591
518
|
|
|
592
519
|
reasoning_content = getattr(agno_event, "reasoning_content", None)
|
|
593
520
|
content = agno_event.content
|
|
594
521
|
|
|
595
|
-
# ── Reasoning content handling ──
|
|
596
522
|
if reasoning_content is not None:
|
|
597
523
|
events.extend(self._process_reasoning_content(reasoning_content, timestamp))
|
|
598
524
|
|
|
599
|
-
# ── Text content handling ──
|
|
600
525
|
if content is not None:
|
|
601
526
|
events.extend(self._process_text_content(content, timestamp))
|
|
602
527
|
|
|
603
|
-
# Edge case: neither reasoning_content nor content
|
|
604
528
|
if reasoning_content is None and content is None:
|
|
605
529
|
logger.debug("run_content with no content, skipping")
|
|
606
530
|
|
|
@@ -615,17 +539,13 @@ class AgnoStreamAdapter:
|
|
|
615
539
|
events: list[BaseAgentRunEvent] = []
|
|
616
540
|
|
|
617
541
|
if not reasoning_content:
|
|
618
|
-
# Empty string "" → signal to close reasoning
|
|
619
542
|
if self._reasoning_active:
|
|
620
543
|
events.extend(self._close_reasoning(timestamp))
|
|
621
544
|
return events
|
|
622
545
|
|
|
623
|
-
# Non-empty string → reasoning data
|
|
624
|
-
# Close text message if transitioning from content to reasoning
|
|
625
546
|
if self._content_active:
|
|
626
547
|
events.extend(self._close_content(timestamp))
|
|
627
548
|
|
|
628
|
-
# Auto-open reasoning on first chunk
|
|
629
549
|
if not self._reasoning_active:
|
|
630
550
|
self._current_reasoning_id = str(uuid.uuid4())
|
|
631
551
|
logger.debug("Reasoning auto-started, id=%s", self._current_reasoning_id)
|
|
@@ -659,18 +579,14 @@ class AgnoStreamAdapter:
|
|
|
659
579
|
events: list[BaseAgentRunEvent] = []
|
|
660
580
|
|
|
661
581
|
if not content:
|
|
662
|
-
# Empty string "" → signal to close text message
|
|
663
582
|
if self._content_active:
|
|
664
583
|
events.extend(self._close_content(timestamp))
|
|
665
584
|
return events
|
|
666
585
|
|
|
667
|
-
# Non-empty string → text data
|
|
668
|
-
# Close reasoning if transitioning from reasoning to content
|
|
669
586
|
if self._reasoning_active:
|
|
670
587
|
logger.debug("Reasoning auto-completed (text content arrived)")
|
|
671
588
|
events.extend(self._close_reasoning(timestamp))
|
|
672
589
|
|
|
673
|
-
# Auto-open text message on first chunk
|
|
674
590
|
if not self._content_active:
|
|
675
591
|
self._current_message_id = str(uuid.uuid4())
|
|
676
592
|
events.append(
|