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