digitalkin 1.0.0.dev3__tar.gz → 1.0.0.dev5__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.
Files changed (215) hide show
  1. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/PKG-INFO +2 -2
  2. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/pyproject.toml +6 -6
  3. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/__version__.py +1 -1
  4. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/job_manager/single_job_manager.py +9 -2
  5. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/module_runner.py +8 -0
  6. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/redis/proto_streams.py +9 -0
  7. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/gateway_constants.py +0 -2
  8. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/gateway_servicer.py +9 -0
  9. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/stream_registry.py +12 -58
  10. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/settings/gateway.py +0 -1
  11. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/modules/_base_module.py +4 -1
  12. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin.egg-info/PKG-INFO +2 -2
  13. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin.egg-info/requires.txt +1 -1
  14. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/LICENSE +0 -0
  15. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/README.md +0 -0
  16. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/base_server/__init__.py +0 -0
  17. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/base_server/mock/__init__.py +0 -0
  18. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/base_server/mock/mock_pb2.py +0 -0
  19. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
  20. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/base_server/server_async_insecure.py +0 -0
  21. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/base_server/server_async_secure.py +0 -0
  22. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/base_server/server_sync_insecure.py +0 -0
  23. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/base_server/server_sync_secure.py +0 -0
  24. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/bench_module/__init__.py +0 -0
  25. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/bench_module/echo_module.py +0 -0
  26. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/bench_module/models/__init__.py +0 -0
  27. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/bench_module/models/input.py +0 -0
  28. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/bench_module/models/output.py +0 -0
  29. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/bench_module/models/secret.py +0 -0
  30. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/bench_module/models/setup.py +0 -0
  31. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/bench_module/server.py +0 -0
  32. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/bench_module/triggers/__init__.py +0 -0
  33. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/bench_module/triggers/message_trigger.py +0 -0
  34. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/modules/__init__.py +0 -0
  35. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/modules/archetype_with_tools_module.py +0 -0
  36. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/modules/cpu_intensive_module.py +0 -0
  37. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/modules/dynamic_setup_module.py +0 -0
  38. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/modules/minimal_llm_module.py +0 -0
  39. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/modules/text_transform_module.py +0 -0
  40. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
  41. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
  42. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
  43. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
  44. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
  45. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/monitoring/tests/test_metrics.py +0 -0
  46. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/redis_demo/client.py +0 -0
  47. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/redis_demo/echo_module.py +0 -0
  48. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/redis_demo/models/__init__.py +0 -0
  49. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/redis_demo/models/input.py +0 -0
  50. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/redis_demo/models/output.py +0 -0
  51. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/redis_demo/models/secret.py +0 -0
  52. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/redis_demo/models/setup.py +0 -0
  53. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/redis_demo/server.py +0 -0
  54. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/redis_demo/triggers/__init__.py +0 -0
  55. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/redis_demo/triggers/message_trigger.py +0 -0
  56. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/services/filesystem_module.py +0 -0
  57. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/examples/services/storage_module.py +0 -0
  58. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/setup.cfg +0 -0
  59. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/__init__.py +0 -0
  60. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/community/__init__.py +0 -0
  61. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/community/agno/__init__.py +0 -0
  62. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/community/agno/agno_adapter.py +0 -0
  63. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/community/agno/agui_tools.py +0 -0
  64. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/community/agno/hitl.py +0 -0
  65. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/__init__.py +0 -0
  66. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/common/__init__.py +0 -0
  67. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/common/factories.py +0 -0
  68. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/job_manager/__init__.py +0 -0
  69. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
  70. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/profiling/__init__.py +0 -0
  71. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/profiling/step_timer.py +0 -0
  72. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/profiling/task_profiler.py +0 -0
  73. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/resilience/__init__.py +0 -0
  74. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/resilience/bulkhead.py +0 -0
  75. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/resilience/graceful_shutdown.py +0 -0
  76. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/resilience/session_reaper.py +0 -0
  77. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/resilience/task_supervisor.py +0 -0
  78. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/resilience/watchdog.py +0 -0
  79. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/__init__.py +0 -0
  80. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
  81. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
  82. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/redis/__init__.py +0 -0
  83. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/redis/instrumented.py +0 -0
  84. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/redis/redis_checkpoint.py +0 -0
  85. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/redis/redis_client.py +0 -0
  86. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/redis/redis_idempotency.py +0 -0
  87. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/redis/redis_signal.py +0 -0
  88. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/redis/redis_state.py +0 -0
  89. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/redis/redis_streams.py +0 -0
  90. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/redis/shadow.py +0 -0
  91. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
  92. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/task_executor.py +0 -0
  93. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/task_session.py +0 -0
  94. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/core/task_manager/task_wrapper.py +0 -0
  95. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/__init__.py +0 -0
  96. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/_base_server.py +0 -0
  97. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/interceptors/__init__.py +0 -0
  98. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/interceptors/circuit_breaker_interceptor.py +0 -0
  99. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/module_server.py +0 -0
  100. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
  101. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/stream_error_codes.py +0 -0
  102. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/stream_session.py +0 -0
  103. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
  104. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/utils/circuit_breaker.py +0 -0
  105. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -0
  106. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
  107. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
  108. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
  109. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/logger.py +0 -0
  110. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/mixins/__init__.py +0 -0
  111. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/mixins/agui_mixin.py +0 -0
  112. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/mixins/base_mixin.py +0 -0
  113. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/mixins/cost_mixin.py +0 -0
  114. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/mixins/file_history_mixin.py +0 -0
  115. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
  116. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/mixins/logger_mixin.py +0 -0
  117. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/mixins/storage_mixin.py +0 -0
  118. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/__init__.py +0 -0
  119. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/core/__init__.py +0 -0
  120. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/core/job_manager_models.py +0 -0
  121. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/core/task_monitor.py +0 -0
  122. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/events/__init__.py +0 -0
  123. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/events/agent_events.py +0 -0
  124. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
  125. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/grpc_servers/models.py +0 -0
  126. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/grpc_servers/types.py +0 -0
  127. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/module/__init__.py +0 -0
  128. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/module/ag_ui.py +0 -0
  129. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/module/base_types.py +0 -0
  130. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/module/module.py +0 -0
  131. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/module/module_context.py +0 -0
  132. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/module/module_types.py +0 -0
  133. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/module/request_metadata.py +0 -0
  134. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/module/select_schema.py +0 -0
  135. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/module/setup_types.py +0 -0
  136. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/module/tool_cache.py +0 -0
  137. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/module/tool_reference.py +0 -0
  138. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/module/utility.py +0 -0
  139. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/services/__init__.py +0 -0
  140. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/services/cost.py +0 -0
  141. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/services/registry.py +0 -0
  142. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/services/storage.py +0 -0
  143. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/settings/__init__.py +0 -0
  144. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/settings/consumer.py +0 -0
  145. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/settings/profiling.py +0 -0
  146. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/settings/redis.py +0 -0
  147. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/settings/server/__init__.py +0 -0
  148. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/settings/server/channel.py +0 -0
  149. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/settings/server/grpc.py +0 -0
  150. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/settings/server/server.py +0 -0
  151. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/settings/utils/__init__.py +0 -0
  152. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/models/settings/utils/channel.py +0 -0
  153. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/modules/__init__.py +0 -0
  154. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/modules/archetype_module.py +0 -0
  155. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/modules/tool_module.py +0 -0
  156. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/modules/trigger_handler.py +0 -0
  157. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/modules/triggers/__init__.py +0 -0
  158. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
  159. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
  160. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
  161. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/py.typed +0 -0
  162. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/__init__.py +0 -0
  163. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/base_strategy.py +0 -0
  164. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/communication/__init__.py +0 -0
  165. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/communication/communication_strategy.py +0 -0
  166. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/communication/default_communication.py +0 -0
  167. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/communication/gateway_consumer.py +0 -0
  168. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/communication/grpc_communication.py +0 -0
  169. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/cost/__init__.py +0 -0
  170. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/cost/cost_strategy.py +0 -0
  171. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/cost/default_cost.py +0 -0
  172. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/cost/grpc_cost.py +0 -0
  173. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/filesystem/__init__.py +0 -0
  174. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
  175. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
  176. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
  177. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/identity/__init__.py +0 -0
  178. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/identity/default_identity.py +0 -0
  179. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/identity/identity_strategy.py +0 -0
  180. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/registry/__init__.py +0 -0
  181. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/registry/default_registry.py +0 -0
  182. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/registry/exceptions.py +0 -0
  183. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/registry/grpc_registry.py +0 -0
  184. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/registry/registry_models.py +0 -0
  185. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/registry/registry_strategy.py +0 -0
  186. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/services_config.py +0 -0
  187. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/services_models.py +0 -0
  188. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/setup/__init__.py +0 -0
  189. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/setup/default_setup.py +0 -0
  190. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/setup/grpc_setup.py +0 -0
  191. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/setup/setup_strategy.py +0 -0
  192. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/storage/__init__.py +0 -0
  193. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/storage/default_storage.py +0 -0
  194. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/storage/grpc_storage.py +0 -0
  195. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/storage/storage_strategy.py +0 -0
  196. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/task_manager/__init__.py +0 -0
  197. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/task_manager/default_task_manager.py +0 -0
  198. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/task_manager/redis_task_manager.py +0 -0
  199. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
  200. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/user_profile/__init__.py +0 -0
  201. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
  202. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
  203. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
  204. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/utils/__init__.py +0 -0
  205. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/utils/arg_parser.py +0 -0
  206. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/utils/conditional_schema.py +0 -0
  207. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/utils/development_mode_action.py +0 -0
  208. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/utils/dynamic_schema.py +0 -0
  209. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/utils/llm_ready_schema.py +0 -0
  210. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/utils/package_discover.py +0 -0
  211. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/utils/proto_utils.py +0 -0
  212. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin/utils/schema_splitter.py +0 -0
  213. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin.egg-info/SOURCES.txt +0 -0
  214. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin.egg-info/dependency_links.txt +0 -0
  215. {digitalkin-1.0.0.dev3 → digitalkin-1.0.0.dev5}/src/digitalkin.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalkin
3
- Version: 1.0.0.dev3
3
+ Version: 1.0.0.dev5
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
@@ -458,7 +458,7 @@ Requires-Dist: anyio>=4.13.0
458
458
  Requires-Dist: grpcio-health-checking==1.80.0
459
459
  Requires-Dist: grpcio-reflection==1.80.0
460
460
  Requires-Dist: grpcio-status==1.80.0
461
- Requires-Dist: pydantic>=2.12.5
461
+ Requires-Dist: pydantic>=2.12.4
462
462
  Requires-Dist: pydantic-settings>=2.14.0
463
463
  Requires-Dist: redis[hiredis]<8,>=7.4.0
464
464
  Provides-Extra: performance
@@ -33,11 +33,11 @@
33
33
  "grpcio-health-checking==1.80.0",
34
34
  "grpcio-reflection==1.80.0",
35
35
  "grpcio-status==1.80.0",
36
- "pydantic>=2.12.5",
36
+ "pydantic>=2.12.4",
37
37
  "pydantic-settings>=2.14.0",
38
38
  "redis[hiredis]>=7.4.0,<8",
39
39
  ]
40
- version = "1.0.0.dev3"
40
+ version = "1.0.0.dev5"
41
41
 
42
42
  [project.optional-dependencies]
43
43
  performance = [ "uvloop>=0.21" ]
@@ -59,8 +59,8 @@
59
59
  dev = [
60
60
  "build>=1.5.0",
61
61
  "bump-my-version>=1.3.0",
62
- "cryptography>=47.0.0",
63
- "mypy>=1.20.2",
62
+ "cryptography>=48.0.0",
63
+ "mypy>=2.0.0",
64
64
  "pre-commit>=4.6.0",
65
65
  "pyright>=1.1.409",
66
66
  "ruff>=0.15.12",
@@ -68,8 +68,8 @@
68
68
  "types-grpcio-health-checking>=1.0.0.20260408",
69
69
  "types-grpcio-reflection>=1.0.0.20260408",
70
70
  "types-grpcio>=1.0.0.20260408",
71
- "types-protobuf>=7.34.1.20260408",
72
- "typos>=1.45.2",
71
+ "types-protobuf>=7.34.1.20260503",
72
+ "typos>=1.46.0",
73
73
  ]
74
74
  docs = [
75
75
  "griffe-inherited-docstrings>=1.1.3",
@@ -5,4 +5,4 @@ from importlib.metadata import PackageNotFoundError, version
5
5
  try:
6
6
  __version__ = version("digitalkin")
7
7
  except PackageNotFoundError:
8
- __version__ = "1.0.0.dev3"
8
+ __version__ = "1.0.0.dev5"
@@ -83,6 +83,13 @@ class SingleJobManager(BaseJobManager[InputModelT, OutputModelT, SetupModelT]):
83
83
  self._redis_client = redis_client
84
84
  self._stream_writers: dict[str, RedisStreamWriter] = {}
85
85
 
86
+ # Pool one RedisTaskManager across all preload_instance calls.
87
+ # The class is task-id-stateless; its `_listener` is already a
88
+ # process-wide singleton via SharedRedisListener.get_or_create.
89
+ from digitalkin.services.task_manager.redis_task_manager import RedisTaskManager
90
+
91
+ self._task_manager_strategy = RedisTaskManager(self._redis_client)
92
+
86
93
  async def start(self) -> None:
87
94
  """Start manager (no-op, no external connections needed)."""
88
95
 
@@ -273,7 +280,6 @@ class SingleJobManager(BaseJobManager[InputModelT, OutputModelT, SetupModelT]):
273
280
  ``(module, job_id, callback)`` — pass to ``run_preloaded``.
274
281
  """
275
282
  from digitalkin.core.profiling.step_timer import StepTimer
276
- from digitalkin.services.task_manager.redis_task_manager import RedisTaskManager
277
283
 
278
284
  timer = StepTimer()
279
285
  job_id = job_id or str(uuid.uuid4())
@@ -288,7 +294,8 @@ class SingleJobManager(BaseJobManager[InputModelT, OutputModelT, SetupModelT]):
288
294
  )
289
295
  timer.mark("factory_create")
290
296
 
291
- module.context.task_manager = RedisTaskManager(self._redis_client)
297
+ # Reuse the pooled RedisTaskManager — task-id-stateless, safe to share.
298
+ module.context.task_manager = self._task_manager_strategy
292
299
  timer.mark("redis_task_manager")
293
300
 
294
301
  if callback is None:
@@ -115,8 +115,16 @@ class ModuleRunner:
115
115
  nonlocal first_logged
116
116
  data = output_data.model_dump(mode="json")
117
117
  if data.get("root", {}).get("protocol") == "stream.end":
118
+ t_eos_write_start = time.perf_counter_ns()
118
119
  await self._redis_client.xadd(stream_key, {"eos": b"true"})
119
120
  await self._redis_client.expire(stream_key, 60)
121
+ t_eos_write_end = time.perf_counter_ns()
122
+ logger.info(
123
+ "[close-debug] producer_eos_write: xadd_expire=%.2fms t_done_ns=%d task_id=%s",
124
+ (t_eos_write_end - t_eos_write_start) / 1e6,
125
+ t_eos_write_end,
126
+ task_id,
127
+ )
120
128
  return
121
129
  s = struct_pb2.Struct()
122
130
  s.update(data)
@@ -369,11 +369,13 @@ class ProtoStreamReader:
369
369
  """
370
370
  entries_since_save = 0
371
371
  while True:
372
+ t_xread_start = time.perf_counter_ns()
372
373
  result = await self._redis_client.xread(
373
374
  {self._stream_key: self._last_id},
374
375
  count=count,
375
376
  block=block_ms,
376
377
  )
378
+ t_xread_end = time.perf_counter_ns()
377
379
  if not result:
378
380
  continue
379
381
 
@@ -383,6 +385,13 @@ class ProtoStreamReader:
383
385
 
384
386
  eos = fields.get(b"eos", b"")
385
387
  if eos == b"true":
388
+ logger.info(
389
+ "[close-debug] reader_saw_eos: last_xread_block=%.2fms "
390
+ "t_seen_ns=%d task_id=%s",
391
+ (t_xread_end - t_xread_start) / 1e6,
392
+ t_xread_end,
393
+ self._task_id,
394
+ )
386
395
  await self._save_cursor()
387
396
  return
388
397
 
@@ -19,7 +19,6 @@ _prof = ProfilingSettings()
19
19
  # Redis Key Patterns (not configurable — structural)
20
20
  # ══════════════════════════════════════════════════════════════════
21
21
 
22
- REDIS_KEY_SESSION = "gateway:session:{task_id}"
23
22
  REDIS_KEY_STREAM = "task:{task_id}:stream"
24
23
  REDIS_KEY_INPUT_STREAM = "task:{task_id}:input"
25
24
  REDIS_KEY_CURSOR = "task:{task_id}:cursor"
@@ -31,7 +30,6 @@ REDIS_KEY_SIGNAL_CHANNEL = "signal_ch:{task_id}"
31
30
 
32
31
  MAX_STREAMS = _gw.max_streams
33
32
  MAX_LOCAL_CACHE = _gw.max_local_cache
34
- SESSION_STATE_TTL_S = _gw.session_state_ttl
35
33
  DIAL_BACK_BIDI_TIMEOUT_S = _gw.dial_back_bidi_timeout_s
36
34
 
37
35
  # ══════════════════════════════════════════════════════════════════
@@ -555,8 +555,17 @@ class GatewayServicer:
555
555
  # consumed silently by ProtoStreamReader). Emit an explicit stream.end
556
556
  # sentinel so the wire contract is uniform: every stream ends with
557
557
  # exactly one stream.end entry, regardless of how it concluded.
558
+ t_after_reader = time.perf_counter_ns()
558
559
  seq += 1
559
560
  yield self._sentinel(seq, task_id, "stream.end")
561
+ t_after_yield = time.perf_counter_ns()
562
+ logger.info(
563
+ "[close-debug] gateway_stream_end: reader_to_yield=%.2fms "
564
+ "t_yielded_ns=%d task_id=%s",
565
+ (t_after_yield - t_after_reader) / 1e6,
566
+ t_after_yield,
567
+ task_id,
568
+ )
560
569
 
561
570
  async def _dial_consumer( # noqa: C901, PLR0912, PLR0915
562
571
  self,
@@ -6,10 +6,9 @@ bound to the dial-back asyncio task: the task's ``finally`` calls
6
6
  ``BaseException`` propagated past finally), the task done-callback
7
7
  force-unregisters as a backstop.
8
8
 
9
- Optional Redis session-state mirror (``gateway:session:{task_id}`` HSET)
10
- is written on register and deleted on unregister for cross-instance
11
- observability. Heartbeat-based zombie reaping is gone — long streams
12
- were getting cut off when their heartbeat zset entry went stale.
9
+ No Redis I/O on register/unregister — the gateway is fully local for
10
+ session lifecycle. The previous Redis session-state mirror had no readers
11
+ once the heartbeat reaper was retired.
13
12
  """
14
13
 
15
14
  from __future__ import annotations
@@ -18,13 +17,10 @@ import asyncio
18
17
  from collections import OrderedDict
19
18
  from typing import TYPE_CHECKING, Any
20
19
 
21
- from redis.exceptions import RedisError
22
-
23
20
  from digitalkin.core.resilience.task_supervisor import log_unhandled
24
21
  from digitalkin.grpc_servers.gateway_constants import (
25
22
  MAX_LOCAL_CACHE,
26
23
  MAX_STREAMS,
27
- SESSION_STATE_TTL_S,
28
24
  )
29
25
  from digitalkin.logger import logger
30
26
 
@@ -32,62 +28,38 @@ if TYPE_CHECKING:
32
28
  from digitalkin.core.task_manager.redis.redis_client import RedisClient
33
29
  from digitalkin.grpc_servers.stream_session import StreamSession
34
30
 
35
- # Lua: atomic session-state write on register.
36
- # KEYS: [1]=session_key (empty string to skip)
37
- # ARGV: [1]=setup_id, [2]=mission_id, [3]=session_ttl
38
- # Returns 1 unconditionally — capacity is enforced process-locally now.
39
- _LUA_REGISTER = """
40
- local session_key = KEYS[1]
41
- if session_key ~= '' then
42
- redis.call('HSET', session_key, 'status', 'starting', 'setup_id', ARGV[1], 'mission_id', ARGV[2])
43
- redis.call('EXPIRE', session_key, tonumber(ARGV[3]))
44
- end
45
- return 1
46
- """
47
-
48
31
 
49
32
  class StreamRegistry:
50
33
  """Tracks active stream sessions per-instance + supervises spawned tasks.
51
34
 
52
35
  Local dict is a bounded LRU cache of sessions with active BiDi
53
36
  connections on this gateway instance. Capacity is enforced
54
- process-locally against ``max_streams``. Optional Redis HSET
55
- mirrors session metadata for observability.
37
+ process-locally against ``max_streams``.
56
38
  """
57
39
 
58
40
  _local_cache: OrderedDict[str, StreamSession]
59
41
  _max_local: int
60
42
  _max_streams: int
61
43
  _monitored_tasks: set[asyncio.Task[Any]]
62
- _redis_client: RedisClient
63
-
64
- @staticmethod
65
- def session_key(task_id: str) -> str:
66
- """Redis hash key for session metadata.
67
-
68
- Returns:
69
- Key in the format ``gateway:session:{task_id}``.
70
- """
71
- return f"gateway:session:{task_id}"
72
44
 
73
45
  def __init__(
74
46
  self,
75
- redis_client: RedisClient,
47
+ redis_client: RedisClient | None = None, # noqa: ARG002 — kept for back-compat with callers
76
48
  max_streams: int = MAX_STREAMS,
77
49
  max_local: int = MAX_LOCAL_CACHE,
78
50
  ) -> None:
79
51
  """Initialize the stream registry.
80
52
 
81
53
  Args:
54
+ redis_client: Unused (kept for back-compat); the registry no
55
+ longer touches Redis on register/unregister.
82
56
  max_streams: Maximum concurrent streams on this instance.
83
57
  max_local: Maximum sessions cached locally on this instance.
84
- redis_client: Redis client for the optional session-state mirror.
85
58
  """
86
59
  self._local_cache = OrderedDict()
87
60
  self._max_local = max_local
88
61
  self._max_streams = max_streams
89
62
  self._monitored_tasks = set()
90
- self._redis_client = redis_client
91
63
 
92
64
  @property
93
65
  def active_count(self) -> int:
@@ -97,15 +69,15 @@ class StreamRegistry:
97
69
  async def register(
98
70
  self,
99
71
  session: StreamSession,
100
- setup_id: str = "",
101
- mission_id: str = "",
72
+ setup_id: str = "", # noqa: ARG002 — accepted for back-compat with callers
73
+ mission_id: str = "", # noqa: ARG002 — accepted for back-compat with callers
102
74
  ) -> bool:
103
75
  """Register a new session. Capacity is enforced process-locally.
104
76
 
105
77
  Args:
106
78
  session: The stream session to register.
107
- setup_id: Setup ID to store in session state (optional).
108
- mission_id: Mission ID to store in session state (optional).
79
+ setup_id: Accepted for back-compat; no longer persisted to Redis.
80
+ mission_id: Accepted for back-compat; no longer persisted to Redis.
109
81
 
110
82
  Returns:
111
83
  True if registered, False if at capacity (this instance).
@@ -114,18 +86,6 @@ class StreamRegistry:
114
86
  if len(self._local_cache) >= self._max_streams:
115
87
  return False
116
88
 
117
- # Optional: mirror session metadata to Redis for observability.
118
- if setup_id:
119
- try:
120
- await self._redis_client.eval(
121
- _LUA_REGISTER,
122
- [self.session_key(session.task_id)],
123
- [setup_id, mission_id, str(SESSION_STATE_TTL_S)],
124
- )
125
- except RedisError:
126
- logger.exception("Redis session-state write failed: task_id=%s", session.task_id)
127
- # Continue — local registration is enough.
128
-
129
89
  # LRU cache — evict oldest if past max_local (separate from
130
90
  # max_streams which gates new admissions above).
131
91
  if len(self._local_cache) >= self._max_local:
@@ -151,7 +111,7 @@ class StreamRegistry:
151
111
  return session
152
112
 
153
113
  async def unregister(self, task_id: str) -> StreamSession | None:
154
- """Unregister a session and delete its Redis session-state key.
114
+ """Unregister a session from the local cache.
155
115
 
156
116
  Args:
157
117
  task_id: Session to remove.
@@ -160,12 +120,6 @@ class StreamRegistry:
160
120
  The removed session, or None if not found locally.
161
121
  """
162
122
  session = self._local_cache.pop(task_id, None)
163
-
164
- try:
165
- await self._redis_client.delete(self.session_key(task_id))
166
- except RedisError:
167
- logger.exception("Redis session-state delete failed: task_id=%s", task_id)
168
-
169
123
  if session is not None:
170
124
  logger.debug("StreamRegistry.unregister: task_id=%s local=%d", task_id, len(self._local_cache))
171
125
  return session
@@ -56,7 +56,6 @@ class GatewaySettings(BaseSettings):
56
56
 
57
57
  max_streams: int = Field(default=20000, description="Max concurrent gateway sessions (per instance)")
58
58
  max_local_cache: int = Field(default=5000, description="Max local session cache entries")
59
- session_state_ttl: int = Field(default=3600, description="Session metadata TTL in seconds")
60
59
  redis_health_timeout: float = Field(default=5.0, description="Redis health check timeout in seconds")
61
60
  dial_back_bidi_timeout_s: float = Field(
62
61
  default=300.0,
@@ -695,11 +695,14 @@ class BaseModule( # Module SDK base class requires many public methods # noqa:
695
695
  t3 = _t.perf_counter_ns()
696
696
  self._status = ModuleStatus.STOPPED
697
697
  logger.info(
698
- "module.stop: cleanup=%.1fms flush=%.1fms eos=%.1fms total=%.1fms",
698
+ "[close-debug] module.stop: cleanup=%.2fms flush=%.2fms eos=%.2fms "
699
+ "total=%.2fms t_done_ns=%d task_id=%s",
699
700
  (t1 - t0) / 1e6,
700
701
  (t2 - t1) / 1e6,
701
702
  (t3 - t2) / 1e6,
702
703
  (t3 - t0) / 1e6,
704
+ t3,
705
+ self.context.session.current_ids().get("task_id", ""),
703
706
  )
704
707
  except Exception:
705
708
  self._status = ModuleStatus.FAILED
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalkin
3
- Version: 1.0.0.dev3
3
+ Version: 1.0.0.dev5
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
@@ -458,7 +458,7 @@ Requires-Dist: anyio>=4.13.0
458
458
  Requires-Dist: grpcio-health-checking==1.80.0
459
459
  Requires-Dist: grpcio-reflection==1.80.0
460
460
  Requires-Dist: grpcio-status==1.80.0
461
- Requires-Dist: pydantic>=2.12.5
461
+ Requires-Dist: pydantic>=2.12.4
462
462
  Requires-Dist: pydantic-settings>=2.14.0
463
463
  Requires-Dist: redis[hiredis]<8,>=7.4.0
464
464
  Provides-Extra: performance
@@ -4,7 +4,7 @@ anyio>=4.13.0
4
4
  grpcio-health-checking==1.80.0
5
5
  grpcio-reflection==1.80.0
6
6
  grpcio-status==1.80.0
7
- pydantic>=2.12.5
7
+ pydantic>=2.12.4
8
8
  pydantic-settings>=2.14.0
9
9
  redis[hiredis]<8,>=7.4.0
10
10
 
File without changes