digitalkin 0.3.2.dev26__py3-none-any.whl → 0.3.2.dev27__py3-none-any.whl

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/__version__.py CHANGED
@@ -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.dev26"
8
+ __version__ = "0.3.2.dev27"
@@ -399,7 +399,9 @@ class SetupModel(BaseModel, Generic[SetupModelT]):
399
399
  logger.info("ToolReference '%s' has no selected tools, skipping", field_name)
400
400
  return
401
401
 
402
- tools_to_resolve = [tool for tool in tool_ref.selected_tools if tool.slug and tool.slug not in resolved_tools]
402
+ tools_to_resolve = [
403
+ setup_id for setup_id in tool_ref.selected_tools if setup_id and setup_id not in resolved_tools
404
+ ]
403
405
 
404
406
  if not tools_to_resolve:
405
407
  logger.info("All tools for '%s' already cached", field_name)
@@ -501,8 +503,8 @@ class SetupModel(BaseModel, Generic[SetupModelT]):
501
503
  if field_value is None:
502
504
  continue
503
505
  if isinstance(field_value, ToolReference):
504
- for tool in field_value.selected_tools:
505
- tool_module_info = self.resolved_tools.get(tool.slug or "")
506
+ for setup_id in field_value.selected_tools:
507
+ tool_module_info = self.resolved_tools.get(setup_id)
506
508
  if tool_module_info:
507
509
  cache.add(tool_module_info)
508
510
  elif isinstance(field_value, BaseModel):
@@ -521,8 +523,8 @@ class SetupModel(BaseModel, Generic[SetupModelT]):
521
523
  """
522
524
  for item in items:
523
525
  if isinstance(item, ToolReference):
524
- for tool in item.selected_tools:
525
- tool_module_info = self.resolved_tools.get(tool.slug or "")
526
+ for setup_id in item.selected_tools:
527
+ tool_module_info = self.resolved_tools.get(setup_id)
526
528
  if tool_module_info:
527
529
  cache.add(tool_module_info)
528
530
  elif isinstance(item, BaseModel):
@@ -537,8 +539,8 @@ class SetupModel(BaseModel, Generic[SetupModelT]):
537
539
  """
538
540
  for item in mapping.values():
539
541
  if isinstance(item, ToolReference):
540
- for tool in item.selected_tools:
541
- tool_module_info = self.resolved_tools.get(tool.slug or "")
542
+ for setup_id in item.selected_tools:
543
+ tool_module_info = self.resolved_tools.get(setup_id)
542
544
  if tool_module_info:
543
545
  cache.add(tool_module_info)
544
546
  elif isinstance(item, BaseModel):
@@ -120,7 +120,8 @@ class ToolCache(BaseModel):
120
120
 
121
121
  async def module_info_to_tool_module_info(
122
122
  module_info: ModuleInfo,
123
- tool: SelectedTool,
123
+ setup_id: str,
124
+ tool_name: str,
124
125
  communication: "CommunicationStrategy",
125
126
  *,
126
127
  llm_format: bool = True,
@@ -132,7 +133,8 @@ async def module_info_to_tool_module_info(
132
133
 
133
134
  Args:
134
135
  module_info: Module info from registry.
135
- tool: Selected tool information.
136
+ setup_id: Setup ID of the selected tool.
137
+ tool_name: Name of the tool.
136
138
  communication: Communication strategy for gRPC calls.
137
139
  llm_format: Use LLM-friendly schema format.
138
140
 
@@ -161,8 +163,8 @@ async def module_info_to_tool_module_info(
161
163
  documentation=module_info.documentation,
162
164
  status=module_info.status,
163
165
  tools=tools,
164
- setup_id=tool.setup_id,
165
- tool_name=tool.name,
166
+ setup_id=setup_id,
167
+ tool_name=tool_name,
166
168
  )
167
169
 
168
170
 
@@ -7,47 +7,33 @@ from pydantic.annotated_handlers import GetJsonSchemaHandler
7
7
  from pydantic.json_schema import JsonSchemaValue
8
8
  from pydantic_core import CoreSchema
9
9
 
10
- from digitalkin.models.module.tool_cache import (
11
- SelectedTool,
12
- ToolModuleInfo,
13
- module_info_to_tool_module_info,
14
- )
10
+ from digitalkin.models.module.tool_cache import ToolModuleInfo, module_info_to_tool_module_info
15
11
  from digitalkin.services.communication.communication_strategy import CommunicationStrategy
16
12
  from digitalkin.services.registry import RegistryStrategy
17
13
 
18
14
 
19
15
  class ToolReference(BaseModel):
20
- """Tool selection configuration and reference."""
16
+ """Tool selection containing setup IDs."""
21
17
 
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
- tag_ids: list[str] = Field(default=[], description="Tag IDs for the user to choose from.")
26
- categories: list[str] = Field(default=[], description="Categories for the user to choose from.")
27
- max_tools: int = Field(default=0, description="Maximum tools to select. 0 for unlimited.")
28
- min_tools: int = Field(default=0, description="Minimum tools to select. 0 for no minimum.")
18
+ selected_tools: list[str] = Field(default=[], description="Setup IDs of selected tools.")
29
19
 
30
20
  async def resolve(self, registry: RegistryStrategy, communication: CommunicationStrategy) -> list[ToolModuleInfo]:
31
- """Resolve this reference using the registry.
21
+ """Resolve selected tools using the registry.
32
22
 
33
23
  Args:
34
24
  registry: Registry service for module discovery.
35
25
  communication: Communication service for module schemas.
36
26
 
37
27
  Returns:
38
- List of ToolModuleInfo if resolved.
28
+ List of ToolModuleInfo for resolved tools.
39
29
  """
40
30
  resolved: list[ToolModuleInfo] = []
41
- for tool in self.selected_tools:
42
- setup = registry.get_setup(tool.setup_id)
31
+ for setup_id in self.selected_tools:
32
+ setup = registry.get_setup(setup_id)
43
33
  if setup and setup.module_id:
44
34
  info = registry.discover_by_id(setup.module_id)
45
- tool.slug = tool.setup_id
46
- tool.module_id = setup.module_id
47
- tool.name = setup.name
48
35
  if info:
49
- resolved.append(await module_info_to_tool_module_info(info, tool, communication))
50
-
36
+ resolved.append(await module_info_to_tool_module_info(info, setup_id, setup.name, communication))
51
37
  return resolved
52
38
 
53
39
 
@@ -127,15 +113,7 @@ def tool_reference_input(
127
113
  ToolReference if input is list, otherwise original value.
128
114
  """
129
115
  if isinstance(v, list):
130
- return ToolReference(
131
- selected_tools=[SelectedTool(setup_id=sid, slug=sid) for sid in v],
132
- setup_ids=setup_ids,
133
- module_ids=module_ids,
134
- tag_ids=tag_ids,
135
- categories=categories,
136
- max_tools=max_tools,
137
- min_tools=min_tools,
138
- )
116
+ return ToolReference(selected_tools=v)
139
117
  return v
140
118
 
141
119
  def validate_tools_count(v: ToolReference) -> ToolReference:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalkin
3
- Version: 0.3.2.dev26
3
+ Version: 0.3.2.dev27
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
@@ -7,7 +7,7 @@ base_server/mock/__init__.py,sha256=YZFT-F1l_TpvJYuIPX-7kTeE1CfOjhx9YmNRXVoi-jQ,
7
7
  base_server/mock/mock_pb2.py,sha256=sETakcS3PAAm4E-hTCV1jIVaQTPEAIoVVHupB8Z_k7Y,1843
8
8
  base_server/mock/mock_pb2_grpc.py,sha256=BbOT70H6q3laKgkHfOx1QdfmCS_HxCY4wCOX84YAdG4,3180
9
9
  digitalkin/__init__.py,sha256=7LLBAba0th-3SGqcpqFO-lopWdUkVLKzLZiMtB-mW3M,162
10
- digitalkin/__version__.py,sha256=HpFcv-O69nogjhoQ6hsQe8S_Ym7hd5mJwWVtxQRO0to,196
10
+ digitalkin/__version__.py,sha256=Sgoi_BWPmZPvGJPS33B9mfXeua1Gp0L_nfAmYARTdBE,196
11
11
  digitalkin/logger.py,sha256=8ze_tjt2G6mDTuQcsf7-UTXWP3UHZ7LZVSs_iqF4rX4,4685
12
12
  digitalkin/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  digitalkin/core/__init__.py,sha256=FJRcJ-B1Viyn-38L8XpOpZ8KOnf1I7PCDOAmKXLQhqc,71
@@ -55,9 +55,9 @@ digitalkin/models/module/base_types.py,sha256=oIylVNqo0idTFj4dRgCt7P19daNZ-AlvgC
55
55
  digitalkin/models/module/module.py,sha256=k0W8vfJJFth8XdDzkHm32SyTuSf3h2qF0hSrxAfGF1s,956
56
56
  digitalkin/models/module/module_context.py,sha256=kwaAobsA82Du6L0XH9Is9u6Qj1rEjhYqVk00FonMaw4,12087
57
57
  digitalkin/models/module/module_types.py,sha256=C9azCNBk76xMa-Mww8_6AiwQR8MLAsEyUOvBYxytovI,739
58
- digitalkin/models/module/setup_types.py,sha256=8xEI6DvCYBHSOsuoeuZjtBL5rPsR_7DwWFxQnn2bo3c,19249
59
- digitalkin/models/module/tool_cache.py,sha256=xAMSyY73aduYGPz6C54g0YMAa2OnXPN6QRS-W4TK_js,6568
60
- digitalkin/models/module/tool_reference.py,sha256=inizU9IkU_vxeyZxcK-JBqOloqTMvVSlj7-fot6syY4,6188
58
+ digitalkin/models/module/setup_types.py,sha256=Jh6zkSoKTdRTU2YsSoLGrVquLcYHvSeFUX9jpEiZyLU,19268
59
+ digitalkin/models/module/tool_cache.py,sha256=xCOH2tr7MN0-b3B_8If3mZvoingJsJB4M032ajfdmIA,6623
60
+ digitalkin/models/module/tool_reference.py,sha256=wX1DZFGiuZqcarxtb1TqlE0YVFxsYZb1sEQY249zj3w,5143
61
61
  digitalkin/models/module/utility.py,sha256=gnbYfWpXGbomUI0fWf7T-Qm_VvT-LXDv1OuA9zObwVg,5589
62
62
  digitalkin/models/services/__init__.py,sha256=jhfVw6egq0OcHmos_fypH9XFehbHTBw09wluVFVFEyw,226
63
63
  digitalkin/models/services/cost.py,sha256=9PXvd5RrIk9vCrRjcUGQ9ZyAokEbwLg4s0RfnE-aLP4,1616
@@ -123,7 +123,7 @@ digitalkin/utils/dynamic_schema.py,sha256=y5csxjuqVHjWDpnTUzxbcUuI_wou9-ibRVHQlB
123
123
  digitalkin/utils/llm_ready_schema.py,sha256=JjMug_lrQllqFoanaC091VgOqwAd-_YzcpqFlS7p778,2375
124
124
  digitalkin/utils/package_discover.py,sha256=sa6Zp5Kape1Zr4iYiNrnZxiHDnqM06ODk6yfWHom53w,13465
125
125
  digitalkin/utils/schema_splitter.py,sha256=f1RGzs0wSRPn8oydO9Ojo8mYTF4TFDkRFeGUt5jbPt4,11132
126
- digitalkin-0.3.2.dev26.dist-info/licenses/LICENSE,sha256=Ies4HFv2r2hzDRakJYxk3Y60uDFLiG-orIgeTpstnIo,20327
126
+ digitalkin-0.3.2.dev27.dist-info/licenses/LICENSE,sha256=Ies4HFv2r2hzDRakJYxk3Y60uDFLiG-orIgeTpstnIo,20327
127
127
  modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
128
  modules/archetype_with_tools_module.py,sha256=kJkVhAFWG0aDDqzupOXOnV3l8j3z5bEdWos_6Z9rUP8,7303
129
129
  modules/cpu_intensive_module.py,sha256=GZlirQDZdYuXrI46sv1q4RNAHZjL4EptHVQTvgK9zz8,8363
@@ -138,7 +138,7 @@ monitoring/digitalkin_observability/prometheus.py,sha256=gDmM9ySaVwPAe7Yg84pLxmE
138
138
  monitoring/tests/test_metrics.py,sha256=ugnYfAwqBPO6zA8z4afKTlyBWECTivacYSN-URQCn2E,5856
139
139
  services/filesystem_module.py,sha256=U4dgqtuDadaXz8PJ1d_uQ_1EPncBqudAQCLUICF9yL4,7421
140
140
  services/storage_module.py,sha256=Wz2MzLvqs2D_bnBBgtnujYcAKK2V2KFMk8K21RoepSE,6972
141
- digitalkin-0.3.2.dev26.dist-info/METADATA,sha256=DsDpAG8N_ZP2wt9WmfTRHgfbR9rpOyuJtmSHKHBRIwg,29725
142
- digitalkin-0.3.2.dev26.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
143
- digitalkin-0.3.2.dev26.dist-info/top_level.txt,sha256=AYVIesKrO0jnedQ-Muog9JBehG81WeTCNeOFoJgwsgE,51
144
- digitalkin-0.3.2.dev26.dist-info/RECORD,,
141
+ digitalkin-0.3.2.dev27.dist-info/METADATA,sha256=0nBhEu0M24hxgr0lnD2D4RS6FxNAYixq7GecX1h0fpg,29725
142
+ digitalkin-0.3.2.dev27.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
143
+ digitalkin-0.3.2.dev27.dist-info/top_level.txt,sha256=AYVIesKrO0jnedQ-Muog9JBehG81WeTCNeOFoJgwsgE,51
144
+ digitalkin-0.3.2.dev27.dist-info/RECORD,,