digitalkin 1.0.5.dev5__tar.gz → 1.0.5.dev7__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.dev5 → digitalkin-1.0.5.dev7}/PKG-INFO +92 -145
- digitalkin-1.0.5.dev7/README.md +133 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/triggers/message_trigger.py +3 -3
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/modules/dynamic_setup_module.py +4 -1
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/echo_module.py +4 -1
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/server.py +3 -4
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/triggers/message_trigger.py +3 -3
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/pyproject.toml +7 -7
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/__version__.py +1 -1
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/__init__.py +11 -1
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/agno_adapter.py +113 -17
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/hitl.py +123 -86
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/models.py +96 -2
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/module_toolkit.py +69 -9
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/base.py +35 -4
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/action.py +27 -2
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/profiling/task_profiler.py +2 -2
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/module_runner.py +24 -2
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/redis_client.py +1 -1
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/redis_idempotency.py +6 -4
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/task_executor.py +4 -4
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/task_session.py +5 -5
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/gateway_servicer.py +86 -27
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/interceptors/validation.py +18 -3
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/module_server.py +7 -3
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/agui_mixin.py +165 -23
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/events/agent_events.py +3 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/ag_ui.py +6 -48
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/setup_types.py +1 -1
- digitalkin-1.0.5.dev7/src/digitalkin/models/settings/agui.py +33 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/grpc.py +7 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/_base_module.py +19 -12
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/default_setup.py +4 -4
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/setup_strategy.py +2 -2
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/default_storage.py +6 -8
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/storage_strategy.py +3 -3
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/dynamic_schema.py +1 -1
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/PKG-INFO +92 -145
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/SOURCES.txt +1 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/requires.txt +4 -3
- digitalkin-1.0.5.dev5/README.md +0 -187
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/LICENSE +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/mock/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/mock/mock_pb2.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/server_async_insecure.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/server_async_secure.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/server_sync_insecure.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/base_server/server_sync_secure.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/echo_module.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/models/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/models/input.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/models/output.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/models/secret.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/models/setup.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/server.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/triggers/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/modules/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/modules/archetype_with_tools_module.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/modules/cpu_intensive_module.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/modules/minimal_llm_module.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/modules/text_transform_module.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/monitoring/tests/test_metrics.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/client.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/input.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/output.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/secret.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/models/setup.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/triggers/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/services/filesystem_module.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/services/storage_module.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/setup.cfg +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/agui_tools.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/chat_history.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/defaults.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/base.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/kins/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/kins/action.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/kins/kit.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/loader/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/loader/action.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/loader/kit.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/services/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/services/action.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/services/kit.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/tools/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/tools/action.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/registry/tools/kit.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/community/agno/toolkits/user_profile.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/common/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/common/factories.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/exceptions.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/job_manager/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/profiling/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/profiling/step_timer.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/resilience/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/resilience/bulkhead.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/resilience/task_supervisor.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/proto_streams.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/redis/redis_signal.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/exceptions.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/_base_server.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/exceptions.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/interceptors/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/interceptors/permission.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/interceptors/request_ids.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/m2m_call_registry.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/stream_registry.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/stream_session.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/circuit_breaker.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/grpc_servers/utils/validators.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/logger.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/base_mixin.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/cost_mixin.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/file_history_mixin.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/logger_mixin.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/mixins/storage_mixin.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/core/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/core/job_manager_models.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/core/redis.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/core/task_monitor.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/events/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/circuit_breaker.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/m2m.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/models.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/stream_error_codes.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/grpc_servers/types.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/base_types.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/knowledge_files.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/loaded_tools.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/module.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/module_context.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/module_types.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/request_metadata.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/select_schema.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/tool_cache.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/tool_reference.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/module/utility.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/cost.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/filesystem.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/registry.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/services.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/services/storage.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/certificate.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/channel.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/circuit_breaker.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/client.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/client/grpc.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/gateway.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/log.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/module.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/profiling.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/queue.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/redis.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/registry.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/resilience.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/channel.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/server.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/server/servicer.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/task_manager.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/utils/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/settings/utils/channel.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/utils/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/models/utils/dynamic_schema.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/archetype_module.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/tool_module.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/trigger_handler.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/triggers/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/py.typed +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/base_strategy.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/communication_strategy.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/default_communication.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/exceptions.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/communication/grpc_communication.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/cost_strategy.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/default_cost.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/exceptions.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/cost/grpc_cost.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/exceptions.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/identity/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/identity/default_identity.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/identity/identity_strategy.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/default_registry.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/exceptions.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/grpc_registry.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/registry/registry_strategy.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/default_secret.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/exceptions.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/grpc_secret.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/secret/secret_strategy.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/services_config.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/services_models.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/exceptions.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/setup/grpc_setup.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/exceptions.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/storage/grpc_storage.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/default_task_manager.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/exceptions.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/redis_task_manager.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/exceptions.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/__init__.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/arg_parser.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/conditional_schema.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/development_mode_action.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/env_manager.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/env_template.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/exceptions.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/json_structure.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/llm_ready_schema.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/package_discover.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/proto_utils.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/schema_splitter.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin/utils/setup_content_validator.py +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/dependency_links.txt +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/src/digitalkin.egg-info/top_level.txt +0 -0
- {digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/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.dev7
|
|
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
|
|
@@ -452,18 +452,19 @@ Classifier: Topic :: Software Development :: Libraries
|
|
|
452
452
|
Requires-Python: >=3.10
|
|
453
453
|
Description-Content-Type: text/markdown
|
|
454
454
|
License-File: LICENSE
|
|
455
|
-
Requires-Dist: ag-ui-protocol==
|
|
455
|
+
Requires-Dist: ag-ui-protocol==1.0.0
|
|
456
456
|
Requires-Dist: agentic-mesh-protocol==1.2.0
|
|
457
|
-
Requires-Dist: agno<3,>=2.8.0
|
|
458
457
|
Requires-Dist: anyio>=4.13.0
|
|
458
|
+
Requires-Dist: cel-python>=0.5
|
|
459
459
|
Requires-Dist: grpcio-health-checking==1.82.1
|
|
460
460
|
Requires-Dist: grpcio-reflection==1.82.1
|
|
461
461
|
Requires-Dist: grpcio-status==1.82.1
|
|
462
|
+
Requires-Dist: protovalidate<2,>=1.2.0
|
|
462
463
|
Requires-Dist: pydantic-settings>=2.14.1
|
|
463
464
|
Requires-Dist: pydantic>=2.12.4
|
|
464
465
|
Requires-Dist: redis[hiredis]<9,>=7.4.0
|
|
465
466
|
Provides-Extra: agno
|
|
466
|
-
Requires-Dist: agno
|
|
467
|
+
Requires-Dist: agno<4,>=3.1.1; extra == "agno"
|
|
467
468
|
Provides-Extra: performance
|
|
468
469
|
Requires-Dist: uvloop>=0.21; extra == "performance"
|
|
469
470
|
Provides-Extra: profiling
|
|
@@ -472,190 +473,136 @@ Requires-Dist: viztracer>=1.1.1; extra == "profiling"
|
|
|
472
473
|
Requires-Dist: yappi>=1.7.6; extra == "profiling"
|
|
473
474
|
Dynamic: license-file
|
|
474
475
|
|
|
476
|
+
<!-- --8<-- [start:intro] -->
|
|
475
477
|
# DigitalKin Python SDK
|
|
476
478
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
[](https://github.com/DigitalKin-ai/digitalkin/blob/main/LICENSE)
|
|
479
|
+
`digitalkin` is the Python SDK for writing modules (tools and archetypes) of the DigitalKin agentic mesh.
|
|
480
|
+
You declare typed Pydantic contracts and trigger handlers; the SDK serves them over gRPC.
|
|
481
|
+
Each module process embeds a gateway that persists outputs to Redis Streams and pushes them to the consumer.
|
|
481
482
|
|
|
482
|
-
|
|
483
|
-
DigitalKin agentic mesh. Create custom **Tools** and **Archetypes** that
|
|
484
|
-
communicate over gRPC, register with a service mesh, and scale independently.
|
|
483
|
+
**What it is not**
|
|
485
484
|
|
|
486
|
-
|
|
485
|
+
- Not a standalone gateway process: the gateway runs inside each module server.
|
|
486
|
+
- Not a registry server: modules register with an external registry in remote mode.
|
|
487
|
+
- Not a client library: the consumer calls `StartStream` and hosts the dial-back `Stream` endpoint itself.
|
|
488
|
+
- Not the wire contract: protos come from the `agentic-mesh-protocol` package.
|
|
487
489
|
|
|
488
|
-
|
|
489
|
-
`grpcio` with full async support
|
|
490
|
-
- **Typed module contracts** — Pydantic models for Input, Output, Setup, and
|
|
491
|
-
Secret schemas with protocol-based trigger dispatch
|
|
492
|
-
- **Module-to-module communication** — tools and archetypes discover each other
|
|
493
|
-
via the registry and exchange requests over gRPC
|
|
494
|
-
- **Tool resolution** — archetypes dynamically resolve and invoke tool modules
|
|
495
|
-
at runtime
|
|
496
|
-
- **Admission queue & backpressure** — built-in request admission with
|
|
497
|
-
configurable concurrency limits
|
|
498
|
-
- **Healthcheck protocols** — automatic ping, services, and status healthcheck
|
|
499
|
-
triggers registered on every module
|
|
500
|
-
- **Profiling** — optional `[profiling]` extra with asyncio-inspector,
|
|
501
|
-
pyinstrument, viztracer, and yappi
|
|
502
|
-
- **Batched history writes** — efficient storage writes for conversation history
|
|
503
|
-
- **Redis Streams** — durable message passing, crash recovery, and reconnection
|
|
490
|
+
## Install
|
|
504
491
|
|
|
505
|
-
|
|
492
|
+
`uv add digitalkin` or `pip install digitalkin` (Python 3.10+); add `[agno]` for the Agno integration.
|
|
493
|
+
Extras: `agno` (Agno integration), `performance` (uvloop), `profiling`.
|
|
506
494
|
|
|
507
|
-
|
|
508
|
-
# With uv (recommended)
|
|
509
|
-
uv add digitalkin
|
|
510
|
-
|
|
511
|
-
# With pip
|
|
512
|
-
pip install digitalkin
|
|
513
|
-
```
|
|
514
|
-
|
|
515
|
-
**Optional extras:**
|
|
516
|
-
|
|
517
|
-
```bash
|
|
518
|
-
# Async profiling tools
|
|
519
|
-
uv add "digitalkin[profiling]"
|
|
520
|
-
|
|
521
|
-
# uvloop for faster event loop
|
|
522
|
-
uv add "digitalkin[performance]"
|
|
523
|
-
```
|
|
495
|
+
## Quick start
|
|
524
496
|
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
### 1. Define your models
|
|
497
|
+
Files: `echo_module.py`, `server.py`, `triggers/__init__.py`, `triggers/echo_trigger.py` (discovery imports `*_trigger.py`).
|
|
528
498
|
|
|
529
499
|
```python
|
|
500
|
+
# echo_module.py
|
|
501
|
+
from typing import Any, ClassVar, Literal
|
|
530
502
|
from pydantic import BaseModel
|
|
531
|
-
from digitalkin
|
|
532
|
-
|
|
503
|
+
from digitalkin import ModuleContext, ToolModule
|
|
504
|
+
from digitalkin.models.module import DataModel, DataTrigger, SetupModel
|
|
505
|
+
from digitalkin.utils.package_discover import ModuleDiscoverer
|
|
533
506
|
|
|
534
|
-
class
|
|
535
|
-
protocol:
|
|
536
|
-
|
|
507
|
+
class EchoIn(DataTrigger):
|
|
508
|
+
protocol: Literal["message"] = "message"
|
|
509
|
+
text: str
|
|
537
510
|
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
root: MessageInput
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
class MessageOutput(DataTrigger):
|
|
544
|
-
protocol: str = "message"
|
|
511
|
+
class EchoOut(DataTrigger):
|
|
512
|
+
protocol: Literal["message"] = "message"
|
|
545
513
|
reply: str
|
|
546
514
|
|
|
515
|
+
class EchoInput(DataModel[EchoIn]):
|
|
516
|
+
root: EchoIn
|
|
547
517
|
|
|
548
|
-
class
|
|
549
|
-
root:
|
|
550
|
-
```
|
|
551
|
-
|
|
552
|
-
### 2. Create a module and trigger
|
|
518
|
+
class EchoOutput(DataModel[EchoOut]):
|
|
519
|
+
root: EchoOut
|
|
553
520
|
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
from digitalkin.models.module.setup_types import SetupModel
|
|
521
|
+
class EchoSetup(SetupModel):
|
|
522
|
+
prefix: str = "echo: "
|
|
557
523
|
|
|
524
|
+
class EchoModule(ToolModule[EchoInput, EchoOutput, EchoSetup, BaseModel]):
|
|
525
|
+
name = "EchoModule"
|
|
526
|
+
description = "Echoes the input text."
|
|
527
|
+
input_format = EchoInput
|
|
528
|
+
output_format = EchoOutput
|
|
529
|
+
setup_format = EchoSetup
|
|
530
|
+
secret_format = BaseModel # no secrets
|
|
531
|
+
metadata: ClassVar[dict[str, Any]] = {"module_id": "modules:echo", "version": "0.1.0"}
|
|
532
|
+
services_config_params: ClassVar[dict[str, Any]] = {"storage": {"config": {}}, "cost": {"config": {}}}
|
|
533
|
+
triggers_discoverer = ModuleDiscoverer(packages=["triggers"])
|
|
558
534
|
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
pass
|
|
535
|
+
async def initialize(self, context: ModuleContext, setup_data: EchoSetup) -> None:
|
|
536
|
+
pass # open clients, build agents
|
|
562
537
|
|
|
563
|
-
async def cleanup(self
|
|
538
|
+
async def cleanup(self) -> None:
|
|
564
539
|
pass
|
|
540
|
+
```
|
|
565
541
|
|
|
542
|
+
```python
|
|
543
|
+
# triggers/echo_trigger.py
|
|
544
|
+
from digitalkin import ModuleContext, TriggerHandler
|
|
545
|
+
from echo_module import EchoIn, EchoModule, EchoOut, EchoOutput, EchoSetup
|
|
566
546
|
|
|
567
|
-
@
|
|
568
|
-
class
|
|
547
|
+
@EchoModule.register
|
|
548
|
+
class EchoTrigger(TriggerHandler):
|
|
569
549
|
protocol = "message"
|
|
570
|
-
input_format =
|
|
571
|
-
output_format =
|
|
572
|
-
|
|
573
|
-
def __init__(self, context: ModuleContext) -> None:
|
|
574
|
-
super().__init__(context)
|
|
550
|
+
input_format = EchoIn
|
|
551
|
+
output_format = EchoOut
|
|
575
552
|
|
|
576
|
-
async def handle(
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
setup_data: SetupModel,
|
|
580
|
-
context: ModuleContext,
|
|
581
|
-
) -> None:
|
|
582
|
-
output = OutputModel(root=MessageOutput(reply=f"Echo: {input_data.root.content}"))
|
|
583
|
-
await self.send_message(context, output)
|
|
553
|
+
async def handle(self, input_data: EchoIn, setup_data: EchoSetup, context: ModuleContext) -> None:
|
|
554
|
+
reply = EchoOut(reply=setup_data.prefix + input_data.text)
|
|
555
|
+
await context.callbacks.send_message(EchoOutput(root=reply))
|
|
584
556
|
```
|
|
585
557
|
|
|
586
|
-
### 3. Run the server
|
|
587
|
-
|
|
588
558
|
```python
|
|
559
|
+
# server.py
|
|
589
560
|
import asyncio
|
|
590
561
|
from digitalkin.grpc_servers.module_server import ModuleServer
|
|
562
|
+
from echo_module import EchoModule
|
|
591
563
|
|
|
592
564
|
async def main() -> None:
|
|
593
|
-
server = ModuleServer(
|
|
565
|
+
server = ModuleServer(EchoModule)
|
|
594
566
|
await server.start_async()
|
|
595
|
-
|
|
567
|
+
try:
|
|
568
|
+
await server.await_termination()
|
|
569
|
+
finally:
|
|
570
|
+
await server.stop_async()
|
|
596
571
|
|
|
597
572
|
asyncio.run(main())
|
|
598
573
|
```
|
|
599
574
|
|
|
600
|
-
## Redis Gateway
|
|
601
|
-
|
|
602
|
-
The embedded gateway enables real-time bidirectional communication between
|
|
603
|
-
modules via Redis Streams, with crash recovery and horizontal scaling.
|
|
604
|
-
|
|
605
|
-
- **Durable Streaming**: Output persisted to Redis Streams — reconnection via `from_seq`.
|
|
606
|
-
- **Zero-Copy Proto**: Binary proto serialization to Redis — no JSON intermediary.
|
|
607
|
-
- **Horizontal Scaling**: Each module instance embeds its own gateway. Scale by adding replicas behind a load balancer.
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
## Development
|
|
611
|
-
|
|
612
|
-
### Prerequisites
|
|
613
|
-
|
|
614
|
-
- Python 3.10+
|
|
615
|
-
- [uv](https://astral.sh/uv) — modern Python package management
|
|
616
|
-
- [Task](https://taskfile.dev/) — task runner
|
|
617
|
-
|
|
618
|
-
### Setup
|
|
619
|
-
|
|
620
575
|
```bash
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
task setup-dev
|
|
625
|
-
source .venv/bin/activate
|
|
576
|
+
docker compose -f examples/redis_demo/docker-compose.yml up -d # Redis on localhost:6379
|
|
577
|
+
SERVICE_MODE=local DIGITALKIN_REDIS_URL=redis://localhost:6379/0 python server.py
|
|
626
578
|
```
|
|
627
579
|
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
task linter # Format + lint (ruff) + type check (mypy)
|
|
632
|
-
task check # Linter + mypy + tests
|
|
633
|
-
task run-tests # Run pytest via Docker
|
|
634
|
-
task build-package # Build distribution
|
|
635
|
-
task bump-version -- patch|minor|major
|
|
580
|
+
The server listens on `SERVER_CHANNEL_HOST:SERVER_CHANNEL_PORT` (default `[::]:50055`).
|
|
581
|
+
`SERVICE_MODE=local` (or `-d LOCAL`) uses in-process services; remote mode (default) needs the variables in `.env.minimum`.
|
|
582
|
+
Consumers drive the module with the gateway RPCs described in the gateway protocol page.
|
|
636
583
|
|
|
637
|
-
|
|
638
|
-
task docs-build # Build docs
|
|
639
|
-
|
|
640
|
-
task generate-certificates # Generate mTLS certs for gRPC
|
|
641
|
-
task clean # Remove build artifacts + __pycache__
|
|
642
|
-
task clean-all # Above + remove .venv
|
|
643
|
-
```
|
|
584
|
+
<!-- --8<-- [end:intro] -->
|
|
644
585
|
|
|
645
|
-
|
|
586
|
+
## Documentation
|
|
646
587
|
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
588
|
+
| Topic | Page |
|
|
589
|
+
| --- | --- |
|
|
590
|
+
| Architecture, data and signal flow | [docs/architecture.md](docs/architecture.md) |
|
|
591
|
+
| Writing modules | [docs/module_authoring.md](docs/module_authoring.md) |
|
|
592
|
+
| Wire contracts | [docs/gateway_protocol.md](docs/gateway_protocol.md), [docs/agui_events.md](docs/agui_events.md) (AG-UI) |
|
|
593
|
+
| Deploy and tune | [docs/operations.md](docs/operations.md) |
|
|
594
|
+
| Environment variables | [docs/environment_variables.md](docs/environment_variables.md) |
|
|
595
|
+
| Testing | [docs/testing.md](docs/testing.md) |
|
|
596
|
+
| Changelog | [docs/changelog/index.md](docs/changelog/index.md) |
|
|
597
|
+
| API reference | [docs/api/api.md](docs/api/api.md) |
|
|
652
598
|
|
|
653
|
-
##
|
|
654
|
-
|
|
655
|
-
This project is licensed under the terms specified in the LICENSE file.
|
|
599
|
+
## Development
|
|
656
600
|
|
|
657
|
-
|
|
601
|
+
```bash
|
|
602
|
+
task setup-dev # venv, dev/docs/tests deps, pre-commit hooks
|
|
603
|
+
task check # ruff format + lint, mypy, tests
|
|
604
|
+
task run-tests # full suite in docker compose (needs Redis)
|
|
605
|
+
task docs-serve # mkdocs serve
|
|
606
|
+
```
|
|
658
607
|
|
|
659
|
-
|
|
660
|
-
report issues on our
|
|
661
|
-
[Issues page](https://github.com/DigitalKin-ai/digitalkin/issues).
|
|
608
|
+
License: [CC BY-NC-SA 4.0](LICENSE).
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
<!-- --8<-- [start:intro] -->
|
|
2
|
+
# DigitalKin Python SDK
|
|
3
|
+
|
|
4
|
+
`digitalkin` is the Python SDK for writing modules (tools and archetypes) of the DigitalKin agentic mesh.
|
|
5
|
+
You declare typed Pydantic contracts and trigger handlers; the SDK serves them over gRPC.
|
|
6
|
+
Each module process embeds a gateway that persists outputs to Redis Streams and pushes them to the consumer.
|
|
7
|
+
|
|
8
|
+
**What it is not**
|
|
9
|
+
|
|
10
|
+
- Not a standalone gateway process: the gateway runs inside each module server.
|
|
11
|
+
- Not a registry server: modules register with an external registry in remote mode.
|
|
12
|
+
- Not a client library: the consumer calls `StartStream` and hosts the dial-back `Stream` endpoint itself.
|
|
13
|
+
- Not the wire contract: protos come from the `agentic-mesh-protocol` package.
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
`uv add digitalkin` or `pip install digitalkin` (Python 3.10+); add `[agno]` for the Agno integration.
|
|
18
|
+
Extras: `agno` (Agno integration), `performance` (uvloop), `profiling`.
|
|
19
|
+
|
|
20
|
+
## Quick start
|
|
21
|
+
|
|
22
|
+
Files: `echo_module.py`, `server.py`, `triggers/__init__.py`, `triggers/echo_trigger.py` (discovery imports `*_trigger.py`).
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
# echo_module.py
|
|
26
|
+
from typing import Any, ClassVar, Literal
|
|
27
|
+
from pydantic import BaseModel
|
|
28
|
+
from digitalkin import ModuleContext, ToolModule
|
|
29
|
+
from digitalkin.models.module import DataModel, DataTrigger, SetupModel
|
|
30
|
+
from digitalkin.utils.package_discover import ModuleDiscoverer
|
|
31
|
+
|
|
32
|
+
class EchoIn(DataTrigger):
|
|
33
|
+
protocol: Literal["message"] = "message"
|
|
34
|
+
text: str
|
|
35
|
+
|
|
36
|
+
class EchoOut(DataTrigger):
|
|
37
|
+
protocol: Literal["message"] = "message"
|
|
38
|
+
reply: str
|
|
39
|
+
|
|
40
|
+
class EchoInput(DataModel[EchoIn]):
|
|
41
|
+
root: EchoIn
|
|
42
|
+
|
|
43
|
+
class EchoOutput(DataModel[EchoOut]):
|
|
44
|
+
root: EchoOut
|
|
45
|
+
|
|
46
|
+
class EchoSetup(SetupModel):
|
|
47
|
+
prefix: str = "echo: "
|
|
48
|
+
|
|
49
|
+
class EchoModule(ToolModule[EchoInput, EchoOutput, EchoSetup, BaseModel]):
|
|
50
|
+
name = "EchoModule"
|
|
51
|
+
description = "Echoes the input text."
|
|
52
|
+
input_format = EchoInput
|
|
53
|
+
output_format = EchoOutput
|
|
54
|
+
setup_format = EchoSetup
|
|
55
|
+
secret_format = BaseModel # no secrets
|
|
56
|
+
metadata: ClassVar[dict[str, Any]] = {"module_id": "modules:echo", "version": "0.1.0"}
|
|
57
|
+
services_config_params: ClassVar[dict[str, Any]] = {"storage": {"config": {}}, "cost": {"config": {}}}
|
|
58
|
+
triggers_discoverer = ModuleDiscoverer(packages=["triggers"])
|
|
59
|
+
|
|
60
|
+
async def initialize(self, context: ModuleContext, setup_data: EchoSetup) -> None:
|
|
61
|
+
pass # open clients, build agents
|
|
62
|
+
|
|
63
|
+
async def cleanup(self) -> None:
|
|
64
|
+
pass
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
# triggers/echo_trigger.py
|
|
69
|
+
from digitalkin import ModuleContext, TriggerHandler
|
|
70
|
+
from echo_module import EchoIn, EchoModule, EchoOut, EchoOutput, EchoSetup
|
|
71
|
+
|
|
72
|
+
@EchoModule.register
|
|
73
|
+
class EchoTrigger(TriggerHandler):
|
|
74
|
+
protocol = "message"
|
|
75
|
+
input_format = EchoIn
|
|
76
|
+
output_format = EchoOut
|
|
77
|
+
|
|
78
|
+
async def handle(self, input_data: EchoIn, setup_data: EchoSetup, context: ModuleContext) -> None:
|
|
79
|
+
reply = EchoOut(reply=setup_data.prefix + input_data.text)
|
|
80
|
+
await context.callbacks.send_message(EchoOutput(root=reply))
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
# server.py
|
|
85
|
+
import asyncio
|
|
86
|
+
from digitalkin.grpc_servers.module_server import ModuleServer
|
|
87
|
+
from echo_module import EchoModule
|
|
88
|
+
|
|
89
|
+
async def main() -> None:
|
|
90
|
+
server = ModuleServer(EchoModule)
|
|
91
|
+
await server.start_async()
|
|
92
|
+
try:
|
|
93
|
+
await server.await_termination()
|
|
94
|
+
finally:
|
|
95
|
+
await server.stop_async()
|
|
96
|
+
|
|
97
|
+
asyncio.run(main())
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
docker compose -f examples/redis_demo/docker-compose.yml up -d # Redis on localhost:6379
|
|
102
|
+
SERVICE_MODE=local DIGITALKIN_REDIS_URL=redis://localhost:6379/0 python server.py
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
The server listens on `SERVER_CHANNEL_HOST:SERVER_CHANNEL_PORT` (default `[::]:50055`).
|
|
106
|
+
`SERVICE_MODE=local` (or `-d LOCAL`) uses in-process services; remote mode (default) needs the variables in `.env.minimum`.
|
|
107
|
+
Consumers drive the module with the gateway RPCs described in the gateway protocol page.
|
|
108
|
+
|
|
109
|
+
<!-- --8<-- [end:intro] -->
|
|
110
|
+
|
|
111
|
+
## Documentation
|
|
112
|
+
|
|
113
|
+
| Topic | Page |
|
|
114
|
+
| --- | --- |
|
|
115
|
+
| Architecture, data and signal flow | [docs/architecture.md](docs/architecture.md) |
|
|
116
|
+
| Writing modules | [docs/module_authoring.md](docs/module_authoring.md) |
|
|
117
|
+
| Wire contracts | [docs/gateway_protocol.md](docs/gateway_protocol.md), [docs/agui_events.md](docs/agui_events.md) (AG-UI) |
|
|
118
|
+
| Deploy and tune | [docs/operations.md](docs/operations.md) |
|
|
119
|
+
| Environment variables | [docs/environment_variables.md](docs/environment_variables.md) |
|
|
120
|
+
| Testing | [docs/testing.md](docs/testing.md) |
|
|
121
|
+
| Changelog | [docs/changelog/index.md](docs/changelog/index.md) |
|
|
122
|
+
| API reference | [docs/api/api.md](docs/api/api.md) |
|
|
123
|
+
|
|
124
|
+
## Development
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
task setup-dev # venv, dev/docs/tests deps, pre-commit hooks
|
|
128
|
+
task check # ruff format + lint, mypy, tests
|
|
129
|
+
task run-tests # full suite in docker compose (needs Redis)
|
|
130
|
+
task docs-serve # mkdocs serve
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
License: [CC BY-NC-SA 4.0](LICENSE).
|
{digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/bench_module/triggers/message_trigger.py
RENAMED
|
@@ -5,7 +5,7 @@ from typing import ClassVar, Literal
|
|
|
5
5
|
|
|
6
6
|
from echo_module import EchoToolModule
|
|
7
7
|
from models.input import MessageInputPayload
|
|
8
|
-
from models.output import MessageOutputPayload
|
|
8
|
+
from models.output import EchoOutput, MessageOutputPayload
|
|
9
9
|
from models.setup import EchoSetup
|
|
10
10
|
|
|
11
11
|
from digitalkin.models.module import ModuleContext
|
|
@@ -56,8 +56,8 @@ class MessageTrigger(TriggerHandler):
|
|
|
56
56
|
result = f"{setup_data.prefix}{result}"
|
|
57
57
|
chunk = f"[{i + 1}/{repeat}] {result}"
|
|
58
58
|
|
|
59
|
-
output = MessageOutputPayload(response=chunk)
|
|
60
|
-
await
|
|
59
|
+
output = EchoOutput(root=MessageOutputPayload(response=chunk))
|
|
60
|
+
await context.callbacks.send_message(output)
|
|
61
61
|
|
|
62
62
|
if i < repeat - 1 and delay_s > 0:
|
|
63
63
|
await asyncio.sleep(delay_s)
|
|
@@ -255,7 +255,10 @@ class DynamicSetupModule(
|
|
|
255
255
|
|
|
256
256
|
# Services configuration (empty for this example)
|
|
257
257
|
services_config_strategies: ClassVar[dict[str, ServicesStrategy | None]] = {}
|
|
258
|
-
services_config_params: ClassVar[dict[str, dict[str, Any | None] | None]] = {
|
|
258
|
+
services_config_params: ClassVar[dict[str, dict[str, Any | None] | None]] = {
|
|
259
|
+
"storage": {"config": {}},
|
|
260
|
+
"cost": {"config": {}},
|
|
261
|
+
}
|
|
259
262
|
|
|
260
263
|
async def initialize(self, context: ModuleContext, setup_data: DynamicAgentSetup) -> None:
|
|
261
264
|
"""Initialize the module with setup data.
|
|
@@ -35,7 +35,10 @@ class EchoToolModule(ToolModule[EchoInput, EchoOutput, EchoSetup, EchoSecret]):
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
services_config_strategies: ClassVar[dict[str, Any]] = {}
|
|
38
|
-
services_config_params: ClassVar[dict[str, Any]] = {
|
|
38
|
+
services_config_params: ClassVar[dict[str, Any]] = {
|
|
39
|
+
"storage": {"config": {}},
|
|
40
|
+
"cost": {"config": {}},
|
|
41
|
+
}
|
|
39
42
|
|
|
40
43
|
triggers_discoverer = ModuleDiscoverer(packages=["triggers"])
|
|
41
44
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""EchoModule server — same pattern as template-tool.
|
|
2
2
|
|
|
3
|
-
Uses ModuleServer
|
|
3
|
+
Uses ModuleServer, which embeds the GatewayServicer.
|
|
4
4
|
Server config via env vars (ServerSettings from pydantic-settings):
|
|
5
5
|
SERVER_CHANNEL_HOST, SERVER_CHANNEL_PORT, SERVER_CHANNEL_SECURITY, etc.
|
|
6
6
|
|
|
@@ -9,10 +9,9 @@ Usage:
|
|
|
9
9
|
docker compose -f examples/redis_demo/docker-compose.yml up -d
|
|
10
10
|
|
|
11
11
|
# 2. Set env and start:
|
|
12
|
-
DIGITALKIN_REDIS_URL=redis://localhost:6379/0 python examples/redis_demo/server.py
|
|
12
|
+
SERVICE_MODE=local DIGITALKIN_REDIS_URL=redis://localhost:6379/0 python examples/redis_demo/server.py
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
python examples/redis_demo/client.py full --prompt "Hello world"
|
|
14
|
+
A consumer then calls StartStream; see docs/gateway_protocol.md.
|
|
16
15
|
"""
|
|
17
16
|
|
|
18
17
|
import asyncio
|
{digitalkin-1.0.5.dev5 → digitalkin-1.0.5.dev7}/examples/redis_demo/triggers/message_trigger.py
RENAMED
|
@@ -7,7 +7,7 @@ from digitalkin.models.module import ModuleContext
|
|
|
7
7
|
from digitalkin.modules.trigger_handler import TriggerHandler
|
|
8
8
|
|
|
9
9
|
from models.input import MessageInputPayload
|
|
10
|
-
from models.output import MessageOutputPayload
|
|
10
|
+
from models.output import EchoOutput, MessageOutputPayload
|
|
11
11
|
from models.setup import EchoSetup
|
|
12
12
|
from echo_module import EchoToolModule
|
|
13
13
|
|
|
@@ -56,8 +56,8 @@ class MessageTrigger(TriggerHandler):
|
|
|
56
56
|
result = f"{setup_data.prefix}{result}"
|
|
57
57
|
chunk = f"[{i + 1}/{repeat}] {result}"
|
|
58
58
|
|
|
59
|
-
output = MessageOutputPayload(response=chunk)
|
|
60
|
-
await
|
|
59
|
+
output = EchoOutput(root=MessageOutputPayload(response=chunk))
|
|
60
|
+
await context.callbacks.send_message(output)
|
|
61
61
|
|
|
62
62
|
if i < repeat - 1 and delay_s > 0:
|
|
63
63
|
await asyncio.sleep(delay_s)
|
|
@@ -27,24 +27,22 @@
|
|
|
27
27
|
]
|
|
28
28
|
|
|
29
29
|
dependencies = [
|
|
30
|
-
|
|
31
|
-
# which is how a nested run's output is attributed to its author. Pinned exactly
|
|
32
|
-
# because it is a dated prerelease; move to >=0.1.21 once that ships stable.
|
|
33
|
-
"ag-ui-protocol==0.1.21.dev1787220377",
|
|
30
|
+
"ag-ui-protocol==1.0.0",
|
|
34
31
|
"agentic-mesh-protocol==1.2.0",
|
|
35
|
-
"agno>=2.8.0,<3",
|
|
36
32
|
"anyio>=4.13.0",
|
|
33
|
+
"cel-python>=0.5",
|
|
37
34
|
"grpcio-health-checking==1.82.1",
|
|
38
35
|
"grpcio-reflection==1.82.1",
|
|
39
36
|
"grpcio-status==1.82.1",
|
|
37
|
+
"protovalidate>=1.2.0,<2",
|
|
40
38
|
"pydantic-settings>=2.14.1",
|
|
41
39
|
"pydantic>=2.12.4",
|
|
42
40
|
"redis[hiredis]>=7.4.0,<9",
|
|
43
41
|
]
|
|
44
|
-
version = "1.0.5.
|
|
42
|
+
version = "1.0.5.dev7"
|
|
45
43
|
|
|
46
44
|
[project.optional-dependencies]
|
|
47
|
-
agno = [ "agno>=
|
|
45
|
+
agno = [ "agno>=3.1.1,<4" ]
|
|
48
46
|
performance = [ "uvloop>=0.21" ]
|
|
49
47
|
profiling = [
|
|
50
48
|
"pyinstrument>=5.1.2",
|
|
@@ -62,6 +60,7 @@ version = "1.0.5.dev5"
|
|
|
62
60
|
|
|
63
61
|
[dependency-groups]
|
|
64
62
|
dev = [
|
|
63
|
+
"agno>=3.1.1,<4",
|
|
65
64
|
"build>=1.5.0",
|
|
66
65
|
"bump-my-version>=1.3.0",
|
|
67
66
|
"cryptography>=48.0.0",
|
|
@@ -101,6 +100,7 @@ version = "1.0.5.dev5"
|
|
|
101
100
|
"tomli>=2.4.1",
|
|
102
101
|
]
|
|
103
102
|
tests = [
|
|
103
|
+
"agno>=3.1.1,<4",
|
|
104
104
|
"fakeredis[lua]>=2.35.1",
|
|
105
105
|
"freezegun>=1.5.5",
|
|
106
106
|
"grpcio-testing>=1.81.0",
|
|
@@ -12,6 +12,8 @@ on top of the Agno agent framework. Exports:
|
|
|
12
12
|
paused Agno run via the module's
|
|
13
13
|
:class:`~digitalkin.services.storage.StorageStrategy` and resumes it
|
|
14
14
|
when the front replies with a ``ToolMessage``.
|
|
15
|
+
- :class:`AgUiStreamInput` — AG-UI 1.0 run input trigger; upgrades legacy
|
|
16
|
+
``binary`` attachments to 1.0 media parts.
|
|
15
17
|
- :class:`ToolCallMetadata`, :class:`ToolOutputMetadata` — metadata models
|
|
16
18
|
for module tool calls made through the toolkit.
|
|
17
19
|
|
|
@@ -36,10 +38,18 @@ from digitalkin.community.agno.hitl import (
|
|
|
36
38
|
PausedRunRecord,
|
|
37
39
|
PausedRunStore,
|
|
38
40
|
)
|
|
39
|
-
from digitalkin.community.agno.models import
|
|
41
|
+
from digitalkin.community.agno.models import (
|
|
42
|
+
AgUiRunInput,
|
|
43
|
+
AgUiStreamInput,
|
|
44
|
+
PauseInfo,
|
|
45
|
+
ToolCallMetadata,
|
|
46
|
+
ToolOutputMetadata,
|
|
47
|
+
)
|
|
40
48
|
|
|
41
49
|
__all__ = [
|
|
42
50
|
"HITL_STORAGE_CONFIG",
|
|
51
|
+
"AgUiRunInput",
|
|
52
|
+
"AgUiStreamInput",
|
|
43
53
|
"AgnoHitlRunner",
|
|
44
54
|
"AgnoStreamAdapter",
|
|
45
55
|
"AguiTools",
|