digitalkin 1.0.4.dev7__tar.gz → 1.0.5.dev2__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.4.dev7 → digitalkin-1.0.5.dev2}/PKG-INFO +2 -2
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/services/filesystem_module.py +6 -7
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/pyproject.toml +45 -45
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/__version__.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/agno_adapter.py +102 -4
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/hitl.py +16 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/models.py +1 -36
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/module_toolkit.py +76 -70
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/base.py +17 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/chat_history.py +64 -29
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/registry/action.py +15 -47
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/registry/base.py +10 -15
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/registry/loader/action.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/registry/loader/kit.py +1 -1
- digitalkin-1.0.5.dev2/src/digitalkin/community/agno/toolkits/registry/services/action.py +92 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/registry/services/kit.py +5 -11
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/job_manager/single_job_manager.py +38 -17
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/profiling/task_profiler.py +3 -3
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/resilience/bulkhead.py +6 -5
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/task_manager/base_task_manager.py +48 -32
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/task_manager/local_task_manager.py +4 -6
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/task_manager/module_runner.py +100 -16
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/task_manager/redis/__init__.py +1 -3
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/task_manager/redis/proto_streams.py +2 -2
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/task_manager/redis/redis_client.py +12 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/task_manager/redis/redis_idempotency.py +5 -6
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/task_manager/redis/redis_signal.py +22 -15
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/task_manager/remote_task_manager.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/task_manager/task_executor.py +58 -37
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/task_manager/task_session.py +21 -118
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/_base_server.py +15 -15
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/gateway_servicer.py +116 -80
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/interceptors/permission.py +9 -9
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/interceptors/request_ids.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/m2m_call_registry.py +2 -2
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/module_server.py +50 -42
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/module_servicer.py +21 -39
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/stream_registry.py +3 -19
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/stream_session.py +3 -5
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/utils/circuit_breaker.py +3 -3
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +61 -36
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +4 -2
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/utils/validators.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/logger.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/mixins/agui_mixin.py +7 -6
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/mixins/file_history_mixin.py +3 -4
- digitalkin-1.0.5.dev2/src/digitalkin/mixins/filesystem_mixin.py +46 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/core/task_monitor.py +1 -5
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/events/__init__.py +4 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/events/agent_events.py +17 -2
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/grpc_servers/models.py +39 -30
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/module/__init__.py +2 -6
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/module/module_context.py +11 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/module/setup_types.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/module/tool_reference.py +2 -2
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/module/utility.py +7 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/services/__init__.py +0 -4
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/services/registry.py +4 -7
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/services/storage.py +9 -3
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/gateway.py +3 -2
- digitalkin-1.0.5.dev2/src/digitalkin/models/settings/grpc_client.py +127 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/module.py +2 -17
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/profiling.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/redis.py +1 -6
- digitalkin-1.0.5.dev2/src/digitalkin/models/settings/resilience.py +31 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/server/channel.py +3 -23
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/server/grpc.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/server/server.py +2 -6
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/server/servicer.py +1 -2
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/task_manager.py +0 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/utils/channel.py +8 -46
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/modules/_base_module.py +32 -10
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/modules/trigger_handler.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +2 -2
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +3 -3
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +2 -2
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/communication/communication_strategy.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/communication/default_communication.py +5 -5
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/communication/exceptions.py +2 -2
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/communication/grpc_communication.py +59 -33
- digitalkin-1.0.5.dev2/src/digitalkin/services/filesystem/__init__.py +7 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/filesystem/default_filesystem.py +35 -42
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/filesystem/filesystem_strategy.py +49 -49
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/filesystem/grpc_filesystem.py +40 -20
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/identity/default_identity.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/registry/default_registry.py +2 -5
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/registry/grpc_registry.py +12 -9
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/registry/registry_strategy.py +2 -2
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/secret/grpc_secret.py +6 -4
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/services_config.py +14 -18
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/setup/default_setup.py +6 -66
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/setup/grpc_setup.py +17 -65
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/setup/setup_strategy.py +6 -43
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/storage/default_storage.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/storage/grpc_storage.py +12 -20
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/storage/storage_strategy.py +8 -10
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/task_manager/default_task_manager.py +4 -4
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/user_profile/default_user_profile.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/utils/arg_parser.py +6 -6
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/utils/development_mode_action.py +20 -12
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/utils/llm_ready_schema.py +1 -1
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/utils/package_discover.py +3 -3
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/utils/schema_splitter.py +4 -4
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin.egg-info/PKG-INFO +2 -2
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin.egg-info/SOURCES.txt +1 -12
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin.egg-info/requires.txt +1 -1
- digitalkin-1.0.4.dev7/src/digitalkin/community/agno/toolkits/registry/services/action.py +0 -175
- digitalkin-1.0.4.dev7/src/digitalkin/core/task_manager/redis/redis_state.py +0 -124
- digitalkin-1.0.4.dev7/src/digitalkin/mixins/filesystem_mixin.py +0 -220
- digitalkin-1.0.4.dev7/src/digitalkin/models/module/knowledge_files.py +0 -87
- digitalkin-1.0.4.dev7/src/digitalkin/models/services/filesystem.py +0 -127
- digitalkin-1.0.4.dev7/src/digitalkin/models/settings/certificate.py +0 -90
- digitalkin-1.0.4.dev7/src/digitalkin/models/settings/client/__init__.py +0 -1
- digitalkin-1.0.4.dev7/src/digitalkin/models/settings/client/channel.py +0 -68
- digitalkin-1.0.4.dev7/src/digitalkin/models/settings/client/circuit_breaker.py +0 -19
- digitalkin-1.0.4.dev7/src/digitalkin/models/settings/client/client.py +0 -55
- digitalkin-1.0.4.dev7/src/digitalkin/models/settings/client/grpc.py +0 -148
- digitalkin-1.0.4.dev7/src/digitalkin/models/settings/resilience.py +0 -61
- digitalkin-1.0.4.dev7/src/digitalkin/services/filesystem/__init__.py +0 -19
- digitalkin-1.0.4.dev7/src/digitalkin/utils/env_manager.py +0 -139
- digitalkin-1.0.4.dev7/src/digitalkin/utils/env_template.py +0 -233
- digitalkin-1.0.4.dev7/src/digitalkin/utils/json_structure.py +0 -169
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/LICENSE +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/README.md +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/base_server/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/base_server/mock/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/base_server/mock/mock_pb2.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/base_server/server_async_insecure.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/base_server/server_async_secure.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/base_server/server_sync_insecure.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/base_server/server_sync_secure.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/bench_module/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/bench_module/echo_module.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/bench_module/models/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/bench_module/models/input.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/bench_module/models/output.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/bench_module/models/secret.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/bench_module/models/setup.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/bench_module/server.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/bench_module/triggers/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/bench_module/triggers/message_trigger.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/modules/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/modules/archetype_with_tools_module.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/modules/cpu_intensive_module.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/modules/dynamic_setup_module.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/modules/minimal_llm_module.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/modules/text_transform_module.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/monitoring/tests/test_metrics.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/redis_demo/client.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/redis_demo/echo_module.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/redis_demo/models/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/redis_demo/models/input.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/redis_demo/models/output.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/redis_demo/models/secret.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/redis_demo/models/setup.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/redis_demo/server.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/redis_demo/triggers/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/redis_demo/triggers/message_trigger.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/examples/services/storage_module.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/setup.cfg +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/agui_tools.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/defaults.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/registry/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/registry/kins/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/registry/kins/action.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/registry/kins/kit.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/registry/loader/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/registry/services/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/registry/tools/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/registry/tools/action.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/registry/tools/kit.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/toolkits/user_profile.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/common/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/common/factories.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/exceptions.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/job_manager/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/profiling/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/profiling/step_timer.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/resilience/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/resilience/task_supervisor.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/core/task_manager/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/exceptions.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/exceptions.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/interceptors/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/mixins/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/mixins/base_mixin.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/mixins/cost_mixin.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/mixins/logger_mixin.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/mixins/storage_mixin.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/core/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/core/job_manager_models.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/core/redis.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/grpc_servers/circuit_breaker.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/grpc_servers/m2m.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/grpc_servers/stream_error_codes.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/grpc_servers/types.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/module/ag_ui.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/module/base_types.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/module/loaded_tools.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/module/module.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/module/module_types.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/module/request_metadata.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/module/select_schema.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/module/tool_cache.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/services/cost.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/services/services.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/log.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/queue.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/registry.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/server/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/settings/utils/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/utils/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/models/utils/dynamic_schema.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/modules/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/modules/archetype_module.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/modules/tool_module.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/modules/triggers/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/py.typed +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/base_strategy.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/communication/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/cost/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/cost/cost_strategy.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/cost/default_cost.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/cost/exceptions.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/cost/grpc_cost.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/filesystem/exceptions.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/identity/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/identity/identity_strategy.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/registry/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/registry/exceptions.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/registry/registry_models.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/secret/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/secret/default_secret.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/secret/exceptions.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/secret/secret_strategy.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/services_models.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/setup/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/setup/exceptions.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/storage/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/storage/exceptions.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/task_manager/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/task_manager/exceptions.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/task_manager/redis_task_manager.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/user_profile/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/user_profile/exceptions.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/utils/__init__.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/utils/conditional_schema.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/utils/dynamic_schema.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/utils/exceptions.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/utils/proto_utils.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/utils/setup_content_validator.py +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin.egg-info/dependency_links.txt +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin.egg-info/top_level.txt +0 -0
- {digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/tests/test_exceptions.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: digitalkin
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.5.dev2
|
|
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.1
|
|
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
|
|
@@ -10,8 +10,7 @@ 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.
|
|
14
|
-
from digitalkin.services.filesystem import FileFilter, UploadFileData
|
|
13
|
+
from digitalkin.services.filesystem.filesystem_strategy import FileFilter, UploadFileData
|
|
15
14
|
from digitalkin.services.services_config import ServicesConfig
|
|
16
15
|
from digitalkin.services.services_models import ServicesMode
|
|
17
16
|
|
|
@@ -119,9 +118,9 @@ class ExampleModule(ArchetypeModule[ExampleInput, ExampleOutput, ExampleSetup, E
|
|
|
119
118
|
file = UploadFileData(
|
|
120
119
|
content=b"%s\n%s" % (processed_message.encode(), str(processed_number).encode()),
|
|
121
120
|
name="example_output.txt",
|
|
122
|
-
|
|
121
|
+
file_type="text/plain",
|
|
123
122
|
content_type="text/plain",
|
|
124
|
-
metadata={"
|
|
123
|
+
metadata={"example_key": "example_value"},
|
|
125
124
|
replace_if_exists=True,
|
|
126
125
|
)
|
|
127
126
|
|
|
@@ -177,10 +176,10 @@ async def test_module() -> None:
|
|
|
177
176
|
# Check the storage
|
|
178
177
|
if module.status == ModuleStatus.STOPPED:
|
|
179
178
|
files, _nb_results = await module.filesystem.get_files(
|
|
180
|
-
filters=FileFilter(
|
|
179
|
+
filters=FileFilter(name="example_output.txt", context="test-mission-123"),
|
|
181
180
|
)
|
|
182
181
|
for file in files:
|
|
183
|
-
await module.filesystem.update_file(file.id,
|
|
182
|
+
await module.filesystem.update_file(file.id, file_type="updated")
|
|
184
183
|
# module.filesystem.delete_files(filters=FileFilter(name="example_output.txt", context="test-mission-123"), permanent=True)
|
|
185
184
|
|
|
186
185
|
logger.info("Retrieved file: %s with ID: %s", file.name, file.id)
|
|
@@ -189,7 +188,7 @@ async def test_module() -> None:
|
|
|
189
188
|
if file_record:
|
|
190
189
|
logger.info("File ID: %s", file_record.id)
|
|
191
190
|
logger.info("File name: %s", file_record.name)
|
|
192
|
-
logger.info("File type: %s", file_record.
|
|
191
|
+
logger.info("File type: %s", file_record.file_type)
|
|
193
192
|
logger.info("File status: %s", file_record.status)
|
|
194
193
|
logger.info("File content: %s", file_record.content.decode())
|
|
195
194
|
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.1",
|
|
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.
|
|
44
|
+
version = "1.0.5.dev2"
|
|
45
45
|
|
|
46
46
|
[project.optional-dependencies]
|
|
47
47
|
agno = [ "agno>=2.6" ]
|
|
@@ -208,15 +208,15 @@
|
|
|
208
208
|
]
|
|
209
209
|
|
|
210
210
|
ignore = [
|
|
211
|
-
"
|
|
212
|
-
"
|
|
213
|
-
"
|
|
214
|
-
"
|
|
215
|
-
"
|
|
216
|
-
"
|
|
217
|
-
"
|
|
218
|
-
"
|
|
219
|
-
"
|
|
211
|
+
"ANN401", # Allow typing.Any — gRPC stubs, callbacks, and dynamic APIs require it
|
|
212
|
+
"COM812", # Disable because of formatter incompatibility
|
|
213
|
+
"DOC502", # Allow extraneous-exception in docstring
|
|
214
|
+
"F401", # Allow unused imports — used for availability checks
|
|
215
|
+
"N802", # Allow PascalCase methods — gRPC servicer convention
|
|
216
|
+
"PLC0415", # Allow lazy imports — needed to break circular dependencies
|
|
217
|
+
"PLW3201", # Allow __get_pydantic_core_schema__ — Pydantic dunder hook
|
|
218
|
+
"S105", # Hardcoded-password
|
|
219
|
+
"S403", # Allow pickle import
|
|
220
220
|
]
|
|
221
221
|
|
|
222
222
|
fixable = [ "ALL" ]
|
|
@@ -226,40 +226,40 @@
|
|
|
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
|
+
"ANN001",
|
|
230
|
+
"ANN002",
|
|
231
|
+
"ANN003",
|
|
232
|
+
"ANN201",
|
|
233
|
+
"ANN401",
|
|
234
|
+
"ARG001",
|
|
235
|
+
"ARG002",
|
|
236
|
+
"C901",
|
|
237
|
+
"D100",
|
|
238
|
+
"D101",
|
|
239
|
+
"D102",
|
|
240
|
+
"D103",
|
|
241
|
+
"D107",
|
|
242
|
+
"D417",
|
|
243
|
+
"DOC201",
|
|
244
|
+
"DOC501",
|
|
245
|
+
"E501",
|
|
246
|
+
"ERA001",
|
|
247
|
+
"FBT001",
|
|
248
|
+
"FBT002",
|
|
249
|
+
"G004",
|
|
250
|
+
"N802",
|
|
251
|
+
"PERF203",
|
|
252
|
+
"PLC2701",
|
|
253
|
+
"PLR0911",
|
|
254
|
+
"PLR0912",
|
|
255
|
+
"PLR0914",
|
|
256
|
+
"PLR0915",
|
|
257
|
+
"PLR1702",
|
|
258
|
+
"PLR2004",
|
|
259
|
+
"PLR6301",
|
|
260
|
+
"S101",
|
|
261
|
+
"SLF001",
|
|
262
|
+
"TRY002",
|
|
263
263
|
]
|
|
264
264
|
|
|
265
265
|
[tool.ruff.lint.pylint]
|
{digitalkin-1.0.4.dev7 → digitalkin-1.0.5.dev2}/src/digitalkin/community/agno/agno_adapter.py
RENAMED
|
@@ -7,6 +7,8 @@ import logging
|
|
|
7
7
|
import uuid
|
|
8
8
|
from typing import TYPE_CHECKING, Any, TypeAlias
|
|
9
9
|
|
|
10
|
+
from pydantic import ValidationError
|
|
11
|
+
|
|
10
12
|
if TYPE_CHECKING:
|
|
11
13
|
from collections.abc import Callable
|
|
12
14
|
|
|
@@ -54,6 +56,7 @@ if TYPE_CHECKING:
|
|
|
54
56
|
from digitalkin.models.events import (
|
|
55
57
|
AgentRunEvent,
|
|
56
58
|
BaseAgentRunEvent,
|
|
59
|
+
CustomEvent,
|
|
57
60
|
ReasoningCompletedEvent,
|
|
58
61
|
ReasoningContentDeltaEvent,
|
|
59
62
|
ReasoningStartedEvent,
|
|
@@ -62,6 +65,8 @@ from digitalkin.models.events import (
|
|
|
62
65
|
RunContentEvent,
|
|
63
66
|
RunErrorEvent,
|
|
64
67
|
RunStartedEvent,
|
|
68
|
+
SourceCitation,
|
|
69
|
+
SourceCitationEvent,
|
|
65
70
|
SubagentErrorEvent,
|
|
66
71
|
SubagentFinishedEvent,
|
|
67
72
|
SubagentStartedEvent,
|
|
@@ -80,7 +85,9 @@ class AgnoStreamAdapter:
|
|
|
80
85
|
"""Stateful Agno→DigitalKin event converter.
|
|
81
86
|
|
|
82
87
|
Auto-wraps ``run_content`` deltas in TextMessage/Reasoning lifecycle
|
|
83
|
-
events and tracks HITL pause state.
|
|
88
|
+
events and tracks HITL pause state. One adapter serves one stream: its
|
|
89
|
+
dedup state (citations, closed tool calls, completed runs) is reset on each
|
|
90
|
+
top-level ``run_started``, so it must not be shared across concurrent streams.
|
|
84
91
|
"""
|
|
85
92
|
|
|
86
93
|
def __init__(self) -> None:
|
|
@@ -94,6 +101,8 @@ class AgnoStreamAdapter:
|
|
|
94
101
|
self._reasonings: dict[str, tuple[str, dict[str, Any] | None]] = {}
|
|
95
102
|
|
|
96
103
|
self._closed_tool_call_ids: set[str] = set()
|
|
104
|
+
# Providers repeat the same citations on every delta and again on completion.
|
|
105
|
+
self._cited_urls: set[str] = set()
|
|
97
106
|
|
|
98
107
|
self._active_run_id: str | None = None
|
|
99
108
|
self._completed_run_ids: set[str] = set()
|
|
@@ -206,6 +215,7 @@ class AgnoStreamAdapter:
|
|
|
206
215
|
"tool_call_started": self._handle_tool_call_started,
|
|
207
216
|
"tool_call_completed": self._handle_tool_call_completed,
|
|
208
217
|
"tool_call_error": self._handle_tool_call_error,
|
|
218
|
+
"custom_event": self._handle_custom_event,
|
|
209
219
|
}
|
|
210
220
|
dispatch = {
|
|
211
221
|
enum_cls[name]: handler
|
|
@@ -313,6 +323,17 @@ class AgnoStreamAdapter:
|
|
|
313
323
|
self._active_run_id,
|
|
314
324
|
self._last_metadata,
|
|
315
325
|
)
|
|
326
|
+
# TODO(validate): ADAPTER-RESET per-run dedup state resets on each new top-level run
|
|
327
|
+
logger.info(
|
|
328
|
+
"[VALIDATE ADAPTER-RESET] run_id=%s clearing cited_urls=%d closed_tool_calls=%d completed_runs=%d",
|
|
329
|
+
run_id,
|
|
330
|
+
len(self._cited_urls),
|
|
331
|
+
len(self._closed_tool_call_ids),
|
|
332
|
+
len(self._completed_run_ids),
|
|
333
|
+
)
|
|
334
|
+
self._cited_urls.clear()
|
|
335
|
+
self._closed_tool_call_ids.clear()
|
|
336
|
+
self._completed_run_ids.clear()
|
|
316
337
|
self._active_run_id = run_id
|
|
317
338
|
return [
|
|
318
339
|
RunStartedEvent(
|
|
@@ -337,11 +358,13 @@ class AgnoStreamAdapter:
|
|
|
337
358
|
"""
|
|
338
359
|
parent_run_id = getattr(agno_event, "parent_run_id", None)
|
|
339
360
|
run_id = agno_event.run_id
|
|
361
|
+
citations = self._citations(agno_event, timestamp)
|
|
340
362
|
|
|
341
363
|
if parent_run_id:
|
|
342
364
|
# Close this member's own text/reasoning bubble, then the matching step. Siblings
|
|
343
365
|
# still streaming keep theirs open.
|
|
344
|
-
events: list[BaseAgentRunEvent] =
|
|
366
|
+
events: list[BaseAgentRunEvent] = citations
|
|
367
|
+
events.extend(self._close_content(self._run_key, timestamp))
|
|
345
368
|
events.extend(self._close_reasoning(self._run_key, timestamp))
|
|
346
369
|
|
|
347
370
|
subagent = self._subagents.pop(run_id, None) if run_id else None
|
|
@@ -377,7 +400,8 @@ class AgnoStreamAdapter:
|
|
|
377
400
|
|
|
378
401
|
# AG-UI refuses RUN_FINISHED while any message, reasoning or step is still open, so
|
|
379
402
|
# everything still running when the top-level run ends is force-closed here.
|
|
380
|
-
events =
|
|
403
|
+
events = citations
|
|
404
|
+
events.extend(self._close_all_content(timestamp))
|
|
381
405
|
events.extend(self._close_all_reasoning(timestamp))
|
|
382
406
|
events.extend(self._close_subagents(timestamp))
|
|
383
407
|
|
|
@@ -884,6 +908,80 @@ class AgnoStreamAdapter:
|
|
|
884
908
|
event for run_key in reversed(list(self._messages)) for event in self._close_content(run_key, timestamp)
|
|
885
909
|
]
|
|
886
910
|
|
|
911
|
+
def _source_event(self, payload: Any, timestamp: Any) -> SourceCitationEvent | None:
|
|
912
|
+
"""Validate one source payload into a ``source_citation`` event.
|
|
913
|
+
|
|
914
|
+
Args:
|
|
915
|
+
payload: ``{url, title?, description?}`` as received.
|
|
916
|
+
timestamp: Event timestamp.
|
|
917
|
+
|
|
918
|
+
Returns:
|
|
919
|
+
The event, or None when the payload is invalid (logged and dropped).
|
|
920
|
+
"""
|
|
921
|
+
try:
|
|
922
|
+
citation = SourceCitation.model_validate(payload)
|
|
923
|
+
except ValidationError as exc:
|
|
924
|
+
logger.warning("Dropped source citation %r: %s", payload, exc)
|
|
925
|
+
return None
|
|
926
|
+
return SourceCitationEvent(
|
|
927
|
+
event=AgentRunEvent.CUSTOM,
|
|
928
|
+
name="source_citation",
|
|
929
|
+
value=citation,
|
|
930
|
+
subagent_run_id=self._subagent_of(self._run_key),
|
|
931
|
+
timestamp=timestamp,
|
|
932
|
+
metadata=self._last_metadata,
|
|
933
|
+
)
|
|
934
|
+
|
|
935
|
+
def _citations(
|
|
936
|
+
self, agno_event: AgnoRunContentEvent | AgnoRunCompletedEvent, timestamp: Any
|
|
937
|
+
) -> list[BaseAgentRunEvent]:
|
|
938
|
+
"""Convert the model-native ``citations.urls`` not yet emitted in this run.
|
|
939
|
+
|
|
940
|
+
Returns:
|
|
941
|
+
One SourceCitationEvent per new URL.
|
|
942
|
+
"""
|
|
943
|
+
citations = agno_event.citations
|
|
944
|
+
if citations is None or not citations.urls:
|
|
945
|
+
return []
|
|
946
|
+
events: list[BaseAgentRunEvent] = []
|
|
947
|
+
for cite in citations.urls:
|
|
948
|
+
if not cite.url:
|
|
949
|
+
logger.warning("Dropped source citation without url: title=%r", cite.title)
|
|
950
|
+
continue
|
|
951
|
+
if cite.url in self._cited_urls:
|
|
952
|
+
continue
|
|
953
|
+
self._cited_urls.add(cite.url)
|
|
954
|
+
event = self._source_event({"url": cite.url, "title": cite.title}, timestamp)
|
|
955
|
+
if event is not None:
|
|
956
|
+
events.append(event)
|
|
957
|
+
return events
|
|
958
|
+
|
|
959
|
+
def _handle_custom_event(self, agno_event: AgnoRunEvent, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
960
|
+
"""Handle RunEvent.custom_event — agno stores the tool's kwargs as attributes.
|
|
961
|
+
|
|
962
|
+
Returns:
|
|
963
|
+
A SourceCitationEvent for ``source_citation``, a generic CustomEvent otherwise,
|
|
964
|
+
or empty when the event is unnamed or its source is invalid.
|
|
965
|
+
"""
|
|
966
|
+
data = agno_event.__dict__
|
|
967
|
+
name = data.get("name")
|
|
968
|
+
if not name:
|
|
969
|
+
logger.debug("Skipping unnamed agno custom event: %r", data)
|
|
970
|
+
return []
|
|
971
|
+
if name == "source_citation":
|
|
972
|
+
event = self._source_event(data.get("value"), timestamp)
|
|
973
|
+
return [event] if event is not None else []
|
|
974
|
+
return [
|
|
975
|
+
CustomEvent(
|
|
976
|
+
event=AgentRunEvent.CUSTOM,
|
|
977
|
+
name=name,
|
|
978
|
+
value=data.get("value"),
|
|
979
|
+
subagent_run_id=self._subagent_of(self._run_key),
|
|
980
|
+
timestamp=timestamp,
|
|
981
|
+
metadata=self._last_metadata,
|
|
982
|
+
)
|
|
983
|
+
]
|
|
984
|
+
|
|
887
985
|
def _handle_run_content(self, agno_event: AgnoRunContentEvent, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
888
986
|
"""Handle RunEvent.run_content — the core state machine.
|
|
889
987
|
|
|
@@ -892,7 +990,7 @@ class AgnoStreamAdapter:
|
|
|
892
990
|
Returns:
|
|
893
991
|
DigitalKin events for this chunk.
|
|
894
992
|
"""
|
|
895
|
-
events
|
|
993
|
+
events = self._citations(agno_event, timestamp)
|
|
896
994
|
|
|
897
995
|
reasoning_content = agno_event.reasoning_content
|
|
898
996
|
content = agno_event.content
|
|
@@ -85,11 +85,26 @@ class PausedRunStore:
|
|
|
85
85
|
if tid and tid not in seen and tool.external_execution_required and tool.result is None:
|
|
86
86
|
seen.add(tid)
|
|
87
87
|
pending.append(tid)
|
|
88
|
+
payload = run_output.to_dict()
|
|
89
|
+
# History messages are re-fetched from the session by continue_run; events are not replayed.
|
|
90
|
+
messages = payload.get("messages") or []
|
|
91
|
+
history = [m for m in messages if m.get("from_history")]
|
|
92
|
+
if history:
|
|
93
|
+
payload["messages"] = [m for m in messages if not m.get("from_history")]
|
|
94
|
+
events = payload.pop("events", None) or []
|
|
95
|
+
# TODO(validate): HITL-TRIM paused runs stored without history messages/events still resume
|
|
96
|
+
logger.info(
|
|
97
|
+
"[VALIDATE HITL-TRIM] thread_id=%s dropped %d history message(s) %s and %d event(s)",
|
|
98
|
+
thread_id,
|
|
99
|
+
len(history),
|
|
100
|
+
[(m.get("id"), m.get("role")) for m in history],
|
|
101
|
+
len(events),
|
|
102
|
+
)
|
|
88
103
|
record = PausedRunRecord(
|
|
89
104
|
thread_id=thread_id,
|
|
90
105
|
run_id=run_output.run_id or "",
|
|
91
106
|
pending_tool_call_ids=pending,
|
|
92
|
-
payload=
|
|
107
|
+
payload=payload,
|
|
93
108
|
)
|
|
94
109
|
await self._storage.upsert(
|
|
95
110
|
collection=self.COLLECTION,
|
|
@@ -67,8 +67,6 @@ class ToolCallMetadata(BaseModel):
|
|
|
67
67
|
duration_ms: Execution time in milliseconds.
|
|
68
68
|
cost_tracked: Whether cost metadata is available from the tool.
|
|
69
69
|
error: Error message if the call failed, None otherwise.
|
|
70
|
-
input_kwargs: The kwargs passed to the tool (for debugging).
|
|
71
|
-
output_summary: Brief summary of the output (truncated for logs).
|
|
72
70
|
tool_metadata: Metadata returned by the tool itself (cost, API calls, etc.).
|
|
73
71
|
"""
|
|
74
72
|
|
|
@@ -77,14 +75,6 @@ class ToolCallMetadata(BaseModel):
|
|
|
77
75
|
duration_ms: float = Field(..., description="Execution time in milliseconds")
|
|
78
76
|
cost_tracked: bool = Field(default=False, description="Whether cost metadata is available from tool")
|
|
79
77
|
error: str | None = Field(default=None, description="Error message if failed")
|
|
80
|
-
input_kwargs: dict[str, Any] | None = Field(
|
|
81
|
-
default=None,
|
|
82
|
-
description="Input kwargs passed to the tool for debugging",
|
|
83
|
-
)
|
|
84
|
-
output_summary: str | None = Field(
|
|
85
|
-
default=None,
|
|
86
|
-
description="Brief summary of the output (truncated)",
|
|
87
|
-
)
|
|
88
78
|
tool_metadata: ToolOutputMetadata | None = Field(
|
|
89
79
|
default=None,
|
|
90
80
|
description="Metadata returned by the tool module (cost, API calls, etc.)",
|
|
@@ -94,7 +84,7 @@ class ToolCallMetadata(BaseModel):
|
|
|
94
84
|
"""Convert metadata to dict for successful responses.
|
|
95
85
|
|
|
96
86
|
Returns:
|
|
97
|
-
Dictionary with success-relevant fields
|
|
87
|
+
Dictionary with success-relevant fields; error is excluded.
|
|
98
88
|
"""
|
|
99
89
|
return self.model_dump(exclude={"error"})
|
|
100
90
|
|
|
@@ -106,31 +96,6 @@ class ToolCallMetadata(BaseModel):
|
|
|
106
96
|
"""
|
|
107
97
|
return self.model_dump(include={"module_id", "success", "duration_ms", "error"})
|
|
108
98
|
|
|
109
|
-
def to_log_dict(self) -> dict[str, Any]:
|
|
110
|
-
"""Convert metadata to dict for logging.
|
|
111
|
-
|
|
112
|
-
Returns:
|
|
113
|
-
Dictionary suitable for log extra data, large kwargs truncated.
|
|
114
|
-
"""
|
|
115
|
-
data: dict[str, Any] = {
|
|
116
|
-
"module_id": self.module_id,
|
|
117
|
-
"success": self.success,
|
|
118
|
-
"duration_ms": self.duration_ms,
|
|
119
|
-
"cost_tracked": self.cost_tracked,
|
|
120
|
-
}
|
|
121
|
-
if self.error:
|
|
122
|
-
data["error"] = self.error
|
|
123
|
-
if self.input_kwargs:
|
|
124
|
-
max_len = 100
|
|
125
|
-
data["input_kwargs"] = {
|
|
126
|
-
k: (str(v)[:max_len] + "..." if len(str(v)) > max_len else v) for k, v in self.input_kwargs.items()
|
|
127
|
-
}
|
|
128
|
-
if self.output_summary:
|
|
129
|
-
data["output_summary"] = self.output_summary
|
|
130
|
-
if self.tool_metadata:
|
|
131
|
-
data["tool_metadata"] = self.tool_metadata.model_dump(exclude_none=True)
|
|
132
|
-
return data
|
|
133
|
-
|
|
134
99
|
@staticmethod
|
|
135
100
|
def extract_tool_metadata(output: dict[str, Any]) -> "ToolOutputMetadata | None":
|
|
136
101
|
"""Extract tool metadata from a tool's output if present.
|