digitalkin 1.0.5.dev0__tar.gz → 1.0.5.dev3__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.5.dev0 → digitalkin-1.0.5.dev3}/PKG-INFO +2 -2
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/redis_demo/client.py +155 -52
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/services/filesystem_module.py +7 -6
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/pyproject.toml +45 -45
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/__version__.py +1 -1
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/agno_adapter.py +102 -4
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/hitl.py +16 -1
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/models.py +1 -36
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/module_toolkit.py +76 -70
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/base.py +17 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/chat_history.py +64 -29
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/action.py +11 -19
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/base.py +0 -22
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/services/action.py +10 -10
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/services/kit.py +1 -1
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/job_manager/single_job_manager.py +37 -16
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/task_manager/base_task_manager.py +48 -32
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/task_manager/local_task_manager.py +3 -5
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/task_manager/module_runner.py +95 -11
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/task_manager/redis/__init__.py +1 -3
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/task_manager/redis/redis_client.py +11 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/task_manager/redis/redis_idempotency.py +5 -6
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/task_manager/redis/redis_signal.py +18 -11
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/task_manager/task_executor.py +58 -37
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/task_manager/task_session.py +21 -118
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/gateway_servicer.py +154 -120
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/m2m_call_registry.py +3 -3
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/module_server.py +72 -62
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/module_servicer.py +146 -128
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/stream_registry.py +3 -19
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/stream_session.py +3 -5
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +54 -29
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +1 -43
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +2 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/mixins/agui_mixin.py +6 -5
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/mixins/file_history_mixin.py +4 -3
- digitalkin-1.0.5.dev3/src/digitalkin/mixins/filesystem_mixin.py +220 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/core/task_monitor.py +1 -5
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/events/__init__.py +4 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/events/agent_events.py +17 -2
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/module/__init__.py +8 -0
- digitalkin-1.0.5.dev3/src/digitalkin/models/module/knowledge_files.py +87 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/module/module_context.py +10 -2
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/module/tool_cache.py +0 -1
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/module/tool_reference.py +2 -2
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/module/utility.py +7 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/services/__init__.py +4 -0
- digitalkin-1.0.5.dev3/src/digitalkin/models/services/filesystem.py +127 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/services/registry.py +13 -17
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/services/storage.py +3 -9
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/gateway.py +5 -4
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/redis.py +0 -1
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/server/server.py +0 -2
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/server/servicer.py +1 -2
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/task_manager.py +0 -1
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/modules/_base_module.py +26 -11
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/communication/communication_strategy.py +1 -6
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/communication/default_communication.py +6 -7
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/communication/exceptions.py +0 -4
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/communication/grpc_communication.py +82 -63
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/cost/cost_strategy.py +1 -1
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/cost/default_cost.py +24 -17
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/cost/grpc_cost.py +66 -97
- digitalkin-1.0.5.dev3/src/digitalkin/services/filesystem/__init__.py +19 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/filesystem/default_filesystem.py +29 -22
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/filesystem/filesystem_strategy.py +51 -51
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/filesystem/grpc_filesystem.py +93 -143
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/registry/__init__.py +2 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/registry/default_registry.py +22 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/registry/grpc_registry.py +124 -100
- digitalkin-1.0.5.dev3/src/digitalkin/services/registry/registry_models.py +15 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/registry/registry_strategy.py +6 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/secret/grpc_secret.py +10 -10
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/services_config.py +10 -2
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/setup/default_setup.py +46 -189
- digitalkin-1.0.5.dev3/src/digitalkin/services/setup/grpc_setup.py +406 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/setup/setup_strategy.py +18 -89
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/storage/default_storage.py +5 -2
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/storage/grpc_storage.py +70 -105
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/storage/storage_strategy.py +23 -28
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/user_profile/default_user_profile.py +3 -9
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/user_profile/grpc_user_profile.py +12 -18
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/user_profile/user_profile_strategy.py +3 -7
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/utils/development_mode_action.py +2 -2
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/utils/setup_content_validator.py +0 -24
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin.egg-info/PKG-INFO +2 -2
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin.egg-info/SOURCES.txt +3 -2
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin.egg-info/requires.txt +1 -1
- digitalkin-1.0.5.dev0/src/digitalkin/core/task_manager/redis/redis_state.py +0 -124
- digitalkin-1.0.5.dev0/src/digitalkin/grpc_servers/interceptors/validation.py +0 -74
- digitalkin-1.0.5.dev0/src/digitalkin/mixins/filesystem_mixin.py +0 -46
- digitalkin-1.0.5.dev0/src/digitalkin/services/filesystem/__init__.py +0 -7
- digitalkin-1.0.5.dev0/src/digitalkin/services/setup/grpc_setup.py +0 -604
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/LICENSE +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/README.md +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/base_server/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/base_server/mock/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/base_server/mock/mock_pb2.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/base_server/server_async_insecure.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/base_server/server_async_secure.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/base_server/server_sync_insecure.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/base_server/server_sync_secure.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/bench_module/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/bench_module/echo_module.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/bench_module/models/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/bench_module/models/input.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/bench_module/models/output.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/bench_module/models/secret.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/bench_module/models/setup.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/bench_module/server.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/bench_module/triggers/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/bench_module/triggers/message_trigger.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/modules/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/modules/archetype_with_tools_module.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/modules/cpu_intensive_module.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/modules/dynamic_setup_module.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/modules/minimal_llm_module.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/modules/text_transform_module.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/monitoring/tests/test_metrics.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/redis_demo/echo_module.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/redis_demo/models/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/redis_demo/models/input.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/redis_demo/models/output.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/redis_demo/models/secret.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/redis_demo/models/setup.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/redis_demo/server.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/redis_demo/triggers/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/redis_demo/triggers/message_trigger.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/examples/services/storage_module.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/setup.cfg +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/agui_tools.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/defaults.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/kins/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/kins/action.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/kins/kit.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/loader/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/loader/action.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/loader/kit.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/services/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/tools/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/tools/action.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/registry/tools/kit.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/community/agno/toolkits/user_profile.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/common/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/common/factories.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/exceptions.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/job_manager/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/profiling/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/profiling/step_timer.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/profiling/task_profiler.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/resilience/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/resilience/bulkhead.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/resilience/task_supervisor.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/task_manager/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/task_manager/redis/proto_streams.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/exceptions.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/_base_server.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/exceptions.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/interceptors/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/interceptors/permission.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/interceptors/request_ids.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/utils/circuit_breaker.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/grpc_servers/utils/validators.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/logger.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/mixins/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/mixins/base_mixin.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/mixins/cost_mixin.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/mixins/logger_mixin.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/mixins/storage_mixin.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/core/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/core/job_manager_models.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/core/redis.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/grpc_servers/circuit_breaker.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/grpc_servers/m2m.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/grpc_servers/models.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/grpc_servers/stream_error_codes.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/grpc_servers/types.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/module/ag_ui.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/module/base_types.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/module/loaded_tools.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/module/module.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/module/module_types.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/module/request_metadata.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/module/select_schema.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/module/setup_types.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/services/cost.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/services/services.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/certificate.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/client/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/client/channel.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/client/circuit_breaker.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/client/client.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/client/grpc.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/log.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/module.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/profiling.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/queue.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/registry.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/resilience.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/server/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/server/channel.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/server/grpc.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/utils/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/settings/utils/channel.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/utils/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/models/utils/dynamic_schema.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/modules/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/modules/archetype_module.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/modules/tool_module.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/modules/trigger_handler.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/modules/triggers/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/py.typed +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/base_strategy.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/communication/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/cost/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/cost/exceptions.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/filesystem/exceptions.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/identity/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/identity/default_identity.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/identity/identity_strategy.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/registry/exceptions.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/secret/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/secret/default_secret.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/secret/exceptions.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/secret/secret_strategy.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/services_models.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/setup/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/setup/exceptions.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/storage/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/storage/exceptions.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/task_manager/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/task_manager/default_task_manager.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/task_manager/exceptions.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/task_manager/redis_task_manager.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/user_profile/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/services/user_profile/exceptions.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/utils/__init__.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/utils/arg_parser.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/utils/conditional_schema.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/utils/dynamic_schema.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/utils/env_manager.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/utils/env_template.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/utils/exceptions.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/utils/json_structure.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/utils/llm_ready_schema.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/utils/package_discover.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/utils/proto_utils.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin/utils/schema_splitter.py +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin.egg-info/dependency_links.txt +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/src/digitalkin.egg-info/top_level.txt +0 -0
- {digitalkin-1.0.5.dev0 → digitalkin-1.0.5.dev3}/tests/test_exceptions.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: digitalkin
|
|
3
|
-
Version: 1.0.5.
|
|
3
|
+
Version: 1.0.5.dev3
|
|
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
|
|
@@ -453,7 +453,7 @@ Requires-Python: >=3.10
|
|
|
453
453
|
Description-Content-Type: text/markdown
|
|
454
454
|
License-File: LICENSE
|
|
455
455
|
Requires-Dist: ag-ui-protocol==0.1.21.dev1787220377
|
|
456
|
-
Requires-Dist: agentic-mesh-protocol==1.0.
|
|
456
|
+
Requires-Dist: agentic-mesh-protocol==1.0.2
|
|
457
457
|
Requires-Dist: agno<3,>=2.8.0
|
|
458
458
|
Requires-Dist: anyio>=4.13.0
|
|
459
459
|
Requires-Dist: grpcio-health-checking==1.82.1
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
"""Demo client for the Gateway gRPC service with per-endpoint testing.
|
|
3
3
|
|
|
4
4
|
Subcommands:
|
|
5
|
-
full Full pipeline: StartStream →
|
|
5
|
+
full Full pipeline: StartStream → ConsumeStream → SendSignal
|
|
6
6
|
start StartStream only (unary)
|
|
7
|
-
consume
|
|
8
|
-
|
|
7
|
+
consume ConsumeStream on existing task (requires --task-id)
|
|
8
|
+
produce StartStream + ProduceStream (act as Module A)
|
|
9
|
+
signal SendSignal on existing task (requires --task-id)
|
|
9
10
|
inspect Dump Redis keys for a task (no gRPC)
|
|
10
11
|
|
|
11
12
|
Usage:
|
|
@@ -13,7 +14,8 @@ Usage:
|
|
|
13
14
|
python client.py full --prompt "Test" --setup '{"uppercase": true, "repeat": 5}'
|
|
14
15
|
python client.py start --prompt "Hello"
|
|
15
16
|
python client.py consume --task-id <uuid>
|
|
16
|
-
python client.py
|
|
17
|
+
python client.py produce --task-id <uuid> --chunks 3
|
|
18
|
+
python client.py signal --task-id <uuid> --action cancel
|
|
17
19
|
python client.py inspect --task-id <uuid>
|
|
18
20
|
"""
|
|
19
21
|
|
|
@@ -32,7 +34,7 @@ import grpc
|
|
|
32
34
|
import redis.asyncio as aioredis
|
|
33
35
|
from google.protobuf import json_format, struct_pb2
|
|
34
36
|
|
|
35
|
-
from agentic_mesh_protocol.gateway.v1 import
|
|
37
|
+
from agentic_mesh_protocol.gateway.v1 import gateway_pb2, gateway_service_pb2_grpc
|
|
36
38
|
|
|
37
39
|
# ── ANSI colors ─────────────────────────────────────────────────────
|
|
38
40
|
|
|
@@ -289,18 +291,29 @@ def _print_diff_report(tracker: RedisTracker, task_id: str) -> None:
|
|
|
289
291
|
async def cmd_start(
|
|
290
292
|
stub: gateway_service_pb2_grpc.GatewayServiceStub,
|
|
291
293
|
task_id: str,
|
|
294
|
+
prompt: str,
|
|
295
|
+
setup: dict[str, Any] | None,
|
|
292
296
|
) -> bool:
|
|
293
297
|
"""StartStream — create a task session.
|
|
294
298
|
|
|
295
299
|
Returns:
|
|
296
300
|
True if accepted.
|
|
297
301
|
"""
|
|
302
|
+
input_struct = struct_pb2.Struct()
|
|
303
|
+
payload: dict[str, Any] = {
|
|
304
|
+
"root": {"protocol": "message", "text": prompt},
|
|
305
|
+
}
|
|
306
|
+
if setup:
|
|
307
|
+
payload["setup"] = setup
|
|
308
|
+
input_struct.update(payload)
|
|
309
|
+
|
|
298
310
|
t0 = time.monotonic()
|
|
299
311
|
resp = await stub.StartStream(
|
|
300
|
-
|
|
312
|
+
gateway_pb2.StartStreamRequest(
|
|
301
313
|
task_id=task_id,
|
|
302
|
-
|
|
303
|
-
|
|
314
|
+
input=input_struct,
|
|
315
|
+
setup_id="demo-setup",
|
|
316
|
+
mission_id="demo-mission",
|
|
304
317
|
),
|
|
305
318
|
)
|
|
306
319
|
elapsed = (time.monotonic() - t0) * 1000
|
|
@@ -314,58 +327,112 @@ async def cmd_start(
|
|
|
314
327
|
async def cmd_consume(
|
|
315
328
|
stub: gateway_service_pb2_grpc.GatewayServiceStub,
|
|
316
329
|
task_id: str,
|
|
317
|
-
prompt: str,
|
|
318
|
-
setup: dict[str, Any] | None,
|
|
319
330
|
verbose: bool,
|
|
320
331
|
) -> list[dict[str, Any]]:
|
|
321
|
-
"""
|
|
332
|
+
"""ConsumeStream — read module output from Redis.
|
|
322
333
|
|
|
323
334
|
Returns:
|
|
324
335
|
List of received items.
|
|
325
336
|
"""
|
|
326
337
|
received: list[dict[str, Any]] = []
|
|
327
|
-
query: dict[str, Any] = {"root": {"protocol": "message", "text": prompt}}
|
|
328
|
-
if setup:
|
|
329
|
-
query["setup"] = setup
|
|
330
|
-
query_struct = struct_pb2.Struct()
|
|
331
|
-
query_struct.update(query)
|
|
332
338
|
|
|
333
339
|
async def _requests() -> AsyncGenerator:
|
|
334
|
-
yield
|
|
340
|
+
yield gateway_pb2.ConsumeStreamRequest(
|
|
341
|
+
init=gateway_pb2.ConsumeStreamInit(task_id=task_id, from_seq=0),
|
|
342
|
+
)
|
|
335
343
|
|
|
336
344
|
t0 = time.monotonic()
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
received.append({"seq": resp.seq, "
|
|
346
|
-
print(f" {GREEN}
|
|
345
|
+
resp_stream = stub.ConsumeStream(_requests())
|
|
346
|
+
async for resp in resp_stream:
|
|
347
|
+
elapsed = (time.monotonic() - t0) * 1000
|
|
348
|
+
payload_type = resp.WhichOneof("payload")
|
|
349
|
+
|
|
350
|
+
if payload_type == "output":
|
|
351
|
+
data_dict = json_format.MessageToDict(resp.output.data)
|
|
352
|
+
text = data_dict.get("root", {}).get("text", data_dict.get("root", {}).get("protocol", ""))
|
|
353
|
+
received.append({"seq": resp.output.seq, "text": text})
|
|
354
|
+
print(f" {GREEN}seq={resp.output.seq:>2}{RESET} {text}") # noqa: T201
|
|
355
|
+
if verbose:
|
|
356
|
+
print(f" {DIM}{json.dumps(data_dict, ensure_ascii=False)}{RESET}") # noqa: T201
|
|
357
|
+
|
|
358
|
+
elif payload_type == "status":
|
|
359
|
+
state_name = gateway_pb2.StreamState.Name(resp.status.state)
|
|
360
|
+
received.append({"status": state_name})
|
|
361
|
+
color = GREEN if "COMPLETED" in state_name else YELLOW
|
|
362
|
+
print(f" {color}status: {state_name}{RESET} ({elapsed:.1f}ms total)") # noqa: T201
|
|
347
363
|
break
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
364
|
+
|
|
365
|
+
elif payload_type == "error":
|
|
366
|
+
received.append({"error": resp.error.message})
|
|
367
|
+
print(f" {RED}error: code={resp.error.code} msg={resp.error.message}{RESET}") # noqa: T201
|
|
368
|
+
break
|
|
369
|
+
|
|
370
|
+
elif payload_type == "heartbeat":
|
|
371
|
+
if verbose:
|
|
372
|
+
print(f" {DIM}heartbeat{RESET}") # noqa: T201
|
|
353
373
|
|
|
354
374
|
return received
|
|
355
375
|
|
|
356
376
|
|
|
377
|
+
async def cmd_produce(
|
|
378
|
+
stub: gateway_service_pb2_grpc.GatewayServiceStub,
|
|
379
|
+
task_id: str,
|
|
380
|
+
prompt: str,
|
|
381
|
+
num_chunks: int,
|
|
382
|
+
) -> int:
|
|
383
|
+
"""ProduceStream — act as Module A, push output chunks.
|
|
384
|
+
|
|
385
|
+
Returns:
|
|
386
|
+
Number of server responses.
|
|
387
|
+
"""
|
|
388
|
+
async def _requests() -> AsyncGenerator:
|
|
389
|
+
yield gateway_pb2.ProduceStreamRequest(
|
|
390
|
+
init=gateway_pb2.ProduceStreamInit(task_id=task_id),
|
|
391
|
+
)
|
|
392
|
+
for i in range(num_chunks):
|
|
393
|
+
data = struct_pb2.Struct()
|
|
394
|
+
data.update({
|
|
395
|
+
"root": {
|
|
396
|
+
"protocol": "message",
|
|
397
|
+
"text": f"[{i + 1}/{num_chunks}] {prompt}",
|
|
398
|
+
},
|
|
399
|
+
})
|
|
400
|
+
yield gateway_pb2.ProduceStreamRequest(
|
|
401
|
+
output=gateway_pb2.ProduceStreamOutput(task_id=task_id, data=data),
|
|
402
|
+
)
|
|
403
|
+
await asyncio.sleep(0.05)
|
|
404
|
+
|
|
405
|
+
t0 = time.monotonic()
|
|
406
|
+
resp_stream = stub.ProduceStream(_requests())
|
|
407
|
+
count = 0
|
|
408
|
+
async for resp in resp_stream:
|
|
409
|
+
count += 1
|
|
410
|
+
payload = resp.WhichOneof("payload")
|
|
411
|
+
print(f" response #{count}: {payload}") # noqa: T201
|
|
412
|
+
|
|
413
|
+
elapsed = (time.monotonic() - t0) * 1000
|
|
414
|
+
print(f" {DIM}stream closed ({count} responses, {elapsed:.1f}ms){RESET}") # noqa: T201
|
|
415
|
+
return count
|
|
416
|
+
|
|
417
|
+
|
|
357
418
|
async def cmd_signal(
|
|
358
419
|
stub: gateway_service_pb2_grpc.GatewayServiceStub,
|
|
359
420
|
task_id: str,
|
|
421
|
+
action: str,
|
|
360
422
|
) -> bool:
|
|
361
|
-
"""SendSignal —
|
|
423
|
+
"""SendSignal — send a control signal.
|
|
362
424
|
|
|
363
425
|
Returns:
|
|
364
426
|
True if accepted.
|
|
365
427
|
"""
|
|
428
|
+
action_enum = (
|
|
429
|
+
gateway_pb2.SIGNAL_ACTION_CANCEL if action == "cancel"
|
|
430
|
+
else gateway_pb2.SIGNAL_ACTION_PAUSE
|
|
431
|
+
)
|
|
432
|
+
|
|
366
433
|
t0 = time.monotonic()
|
|
367
434
|
resp = await stub.SendSignal(
|
|
368
|
-
|
|
435
|
+
gateway_pb2.ClientSignalRequest(task_id=task_id, action=action_enum),
|
|
369
436
|
)
|
|
370
437
|
elapsed = (time.monotonic() - t0) * 1000
|
|
371
438
|
|
|
@@ -380,7 +447,7 @@ async def cmd_signal(
|
|
|
380
447
|
|
|
381
448
|
|
|
382
449
|
async def run_full(args: argparse.Namespace) -> None:
|
|
383
|
-
"""Full pipeline: StartStream →
|
|
450
|
+
"""Full pipeline: StartStream → ConsumeStream → SendSignal."""
|
|
384
451
|
task_id = args.task_id or str(uuid.uuid4())
|
|
385
452
|
setup = json.loads(args.setup) if args.setup else None
|
|
386
453
|
tracker = RedisTracker(args.redis) if args.verbose else None
|
|
@@ -400,7 +467,7 @@ async def run_full(args: argparse.Namespace) -> None:
|
|
|
400
467
|
|
|
401
468
|
# 1. StartStream
|
|
402
469
|
print(f"\n{BOLD}[1] StartStream{RESET}") # noqa: T201
|
|
403
|
-
accepted = await cmd_start(stub, task_id)
|
|
470
|
+
accepted = await cmd_start(stub, task_id, args.prompt, setup)
|
|
404
471
|
if not accepted:
|
|
405
472
|
print(f" {RED}Server rejected the task — aborting.{RESET}") # noqa: T201
|
|
406
473
|
return
|
|
@@ -409,17 +476,18 @@ async def run_full(args: argparse.Namespace) -> None:
|
|
|
409
476
|
await asyncio.sleep(0.1)
|
|
410
477
|
await tracker.snapshot("StartStream", task_id)
|
|
411
478
|
|
|
412
|
-
# 2.
|
|
413
|
-
print(f"\n{BOLD}[2]
|
|
414
|
-
|
|
479
|
+
# 2. ConsumeStream — wait for module output
|
|
480
|
+
print(f"\n{BOLD}[2] ConsumeStream{RESET}") # noqa: T201
|
|
481
|
+
await asyncio.sleep(0.2) # let module start
|
|
482
|
+
received = await cmd_consume(stub, task_id, args.verbose)
|
|
415
483
|
|
|
416
484
|
if tracker:
|
|
417
485
|
await asyncio.sleep(0.1)
|
|
418
|
-
await tracker.snapshot("
|
|
486
|
+
await tracker.snapshot("ConsumeStream", task_id)
|
|
419
487
|
|
|
420
488
|
# 3. SendSignal
|
|
421
489
|
print(f"\n{BOLD}[3] SendSignal (cancel){RESET}") # noqa: T201
|
|
422
|
-
await cmd_signal(stub, task_id)
|
|
490
|
+
await cmd_signal(stub, task_id, "cancel")
|
|
423
491
|
|
|
424
492
|
if tracker:
|
|
425
493
|
await asyncio.sleep(0.1)
|
|
@@ -445,39 +513,61 @@ async def run_full(args: argparse.Namespace) -> None:
|
|
|
445
513
|
async def run_start(args: argparse.Namespace) -> None:
|
|
446
514
|
"""StartStream only."""
|
|
447
515
|
task_id = args.task_id or str(uuid.uuid4())
|
|
516
|
+
setup = json.loads(args.setup) if args.setup else None
|
|
448
517
|
|
|
449
518
|
print(f"\n{BOLD}[StartStream]{RESET} gateway={args.gateway} task_id={task_id}") # noqa: T201
|
|
450
519
|
|
|
451
520
|
async with grpc.aio.insecure_channel(args.gateway, options=GRPC_OPTIONS) as channel:
|
|
452
521
|
stub = gateway_service_pb2_grpc.GatewayServiceStub(channel)
|
|
453
|
-
await cmd_start(stub, task_id)
|
|
522
|
+
await cmd_start(stub, task_id, args.prompt, setup)
|
|
454
523
|
|
|
455
524
|
|
|
456
525
|
async def run_consume(args: argparse.Namespace) -> None:
|
|
457
|
-
"""
|
|
526
|
+
"""ConsumeStream on existing task."""
|
|
458
527
|
if not args.task_id:
|
|
459
528
|
print(f"{RED}--task-id is required for consume{RESET}") # noqa: T201
|
|
460
529
|
sys.exit(1)
|
|
461
530
|
|
|
531
|
+
print(f"\n{BOLD}[ConsumeStream]{RESET} gateway={args.gateway} task_id={args.task_id}") # noqa: T201
|
|
532
|
+
|
|
533
|
+
async with grpc.aio.insecure_channel(args.gateway, options=GRPC_OPTIONS) as channel:
|
|
534
|
+
stub = gateway_service_pb2_grpc.GatewayServiceStub(channel)
|
|
535
|
+
await cmd_consume(stub, args.task_id, args.verbose)
|
|
536
|
+
|
|
537
|
+
|
|
538
|
+
async def run_produce(args: argparse.Namespace) -> None:
|
|
539
|
+
"""StartStream + ProduceStream (act as Module A)."""
|
|
540
|
+
task_id = args.task_id or str(uuid.uuid4())
|
|
462
541
|
setup = json.loads(args.setup) if args.setup else None
|
|
463
|
-
|
|
542
|
+
|
|
543
|
+
print(f"\n{BOLD}[Produce]{RESET} gateway={args.gateway} task_id={task_id}") # noqa: T201
|
|
464
544
|
|
|
465
545
|
async with grpc.aio.insecure_channel(args.gateway, options=GRPC_OPTIONS) as channel:
|
|
466
546
|
stub = gateway_service_pb2_grpc.GatewayServiceStub(channel)
|
|
467
|
-
|
|
547
|
+
|
|
548
|
+
# StartStream first (registers the session)
|
|
549
|
+
print(f"\n {BOLD}StartStream{RESET}") # noqa: T201
|
|
550
|
+
accepted = await cmd_start(stub, task_id, args.prompt, setup)
|
|
551
|
+
if not accepted:
|
|
552
|
+
print(f" {RED}Rejected{RESET}") # noqa: T201
|
|
553
|
+
return
|
|
554
|
+
|
|
555
|
+
# ProduceStream (act as Module A)
|
|
556
|
+
print(f"\n {BOLD}ProduceStream ({args.chunks} chunks){RESET}") # noqa: T201
|
|
557
|
+
await cmd_produce(stub, task_id, args.prompt, args.chunks)
|
|
468
558
|
|
|
469
559
|
|
|
470
560
|
async def run_signal(args: argparse.Namespace) -> None:
|
|
471
|
-
"""SendSignal
|
|
561
|
+
"""SendSignal on existing task."""
|
|
472
562
|
if not args.task_id:
|
|
473
563
|
print(f"{RED}--task-id is required for signal{RESET}") # noqa: T201
|
|
474
564
|
sys.exit(1)
|
|
475
565
|
|
|
476
|
-
print(f"\n{BOLD}[SendSignal]{RESET} gateway={args.gateway} task_id={args.task_id}
|
|
566
|
+
print(f"\n{BOLD}[SendSignal]{RESET} gateway={args.gateway} task_id={args.task_id} action={args.action}") # noqa: T201
|
|
477
567
|
|
|
478
568
|
async with grpc.aio.insecure_channel(args.gateway, options=GRPC_OPTIONS) as channel:
|
|
479
569
|
stub = gateway_service_pb2_grpc.GatewayServiceStub(channel)
|
|
480
|
-
await cmd_signal(stub, args.task_id)
|
|
570
|
+
await cmd_signal(stub, args.task_id, args.action)
|
|
481
571
|
|
|
482
572
|
|
|
483
573
|
async def run_inspect(args: argparse.Namespace) -> None:
|
|
@@ -523,7 +613,8 @@ examples:
|
|
|
523
613
|
%(prog)s full --prompt "Test" --setup '{"uppercase": true, "repeat": 5}'
|
|
524
614
|
%(prog)s start --prompt "Hello"
|
|
525
615
|
%(prog)s consume --task-id <uuid>
|
|
526
|
-
%(prog)s
|
|
616
|
+
%(prog)s produce --chunks 5 --prompt "Manual"
|
|
617
|
+
%(prog)s signal --task-id <uuid> --action cancel
|
|
527
618
|
%(prog)s inspect --task-id <uuid>
|
|
528
619
|
""",
|
|
529
620
|
)
|
|
@@ -540,16 +631,21 @@ examples:
|
|
|
540
631
|
sub = p.add_subparsers(dest="command", help="Endpoint to test")
|
|
541
632
|
|
|
542
633
|
# full (default)
|
|
543
|
-
sub.add_parser("full", help="Full pipeline: StartStream ->
|
|
634
|
+
sub.add_parser("full", help="Full pipeline: StartStream -> ConsumeStream -> SendSignal")
|
|
544
635
|
|
|
545
636
|
# start
|
|
546
637
|
sub.add_parser("start", help="StartStream only (unary)")
|
|
547
638
|
|
|
548
639
|
# consume
|
|
549
|
-
sub.add_parser("consume", help="
|
|
640
|
+
sub.add_parser("consume", help="ConsumeStream on existing task (requires --task-id)")
|
|
641
|
+
|
|
642
|
+
# produce
|
|
643
|
+
sp_produce = sub.add_parser("produce", help="StartStream + ProduceStream (act as Module A)")
|
|
644
|
+
sp_produce.add_argument("--chunks", type=int, default=3, help="Number of chunks to produce (default: 3)")
|
|
550
645
|
|
|
551
646
|
# signal
|
|
552
|
-
sub.add_parser("signal", help="SendSignal
|
|
647
|
+
sp_signal = sub.add_parser("signal", help="SendSignal on existing task (requires --task-id)")
|
|
648
|
+
sp_signal.add_argument("--action", choices=["cancel", "pause"], default="cancel", help="Signal action (default: cancel)")
|
|
553
649
|
|
|
554
650
|
# inspect
|
|
555
651
|
sub.add_parser("inspect", help="Dump Redis keys for a task (no gRPC)")
|
|
@@ -566,10 +662,17 @@ async def main() -> None:
|
|
|
566
662
|
if not args.command:
|
|
567
663
|
args.command = "full"
|
|
568
664
|
|
|
665
|
+
# Set defaults for subcommand-specific args
|
|
666
|
+
if not hasattr(args, "chunks"):
|
|
667
|
+
args.chunks = 3
|
|
668
|
+
if not hasattr(args, "action"):
|
|
669
|
+
args.action = "cancel"
|
|
670
|
+
|
|
569
671
|
handlers = {
|
|
570
672
|
"full": run_full,
|
|
571
673
|
"start": run_start,
|
|
572
674
|
"consume": run_consume,
|
|
675
|
+
"produce": run_produce,
|
|
573
676
|
"signal": run_signal,
|
|
574
677
|
"inspect": run_inspect,
|
|
575
678
|
}
|
|
@@ -10,7 +10,8 @@ from pydantic import BaseModel, Field
|
|
|
10
10
|
from digitalkin.logger import logger
|
|
11
11
|
from digitalkin.models.module import ModuleStatus
|
|
12
12
|
from digitalkin.modules.archetype_module import ArchetypeModule
|
|
13
|
-
from digitalkin.services.filesystem
|
|
13
|
+
from digitalkin.models.services.filesystem import FileType
|
|
14
|
+
from digitalkin.services.filesystem import FileFilter, UploadFileData
|
|
14
15
|
from digitalkin.services.services_config import ServicesConfig
|
|
15
16
|
from digitalkin.services.services_models import ServicesMode
|
|
16
17
|
|
|
@@ -118,9 +119,9 @@ class ExampleModule(ArchetypeModule[ExampleInput, ExampleOutput, ExampleSetup, E
|
|
|
118
119
|
file = UploadFileData(
|
|
119
120
|
content=b"%s\n%s" % (processed_message.encode(), str(processed_number).encode()),
|
|
120
121
|
name="example_output.txt",
|
|
121
|
-
|
|
122
|
+
type=FileType.DOCUMENT,
|
|
122
123
|
content_type="text/plain",
|
|
123
|
-
metadata={"
|
|
124
|
+
metadata={"sdk_created": True},
|
|
124
125
|
replace_if_exists=True,
|
|
125
126
|
)
|
|
126
127
|
|
|
@@ -176,10 +177,10 @@ async def test_module() -> None:
|
|
|
176
177
|
# Check the storage
|
|
177
178
|
if module.status == ModuleStatus.STOPPED:
|
|
178
179
|
files, _nb_results = await module.filesystem.get_files(
|
|
179
|
-
filters=FileFilter(
|
|
180
|
+
filters=FileFilter(names=["example_output.txt"]),
|
|
180
181
|
)
|
|
181
182
|
for file in files:
|
|
182
|
-
await module.filesystem.update_file(file.id,
|
|
183
|
+
await module.filesystem.update_file(file.id, type=FileType.OTHER)
|
|
183
184
|
# module.filesystem.delete_files(filters=FileFilter(name="example_output.txt", context="test-mission-123"), permanent=True)
|
|
184
185
|
|
|
185
186
|
logger.info("Retrieved file: %s with ID: %s", file.name, file.id)
|
|
@@ -188,7 +189,7 @@ async def test_module() -> None:
|
|
|
188
189
|
if file_record:
|
|
189
190
|
logger.info("File ID: %s", file_record.id)
|
|
190
191
|
logger.info("File name: %s", file_record.name)
|
|
191
|
-
logger.info("File type: %s", file_record.
|
|
192
|
+
logger.info("File type: %s", file_record.type)
|
|
192
193
|
logger.info("File status: %s", file_record.status)
|
|
193
194
|
logger.info("File content: %s", file_record.content.decode())
|
|
194
195
|
except Exception:
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
# which is how a nested run's output is attributed to its author. Pinned exactly
|
|
32
32
|
# because it is a dated prerelease; move to >=0.1.21 once that ships stable.
|
|
33
33
|
"ag-ui-protocol==0.1.21.dev1787220377",
|
|
34
|
-
"agentic-mesh-protocol==1.0.
|
|
34
|
+
"agentic-mesh-protocol==1.0.2",
|
|
35
35
|
"agno>=2.8.0,<3",
|
|
36
36
|
"anyio>=4.13.0",
|
|
37
37
|
"grpcio-health-checking==1.82.1",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"pydantic>=2.12.4",
|
|
42
42
|
"redis[hiredis]>=7.4.0,<9",
|
|
43
43
|
]
|
|
44
|
-
version = "1.0.5.
|
|
44
|
+
version = "1.0.5.dev3"
|
|
45
45
|
|
|
46
46
|
[project.optional-dependencies]
|
|
47
47
|
agno = [ "agno>=2.6" ]
|
|
@@ -208,15 +208,15 @@ version = "1.0.5.dev0"
|
|
|
208
208
|
]
|
|
209
209
|
|
|
210
210
|
ignore = [
|
|
211
|
-
"
|
|
212
|
-
"
|
|
213
|
-
"
|
|
214
|
-
"
|
|
215
|
-
"
|
|
216
|
-
"
|
|
217
|
-
"
|
|
218
|
-
"
|
|
219
|
-
"
|
|
211
|
+
"any-type", # Allow typing.Any — gRPC stubs, callbacks, and dynamic APIs require it
|
|
212
|
+
"missing-trailing-comma", # Disable because of formatter incompatibility
|
|
213
|
+
"docstring-extraneous-exception", # Allow extraneous-exception in docstring
|
|
214
|
+
"unused-import", # Allow unused imports — used for availability checks
|
|
215
|
+
"invalid-function-name", # Allow PascalCase methods — gRPC servicer convention
|
|
216
|
+
"import-outside-top-level", # Allow lazy imports — needed to break circular dependencies
|
|
217
|
+
"bad-dunder-method-name", # Allow __get_pydantic_core_schema__ — Pydantic dunder hook
|
|
218
|
+
"hardcoded-password-string", # Hardcoded-password
|
|
219
|
+
"suspicious-pickle-import", # Allow pickle import
|
|
220
220
|
]
|
|
221
221
|
|
|
222
222
|
fixable = [ "ALL" ]
|
|
@@ -226,40 +226,40 @@ version = "1.0.5.dev0"
|
|
|
226
226
|
|
|
227
227
|
[tool.ruff.lint.per-file-ignores]
|
|
228
228
|
"tests/**/*.py" = [
|
|
229
|
-
"
|
|
230
|
-
"
|
|
231
|
-
"
|
|
232
|
-
"
|
|
233
|
-
"
|
|
234
|
-
"
|
|
235
|
-
"
|
|
236
|
-
"
|
|
237
|
-
"
|
|
238
|
-
"
|
|
239
|
-
"
|
|
240
|
-
"
|
|
241
|
-
"
|
|
242
|
-
"
|
|
243
|
-
"
|
|
244
|
-
"
|
|
245
|
-
"
|
|
246
|
-
"
|
|
247
|
-
"
|
|
248
|
-
"
|
|
249
|
-
"
|
|
250
|
-
"
|
|
251
|
-
"
|
|
252
|
-
"
|
|
253
|
-
"
|
|
254
|
-
"
|
|
255
|
-
"
|
|
256
|
-
"
|
|
257
|
-
"
|
|
258
|
-
"
|
|
259
|
-
"
|
|
260
|
-
"
|
|
261
|
-
"
|
|
262
|
-
"
|
|
229
|
+
"missing-type-function-argument",
|
|
230
|
+
"missing-type-args",
|
|
231
|
+
"missing-type-kwargs",
|
|
232
|
+
"missing-return-type-undocumented-public-function",
|
|
233
|
+
"any-type",
|
|
234
|
+
"unused-function-argument",
|
|
235
|
+
"unused-method-argument",
|
|
236
|
+
"complex-structure",
|
|
237
|
+
"undocumented-public-module",
|
|
238
|
+
"undocumented-public-class",
|
|
239
|
+
"undocumented-public-method",
|
|
240
|
+
"undocumented-public-function",
|
|
241
|
+
"undocumented-public-init",
|
|
242
|
+
"undocumented-param",
|
|
243
|
+
"docstring-missing-returns",
|
|
244
|
+
"docstring-missing-exception",
|
|
245
|
+
"line-too-long",
|
|
246
|
+
"commented-out-code",
|
|
247
|
+
"boolean-type-hint-positional-argument",
|
|
248
|
+
"boolean-default-value-positional-argument",
|
|
249
|
+
"logging-f-string",
|
|
250
|
+
"invalid-function-name",
|
|
251
|
+
"try-except-in-loop",
|
|
252
|
+
"import-private-name",
|
|
253
|
+
"too-many-return-statements",
|
|
254
|
+
"too-many-branches",
|
|
255
|
+
"too-many-locals",
|
|
256
|
+
"too-many-statements",
|
|
257
|
+
"too-many-nested-blocks",
|
|
258
|
+
"magic-value-comparison",
|
|
259
|
+
"no-self-use",
|
|
260
|
+
"assert",
|
|
261
|
+
"private-member-access",
|
|
262
|
+
"raise-vanilla-class",
|
|
263
263
|
]
|
|
264
264
|
|
|
265
265
|
[tool.ruff.lint.pylint]
|