digitalkin 0.3.2.dev21__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.dev21 → digitalkin-0.3.2.dev23}/PKG-INFO +6 -6
  2. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/modules/archetype_with_tools_module.py +4 -16
  3. digitalkin-0.3.2.dev23/pyproject.toml +279 -0
  4. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/__version__.py +1 -1
  5. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/module_servicer.py +2 -2
  6. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/__init__.py +2 -4
  7. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/module_context.py +9 -11
  8. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/setup_types.py +30 -29
  9. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/tool_cache.py +34 -36
  10. digitalkin-0.3.2.dev23/src/digitalkin/models/module/tool_reference.py +173 -0
  11. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/services/registry.py +6 -6
  12. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/grpc_registry.py +1 -1
  13. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/schema_splitter.py +5 -6
  14. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin.egg-info/PKG-INFO +6 -6
  15. digitalkin-0.3.2.dev21/pyproject.toml +0 -279
  16. digitalkin-0.3.2.dev21/src/digitalkin/models/module/tool_reference.py +0 -136
  17. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/LICENSE +0 -0
  18. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/README.md +0 -0
  19. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/__init__.py +0 -0
  20. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/mock/__init__.py +0 -0
  21. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/mock/mock_pb2.py +0 -0
  22. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
  23. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/server_async_insecure.py +0 -0
  24. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/server_async_secure.py +0 -0
  25. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/server_sync_insecure.py +0 -0
  26. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/server_sync_secure.py +0 -0
  27. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/modules/__init__.py +0 -0
  28. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/modules/cpu_intensive_module.py +0 -0
  29. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/modules/dynamic_setup_module.py +0 -0
  30. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/modules/minimal_llm_module.py +0 -0
  31. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/modules/text_transform_module.py +0 -0
  32. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
  33. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
  34. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
  35. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
  36. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
  37. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/monitoring/tests/test_metrics.py +0 -0
  38. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/services/filesystem_module.py +0 -0
  39. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/services/storage_module.py +0 -0
  40. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/setup.cfg +0 -0
  41. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/__init__.py +0 -0
  42. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/__init__.py +0 -0
  43. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/common/__init__.py +0 -0
  44. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/common/factories.py +0 -0
  45. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/__init__.py +0 -0
  46. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
  47. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
  48. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/taskiq_broker.py +0 -0
  49. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/taskiq_job_manager.py +0 -0
  50. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/__init__.py +0 -0
  51. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
  52. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
  53. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
  54. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/surrealdb_repository.py +0 -0
  55. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/task_executor.py +0 -0
  56. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/task_session.py +0 -0
  57. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/__init__.py +0 -0
  58. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/_base_server.py +0 -0
  59. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/module_server.py +0 -0
  60. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
  61. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -0
  62. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
  63. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
  64. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
  65. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/logger.py +0 -0
  66. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/__init__.py +0 -0
  67. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/base_mixin.py +0 -0
  68. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/callback_mixin.py +0 -0
  69. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/chat_history_mixin.py +0 -0
  70. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/cost_mixin.py +0 -0
  71. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/file_history_mixin.py +0 -0
  72. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
  73. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/logger_mixin.py +0 -0
  74. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/storage_mixin.py +0 -0
  75. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/__init__.py +0 -0
  76. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/core/__init__.py +0 -0
  77. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/core/job_manager_models.py +0 -0
  78. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/core/task_monitor.py +0 -0
  79. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
  80. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/grpc_servers/models.py +0 -0
  81. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/grpc_servers/types.py +0 -0
  82. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/base_types.py +0 -0
  83. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/module.py +0 -0
  84. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/module_types.py +0 -0
  85. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/utility.py +0 -0
  86. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/services/__init__.py +0 -0
  87. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/services/cost.py +0 -0
  88. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/services/storage.py +0 -0
  89. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/__init__.py +0 -0
  90. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/_base_module.py +0 -0
  91. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/archetype_module.py +0 -0
  92. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/tool_module.py +0 -0
  93. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/trigger_handler.py +0 -0
  94. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/triggers/__init__.py +0 -0
  95. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
  96. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
  97. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
  98. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/py.typed +0 -0
  99. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/__init__.py +0 -0
  100. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/agent/__init__.py +0 -0
  101. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/agent/agent_strategy.py +0 -0
  102. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/agent/default_agent.py +0 -0
  103. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/base_strategy.py +0 -0
  104. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/communication/__init__.py +0 -0
  105. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/communication/communication_strategy.py +0 -0
  106. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/communication/default_communication.py +0 -0
  107. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/communication/grpc_communication.py +0 -0
  108. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/cost/__init__.py +0 -0
  109. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/cost/cost_strategy.py +0 -0
  110. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/cost/default_cost.py +0 -0
  111. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/cost/grpc_cost.py +0 -0
  112. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/filesystem/__init__.py +0 -0
  113. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
  114. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
  115. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
  116. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/identity/__init__.py +0 -0
  117. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/identity/default_identity.py +0 -0
  118. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/identity/identity_strategy.py +0 -0
  119. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/__init__.py +0 -0
  120. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/default_registry.py +0 -0
  121. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/exceptions.py +0 -0
  122. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/registry_models.py +0 -0
  123. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/registry_strategy.py +0 -0
  124. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/services_config.py +0 -0
  125. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/services_models.py +0 -0
  126. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/setup/__init__.py +0 -0
  127. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/setup/default_setup.py +0 -0
  128. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/setup/grpc_setup.py +0 -0
  129. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/setup/setup_strategy.py +0 -0
  130. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/snapshot/__init__.py +0 -0
  131. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/snapshot/default_snapshot.py +0 -0
  132. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/snapshot/snapshot_strategy.py +0 -0
  133. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/storage/__init__.py +0 -0
  134. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/storage/default_storage.py +0 -0
  135. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/storage/grpc_storage.py +0 -0
  136. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/storage/storage_strategy.py +0 -0
  137. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/user_profile/__init__.py +0 -0
  138. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
  139. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
  140. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
  141. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/__init__.py +0 -0
  142. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/arg_parser.py +0 -0
  143. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/conditional_schema.py +0 -0
  144. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/development_mode_action.py +0 -0
  145. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/dynamic_schema.py +0 -0
  146. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/llm_ready_schema.py +0 -0
  147. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/package_discover.py +0 -0
  148. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin.egg-info/SOURCES.txt +0 -0
  149. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin.egg-info/dependency_links.txt +0 -0
  150. {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin.egg-info/requires.txt +0 -0
  151. {digitalkin-0.3.2.dev21 → 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.dev21
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
@@ -8,11 +8,7 @@ from pydantic import BaseModel, Field
8
8
  from digitalkin.models.grpc_servers.models import ClientConfig, SecurityMode, ServerMode
9
9
  from digitalkin.models.module.module_context import ModuleContext
10
10
  from digitalkin.models.module.setup_types import SetupModel
11
- from digitalkin.models.module.tool_reference import (
12
- ToolReference,
13
- ToolReferenceConfig,
14
- ToolSelectionMode,
15
- )
11
+ from digitalkin.models.module.tool_reference import ToolReference
16
12
  from digitalkin.modules._base_module import BaseModule # noqa: PLC2701
17
13
  from digitalkin.services.services_models import ServicesStrategy
18
14
 
@@ -64,29 +60,21 @@ class ArchetypeSetup(SetupModel):
64
60
 
65
61
  search_tool: ToolReference = Field(
66
62
  default_factory=lambda: ToolReference(
67
- config=ToolReferenceConfig(
68
- mode=ToolSelectionMode.FIXED,
69
- module_id="search-tool-v1",
70
- )
63
+ module_ids=["search-tool-v1"],
71
64
  ),
72
65
  json_schema_extra={"config": True},
73
66
  )
74
67
 
75
68
  calculator_tool: ToolReference = Field(
76
69
  default_factory=lambda: ToolReference(
77
- config=ToolReferenceConfig(
78
- mode=ToolSelectionMode.TAG,
79
- tag="math-calculator",
80
- )
70
+ tags=["math-calculator"],
81
71
  ),
82
72
  json_schema_extra={"config": True},
83
73
  )
84
74
 
85
75
  dynamic_tool: ToolReference = Field(
86
76
  default_factory=lambda: ToolReference(
87
- config=ToolReferenceConfig(
88
- mode=ToolSelectionMode.DISCOVERABLE,
89
- )
77
+ tags=["discoverable"],
90
78
  ),
91
79
  json_schema_extra={"config": True},
92
80
  )
@@ -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.dev21"
8
+ __version__ = "0.3.2.dev23"
@@ -165,7 +165,7 @@ class ModuleServicer(module_service_pb2_grpc.ModuleServiceServicer, ArgParser):
165
165
  if isinstance(updated_setup_data, ModuleCodeModel):
166
166
  logger.error(
167
167
  "Config setup failed",
168
- extra={"job_id": job_id, "code": updated_setup_data.code, "message": updated_setup_data.message},
168
+ extra={"job_id": job_id, "code": updated_setup_data.code, "error_message": updated_setup_data.message},
169
169
  )
170
170
  context.set_code(grpc.StatusCode.INTERNAL)
171
171
  context.set_details(updated_setup_data.message or "Config setup failed")
@@ -178,7 +178,7 @@ class ModuleServicer(module_service_pb2_grpc.ModuleServiceServicer, ArgParser):
178
178
  extra={
179
179
  "job_id": job_id,
180
180
  "code": updated_setup_data["code"],
181
- "message": updated_setup_data.get("message"),
181
+ "error_message": updated_setup_data.get("message"),
182
182
  },
183
183
  )
184
184
  context.set_code(grpc.StatusCode.INTERNAL)
@@ -14,8 +14,7 @@ from digitalkin.models.module.tool_cache import (
14
14
  )
15
15
  from digitalkin.models.module.tool_reference import (
16
16
  ToolReference,
17
- ToolReferenceConfig,
18
- ToolSelectionMode,
17
+ tool_reference_input,
19
18
  )
20
19
  from digitalkin.models.module.utility import (
21
20
  EndOfStreamOutput,
@@ -36,8 +35,7 @@ __all__ = [
36
35
  "ToolModuleInfo",
37
36
  "ToolParameter",
38
37
  "ToolReference",
39
- "ToolReferenceConfig",
40
- "ToolSelectionMode",
41
38
  "UtilityProtocol",
42
39
  "UtilityRegistry",
40
+ "tool_reference_input",
43
41
  ]
@@ -227,21 +227,19 @@ class ModuleContext:
227
227
  llm_format=llm_format,
228
228
  )
229
229
 
230
- async def create_openai_style_tools(self, module_id: str) -> list[dict[str, Any]]:
230
+ def create_openai_style_tools(self, slug: str) -> list[dict[str, Any]]:
231
231
  """Create OpenAI-style function calling schemas for a tool module.
232
232
 
233
233
  Uses tool cache (fast path) with registry fallback. Returns one schema
234
234
  per ToolDefinition (protocol) in the module.
235
235
 
236
236
  Args:
237
- module_id: Module ID to look up (checks cache first, then registry).
237
+ slug: Module ID to look up (checks cache first, then registry).
238
238
 
239
239
  Returns:
240
240
  List of OpenAI-style tool schemas, one per protocol. Empty if not found.
241
241
  """
242
- tool_module_info = await self.tool_cache.get(
243
- module_id, registry=self.registry, communication=self.communication
244
- )
242
+ tool_module_info = self.tool_cache.get(slug)
245
243
  if not tool_module_info:
246
244
  return []
247
245
 
@@ -250,8 +248,8 @@ class ModuleContext:
250
248
  "type": "function",
251
249
  "function": {
252
250
  "module_id": tool_module_info.module_id,
253
- "toolkit_name": tool_module_info.name or "undefined",
254
- "name": tool_def.name,
251
+ "toolkit_name": tool_module_info.tool_name or "undefined",
252
+ "name": tool_module_info.slug + "_" + tool_def.name,
255
253
  "description": tool_def.description,
256
254
  "parameters": ModuleContext._build_parameters_schema(tool_def.parameters),
257
255
  },
@@ -277,9 +275,9 @@ class ModuleContext:
277
275
 
278
276
  def create_tool_functions(
279
277
  self,
280
- module_id: str,
278
+ slug: str,
281
279
  ) -> list[tuple[ToolDefinition, Callable[..., AsyncGenerator[dict, None]]]]:
282
- """Create tool functions for all protocols in a tool module.
280
+ """Create tool functions for all protocols in a tool setup.
283
281
 
284
282
  Returns an async generator per ToolDefinition that calls the remote tool
285
283
  module via gRPC with the protocol auto-injected.
@@ -288,12 +286,12 @@ class ModuleContext:
288
286
  in sync contexts like __init__ methods.
289
287
 
290
288
  Args:
291
- module_id: Module ID to look up in cache.
289
+ slug: Setup ID to look up in cache.
292
290
 
293
291
  Returns:
294
292
  List of (ToolDefinition, async_generator_function) tuples. Empty if not found.
295
293
  """
296
- tool_module_info = self.tool_cache.entries.get(module_id)
294
+ tool_module_info = self.tool_cache.entries.get(slug)
297
295
  if not tool_module_info:
298
296
  return []
299
297
 
@@ -29,7 +29,6 @@ SetupModelT = TypeVar("SetupModelT", bound="SetupModel")
29
29
  class SetupModel(BaseModel, Generic[SetupModelT]):
30
30
  """Base setup model with dynamic schema and tool cache support."""
31
31
 
32
- model_config = ConfigDict(extra="allow")
33
32
  _clean_model_cache: ClassVar[dict[tuple[type, bool, bool], type]] = {}
34
33
  resolved_tools: dict[str, ToolModuleInfo] = Field(
35
34
  default_factory=dict,
@@ -347,7 +346,7 @@ class SetupModel(BaseModel, Generic[SetupModelT]):
347
346
  resolved_tools: Cache of already resolved tools.
348
347
  """
349
348
  if isinstance(field_value, ToolReference):
350
- await cls._resolve_single_tool_reference(
349
+ await cls._resolve_tool_reference(
351
350
  field_name,
352
351
  field_value,
353
352
  registry,
@@ -377,7 +376,7 @@ class SetupModel(BaseModel, Generic[SetupModelT]):
377
376
  )
378
377
 
379
378
  @classmethod
380
- async def _resolve_single_tool_reference(
379
+ async def _resolve_tool_reference(
381
380
  cls,
382
381
  field_name: str,
383
382
  tool_ref: ToolReference,
@@ -385,7 +384,7 @@ class SetupModel(BaseModel, Generic[SetupModelT]):
385
384
  communication: "CommunicationStrategy",
386
385
  resolved_tools: dict[str, ToolModuleInfo],
387
386
  ) -> None:
388
- """Resolve a single ToolReference.
387
+ """Resolve a ToolReference (may contain multiple selected tools).
389
388
 
390
389
  Args:
391
390
  field_name: Name of the field for logging.
@@ -394,21 +393,23 @@ class SetupModel(BaseModel, Generic[SetupModelT]):
394
393
  communication: Communication service for module schemas.
395
394
  resolved_tools: Cache of already resolved tools.
396
395
  """
397
- logger.info("Resolving ToolReference '%s' with setup_id='%s'", field_name, tool_ref.config.setup_id)
396
+ logger.info("Resolving ToolReference '%s' with %d selected tools", field_name, len(tool_ref.selected_tools))
398
397
 
399
- slug = tool_ref.slug
400
- if slug:
401
- cached = resolved_tools.get(slug)
402
- if cached:
403
- tool_ref._cached_info = cached # noqa: SLF001
404
- logger.info("ToolReference '%s' resolved from cache -> %s", field_name, cached)
405
- return
398
+ if not tool_ref.selected_tools:
399
+ logger.info("ToolReference '%s' has no selected tools, skipping", field_name)
400
+ return
401
+
402
+ tools_to_resolve = [tool for tool in tool_ref.selected_tools if tool.slug and tool.slug not in resolved_tools]
403
+
404
+ if not tools_to_resolve:
405
+ logger.info("All tools for '%s' already cached", field_name)
406
+ return
406
407
 
407
408
  try:
408
- info = await tool_ref.resolve(registry, communication)
409
- if info and info.setup_id:
409
+ infos = await tool_ref.resolve(registry, communication)
410
+ for info in infos:
410
411
  resolved_tools[info.setup_id] = info
411
- logger.info("Resolved ToolReference '%s' -> %s", field_name, tool_ref.tool_module_info)
412
+ logger.info("Resolved tool '%s' -> module_id=%s", info.setup_id, info.module_id)
412
413
  except Exception:
413
414
  logger.exception("Failed to resolve ToolReference '%s'", field_name)
414
415
 
@@ -430,7 +431,7 @@ class SetupModel(BaseModel, Generic[SetupModelT]):
430
431
  """
431
432
  for item in items:
432
433
  if isinstance(item, ToolReference):
433
- await cls._resolve_single_tool_reference(
434
+ await cls._resolve_tool_reference(
434
435
  "list_item",
435
436
  item,
436
437
  registry,
@@ -463,7 +464,7 @@ class SetupModel(BaseModel, Generic[SetupModelT]):
463
464
  """
464
465
  for item in mapping.values():
465
466
  if isinstance(item, ToolReference):
466
- await cls._resolve_single_tool_reference(
467
+ await cls._resolve_tool_reference(
467
468
  "dict_value",
468
469
  item,
469
470
  registry,
@@ -500,10 +501,10 @@ class SetupModel(BaseModel, Generic[SetupModelT]):
500
501
  if field_value is None:
501
502
  continue
502
503
  if isinstance(field_value, ToolReference):
503
- module_info = self.resolved_tools.get(field_value.slug or "") or field_value.tool_module_info
504
- if module_info:
505
- self.resolved_tools[module_info.setup_id] = module_info
506
- cache.add(module_info.module_id, module_info)
504
+ for tool in field_value.selected_tools:
505
+ tool_module_info = self.resolved_tools.get(tool.slug or "")
506
+ if tool_module_info:
507
+ cache.add(tool_module_info)
507
508
  elif isinstance(field_value, BaseModel):
508
509
  self._build_tool_cache_recursive(field_value, cache)
509
510
  elif isinstance(field_value, list):
@@ -520,10 +521,10 @@ class SetupModel(BaseModel, Generic[SetupModelT]):
520
521
  """
521
522
  for item in items:
522
523
  if isinstance(item, ToolReference):
523
- module_info = self.resolved_tools.get(item.slug or "") or item.tool_module_info
524
- if module_info:
525
- self.resolved_tools[module_info.setup_id] = module_info
526
- cache.add(module_info.module_id, module_info)
524
+ for tool in item.selected_tools:
525
+ tool_module_info = self.resolved_tools.get(tool.slug or "")
526
+ if tool_module_info:
527
+ cache.add(tool_module_info)
527
528
  elif isinstance(item, BaseModel):
528
529
  self._build_tool_cache_recursive(item, cache)
529
530
 
@@ -536,9 +537,9 @@ class SetupModel(BaseModel, Generic[SetupModelT]):
536
537
  """
537
538
  for item in mapping.values():
538
539
  if isinstance(item, ToolReference):
539
- module_info = self.resolved_tools.get(item.slug or "") or item.tool_module_info
540
- if module_info:
541
- self.resolved_tools[module_info.setup_id] = module_info
542
- cache.add(module_info.module_id, module_info)
540
+ for tool in item.selected_tools:
541
+ tool_module_info = self.resolved_tools.get(tool.slug or "")
542
+ if tool_module_info:
543
+ cache.add(tool_module_info)
543
544
  elif isinstance(item, BaseModel):
544
545
  self._build_tool_cache_recursive(item, cache)