digitalkin 0.3.5.dev9__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.dev9 → digitalkin-0.3.5.dev10}/PKG-INFO +1 -1
  2. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/pyproject.toml +1 -1
  3. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/__version__.py +1 -1
  4. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/community/agno/agno_adapter.py +200 -94
  5. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/agui_mixin.py +95 -176
  6. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/events/__init__.py +4 -0
  7. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/events/agent_events.py +23 -0
  8. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin.egg-info/PKG-INFO +1 -1
  9. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/LICENSE +0 -0
  10. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/README.md +0 -0
  11. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/__init__.py +0 -0
  12. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/mock/__init__.py +0 -0
  13. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/mock/mock_pb2.py +0 -0
  14. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
  15. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/server_async_insecure.py +0 -0
  16. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/server_async_secure.py +0 -0
  17. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/server_sync_insecure.py +0 -0
  18. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/server_sync_secure.py +0 -0
  19. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/modules/__init__.py +0 -0
  20. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/modules/archetype_with_tools_module.py +0 -0
  21. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/modules/cpu_intensive_module.py +0 -0
  22. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/modules/dynamic_setup_module.py +0 -0
  23. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/modules/minimal_llm_module.py +0 -0
  24. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/modules/text_transform_module.py +0 -0
  25. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
  26. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
  27. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
  28. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
  29. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
  30. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/monitoring/tests/test_metrics.py +0 -0
  31. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/services/filesystem_module.py +0 -0
  32. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/services/storage_module.py +0 -0
  33. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/setup.cfg +0 -0
  34. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/__init__.py +0 -0
  35. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/community/__init__.py +0 -0
  36. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/community/agno/__init__.py +0 -0
  37. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/__init__.py +0 -0
  38. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/common/__init__.py +0 -0
  39. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/common/factories.py +0 -0
  40. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/__init__.py +0 -0
  41. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
  42. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
  43. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/taskiq_broker.py +0 -0
  44. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/taskiq_job_manager.py +0 -0
  45. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/profiling/__init__.py +0 -0
  46. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/profiling/asyncio_monitor.py +0 -0
  47. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/profiling/task_profiler.py +0 -0
  48. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/__init__.py +0 -0
  49. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
  50. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
  51. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
  52. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/task_executor.py +0 -0
  53. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/task_session.py +0 -0
  54. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/__init__.py +0 -0
  55. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/_base_server.py +0 -0
  56. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/module_server.py +0 -0
  57. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
  58. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
  59. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -0
  60. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
  61. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
  62. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
  63. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/logger.py +0 -0
  64. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/__init__.py +0 -0
  65. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/base_mixin.py +0 -0
  66. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/callback_mixin.py +0 -0
  67. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/chat_history_mixin.py +0 -0
  68. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/cost_mixin.py +0 -0
  69. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/file_history_mixin.py +0 -0
  70. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
  71. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/logger_mixin.py +0 -0
  72. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/storage_mixin.py +0 -0
  73. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/__init__.py +0 -0
  74. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/core/__init__.py +0 -0
  75. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/core/job_manager_models.py +0 -0
  76. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/core/task_monitor.py +0 -0
  77. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
  78. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/grpc_servers/models.py +0 -0
  79. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/grpc_servers/types.py +0 -0
  80. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/__init__.py +0 -0
  81. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/ag_ui.py +0 -0
  82. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/base_types.py +0 -0
  83. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/module.py +0 -0
  84. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/module_context.py +0 -0
  85. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/module_types.py +0 -0
  86. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/request_metadata.py +0 -0
  87. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/select_schema.py +0 -0
  88. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/setup_types.py +0 -0
  89. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/tool_cache.py +0 -0
  90. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/tool_reference.py +0 -0
  91. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/utility.py +0 -0
  92. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/services/__init__.py +0 -0
  93. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/services/cost.py +0 -0
  94. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/services/registry.py +0 -0
  95. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/services/storage.py +0 -0
  96. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/__init__.py +0 -0
  97. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/_base_module.py +0 -0
  98. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/archetype_module.py +0 -0
  99. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/tool_module.py +0 -0
  100. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/trigger_handler.py +0 -0
  101. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/triggers/__init__.py +0 -0
  102. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
  103. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
  104. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
  105. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/py.typed +0 -0
  106. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/__init__.py +0 -0
  107. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/agent/__init__.py +0 -0
  108. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/agent/agent_strategy.py +0 -0
  109. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/agent/default_agent.py +0 -0
  110. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/base_strategy.py +0 -0
  111. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/communication/__init__.py +0 -0
  112. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/communication/communication_strategy.py +0 -0
  113. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/communication/default_communication.py +0 -0
  114. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/communication/grpc_communication.py +0 -0
  115. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/cost/__init__.py +0 -0
  116. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/cost/cost_strategy.py +0 -0
  117. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/cost/default_cost.py +0 -0
  118. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/cost/grpc_cost.py +0 -0
  119. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/filesystem/__init__.py +0 -0
  120. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
  121. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
  122. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
  123. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/identity/__init__.py +0 -0
  124. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/identity/default_identity.py +0 -0
  125. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/identity/identity_strategy.py +0 -0
  126. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/__init__.py +0 -0
  127. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/default_registry.py +0 -0
  128. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/exceptions.py +0 -0
  129. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/grpc_registry.py +0 -0
  130. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/registry_models.py +0 -0
  131. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/registry_strategy.py +0 -0
  132. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/services_config.py +0 -0
  133. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/services_models.py +0 -0
  134. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/setup/__init__.py +0 -0
  135. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/setup/default_setup.py +0 -0
  136. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/setup/grpc_setup.py +0 -0
  137. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/setup/setup_strategy.py +0 -0
  138. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/snapshot/__init__.py +0 -0
  139. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/snapshot/default_snapshot.py +0 -0
  140. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/snapshot/snapshot_strategy.py +0 -0
  141. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/storage/__init__.py +0 -0
  142. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/storage/default_storage.py +0 -0
  143. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/storage/grpc_storage.py +0 -0
  144. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/storage/storage_strategy.py +0 -0
  145. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/task_manager/__init__.py +0 -0
  146. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/task_manager/default_task_manager.py +0 -0
  147. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/task_manager/grpc_task_manager.py +0 -0
  148. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
  149. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/user_profile/__init__.py +0 -0
  150. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
  151. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
  152. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
  153. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/__init__.py +0 -0
  154. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/arg_parser.py +0 -0
  155. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/conditional_schema.py +0 -0
  156. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/development_mode_action.py +0 -0
  157. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/dynamic_schema.py +0 -0
  158. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/llm_ready_schema.py +0 -0
  159. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/package_discover.py +0 -0
  160. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/proto_utils.py +0 -0
  161. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/schema_splitter.py +0 -0
  162. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin.egg-info/SOURCES.txt +0 -0
  163. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin.egg-info/dependency_links.txt +0 -0
  164. {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin.egg-info/requires.txt +0 -0
  165. {digitalkin-0.3.5.dev9 → 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.dev9
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.dev9"
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.dev9"
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,38 +177,27 @@ 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:
172
- events: list[BaseAgentRunEvent] = []
193
+ events = []
173
194
 
174
- # Auto-close reasoning before tool calls
195
+ # Close both reasoning and content before tool calls
175
196
  if self._reasoning_active:
176
197
  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
198
+ events.extend(self._close_reasoning(timestamp))
199
+ if self._content_active:
200
+ events.extend(self._close_content(timestamp))
185
201
 
186
202
  tool = getattr(agno_event, "tool", None)
187
203
  tool_info = None
@@ -247,99 +263,189 @@ class AgnoStreamAdapter:
247
263
  return []
248
264
 
249
265
  def flush(self) -> list[BaseAgentRunEvent]:
250
- """Emit closing events if reasoning is still active at end of stream.
266
+ """Emit closing events for any active sequences at end of stream.
251
267
 
252
268
  Returns:
253
- List of closing events (empty if no active reasoning).
269
+ List of closing events (empty if nothing is active).
254
270
  """
255
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))
256
275
  if self._reasoning_active:
257
276
  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
277
+ events.extend(self._close_reasoning(None))
266
278
  return events
267
279
 
268
280
  # ── Private Helpers ──────────────────────────────────────────────────
269
281
 
270
- def _handle_run_content(self, agno_event: Any, timestamp: Any) -> list[BaseAgentRunEvent]:
271
- """Handle RunEvent.run_content with reasoning_content awareness.
282
+ def _close_reasoning(self, timestamp: Any) -> list[BaseAgentRunEvent]:
283
+ """Close active reasoning sequence.
272
284
 
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.
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
276
302
 
277
- Args:
278
- agno_event: The Agno run_content event.
279
- timestamp: The timestamp for the event.
303
+ def _close_content(self, timestamp: Any) -> list[BaseAgentRunEvent]:
304
+ """Close active text message sequence.
280
305
 
281
306
  Returns:
282
- 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.
283
336
  """
284
337
  events: list[BaseAgentRunEvent] = []
285
338
 
286
339
  reasoning_content = getattr(agno_event, "reasoning_content", None)
287
340
  content = agno_event.content
288
341
 
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
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.
302
358
 
359
+ Returns:
360
+ List of reasoning lifecycle and content events.
361
+ """
362
+ events: list[BaseAgentRunEvent] = []
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())
303
378
  logger.info(
304
- "[DK STREAM-DEBUG => agno_adapter] Reasoning content delta (len=%d)",
305
- len(reasoning_content),
379
+ "[DK STREAM-DEBUG => agno_adapter] Reasoning auto-started from run_content, id=%s",
380
+ self._current_reasoning_id,
306
381
  )
307
382
  events.append(
308
- ReasoningContentDeltaEvent(
309
- event=AgentRunEvent.REASONING_CONTENT_DELTA,
310
- delta=reasoning_content,
383
+ ReasoningStartedEvent(
384
+ event=AgentRunEvent.REASONING_STARTED,
385
+ reasoning_id=self._current_reasoning_id,
311
386
  timestamp=timestamp,
312
387
  metadata=None,
313
388
  )
314
389
  )
390
+ self._reasoning_active = True
315
391
 
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
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.
329
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())
330
430
  events.append(
331
- RunContentEvent(
332
- event=AgentRunEvent.RUN_CONTENT,
333
- content=str(content),
334
- reasoning_content=None,
335
- content_type=None,
431
+ TextMessageStartedEvent(
432
+ event=AgentRunEvent.TEXT_MESSAGE_STARTED,
433
+ message_id=self._current_message_id,
336
434
  timestamp=timestamp,
337
435
  metadata=None,
338
436
  )
339
437
  )
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
-
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
+ )
345
451
  return events