digitalkin 1.0.0.dev17__tar.gz → 1.0.0.dev19__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 (231) hide show
  1. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/PKG-INFO +2 -2
  2. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/pyproject.toml +5 -5
  3. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/__version__.py +1 -1
  4. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/module_runner.py +17 -1
  5. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/redis/proto_streams.py +7 -0
  6. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/redis/redis_client.py +16 -16
  7. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/redis/redis_state.py +2 -2
  8. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/_base_server.py +2 -1
  9. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/gateway_servicer.py +251 -79
  10. digitalkin-1.0.0.dev19/src/digitalkin/grpc_servers/interceptors/request_ids.py +257 -0
  11. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/utils/circuit_breaker.py +16 -0
  12. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +90 -55
  13. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/logger.py +22 -0
  14. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/grpc_servers/stream_error_codes.py +1 -0
  15. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/grpc_client.py +3 -3
  16. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/communication/grpc_communication.py +16 -0
  17. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin.egg-info/PKG-INFO +2 -2
  18. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin.egg-info/SOURCES.txt +1 -0
  19. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin.egg-info/requires.txt +1 -1
  20. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/LICENSE +0 -0
  21. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/README.md +0 -0
  22. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/__init__.py +0 -0
  23. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/mock/__init__.py +0 -0
  24. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/mock/mock_pb2.py +0 -0
  25. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
  26. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/server_async_insecure.py +0 -0
  27. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/server_async_secure.py +0 -0
  28. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/server_sync_insecure.py +0 -0
  29. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/server_sync_secure.py +0 -0
  30. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/__init__.py +0 -0
  31. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/echo_module.py +0 -0
  32. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/models/__init__.py +0 -0
  33. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/models/input.py +0 -0
  34. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/models/output.py +0 -0
  35. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/models/secret.py +0 -0
  36. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/models/setup.py +0 -0
  37. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/server.py +0 -0
  38. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/triggers/__init__.py +0 -0
  39. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/triggers/message_trigger.py +0 -0
  40. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/modules/__init__.py +0 -0
  41. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/modules/archetype_with_tools_module.py +0 -0
  42. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/modules/cpu_intensive_module.py +0 -0
  43. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/modules/dynamic_setup_module.py +0 -0
  44. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/modules/minimal_llm_module.py +0 -0
  45. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/modules/text_transform_module.py +0 -0
  46. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
  47. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
  48. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
  49. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
  50. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
  51. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/monitoring/tests/test_metrics.py +0 -0
  52. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/client.py +0 -0
  53. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/echo_module.py +0 -0
  54. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/models/__init__.py +0 -0
  55. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/models/input.py +0 -0
  56. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/models/output.py +0 -0
  57. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/models/secret.py +0 -0
  58. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/models/setup.py +0 -0
  59. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/server.py +0 -0
  60. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/triggers/__init__.py +0 -0
  61. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/triggers/message_trigger.py +0 -0
  62. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/services/filesystem_module.py +0 -0
  63. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/services/storage_module.py +0 -0
  64. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/setup.cfg +0 -0
  65. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/__init__.py +0 -0
  66. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/community/__init__.py +0 -0
  67. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/community/agno/__init__.py +0 -0
  68. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/community/agno/agno_adapter.py +0 -0
  69. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/community/agno/agui_tools.py +0 -0
  70. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/community/agno/hitl.py +0 -0
  71. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/community/agno/models.py +0 -0
  72. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/__init__.py +0 -0
  73. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/common/__init__.py +0 -0
  74. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/common/factories.py +0 -0
  75. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/exceptions.py +0 -0
  76. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/job_manager/__init__.py +0 -0
  77. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
  78. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
  79. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/profiling/__init__.py +0 -0
  80. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/profiling/step_timer.py +0 -0
  81. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/profiling/task_profiler.py +0 -0
  82. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/resilience/__init__.py +0 -0
  83. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/resilience/bulkhead.py +0 -0
  84. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/resilience/task_supervisor.py +0 -0
  85. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/__init__.py +0 -0
  86. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
  87. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
  88. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/redis/__init__.py +0 -0
  89. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/redis/redis_idempotency.py +0 -0
  90. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/redis/redis_signal.py +0 -0
  91. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
  92. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/task_executor.py +0 -0
  93. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/task_session.py +0 -0
  94. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/exceptions.py +0 -0
  95. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/__init__.py +0 -0
  96. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/exceptions.py +0 -0
  97. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/interceptors/__init__.py +0 -0
  98. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/m2m_call_registry.py +0 -0
  99. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/module_server.py +0 -0
  100. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
  101. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/stream_registry.py +0 -0
  102. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/stream_session.py +0 -0
  103. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
  104. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
  105. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
  106. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/utils/validators.py +0 -0
  107. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/__init__.py +0 -0
  108. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/agui_mixin.py +0 -0
  109. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/base_mixin.py +0 -0
  110. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/cost_mixin.py +0 -0
  111. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/file_history_mixin.py +0 -0
  112. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
  113. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/logger_mixin.py +0 -0
  114. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/storage_mixin.py +0 -0
  115. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/__init__.py +0 -0
  116. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/core/__init__.py +0 -0
  117. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/core/job_manager_models.py +0 -0
  118. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/core/redis.py +0 -0
  119. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/core/task_monitor.py +0 -0
  120. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/events/__init__.py +0 -0
  121. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/events/agent_events.py +0 -0
  122. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
  123. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/grpc_servers/circuit_breaker.py +0 -0
  124. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/grpc_servers/m2m.py +0 -0
  125. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/grpc_servers/models.py +0 -0
  126. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/grpc_servers/types.py +0 -0
  127. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/__init__.py +0 -0
  128. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/ag_ui.py +0 -0
  129. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/base_types.py +0 -0
  130. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/module.py +0 -0
  131. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/module_context.py +0 -0
  132. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/module_types.py +0 -0
  133. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/request_metadata.py +0 -0
  134. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/select_schema.py +0 -0
  135. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/setup_types.py +0 -0
  136. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/tool_cache.py +0 -0
  137. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/tool_reference.py +0 -0
  138. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/utility.py +0 -0
  139. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/services/__init__.py +0 -0
  140. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/services/cost.py +0 -0
  141. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/services/registry.py +0 -0
  142. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/services/services.py +0 -0
  143. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/services/storage.py +0 -0
  144. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/__init__.py +0 -0
  145. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/gateway.py +0 -0
  146. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/log.py +0 -0
  147. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/module.py +0 -0
  148. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/profiling.py +0 -0
  149. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/queue.py +0 -0
  150. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/redis.py +0 -0
  151. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/resilience.py +0 -0
  152. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/server/__init__.py +0 -0
  153. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/server/channel.py +0 -0
  154. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/server/grpc.py +0 -0
  155. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/server/server.py +0 -0
  156. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/server/servicer.py +0 -0
  157. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/task_manager.py +0 -0
  158. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/utils/__init__.py +0 -0
  159. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/utils/channel.py +0 -0
  160. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/utils/__init__.py +0 -0
  161. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/utils/dynamic_schema.py +0 -0
  162. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/__init__.py +0 -0
  163. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/_base_module.py +0 -0
  164. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/archetype_module.py +0 -0
  165. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/tool_module.py +0 -0
  166. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/trigger_handler.py +0 -0
  167. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/triggers/__init__.py +0 -0
  168. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
  169. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
  170. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
  171. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/py.typed +0 -0
  172. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/__init__.py +0 -0
  173. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/base_strategy.py +0 -0
  174. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/communication/__init__.py +0 -0
  175. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/communication/communication_strategy.py +0 -0
  176. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/communication/default_communication.py +0 -0
  177. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/communication/exceptions.py +0 -0
  178. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/cost/__init__.py +0 -0
  179. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/cost/cost_strategy.py +0 -0
  180. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/cost/default_cost.py +0 -0
  181. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/cost/exceptions.py +0 -0
  182. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/cost/grpc_cost.py +0 -0
  183. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/filesystem/__init__.py +0 -0
  184. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
  185. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/filesystem/exceptions.py +0 -0
  186. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
  187. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
  188. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/identity/__init__.py +0 -0
  189. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/identity/default_identity.py +0 -0
  190. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/identity/identity_strategy.py +0 -0
  191. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/registry/__init__.py +0 -0
  192. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/registry/default_registry.py +0 -0
  193. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/registry/exceptions.py +0 -0
  194. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/registry/grpc_registry.py +0 -0
  195. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/registry/registry_models.py +0 -0
  196. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/registry/registry_strategy.py +0 -0
  197. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/services_config.py +0 -0
  198. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/services_models.py +0 -0
  199. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/setup/__init__.py +0 -0
  200. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/setup/default_setup.py +0 -0
  201. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/setup/exceptions.py +0 -0
  202. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/setup/grpc_setup.py +0 -0
  203. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/setup/setup_strategy.py +0 -0
  204. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/storage/__init__.py +0 -0
  205. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/storage/default_storage.py +0 -0
  206. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/storage/exceptions.py +0 -0
  207. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/storage/grpc_storage.py +0 -0
  208. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/storage/storage_strategy.py +0 -0
  209. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/task_manager/__init__.py +0 -0
  210. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/task_manager/default_task_manager.py +0 -0
  211. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/task_manager/exceptions.py +0 -0
  212. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/task_manager/redis_task_manager.py +0 -0
  213. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
  214. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/user_profile/__init__.py +0 -0
  215. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
  216. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/user_profile/exceptions.py +0 -0
  217. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
  218. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
  219. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/__init__.py +0 -0
  220. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/arg_parser.py +0 -0
  221. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/conditional_schema.py +0 -0
  222. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/development_mode_action.py +0 -0
  223. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/dynamic_schema.py +0 -0
  224. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/exceptions.py +0 -0
  225. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/llm_ready_schema.py +0 -0
  226. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/package_discover.py +0 -0
  227. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/proto_utils.py +0 -0
  228. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/schema_splitter.py +0 -0
  229. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin.egg-info/dependency_links.txt +0 -0
  230. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin.egg-info/top_level.txt +0 -0
  231. {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/tests/test_exceptions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalkin
3
- Version: 1.0.0.dev17
3
+ Version: 1.0.0.dev19
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
@@ -460,7 +460,7 @@ Requires-Dist: grpcio-reflection==1.81.0
460
460
  Requires-Dist: grpcio-status==1.81.0
461
461
  Requires-Dist: pydantic>=2.12.4
462
462
  Requires-Dist: pydantic-settings>=2.14.1
463
- Requires-Dist: redis[hiredis]<8,>=7.4.0
463
+ Requires-Dist: redis[hiredis]<9,>=7.4.0
464
464
  Provides-Extra: performance
465
465
  Requires-Dist: uvloop>=0.21; extra == "performance"
466
466
  Provides-Extra: profiling
@@ -35,9 +35,9 @@
35
35
  "grpcio-status==1.81.0",
36
36
  "pydantic>=2.12.4",
37
37
  "pydantic-settings>=2.14.1",
38
- "redis[hiredis]>=7.4.0,<8",
38
+ "redis[hiredis]>=7.4.0,<9",
39
39
  ]
40
- version = "1.0.0.dev17"
40
+ version = "1.0.0.dev19"
41
41
 
42
42
  [project.optional-dependencies]
43
43
  performance = [ "uvloop>=0.21" ]
@@ -62,14 +62,14 @@
62
62
  "cryptography>=48.0.0",
63
63
  "mypy>=2.1.0",
64
64
  "pre-commit>=4.6.0",
65
- "pyright>=1.1.409",
66
- "ruff>=0.15.13",
65
+ "pyright>=1.1.411",
66
+ "ruff>=0.15.20",
67
67
  "twine>=6.2.0",
68
68
  "types-grpcio-health-checking>=1.0.0.20260518",
69
69
  "types-grpcio-reflection>=1.0.0.20260508",
70
70
  "types-grpcio>=1.0.0.20260518",
71
71
  "types-protobuf>=7.34.1.20260518",
72
- "typos>=1.46.2",
72
+ "typos>=1.48.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.dev17"
8
+ __version__ = "1.0.0.dev19"
@@ -8,10 +8,12 @@ from typing import TYPE_CHECKING, Any
8
8
 
9
9
  from google.protobuf import json_format, struct_pb2
10
10
  from pydantic import ValidationError
11
+ from redis.exceptions import RedisError
11
12
 
12
13
  from digitalkin.core.exceptions import BackpressureTimeoutError
13
14
  from digitalkin.core.profiling.step_timer import StepTimer
14
15
  from digitalkin.core.profiling.task_profiler import TaskProfiler
16
+ from digitalkin.grpc_servers.interceptors.request_ids import RequestContext
15
17
  from digitalkin.logger import logger
16
18
  from digitalkin.models.grpc_servers.stream_error_codes import StreamErrorCode
17
19
  from digitalkin.models.settings.gateway import get_gateway_settings
@@ -40,7 +42,7 @@ class ModuleRunner:
40
42
  self._redis_client = redis_client
41
43
  self._servicer = servicer
42
44
 
43
- async def run( # noqa: PLR0914, PLR0915
45
+ async def run( # noqa: C901, PLR0914, PLR0915
44
46
  self,
45
47
  query: struct_pb2.Struct,
46
48
  *,
@@ -62,6 +64,9 @@ class ModuleRunner:
62
64
  log_extra = {"task_id": task_id, "setup_id": setup_id, "mission_id": mission_id}
63
65
  stream_key = f"task:{task_id}:stream"
64
66
  timer = StepTimer()
67
+ # Bind IDs so every downstream gRPC call (registry/storage/cost/...) and
68
+ # log record made during this task carries them via the interceptors/filter.
69
+ ctx_token = RequestContext.bind(task_id=task_id, setup_id=setup_id, mission_id=mission_id)
65
70
 
66
71
  # Construct profiler outside try so finally can always stop it.
67
72
  profiling = get_profiling_settings()
@@ -211,6 +216,16 @@ class ModuleRunner:
211
216
  except BackpressureTimeoutError as exc:
212
217
  logger.exception("ModuleRunner: backpressure timeout", extra=log_extra)
213
218
  await on_fatal(StreamErrorCode.BACKPRESSURE_TIMEOUT.value, str(exc))
219
+ except RedisError as exc:
220
+ logger.error(
221
+ "[VALIDATE R2] ModuleRunner: Redis unavailable writing output: task_id=%s",
222
+ task_id,
223
+ extra=log_extra,
224
+ ) # TODO(validate): remove after prod validation
225
+ await on_fatal(
226
+ StreamErrorCode.REDIS_UNAVAILABLE.value,
227
+ f"redis unavailable: {type(exc).__name__}: {exc}",
228
+ )
214
229
  except Exception as exc:
215
230
  logger.exception("ModuleRunner: module job failed", extra=log_extra)
216
231
  await on_fatal(
@@ -219,3 +234,4 @@ class ModuleRunner:
219
234
  )
220
235
  finally:
221
236
  profiler.stop()
237
+ RequestContext.reset(ctx_token)
@@ -73,6 +73,7 @@ class ProtoStreamReader:
73
73
  self,
74
74
  count: int = 50,
75
75
  cursor_save_interval: int = 100,
76
+ skip_to_seq: int | None = None,
76
77
  ) -> AsyncGenerator[struct_pb2.Struct, None]:
77
78
  """Read proto Structs from the stream until EOS.
78
79
 
@@ -87,6 +88,9 @@ class ProtoStreamReader:
87
88
  Args:
88
89
  count: Max entries per XREAD call.
89
90
  cursor_save_interval: Save cursor every N entries (default 100).
91
+ skip_to_seq: If set, entries with stored ``seq <= skip_to_seq``
92
+ are consumed (cursor and gap detection advance) but not
93
+ yielded, so a resumed reader starts past the consumer's cursor.
90
94
 
91
95
  Yields:
92
96
  Proto Struct objects from the stream.
@@ -134,6 +138,9 @@ class ProtoStreamReader:
134
138
  )
135
139
  self._last_seq = seq
136
140
 
141
+ if skip_to_seq is not None and seq <= skip_to_seq:
142
+ continue
143
+
137
144
  pb_bytes = fields.get(b"pb", b"")
138
145
  if not pb_bytes:
139
146
  continue
@@ -83,8 +83,8 @@ class RedisClient: # noqa: PLR0904
83
83
  try:
84
84
  timeout = get_redis_settings().pool.health_check_timeout
85
85
  results = await asyncio.gather(
86
- asyncio.wait_for(self._client.ping(), timeout=timeout), # type: ignore[arg-type]
87
- asyncio.wait_for(self._blocking_client.ping(), timeout=timeout), # type: ignore[arg-type]
86
+ asyncio.wait_for(self._client.ping(), timeout=timeout),
87
+ asyncio.wait_for(self._blocking_client.ping(), timeout=timeout),
88
88
  )
89
89
  return all(results)
90
90
  except Exception:
@@ -107,7 +107,7 @@ class RedisClient: # noqa: PLR0904
107
107
  Returns:
108
108
  Number of fields added (not updated).
109
109
  """
110
- return await self._client.hset(name, mapping=mapping) # type: ignore[misc]
110
+ return await self._client.hset(name, mapping=mapping) # type: ignore[arg-type]
111
111
 
112
112
  async def hgetall(self, name: str) -> dict[bytes, bytes]:
113
113
  """Get all fields and values in a Redis hash.
@@ -118,7 +118,7 @@ class RedisClient: # noqa: PLR0904
118
118
  Returns:
119
119
  All field-value pairs as bytes.
120
120
  """
121
- return await self._client.hgetall(name) # type: ignore[misc]
121
+ return await self._client.hgetall(name) # type: ignore[return-value]
122
122
 
123
123
  async def publish(self, channel: str, message: str | bytes) -> int:
124
124
  """Publish a message to a Redis pub/sub channel.
@@ -161,7 +161,7 @@ class RedisClient: # noqa: PLR0904
161
161
  Returns:
162
162
  True if Redis responds.
163
163
  """
164
- return await self._client.ping() # type: ignore[misc]
164
+ return await self._client.ping()
165
165
 
166
166
  def pubsub(self) -> aioredis.client.PubSub:
167
167
  """Return a PubSub object for subscribe operations.
@@ -200,7 +200,7 @@ class RedisClient: # noqa: PLR0904
200
200
  if maxlen is not None:
201
201
  kwargs["maxlen"] = maxlen
202
202
  kwargs["approximate"] = True
203
- return await self._client.xadd(name, fields, **kwargs) # type: ignore[arg-type]
203
+ return await self._client.xadd(name, fields, **kwargs) # type: ignore[arg-type, return-value]
204
204
 
205
205
  async def xread(
206
206
  self,
@@ -222,7 +222,7 @@ class RedisClient: # noqa: PLR0904
222
222
  Returns:
223
223
  List of [stream_key, [(entry_id, fields), ...]] pairs.
224
224
  """
225
- return await self._blocking_client.xread(streams, count=count, block=block) # type: ignore[arg-type]
225
+ return await self._blocking_client.xread(streams, count=count, block=block) # type: ignore[arg-type, return-value]
226
226
 
227
227
  async def xlen(self, name: str) -> int:
228
228
  """Get the number of entries in a Redis Stream.
@@ -253,7 +253,7 @@ class RedisClient: # noqa: PLR0904
253
253
  Returns:
254
254
  List of (entry_id, fields) tuples, newest first.
255
255
  """
256
- return await self._client.xrevrange(name, max=max_id, min=min_id, count=count)
256
+ return await self._client.xrevrange(name, max=max_id, min=min_id, count=count) # type: ignore[return-value]
257
257
 
258
258
  async def zadd(self, name: str, mapping: dict[str, float]) -> int:
259
259
  """Add members to a sorted set with scores.
@@ -265,7 +265,7 @@ class RedisClient: # noqa: PLR0904
265
265
  Returns:
266
266
  Number of members added.
267
267
  """
268
- return await self._client.zadd(name, mapping)
268
+ return await self._client.zadd(name, mapping) # type: ignore[return-value]
269
269
 
270
270
  async def zrangebyscore(
271
271
  self,
@@ -283,7 +283,7 @@ class RedisClient: # noqa: PLR0904
283
283
  Returns:
284
284
  List of member values.
285
285
  """
286
- return await self._client.zrangebyscore(name, min_score, max_score)
286
+ return await self._client.zrangebyscore(name, min_score, max_score) # type: ignore[return-value]
287
287
 
288
288
  async def zrem(self, name: str, *members: str) -> int:
289
289
  """Remove members from a sorted set.
@@ -319,7 +319,7 @@ class RedisClient: # noqa: PLR0904
319
319
  Returns:
320
320
  Script return value.
321
321
  """
322
- return await self._client.eval(script, len(keys), *keys, *args) # type: ignore[misc]
322
+ return await self._client.eval(script, len(keys), *keys, *args)
323
323
 
324
324
  async def get(self, name: str) -> bytes | None:
325
325
  """Get the value of a key.
@@ -330,7 +330,7 @@ class RedisClient: # noqa: PLR0904
330
330
  Returns:
331
331
  Value as bytes, or None if key does not exist.
332
332
  """
333
- return await self._client.get(name)
333
+ return await self._client.get(name) # type: ignore[return-value]
334
334
 
335
335
  async def set(
336
336
  self,
@@ -349,7 +349,7 @@ class RedisClient: # noqa: PLR0904
349
349
  Returns:
350
350
  True if set successfully.
351
351
  """
352
- return await self._client.set(name, value, ex=ex)
352
+ return await self._client.set(name, value, ex=ex) # type: ignore[return-value]
353
353
 
354
354
  async def sadd(self, name: str, *values: str) -> int:
355
355
  """Add members to a Redis set.
@@ -361,7 +361,7 @@ class RedisClient: # noqa: PLR0904
361
361
  Returns:
362
362
  Number of members added.
363
363
  """
364
- return await self._client.sadd(name, *values) # type: ignore[misc]
364
+ return await self._client.sadd(name, *values)
365
365
 
366
366
  async def srem(self, name: str, *values: str) -> int:
367
367
  """Remove members from a Redis set.
@@ -373,7 +373,7 @@ class RedisClient: # noqa: PLR0904
373
373
  Returns:
374
374
  Number of members removed.
375
375
  """
376
- return await self._client.srem(name, *values) # type: ignore[misc]
376
+ return await self._client.srem(name, *values)
377
377
 
378
378
  async def smembers(self, name: str) -> builtins.set[bytes]:
379
379
  """Get all members of a Redis set.
@@ -384,4 +384,4 @@ class RedisClient: # noqa: PLR0904
384
384
  Returns:
385
385
  Set of member values as bytes.
386
386
  """
387
- return await self._client.smembers(name) # type: ignore[misc]
387
+ return await self._client.smembers(name) # type: ignore[return-value]
@@ -59,7 +59,7 @@ class RedisStateManager:
59
59
  mapping[k] = str(v)
60
60
  # Pipeline: HSET + EXPIRE in 1 round-trip instead of 2
61
61
  pipe = self._redis_client.pipeline()
62
- pipe.hset(key, mapping=mapping)
62
+ pipe.hset(key, mapping=mapping) # type: ignore[arg-type]
63
63
  pipe.expire(key, get_redis_settings().task_ttl)
64
64
  await pipe.execute()
65
65
  logger.debug("RedisStateManager.set_status: task_id=%s status=%s", task_id, status)
@@ -94,7 +94,7 @@ class RedisStateManager:
94
94
  if exception_traceback is not None:
95
95
  mapping["exception_traceback"] = exception_traceback
96
96
  pipe = self._redis_client.pipeline()
97
- pipe.hset(key, mapping=mapping)
97
+ pipe.hset(key, mapping=mapping) # type: ignore[arg-type]
98
98
  pipe.expire(key, get_redis_settings().task_ttl)
99
99
  await pipe.execute()
100
100
 
@@ -28,6 +28,7 @@ from digitalkin.grpc_servers.exceptions import (
28
28
  ServerStateError,
29
29
  ServicerError,
30
30
  )
31
+ from digitalkin.grpc_servers.interceptors.request_ids import RequestIdServerInterceptor
31
32
  from digitalkin.grpc_servers.utils.grpc_client_wrapper import GrpcClientWrapper
32
33
  from digitalkin.logger import logger
33
34
  from digitalkin.models.grpc_servers.types import GrpcServer, ServiceDescriptor, T
@@ -214,7 +215,7 @@ class BaseServer(abc.ABC):
214
215
  server = grpc_aio.server(
215
216
  options=get_server_settings().grpc.options,
216
217
  compression=grpc_compression,
217
- interceptors=self._interceptors or None,
218
+ interceptors=[RequestIdServerInterceptor(), *self._interceptors],
218
219
  maximum_concurrent_rpcs=get_server_settings().max_concurrent_rpcs,
219
220
  migration_thread_pool=futures.ThreadPoolExecutor(
220
221
  max_workers=get_server_settings().thread_pool_workers