digitalkin 0.3.2.dev22__tar.gz → 0.3.2.dev23__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 (151) hide show
  1. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/PKG-INFO +6 -6
  2. digitalkin-0.3.2.dev23/pyproject.toml +279 -0
  3. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/__version__.py +1 -1
  4. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/__init__.py +2 -2
  5. digitalkin-0.3.2.dev23/src/digitalkin/models/module/tool_reference.py +173 -0
  6. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/schema_splitter.py +5 -6
  7. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin.egg-info/PKG-INFO +6 -6
  8. digitalkin-0.3.2.dev22/pyproject.toml +0 -279
  9. digitalkin-0.3.2.dev22/src/digitalkin/models/module/tool_reference.py +0 -103
  10. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/LICENSE +0 -0
  11. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/README.md +0 -0
  12. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/base_server/__init__.py +0 -0
  13. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/base_server/mock/__init__.py +0 -0
  14. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/base_server/mock/mock_pb2.py +0 -0
  15. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
  16. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/base_server/server_async_insecure.py +0 -0
  17. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/base_server/server_async_secure.py +0 -0
  18. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/base_server/server_sync_insecure.py +0 -0
  19. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/base_server/server_sync_secure.py +0 -0
  20. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/modules/__init__.py +0 -0
  21. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/modules/archetype_with_tools_module.py +0 -0
  22. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/modules/cpu_intensive_module.py +0 -0
  23. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/modules/dynamic_setup_module.py +0 -0
  24. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/modules/minimal_llm_module.py +0 -0
  25. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/modules/text_transform_module.py +0 -0
  26. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
  27. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
  28. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
  29. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
  30. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
  31. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/monitoring/tests/test_metrics.py +0 -0
  32. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/services/filesystem_module.py +0 -0
  33. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/examples/services/storage_module.py +0 -0
  34. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/setup.cfg +0 -0
  35. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/__init__.py +0 -0
  36. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/__init__.py +0 -0
  37. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/common/__init__.py +0 -0
  38. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/common/factories.py +0 -0
  39. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/__init__.py +0 -0
  40. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
  41. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
  42. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/taskiq_broker.py +0 -0
  43. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/taskiq_job_manager.py +0 -0
  44. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/__init__.py +0 -0
  45. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
  46. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
  47. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
  48. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/surrealdb_repository.py +0 -0
  49. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/task_executor.py +0 -0
  50. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/task_session.py +0 -0
  51. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/__init__.py +0 -0
  52. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/_base_server.py +0 -0
  53. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/module_server.py +0 -0
  54. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
  55. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
  56. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -0
  57. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
  58. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
  59. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
  60. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/logger.py +0 -0
  61. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/__init__.py +0 -0
  62. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/base_mixin.py +0 -0
  63. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/callback_mixin.py +0 -0
  64. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/chat_history_mixin.py +0 -0
  65. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/cost_mixin.py +0 -0
  66. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/file_history_mixin.py +0 -0
  67. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
  68. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/logger_mixin.py +0 -0
  69. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/storage_mixin.py +0 -0
  70. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/__init__.py +0 -0
  71. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/core/__init__.py +0 -0
  72. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/core/job_manager_models.py +0 -0
  73. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/core/task_monitor.py +0 -0
  74. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
  75. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/grpc_servers/models.py +0 -0
  76. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/grpc_servers/types.py +0 -0
  77. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/base_types.py +0 -0
  78. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/module.py +0 -0
  79. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/module_context.py +0 -0
  80. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/module_types.py +0 -0
  81. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/setup_types.py +0 -0
  82. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/tool_cache.py +0 -0
  83. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/utility.py +0 -0
  84. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/services/__init__.py +0 -0
  85. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/services/cost.py +0 -0
  86. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/services/registry.py +0 -0
  87. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/models/services/storage.py +0 -0
  88. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/__init__.py +0 -0
  89. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/_base_module.py +0 -0
  90. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/archetype_module.py +0 -0
  91. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/tool_module.py +0 -0
  92. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/trigger_handler.py +0 -0
  93. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/triggers/__init__.py +0 -0
  94. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
  95. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
  96. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
  97. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/py.typed +0 -0
  98. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/__init__.py +0 -0
  99. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/agent/__init__.py +0 -0
  100. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/agent/agent_strategy.py +0 -0
  101. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/agent/default_agent.py +0 -0
  102. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/base_strategy.py +0 -0
  103. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/communication/__init__.py +0 -0
  104. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/communication/communication_strategy.py +0 -0
  105. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/communication/default_communication.py +0 -0
  106. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/communication/grpc_communication.py +0 -0
  107. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/cost/__init__.py +0 -0
  108. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/cost/cost_strategy.py +0 -0
  109. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/cost/default_cost.py +0 -0
  110. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/cost/grpc_cost.py +0 -0
  111. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/filesystem/__init__.py +0 -0
  112. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
  113. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
  114. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
  115. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/identity/__init__.py +0 -0
  116. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/identity/default_identity.py +0 -0
  117. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/identity/identity_strategy.py +0 -0
  118. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/__init__.py +0 -0
  119. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/default_registry.py +0 -0
  120. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/exceptions.py +0 -0
  121. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/grpc_registry.py +0 -0
  122. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/registry_models.py +0 -0
  123. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/registry_strategy.py +0 -0
  124. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/services_config.py +0 -0
  125. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/services_models.py +0 -0
  126. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/setup/__init__.py +0 -0
  127. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/setup/default_setup.py +0 -0
  128. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/setup/grpc_setup.py +0 -0
  129. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/setup/setup_strategy.py +0 -0
  130. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/snapshot/__init__.py +0 -0
  131. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/snapshot/default_snapshot.py +0 -0
  132. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/snapshot/snapshot_strategy.py +0 -0
  133. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/storage/__init__.py +0 -0
  134. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/storage/default_storage.py +0 -0
  135. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/storage/grpc_storage.py +0 -0
  136. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/storage/storage_strategy.py +0 -0
  137. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/user_profile/__init__.py +0 -0
  138. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
  139. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
  140. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
  141. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/__init__.py +0 -0
  142. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/arg_parser.py +0 -0
  143. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/conditional_schema.py +0 -0
  144. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/development_mode_action.py +0 -0
  145. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/dynamic_schema.py +0 -0
  146. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/llm_ready_schema.py +0 -0
  147. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/package_discover.py +0 -0
  148. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin.egg-info/SOURCES.txt +0 -0
  149. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin.egg-info/dependency_links.txt +0 -0
  150. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/src/digitalkin.egg-info/requires.txt +0 -0
  151. {digitalkin-0.3.2.dev22 → digitalkin-0.3.2.dev23}/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.2.dev22
3
+ Version: 0.3.2.dev23
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
@@ -437,18 +437,18 @@ License: Attribution-NonCommercial-ShareAlike 4.0 International
437
437
  Project-URL: Homepage, https://github.com/DigitalKin-ai/digitalkin
438
438
  Project-URL: Documentation, https://github.com/DigitalKin-ai/digitalkin
439
439
  Project-URL: Issues, https://github.com/DigitalKin-ai/digitalkin/issues
440
- Keywords: digitalkin,kin,agent,gprc,sdk
440
+ Keywords: agent,digitalkin,gprc,kin,sdk
441
441
  Classifier: Development Status :: 3 - Alpha
442
442
  Classifier: Intended Audience :: Developers
443
+ Classifier: License :: Other/Proprietary License
443
444
  Classifier: Operating System :: OS Independent
444
- Classifier: Topic :: Software Development :: Libraries
445
- Classifier: Programming Language :: Python
445
+ Classifier: Programming Language :: Python :: 3 :: Only
446
446
  Classifier: Programming Language :: Python :: 3.10
447
447
  Classifier: Programming Language :: Python :: 3.11
448
448
  Classifier: Programming Language :: Python :: 3.12
449
449
  Classifier: Programming Language :: Python :: 3.13
450
- Classifier: Programming Language :: Python :: 3 :: Only
451
- Classifier: License :: Other/Proprietary License
450
+ Classifier: Programming Language :: Python
451
+ Classifier: Topic :: Software Development :: Libraries
452
452
  Requires-Python: >=3.10
453
453
  Description-Content-Type: text/markdown
454
454
  License-File: LICENSE
@@ -0,0 +1,279 @@
1
+ [build-system]
2
+ requires = ["setuptools >= 75.8.2", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+
7
+ name = "digitalkin"
8
+ description = "SDK to build kin used in DigitalKin"
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = { file = "LICENSE" }
12
+
13
+ keywords = ["agent", "digitalkin", "gprc", "kin", "sdk"]
14
+
15
+ version = "0.3.2.dev23"
16
+ classifiers = [
17
+ "Development Status :: 3 - Alpha",
18
+ "Intended Audience :: Developers",
19
+ "License :: Other/Proprietary License",
20
+ "Operating System :: OS Independent",
21
+ "Programming Language :: Python :: 3 :: Only",
22
+ "Programming Language :: Python :: 3.10",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ "Programming Language :: Python :: 3.13",
26
+ "Programming Language :: Python",
27
+ "Topic :: Software Development :: Libraries",
28
+ ]
29
+
30
+ dependencies = [
31
+ "agentic-mesh-protocol==0.2.1.dev0",
32
+ "grpcio-health-checking>=1.76.0",
33
+ "grpcio-reflection>=1.76.0",
34
+ "grpcio-status>=1.76.0",
35
+ "pydantic>=2.12.5",
36
+ "surrealdb>=1.0.7",
37
+ ]
38
+
39
+ [project.optional-dependencies]
40
+ taskiq = [
41
+ "rstream>=0.40.0",
42
+ "taskiq-aio-pika>=0.5.0",
43
+ "taskiq-redis>=1.2.0",
44
+ "taskiq[reload]>=0.12.1",
45
+ ]
46
+
47
+ [project.urls]
48
+ Homepage = "https://github.com/DigitalKin-ai/digitalkin"
49
+ Documentation = "https://github.com/DigitalKin-ai/digitalkin"
50
+ Issues = "https://github.com/DigitalKin-ai/digitalkin/issues"
51
+
52
+ [[project.authors]]
53
+ name = "DigitalKin.ai"
54
+ email = "contact@digitalkin.ai"
55
+
56
+ [dependency-groups]
57
+ dev = [
58
+ "build>=1.3.0",
59
+ "bump-my-version>=1.2.5",
60
+ "cryptography>=46.0.3",
61
+ "mypy>=1.19.1",
62
+ "pre-commit>=4.5.1",
63
+ "pyright>=1.1.407",
64
+ "ruff>=0.14.9",
65
+ "twine>=6.2.0",
66
+ "typos>=1.40.0",
67
+ ]
68
+ tests = [
69
+ "freezegun>=1.5.5",
70
+ "grpcio-testing>=1.76.0",
71
+ "hdrhistogram>=0.10.3",
72
+ "psutil>=7.1.3",
73
+ "pytest-asyncio>=1.3.0",
74
+ "pytest-cov>=7.0.0",
75
+ "pytest-html==4.1.1",
76
+ "pytest-json-report==1.5.0",
77
+ "pytest-timeout>=2.4.0",
78
+ "pytest>=9.0.2",
79
+ ]
80
+ docs = [
81
+ "griffe-inherited-docstrings>=1.1.2",
82
+ "markdown-callouts>=0.4.0",
83
+ "markdown-exec>=1.12.1",
84
+ "mike>=2.1.3",
85
+ "mkdocs-autorefs>=1.4.3",
86
+ "mkdocs-awesome-pages-plugin>=2.10.1",
87
+ "mkdocs-coverage>=2.0.0",
88
+ "mkdocs-git-committers-plugin-2>=2.5.0",
89
+ "mkdocs-git-revision-date-localized-plugin>=1.5.0",
90
+ "mkdocs-glightbox>=0.5.2",
91
+ "mkdocs-include-markdown-plugin>=7.2.0",
92
+ "mkdocs-literate-nav>=0.6.2",
93
+ "mkdocs-llmstxt>=0.5.0",
94
+ "mkdocs-material[imaging]>=9.7.0",
95
+ "mkdocs-minify-plugin>=0.8.0",
96
+ "mkdocs-open-in-new-tab>=1.0.8",
97
+ "mkdocs-redirects>=1.2.2",
98
+ "mkdocs-section-index>=0.3.10",
99
+ "mkdocs>=1.6.1",
100
+ "mkdocstrings-python>=2.0.1",
101
+ "mkdocstrings>=1.0.0",
102
+ "tomli>=2.3.0",
103
+ ]
104
+ [tool.setuptools]
105
+ package-dir = { "" = "src" }
106
+
107
+ [tool.setuptools.packages.find]
108
+ where = ["examples", "src"]
109
+
110
+ [tool.ruff]
111
+ src = ["src"]
112
+ target-version = "py310"
113
+ line-length = 120
114
+ indent-width = 4
115
+ show-fixes = true
116
+ unsafe-fixes = true
117
+ # Enable preview features.
118
+ exclude = [
119
+ ".bzr",
120
+ ".direnv",
121
+ ".eggs",
122
+ ".git",
123
+ ".git-rewrite",
124
+ ".hg",
125
+ ".mypy_cache",
126
+ ".nox",
127
+ ".pants.d",
128
+ ".pytype",
129
+ ".ruff_cache",
130
+ ".svn",
131
+ ".tox",
132
+ ".venv",
133
+ "__pypackages__",
134
+ "_build",
135
+ "buck-out",
136
+ "build",
137
+ "dist",
138
+ "docs/*",
139
+ "examples/*",
140
+ "factory.py",
141
+ "generate_certificates.py",
142
+ "node_modules",
143
+ "tests/*",
144
+ "venv",
145
+ ]
146
+ preview = true
147
+
148
+ [tool.ruff.lint]
149
+ select = [
150
+ "A", # flake8-builtins
151
+ "ANN", # flake8-annotations
152
+ "ARG", # flake8-unused-arguments
153
+ "ASYNC", # flake8-async
154
+ "C4", # flake8-comprehensions
155
+ "C90", # mccabe (complex-structure)
156
+ "COM", # flake8-commas
157
+ "D", # pydocstyle
158
+ "DOC", # pydoclint
159
+ "DTZ", # flake8-datetimez
160
+ "E", # pycodestyle-errors
161
+ "EM", # flake8-errmsg
162
+ "ERA", # eradicate
163
+ "F", # pyflakes
164
+ "FBT", # flake8-boolean-trap
165
+ "FLY", # flynt
166
+ "FURB", # Refurb
167
+ "G", # flake8-logging-format
168
+ "I", # isort
169
+ "ICN", # flake8-import-conventions
170
+ "ISC", # flake8-implicit-str-concat
171
+ "LOG", # flake8-logging
172
+ "N", # pep8-naming
173
+ "PERF", # Perflint
174
+ "PIE", # flake8-pie
175
+ "PL", # Pylint
176
+ "PL", # Pylint
177
+ "PT", # flake8-pytest-style
178
+ "PYI", # flake8-pyi
179
+ "Q", # flake8-quotes
180
+ "RET", # flake8-return
181
+ "RSE", # flake8-raise
182
+ "RUF", # Ruff-specific rules
183
+ "S", # flake8-bandit
184
+ "SIM", # flake8-simplify
185
+ "SLF", # flake8-self
186
+ "T20", # flake8-print
187
+ "TC", # flake8-type-checking
188
+ "TRY", # tryceratops
189
+ "UP", # pyupgrade
190
+ "W", # pycodestyle-warnings
191
+ ]
192
+
193
+ ignore = [
194
+ "COM812", # Disable because of formatter incompatibility
195
+ "DOC502", # Allow extraneous-exception in docstring
196
+ "S105", # Hardcoded-password
197
+ ]
198
+
199
+ fixable = ["ALL"]
200
+
201
+ [tool.ruff.lint.pydocstyle]
202
+ convention = "google"
203
+
204
+ [tool.ruff.lint.per-file-ignores]
205
+ "tests/**/*.py" = [
206
+ "ANN001",
207
+ "ANN002",
208
+ "ANN003",
209
+ "ANN201",
210
+ "ANN401",
211
+ "ARG001",
212
+ "ARG002",
213
+ "C901",
214
+ "D100",
215
+ "D101",
216
+ "D102",
217
+ "D103",
218
+ "D107",
219
+ "D417",
220
+ "DOC201",
221
+ "DOC501",
222
+ "E501",
223
+ "ERA001",
224
+ "FBT001",
225
+ "FBT002",
226
+ "G004",
227
+ "N802",
228
+ "PERF203",
229
+ "PLC2701",
230
+ "PLR0911",
231
+ "PLR0912",
232
+ "PLR0914",
233
+ "PLR0915",
234
+ "PLR1702",
235
+ "PLR2004",
236
+ "PLR6301",
237
+ "S101",
238
+ "SLF001",
239
+ "TRY002",
240
+ ]
241
+
242
+ [tool.ruff.lint.pylint]
243
+ max-args = 10
244
+
245
+ [tool.ruff.format]
246
+ quote-style = "double"
247
+ indent-style = "space"
248
+ line-ending = "auto"
249
+ docstring-code-format = true
250
+ skip-magic-trailing-comma = false
251
+
252
+ [tool.pyright]
253
+ include = ["src"]
254
+ exclude = ["**/.venv", "**/__pycache__"]
255
+
256
+ [tool.mypy]
257
+ exclude = ["examples", "tests"]
258
+
259
+ [tool.pytest.ini_options]
260
+ testpaths = ["tests"]
261
+ python_files = "test_*.py"
262
+ asyncio_mode = "auto"
263
+
264
+ log_cli = false
265
+ log_level = "ERROR"
266
+
267
+ # Default timeout for tests (in seconds)
268
+ timeout = 10
269
+ timeout_method = "signal" # More reliable for asyncio tests on Linux
270
+
271
+ # Custom markers
272
+ markers = [
273
+ "edge_case: marks tests for boundary conditions and edge cases",
274
+ "grpc: marks tests for gRPC service functionality",
275
+ "integration: marks tests that require real SurrealDB connection (deselect with '-m \"not integration\"')",
276
+ "regression: marks tests for previously fixed bugs",
277
+ "smoke: marks critical path tests that should always pass",
278
+ "validation: marks tests for input validation and schema checking",
279
+ ]
@@ -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.2.dev22"
8
+ __version__ = "0.3.2.dev23"
@@ -14,7 +14,7 @@ from digitalkin.models.module.tool_cache import (
14
14
  )
15
15
  from digitalkin.models.module.tool_reference import (
16
16
  ToolReference,
17
- ToolReferenceInput,
17
+ tool_reference_input,
18
18
  )
19
19
  from digitalkin.models.module.utility import (
20
20
  EndOfStreamOutput,
@@ -35,7 +35,7 @@ __all__ = [
35
35
  "ToolModuleInfo",
36
36
  "ToolParameter",
37
37
  "ToolReference",
38
- "ToolReferenceInput",
39
38
  "UtilityProtocol",
40
39
  "UtilityRegistry",
40
+ "tool_reference_input",
41
41
  ]
@@ -0,0 +1,173 @@
1
+ """Tool reference types for module configuration."""
2
+
3
+ from typing import Annotated
4
+
5
+ from pydantic import AfterValidator, BaseModel, BeforeValidator, Field
6
+ from pydantic.annotated_handlers import GetJsonSchemaHandler
7
+ from pydantic.json_schema import JsonSchemaValue
8
+ from pydantic_core import CoreSchema
9
+
10
+ from digitalkin.models.module.tool_cache import (
11
+ SelectedTool,
12
+ ToolModuleInfo,
13
+ module_info_to_tool_module_info,
14
+ )
15
+ from digitalkin.services.communication.communication_strategy import CommunicationStrategy
16
+ from digitalkin.services.registry import RegistryStrategy
17
+
18
+
19
+ class ToolReference(BaseModel):
20
+ """Tool selection configuration and reference."""
21
+
22
+ selected_tools: list[SelectedTool] = Field(default=[], description="Tools selected by the user.")
23
+ setup_ids: list[str] = Field(default=[], description="Setup IDs for the user to choose from.")
24
+ module_ids: list[str] = Field(default=[], description="Module IDs for the user to choose from.")
25
+ tags: list[str] = Field(default=[], description="Tags for the user to choose from.")
26
+ max_tools: int = Field(default=0, description="Maximum tools to select. 0 for unlimited.")
27
+ min_tools: int = Field(default=0, description="Minimum tools to select. 0 for no minimum.")
28
+
29
+ async def resolve(self, registry: RegistryStrategy, communication: CommunicationStrategy) -> list[ToolModuleInfo]:
30
+ """Resolve this reference using the registry.
31
+
32
+ Args:
33
+ registry: Registry service for module discovery.
34
+ communication: Communication service for module schemas.
35
+
36
+ Returns:
37
+ List of ToolModuleInfo if resolved.
38
+ """
39
+ resolved: list[ToolModuleInfo] = []
40
+ for tool in self.selected_tools:
41
+ setup = registry.get_setup(tool.setup_id)
42
+ if setup and setup.module_id:
43
+ info = registry.discover_by_id(setup.module_id)
44
+ tool.slug = tool.setup_id
45
+ tool.module_id = setup.module_id
46
+ tool.name = setup.name
47
+ if info:
48
+ resolved.append(await module_info_to_tool_module_info(info, tool, communication))
49
+
50
+ return resolved
51
+
52
+
53
+ class _ToolReferenceInputSchema:
54
+ """Custom JSON schema generator with configurable maxItems and ui:options."""
55
+
56
+ def __init__(
57
+ self,
58
+ setup_ids: list[str],
59
+ module_ids: list[str],
60
+ tags: list[str],
61
+ max_tools: int = 0,
62
+ min_tools: int = 0,
63
+ ) -> None:
64
+ self.setup_ids = setup_ids
65
+ self.module_ids = module_ids
66
+ self.tags = tags
67
+ self.max_tools = max_tools
68
+ self.min_tools = min_tools
69
+
70
+ def __get_pydantic_json_schema__( # noqa: PLW3201
71
+ self,
72
+ schema: CoreSchema,
73
+ handler: GetJsonSchemaHandler,
74
+ ) -> JsonSchemaValue:
75
+ """Generate JSON schema accepting both list[str] and ToolReference.
76
+
77
+ Args:
78
+ schema: The core schema from Pydantic.
79
+ handler: Handler to generate JSON schema from core schema.
80
+
81
+ Returns:
82
+ JSON schema with anyOf accepting array or ToolReference, plus ui:options.
83
+ """
84
+ json_schema = handler(schema)
85
+
86
+ array_option: dict[str, object] = {"type": "array", "items": {"type": "string"}}
87
+ if self.max_tools > 0 and self.max_tools >= self.min_tools:
88
+ array_option["maxItems"] = self.max_tools
89
+ if self.min_tools > 0 and self.min_tools <= self.max_tools:
90
+ array_option["minItems"] = self.min_tools
91
+
92
+ return {
93
+ "anyOf": [
94
+ array_option,
95
+ json_schema,
96
+ ],
97
+ "ui:options": {
98
+ "setup_ids": self.setup_ids,
99
+ "module_ids": self.module_ids,
100
+ "tags": self.tags,
101
+ "max_tools": self.max_tools,
102
+ "min_tools": self.min_tools,
103
+ },
104
+ }
105
+
106
+
107
+ def tool_reference_input(
108
+ setup_ids: list[str] = [],
109
+ module_ids: list[str] = [],
110
+ tags: list[str] = [],
111
+ max_tools: int = 0,
112
+ min_tools: int = 0,
113
+ ) -> type[ToolReference]:
114
+ """Create ToolReferenceInput type with schema options and validation.
115
+
116
+ Args:
117
+ setup_ids: Setup IDs for the user to choose from.
118
+ module_ids: Module IDs for the user to choose from.
119
+ tags: Tags for the user to choose from.
120
+ max_tools: Maximum tools allowed. 0 for unlimited.
121
+ min_tools: Minimum tools required. 0 for no minimum.
122
+
123
+ Returns:
124
+ Annotated type for use in Pydantic models.
125
+ """
126
+
127
+ def convert_to_tool_reference(v: object) -> ToolReference | object:
128
+ """Convert list of setup IDs to ToolReference with config preserved.
129
+
130
+ Returns:
131
+ ToolReference if input is list, otherwise original value.
132
+ """
133
+ if isinstance(v, list):
134
+ return ToolReference(
135
+ selected_tools=[SelectedTool(setup_id=sid, slug=sid) for sid in v],
136
+ setup_ids=setup_ids,
137
+ module_ids=module_ids,
138
+ tags=tags,
139
+ max_tools=max_tools,
140
+ min_tools=min_tools,
141
+ )
142
+ return v
143
+
144
+ def validate_tools_count(v: ToolReference) -> ToolReference:
145
+ """Validate selected_tools count against min/max constraints.
146
+
147
+ Returns:
148
+ The validated ToolReference.
149
+
150
+ Raises:
151
+ ValueError: If count is below min_tools or above max_tools.
152
+ """
153
+ count = len(v.selected_tools)
154
+ if min_tools > 0 and count < min_tools:
155
+ msg = f"At least {min_tools} tools required, got {count}"
156
+ raise ValueError(msg)
157
+ if max_tools > 0 and count > max_tools:
158
+ msg = f"At most {max_tools} tools allowed, got {count}"
159
+ raise ValueError(msg)
160
+ return v
161
+
162
+ return Annotated[ # type: ignore[return-value]
163
+ ToolReference,
164
+ BeforeValidator(convert_to_tool_reference),
165
+ AfterValidator(validate_tools_count),
166
+ _ToolReferenceInputSchema(
167
+ setup_ids=setup_ids,
168
+ module_ids=module_ids,
169
+ tags=tags,
170
+ max_tools=max_tools,
171
+ min_tools=min_tools,
172
+ ),
173
+ ]
@@ -30,7 +30,7 @@ class SchemaSplitter:
30
30
  return json_schema, ui_schema
31
31
 
32
32
  @classmethod
33
- def _extract_ui_properties(
33
+ def _extract_ui_properties( # noqa: C901, PLR0912
34
34
  cls,
35
35
  source: dict[str, Any],
36
36
  ui_target: dict[str, Any],
@@ -64,12 +64,11 @@ class SchemaSplitter:
64
64
  cls._extract_ui_properties(item, ui_target, defs)
65
65
  elif key in {"if", "then", "else"} and isinstance(value, dict):
66
66
  cls._extract_ui_properties(value, ui_target, defs)
67
- elif key == "$ref" and isinstance(value, str) and defs is not None:
67
+ elif key == "$ref" and isinstance(value, str) and defs is not None and value.startswith("#/$defs/"):
68
68
  # Resolve $ref and extract UI properties from the referenced definition
69
- if value.startswith("#/$defs/"):
70
- def_name = value[8:]
71
- if def_name in defs:
72
- cls._extract_ui_properties(defs[def_name], ui_target, defs)
69
+ def_name = value[8:]
70
+ if def_name in defs:
71
+ cls._extract_ui_properties(defs[def_name], ui_target, defs)
73
72
 
74
73
  @classmethod
75
74
  def _process_object( # noqa: C901, PLR0912
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalkin
3
- Version: 0.3.2.dev22
3
+ Version: 0.3.2.dev23
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
@@ -437,18 +437,18 @@ License: Attribution-NonCommercial-ShareAlike 4.0 International
437
437
  Project-URL: Homepage, https://github.com/DigitalKin-ai/digitalkin
438
438
  Project-URL: Documentation, https://github.com/DigitalKin-ai/digitalkin
439
439
  Project-URL: Issues, https://github.com/DigitalKin-ai/digitalkin/issues
440
- Keywords: digitalkin,kin,agent,gprc,sdk
440
+ Keywords: agent,digitalkin,gprc,kin,sdk
441
441
  Classifier: Development Status :: 3 - Alpha
442
442
  Classifier: Intended Audience :: Developers
443
+ Classifier: License :: Other/Proprietary License
443
444
  Classifier: Operating System :: OS Independent
444
- Classifier: Topic :: Software Development :: Libraries
445
- Classifier: Programming Language :: Python
445
+ Classifier: Programming Language :: Python :: 3 :: Only
446
446
  Classifier: Programming Language :: Python :: 3.10
447
447
  Classifier: Programming Language :: Python :: 3.11
448
448
  Classifier: Programming Language :: Python :: 3.12
449
449
  Classifier: Programming Language :: Python :: 3.13
450
- Classifier: Programming Language :: Python :: 3 :: Only
451
- Classifier: License :: Other/Proprietary License
450
+ Classifier: Programming Language :: Python
451
+ Classifier: Topic :: Software Development :: Libraries
452
452
  Requires-Python: >=3.10
453
453
  Description-Content-Type: text/markdown
454
454
  License-File: LICENSE