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.
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/PKG-INFO +6 -6
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/modules/archetype_with_tools_module.py +4 -16
- digitalkin-0.3.2.dev23/pyproject.toml +279 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/__version__.py +1 -1
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/module_servicer.py +2 -2
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/__init__.py +2 -4
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/module_context.py +9 -11
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/setup_types.py +30 -29
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/tool_cache.py +34 -36
- digitalkin-0.3.2.dev23/src/digitalkin/models/module/tool_reference.py +173 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/services/registry.py +6 -6
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/grpc_registry.py +1 -1
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/schema_splitter.py +5 -6
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin.egg-info/PKG-INFO +6 -6
- digitalkin-0.3.2.dev21/pyproject.toml +0 -279
- digitalkin-0.3.2.dev21/src/digitalkin/models/module/tool_reference.py +0 -136
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/LICENSE +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/README.md +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/mock/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/mock/mock_pb2.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/server_async_insecure.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/server_async_secure.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/server_sync_insecure.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/base_server/server_sync_secure.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/modules/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/modules/cpu_intensive_module.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/modules/dynamic_setup_module.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/modules/minimal_llm_module.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/modules/text_transform_module.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/monitoring/tests/test_metrics.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/services/filesystem_module.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/services/storage_module.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/setup.cfg +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/common/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/common/factories.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/taskiq_broker.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/job_manager/taskiq_job_manager.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/surrealdb_repository.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/task_executor.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/core/task_manager/task_session.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/_base_server.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/module_server.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/logger.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/base_mixin.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/callback_mixin.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/chat_history_mixin.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/cost_mixin.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/file_history_mixin.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/logger_mixin.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/mixins/storage_mixin.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/core/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/core/job_manager_models.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/core/task_monitor.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/grpc_servers/models.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/grpc_servers/types.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/base_types.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/module.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/module_types.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/utility.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/services/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/services/cost.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/services/storage.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/_base_module.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/archetype_module.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/tool_module.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/trigger_handler.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/triggers/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/py.typed +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/agent/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/agent/agent_strategy.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/agent/default_agent.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/base_strategy.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/communication/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/communication/communication_strategy.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/communication/default_communication.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/communication/grpc_communication.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/cost/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/cost/cost_strategy.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/cost/default_cost.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/cost/grpc_cost.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/filesystem/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/identity/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/identity/default_identity.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/identity/identity_strategy.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/default_registry.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/exceptions.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/registry_models.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/registry/registry_strategy.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/services_config.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/services_models.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/setup/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/setup/default_setup.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/setup/grpc_setup.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/setup/setup_strategy.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/snapshot/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/snapshot/default_snapshot.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/snapshot/snapshot_strategy.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/storage/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/storage/default_storage.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/storage/grpc_storage.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/storage/storage_strategy.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/user_profile/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/__init__.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/arg_parser.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/conditional_schema.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/development_mode_action.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/dynamic_schema.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/llm_ready_schema.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/utils/package_discover.py +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin.egg-info/SOURCES.txt +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin.egg-info/dependency_links.txt +0 -0
- {digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin.egg-info/requires.txt +0 -0
- {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.
|
|
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,
|
|
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:
|
|
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
|
|
451
|
-
Classifier:
|
|
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
|
{digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/examples/modules/archetype_with_tools_module.py
RENAMED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
]
|
{digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/grpc_servers/module_servicer.py
RENAMED
|
@@ -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, "
|
|
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
|
-
"
|
|
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
|
-
|
|
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
|
]
|
{digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/module_context.py
RENAMED
|
@@ -227,21 +227,19 @@ class ModuleContext:
|
|
|
227
227
|
llm_format=llm_format,
|
|
228
228
|
)
|
|
229
229
|
|
|
230
|
-
|
|
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
|
-
|
|
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 =
|
|
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.
|
|
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
|
-
|
|
278
|
+
slug: str,
|
|
281
279
|
) -> list[tuple[ToolDefinition, Callable[..., AsyncGenerator[dict, None]]]]:
|
|
282
|
-
"""Create tool functions for all protocols in a tool
|
|
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
|
-
|
|
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(
|
|
294
|
+
tool_module_info = self.tool_cache.entries.get(slug)
|
|
297
295
|
if not tool_module_info:
|
|
298
296
|
return []
|
|
299
297
|
|
{digitalkin-0.3.2.dev21 → digitalkin-0.3.2.dev23}/src/digitalkin/models/module/setup_types.py
RENAMED
|
@@ -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.
|
|
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
|
|
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
|
|
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
|
|
396
|
+
logger.info("Resolving ToolReference '%s' with %d selected tools", field_name, len(tool_ref.selected_tools))
|
|
398
397
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
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
|
-
|
|
409
|
-
|
|
409
|
+
infos = await tool_ref.resolve(registry, communication)
|
|
410
|
+
for info in infos:
|
|
410
411
|
resolved_tools[info.setup_id] = info
|
|
411
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
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
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
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
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
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)
|