digitalkin 0.3.5.dev9__tar.gz → 0.3.5.dev11__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 (165) hide show
  1. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/PKG-INFO +1 -1
  2. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/pyproject.toml +1 -1
  3. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/__version__.py +1 -1
  4. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/community/agno/agno_adapter.py +225 -96
  5. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/mixins/agui_mixin.py +95 -176
  6. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/events/__init__.py +4 -0
  7. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/events/agent_events.py +23 -0
  8. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin.egg-info/PKG-INFO +1 -1
  9. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/LICENSE +0 -0
  10. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/README.md +0 -0
  11. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/base_server/__init__.py +0 -0
  12. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/base_server/mock/__init__.py +0 -0
  13. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/base_server/mock/mock_pb2.py +0 -0
  14. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
  15. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/base_server/server_async_insecure.py +0 -0
  16. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/base_server/server_async_secure.py +0 -0
  17. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/base_server/server_sync_insecure.py +0 -0
  18. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/base_server/server_sync_secure.py +0 -0
  19. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/modules/__init__.py +0 -0
  20. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/modules/archetype_with_tools_module.py +0 -0
  21. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/modules/cpu_intensive_module.py +0 -0
  22. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/modules/dynamic_setup_module.py +0 -0
  23. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/modules/minimal_llm_module.py +0 -0
  24. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/modules/text_transform_module.py +0 -0
  25. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
  26. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
  27. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
  28. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
  29. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
  30. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/monitoring/tests/test_metrics.py +0 -0
  31. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/services/filesystem_module.py +0 -0
  32. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/examples/services/storage_module.py +0 -0
  33. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/setup.cfg +0 -0
  34. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/__init__.py +0 -0
  35. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/community/__init__.py +0 -0
  36. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/community/agno/__init__.py +0 -0
  37. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/__init__.py +0 -0
  38. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/common/__init__.py +0 -0
  39. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/common/factories.py +0 -0
  40. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/job_manager/__init__.py +0 -0
  41. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
  42. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
  43. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/job_manager/taskiq_broker.py +0 -0
  44. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/job_manager/taskiq_job_manager.py +0 -0
  45. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/profiling/__init__.py +0 -0
  46. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/profiling/asyncio_monitor.py +0 -0
  47. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/profiling/task_profiler.py +0 -0
  48. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/task_manager/__init__.py +0 -0
  49. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
  50. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
  51. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
  52. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/task_manager/task_executor.py +0 -0
  53. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/core/task_manager/task_session.py +0 -0
  54. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/grpc_servers/__init__.py +0 -0
  55. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/grpc_servers/_base_server.py +0 -0
  56. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/grpc_servers/module_server.py +0 -0
  57. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
  58. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
  59. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -0
  60. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
  61. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
  62. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
  63. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/logger.py +0 -0
  64. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/mixins/__init__.py +0 -0
  65. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/mixins/base_mixin.py +0 -0
  66. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/mixins/callback_mixin.py +0 -0
  67. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/mixins/chat_history_mixin.py +0 -0
  68. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/mixins/cost_mixin.py +0 -0
  69. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/mixins/file_history_mixin.py +0 -0
  70. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
  71. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/mixins/logger_mixin.py +0 -0
  72. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/mixins/storage_mixin.py +0 -0
  73. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/__init__.py +0 -0
  74. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/core/__init__.py +0 -0
  75. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/core/job_manager_models.py +0 -0
  76. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/core/task_monitor.py +0 -0
  77. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
  78. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/grpc_servers/models.py +0 -0
  79. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/grpc_servers/types.py +0 -0
  80. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/module/__init__.py +0 -0
  81. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/module/ag_ui.py +0 -0
  82. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/module/base_types.py +0 -0
  83. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/module/module.py +0 -0
  84. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/module/module_context.py +0 -0
  85. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/module/module_types.py +0 -0
  86. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/module/request_metadata.py +0 -0
  87. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/module/select_schema.py +0 -0
  88. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/module/setup_types.py +0 -0
  89. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/module/tool_cache.py +0 -0
  90. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/module/tool_reference.py +0 -0
  91. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/module/utility.py +0 -0
  92. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/services/__init__.py +0 -0
  93. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/services/cost.py +0 -0
  94. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/services/registry.py +0 -0
  95. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/models/services/storage.py +0 -0
  96. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/modules/__init__.py +0 -0
  97. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/modules/_base_module.py +0 -0
  98. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/modules/archetype_module.py +0 -0
  99. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/modules/tool_module.py +0 -0
  100. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/modules/trigger_handler.py +0 -0
  101. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/modules/triggers/__init__.py +0 -0
  102. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
  103. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
  104. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
  105. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/py.typed +0 -0
  106. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/__init__.py +0 -0
  107. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/agent/__init__.py +0 -0
  108. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/agent/agent_strategy.py +0 -0
  109. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/agent/default_agent.py +0 -0
  110. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/base_strategy.py +0 -0
  111. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/communication/__init__.py +0 -0
  112. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/communication/communication_strategy.py +0 -0
  113. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/communication/default_communication.py +0 -0
  114. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/communication/grpc_communication.py +0 -0
  115. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/cost/__init__.py +0 -0
  116. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/cost/cost_strategy.py +0 -0
  117. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/cost/default_cost.py +0 -0
  118. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/cost/grpc_cost.py +0 -0
  119. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/filesystem/__init__.py +0 -0
  120. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
  121. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
  122. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
  123. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/identity/__init__.py +0 -0
  124. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/identity/default_identity.py +0 -0
  125. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/identity/identity_strategy.py +0 -0
  126. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/registry/__init__.py +0 -0
  127. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/registry/default_registry.py +0 -0
  128. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/registry/exceptions.py +0 -0
  129. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/registry/grpc_registry.py +0 -0
  130. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/registry/registry_models.py +0 -0
  131. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/registry/registry_strategy.py +0 -0
  132. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/services_config.py +0 -0
  133. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/services_models.py +0 -0
  134. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/setup/__init__.py +0 -0
  135. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/setup/default_setup.py +0 -0
  136. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/setup/grpc_setup.py +0 -0
  137. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/setup/setup_strategy.py +0 -0
  138. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/snapshot/__init__.py +0 -0
  139. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/snapshot/default_snapshot.py +0 -0
  140. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/snapshot/snapshot_strategy.py +0 -0
  141. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/storage/__init__.py +0 -0
  142. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/storage/default_storage.py +0 -0
  143. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/storage/grpc_storage.py +0 -0
  144. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/storage/storage_strategy.py +0 -0
  145. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/task_manager/__init__.py +0 -0
  146. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/task_manager/default_task_manager.py +0 -0
  147. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/task_manager/grpc_task_manager.py +0 -0
  148. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
  149. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/user_profile/__init__.py +0 -0
  150. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
  151. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
  152. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
  153. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/utils/__init__.py +0 -0
  154. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/utils/arg_parser.py +0 -0
  155. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/utils/conditional_schema.py +0 -0
  156. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/utils/development_mode_action.py +0 -0
  157. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/utils/dynamic_schema.py +0 -0
  158. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/utils/llm_ready_schema.py +0 -0
  159. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/utils/package_discover.py +0 -0
  160. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/utils/proto_utils.py +0 -0
  161. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin/utils/schema_splitter.py +0 -0
  162. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin.egg-info/SOURCES.txt +0 -0
  163. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin.egg-info/dependency_links.txt +0 -0
  164. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/src/digitalkin.egg-info/requires.txt +0 -0
  165. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev11}/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: 0.3.5.dev9
3
+ Version: 0.3.5.dev11
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
@@ -35,7 +35,7 @@
35
35
  "grpcio-status==1.78.0",
36
36
  "pydantic==2.12.5",
37
37
  ]
38
- version = "0.3.5.dev9"
38
+ version = "0.3.5.dev11"
39
39
 
40
40
  [project.optional-dependencies]
41
41
  profiling = [
@@ -5,4 +5,4 @@ from importlib.metadata import PackageNotFoundError, version
5
5
  try:
6
6
  __version__ = version("digitalkin")
7
7
  except PackageNotFoundError:
8
- __version__ = "0.3.5.dev9"
8
+ __version__ = "0.3.5.dev11"
@@ -2,11 +2,16 @@
2
2
 
3
3
  This adapter bridges Agno-specific events to the DigitalKin event model,
4
4
  allowing the core DigitalKin SDK to remain independent of Agno.
5
+
6
+ The adapter owns ALL state management: tracking reasoning/content lifecycle,
7
+ generating message_id and reasoning_id on each phase start, and emitting
8
+ proper start/completed events for text message and reasoning sequences.
5
9
  """
6
10
 
7
11
  from __future__ import annotations
8
12
 
9
13
  import logging
14
+ import uuid
10
15
  from typing import Any
11
16
 
12
17
  from digitalkin.models.events import (
@@ -20,6 +25,8 @@ from digitalkin.models.events import (
20
25
  RunContentEvent,
21
26
  RunErrorEvent,
22
27
  RunStartedEvent,
28
+ TextMessageCompletedEvent,
29
+ TextMessageStartedEvent,
23
30
  ToolCallCompletedEvent,
24
31
  ToolCallErrorEvent,
25
32
  ToolCallStartedEvent,
@@ -32,9 +39,9 @@ logger = logging.getLogger(__name__)
32
39
  class AgnoStreamAdapter:
33
40
  """Stateful converter: Agno streaming events -> DigitalKin events.
34
41
 
35
- Tracks reasoning state so that ``reasoning_content`` arriving on
36
- ``RunEvent.run_content`` events is automatically wrapped in proper
37
- ReasoningStarted / ReasoningContentDelta / ReasoningCompleted events.
42
+ Tracks reasoning and content state so that events arriving on
43
+ ``RunEvent.run_content`` are automatically wrapped in proper
44
+ lifecycle events (TextMessageStarted/Completed, ReasoningStarted/Completed).
38
45
 
39
46
  Usage::
40
47
 
@@ -47,14 +54,16 @@ class AgnoStreamAdapter:
47
54
  """
48
55
 
49
56
  def __init__(self) -> None:
50
- """Initialize the AgnoStreamAdapter.
51
-
52
- This adapter tracks reasoning state to properly handle reasoning_content
53
- that arrives on RunEvent.run_content events.
54
- """
57
+ """Initialize the AgnoStreamAdapter."""
55
58
  self._reasoning_active: bool = False
59
+ self._current_reasoning_id: str | None = None
60
+
61
+ self._content_active: bool = False
62
+ self._current_message_id: str | None = None
56
63
 
57
- def to_digitalkin_events(self, agno_event: Any) -> list[BaseAgentRunEvent]: # noqa: C901, PLR0911, PLR0912
64
+ self._closed_tool_call_ids: set[str] = set()
65
+
66
+ def to_digitalkin_events(self, agno_event: Any) -> list[BaseAgentRunEvent]: # noqa: C901, PLR0911, PLR0912, PLR0915
58
67
  """Convert one Agno event into one or more DigitalKin events.
59
68
 
60
69
  Args:
@@ -73,10 +82,8 @@ class AgnoStreamAdapter:
73
82
  raise ImportError(message) from exc
74
83
 
75
84
  event_type = agno_event.event
76
- event_types = getattr(agno_event, "events", None)
77
85
 
78
86
  logger.info("[DK STREAM-DEBUG => agno_adapter] Converting Agno event type: %s", event_type)
79
- logger.info("[DK STREAM-DEBUG => agno_adapter event_types] Converting Agno event types: %s", event_types)
80
87
 
81
88
  timestamp = getattr(agno_event, "timestamp", None)
82
89
 
@@ -97,7 +104,15 @@ class AgnoStreamAdapter:
97
104
  return self._handle_run_content(agno_event, timestamp)
98
105
 
99
106
  if event_type == RunEvent.run_completed:
100
- return [
107
+ events: list[BaseAgentRunEvent] = []
108
+
109
+ # Close any open sequences before completing the run
110
+ if self._content_active:
111
+ events.extend(self._close_content(timestamp))
112
+ if self._reasoning_active:
113
+ events.extend(self._close_reasoning(timestamp))
114
+
115
+ events.append(
101
116
  RunCompletedEvent(
102
117
  event=AgentRunEvent.RUN_COMPLETED,
103
118
  run_id=getattr(agno_event, "run_id", None),
@@ -106,7 +121,8 @@ class AgnoStreamAdapter:
106
121
  timestamp=timestamp,
107
122
  metadata=None,
108
123
  )
109
- ]
124
+ )
125
+ return events
110
126
 
111
127
  if event_type == RunEvent.run_error:
112
128
  return [
@@ -123,15 +139,27 @@ class AgnoStreamAdapter:
123
139
  # ── Explicit Reasoning Events (native Agno reasoning models) ────
124
140
 
125
141
  if event_type == RunEvent.reasoning_started:
142
+ events = []
143
+
144
+ # Close content if active
145
+ if self._content_active:
146
+ events.extend(self._close_content(timestamp))
147
+
148
+ self._current_reasoning_id = str(uuid.uuid4())
126
149
  self._reasoning_active = True
127
- logger.info("[DK STREAM-DEBUG => agno_adapter] Reasoning started (explicit)")
128
- return [
150
+ logger.info(
151
+ "[DK STREAM-DEBUG => agno_adapter] Reasoning started (explicit), id=%s",
152
+ self._current_reasoning_id,
153
+ )
154
+ events.append(
129
155
  ReasoningStartedEvent(
130
156
  event=AgentRunEvent.REASONING_STARTED,
157
+ reasoning_id=self._current_reasoning_id,
131
158
  timestamp=timestamp,
132
159
  metadata=None,
133
160
  )
134
- ]
161
+ )
162
+ return events
135
163
 
136
164
  if event_type == RunEvent.reasoning_content_delta:
137
165
  reasoning_content = getattr(agno_event, "reasoning_content", "")
@@ -139,6 +167,7 @@ class AgnoStreamAdapter:
139
167
  ReasoningContentDeltaEvent(
140
168
  event=AgentRunEvent.REASONING_CONTENT_DELTA,
141
169
  delta=reasoning_content,
170
+ reasoning_id=self._current_reasoning_id,
142
171
  timestamp=timestamp,
143
172
  metadata=None,
144
173
  )
@@ -150,38 +179,27 @@ class AgnoStreamAdapter:
150
179
  ReasoningStepEvent(
151
180
  event=AgentRunEvent.REASONING_STEP,
152
181
  delta=reasoning_content,
182
+ reasoning_id=self._current_reasoning_id,
153
183
  timestamp=timestamp,
154
184
  metadata=None,
155
185
  )
156
186
  ]
157
187
 
158
188
  if event_type == RunEvent.reasoning_completed:
159
- self._reasoning_active = False
160
189
  logger.info("[DK STREAM-DEBUG => agno_adapter] Reasoning completed (explicit)")
161
- return [
162
- ReasoningCompletedEvent(
163
- event=AgentRunEvent.REASONING_COMPLETED,
164
- timestamp=timestamp,
165
- metadata=None,
166
- )
167
- ]
190
+ return self._close_reasoning(timestamp)
168
191
 
169
192
  # ── Tool Call Events ─────────────────────────────────────────────
170
193
 
171
194
  if event_type == RunEvent.tool_call_started:
172
- events: list[BaseAgentRunEvent] = []
195
+ events = []
173
196
 
174
- # Auto-close reasoning before tool calls
197
+ # Close both reasoning and content before tool calls
175
198
  if self._reasoning_active:
176
199
  logger.info("[DK STREAM-DEBUG => agno_adapter] Reasoning auto-completed (tool call started)")
177
- events.append(
178
- ReasoningCompletedEvent(
179
- event=AgentRunEvent.REASONING_COMPLETED,
180
- timestamp=timestamp,
181
- metadata=None,
182
- )
183
- )
184
- self._reasoning_active = False
200
+ events.extend(self._close_reasoning(timestamp))
201
+ if self._content_active:
202
+ events.extend(self._close_content(timestamp))
185
203
 
186
204
  tool = getattr(agno_event, "tool", None)
187
205
  tool_info = None
@@ -205,13 +223,20 @@ class AgnoStreamAdapter:
205
223
  if event_type == RunEvent.tool_call_completed:
206
224
  tool = getattr(agno_event, "tool", None)
207
225
  tool_info = None
226
+ tool_call_id = None
208
227
  if tool:
228
+ tool_call_id = getattr(tool, "tool_call_id", None)
209
229
  tool_info = ToolInfo(
210
- tool_call_id=getattr(tool, "tool_call_id", None),
230
+ tool_call_id=tool_call_id,
211
231
  tool_name=getattr(tool, "tool_name", None),
212
232
  tool_args=getattr(tool, "tool_args", None),
213
233
  result=getattr(tool, "result", None),
214
234
  )
235
+
236
+ # Track closed tool call to prevent duplicate end from ToolCallError
237
+ if tool_call_id:
238
+ self._closed_tool_call_ids.add(tool_call_id)
239
+
215
240
  return [
216
241
  ToolCallCompletedEvent(
217
242
  event=AgentRunEvent.TOOL_CALL_COMPLETED,
@@ -224,14 +249,28 @@ class AgnoStreamAdapter:
224
249
 
225
250
  if event_type == RunEvent.tool_call_error:
226
251
  tool = getattr(agno_event, "tool", None)
252
+ tool_call_id = getattr(tool, "tool_call_id", None) if tool else None
253
+
254
+ # Skip if already closed by ToolCallCompleted (Agno emits both for the same tool_call_id)
255
+ if tool_call_id and tool_call_id in self._closed_tool_call_ids:
256
+ logger.info(
257
+ "[DK STREAM-DEBUG => agno_adapter] Skipping duplicate ToolCallError for already-closed tool %s",
258
+ tool_call_id,
259
+ )
260
+ return []
261
+
227
262
  tool_info = None
228
263
  if tool:
229
264
  tool_info = ToolInfo(
230
- tool_call_id=getattr(tool, "tool_call_id", None),
265
+ tool_call_id=tool_call_id,
231
266
  tool_name=getattr(tool, "tool_name", None),
232
267
  tool_args=None,
233
268
  result=None,
234
269
  )
270
+
271
+ if tool_call_id:
272
+ self._closed_tool_call_ids.add(tool_call_id)
273
+
235
274
  return [
236
275
  ToolCallErrorEvent(
237
276
  event=AgentRunEvent.TOOL_CALL_ERROR,
@@ -247,99 +286,189 @@ class AgnoStreamAdapter:
247
286
  return []
248
287
 
249
288
  def flush(self) -> list[BaseAgentRunEvent]:
250
- """Emit closing events if reasoning is still active at end of stream.
289
+ """Emit closing events for any active sequences at end of stream.
251
290
 
252
291
  Returns:
253
- List of closing events (empty if no active reasoning).
292
+ List of closing events (empty if nothing is active).
254
293
  """
255
294
  events: list[BaseAgentRunEvent] = []
295
+ if self._content_active:
296
+ logger.info("[DK STREAM-DEBUG => agno_adapter] Flushing: closing active content")
297
+ events.extend(self._close_content(None))
256
298
  if self._reasoning_active:
257
299
  logger.info("[DK STREAM-DEBUG => agno_adapter] Flushing: closing active reasoning")
258
- events.append(
259
- ReasoningCompletedEvent(
260
- event=AgentRunEvent.REASONING_COMPLETED,
261
- timestamp=None,
262
- metadata=None,
263
- )
264
- )
265
- self._reasoning_active = False
300
+ events.extend(self._close_reasoning(None))
266
301
  return events
267
302
 
268
303
  # ── Private Helpers ──────────────────────────────────────────────────
269
304
 
270
- def _handle_run_content(self, agno_event: Any, timestamp: Any) -> list[BaseAgentRunEvent]:
271
- """Handle RunEvent.run_content with reasoning_content awareness.
305
+ def _close_reasoning(self, timestamp: Any) -> list[BaseAgentRunEvent]:
306
+ """Close active reasoning sequence.
272
307
 
273
- When reasoning_content is present on a run_content event (native model
274
- reasoning via LiteLLM/proxy), this method emits proper reasoning
275
- lifecycle events instead of plain RunContentEvent.
308
+ Returns:
309
+ List of closing events (empty if reasoning is not active).
310
+ """
311
+ if not self._reasoning_active:
312
+ return []
313
+
314
+ events: list[BaseAgentRunEvent] = [
315
+ ReasoningCompletedEvent(
316
+ event=AgentRunEvent.REASONING_COMPLETED,
317
+ reasoning_id=self._current_reasoning_id,
318
+ timestamp=timestamp,
319
+ metadata=None,
320
+ )
321
+ ]
322
+ self._reasoning_active = False
323
+ self._current_reasoning_id = None
324
+ return events
276
325
 
277
- Args:
278
- agno_event: The Agno run_content event.
279
- timestamp: The timestamp for the event.
326
+ def _close_content(self, timestamp: Any) -> list[BaseAgentRunEvent]:
327
+ """Close active text message sequence.
280
328
 
281
329
  Returns:
282
- List of DigitalKin events (reasoning events or run content event).
330
+ List of closing events (empty if content is not active).
331
+ """
332
+ if not self._content_active:
333
+ return []
334
+
335
+ events: list[BaseAgentRunEvent] = [
336
+ TextMessageCompletedEvent(
337
+ event=AgentRunEvent.TEXT_MESSAGE_COMPLETED,
338
+ message_id=self._current_message_id or "",
339
+ timestamp=timestamp,
340
+ metadata=None,
341
+ )
342
+ ]
343
+ self._content_active = False
344
+ self._current_message_id = None
345
+ return events
346
+
347
+ def _handle_run_content(self, agno_event: Any, timestamp: Any) -> list[BaseAgentRunEvent]:
348
+ """Handle RunEvent.run_content — the core state machine.
349
+
350
+ Rules:
351
+ - reasoning_content non-empty: reasoning data (close content if transitioning)
352
+ - content non-empty: text data (close reasoning if transitioning)
353
+ - reasoning_content == "": close reasoning if active
354
+ - content == "": close content if active
355
+ - None values: ignored
356
+
357
+ Returns:
358
+ List of DigitalKin events for this run_content chunk.
283
359
  """
284
360
  events: list[BaseAgentRunEvent] = []
285
361
 
286
362
  reasoning_content = getattr(agno_event, "reasoning_content", None)
287
363
  content = agno_event.content
288
364
 
289
- # ── Reasoning content present ────────────────────────────────
290
- if reasoning_content:
291
- # Auto-open reasoning sequence on first reasoning chunk
292
- if not self._reasoning_active:
293
- logger.info("[DK STREAM-DEBUG => agno_adapter] Reasoning auto-started from run_content")
294
- events.append(
295
- ReasoningStartedEvent(
296
- event=AgentRunEvent.REASONING_STARTED,
297
- timestamp=timestamp,
298
- metadata=None,
299
- )
300
- )
301
- self._reasoning_active = True
365
+ # ── Reasoning content handling ──
366
+ if reasoning_content is not None:
367
+ events.extend(self._process_reasoning_content(reasoning_content, timestamp))
368
+
369
+ # ── Text content handling ──
370
+ if content is not None:
371
+ events.extend(self._process_text_content(content, timestamp))
372
+
373
+ # Edge case: neither reasoning_content nor content
374
+ if reasoning_content is None and content is None:
375
+ logger.debug("[DK STREAM-DEBUG => agno_adapter] run_content with no content, skipping")
376
+
377
+ return events
378
+
379
+ def _process_reasoning_content(self, reasoning_content: str, timestamp: Any) -> list[BaseAgentRunEvent]:
380
+ """Process reasoning_content from a run_content event.
381
+
382
+ Returns:
383
+ List of reasoning lifecycle and content events.
384
+ """
385
+ events: list[BaseAgentRunEvent] = []
386
+
387
+ if not reasoning_content:
388
+ # Empty string "" → signal to close reasoning
389
+ if self._reasoning_active:
390
+ events.extend(self._close_reasoning(timestamp))
391
+ return events
392
+
393
+ # Non-empty string → reasoning data
394
+ # Close text message if transitioning from content to reasoning
395
+ if self._content_active:
396
+ events.extend(self._close_content(timestamp))
302
397
 
398
+ # Auto-open reasoning on first chunk
399
+ if not self._reasoning_active:
400
+ self._current_reasoning_id = str(uuid.uuid4())
303
401
  logger.info(
304
- "[DK STREAM-DEBUG => agno_adapter] Reasoning content delta (len=%d)",
305
- len(reasoning_content),
402
+ "[DK STREAM-DEBUG => agno_adapter] Reasoning auto-started from run_content, id=%s",
403
+ self._current_reasoning_id,
306
404
  )
307
405
  events.append(
308
- ReasoningContentDeltaEvent(
309
- event=AgentRunEvent.REASONING_CONTENT_DELTA,
310
- delta=reasoning_content,
406
+ ReasoningStartedEvent(
407
+ event=AgentRunEvent.REASONING_STARTED,
408
+ reasoning_id=self._current_reasoning_id,
311
409
  timestamp=timestamp,
312
410
  metadata=None,
313
411
  )
314
412
  )
413
+ self._reasoning_active = True
414
+
415
+ logger.info(
416
+ "[DK STREAM-DEBUG => agno_adapter] Reasoning content delta (len=%d)",
417
+ len(reasoning_content),
418
+ )
419
+ events.append(
420
+ ReasoningContentDeltaEvent(
421
+ event=AgentRunEvent.REASONING_CONTENT_DELTA,
422
+ delta=reasoning_content,
423
+ reasoning_id=self._current_reasoning_id,
424
+ timestamp=timestamp,
425
+ metadata=None,
426
+ )
427
+ )
428
+ return events
315
429
 
316
- # ── Text content present ─────────────────────────────────────
317
- if content:
318
- # Auto-close reasoning when text content starts
319
- if self._reasoning_active:
320
- logger.info("[DK STREAM-DEBUG => agno_adapter] Reasoning auto-completed (text content arrived)")
321
- events.append(
322
- ReasoningCompletedEvent(
323
- event=AgentRunEvent.REASONING_COMPLETED,
324
- timestamp=timestamp,
325
- metadata=None,
326
- )
327
- )
328
- self._reasoning_active = False
430
+ def _process_text_content(self, content: str, timestamp: Any) -> list[BaseAgentRunEvent]:
431
+ """Process text content from a run_content event.
432
+
433
+ Returns:
434
+ List of text message lifecycle and content events.
435
+ """
436
+ events: list[BaseAgentRunEvent] = []
437
+
438
+ if not content:
439
+ # Empty string "" → signal to close text message
440
+ if self._content_active:
441
+ events.extend(self._close_content(timestamp))
442
+ return events
443
+
444
+ # Non-empty string → text data
445
+ # Close reasoning if transitioning from reasoning to content
446
+ if self._reasoning_active:
447
+ logger.info("[DK STREAM-DEBUG => agno_adapter] Reasoning auto-completed (text content arrived)")
448
+ events.extend(self._close_reasoning(timestamp))
329
449
 
450
+ # Auto-open text message on first chunk
451
+ if not self._content_active:
452
+ self._current_message_id = str(uuid.uuid4())
330
453
  events.append(
331
- RunContentEvent(
332
- event=AgentRunEvent.RUN_CONTENT,
333
- content=str(content),
334
- reasoning_content=None,
335
- content_type=None,
454
+ TextMessageStartedEvent(
455
+ event=AgentRunEvent.TEXT_MESSAGE_STARTED,
456
+ message_id=self._current_message_id,
336
457
  timestamp=timestamp,
337
458
  metadata=None,
338
459
  )
339
460
  )
340
-
341
- # Edge case: neither reasoning_content nor content
342
- if not reasoning_content and not content:
343
- logger.debug("[DK STREAM-DEBUG => agno_adapter] run_content with no content, skipping")
344
-
461
+ self._content_active = True
462
+
463
+ events.append(
464
+ RunContentEvent(
465
+ event=AgentRunEvent.RUN_CONTENT,
466
+ content=str(content),
467
+ message_id=self._current_message_id,
468
+ reasoning_content=None,
469
+ content_type=None,
470
+ timestamp=timestamp,
471
+ metadata=None,
472
+ )
473
+ )
345
474
  return events