digitalkin 0.3.1.dev1__py3-none-any.whl → 0.3.2a2__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.
Files changed (87) hide show
  1. base_server/server_async_insecure.py +6 -5
  2. base_server/server_async_secure.py +6 -5
  3. base_server/server_sync_insecure.py +5 -4
  4. base_server/server_sync_secure.py +5 -4
  5. digitalkin/__version__.py +1 -1
  6. digitalkin/core/job_manager/base_job_manager.py +1 -1
  7. digitalkin/core/job_manager/single_job_manager.py +78 -36
  8. digitalkin/core/job_manager/taskiq_broker.py +8 -7
  9. digitalkin/core/job_manager/taskiq_job_manager.py +9 -5
  10. digitalkin/core/task_manager/base_task_manager.py +3 -1
  11. digitalkin/core/task_manager/surrealdb_repository.py +13 -7
  12. digitalkin/core/task_manager/task_executor.py +27 -10
  13. digitalkin/core/task_manager/task_session.py +133 -101
  14. digitalkin/grpc_servers/module_server.py +95 -171
  15. digitalkin/grpc_servers/module_servicer.py +133 -27
  16. digitalkin/grpc_servers/utils/grpc_client_wrapper.py +36 -10
  17. digitalkin/grpc_servers/utils/utility_schema_extender.py +106 -0
  18. digitalkin/models/__init__.py +1 -1
  19. digitalkin/models/core/job_manager_models.py +0 -8
  20. digitalkin/models/core/task_monitor.py +23 -1
  21. digitalkin/models/grpc_servers/models.py +95 -8
  22. digitalkin/models/module/__init__.py +26 -13
  23. digitalkin/models/module/base_types.py +61 -0
  24. digitalkin/models/module/module_context.py +279 -13
  25. digitalkin/models/module/module_types.py +29 -109
  26. digitalkin/models/module/setup_types.py +547 -0
  27. digitalkin/models/module/tool_cache.py +230 -0
  28. digitalkin/models/module/tool_reference.py +160 -0
  29. digitalkin/models/module/utility.py +167 -0
  30. digitalkin/models/services/cost.py +22 -1
  31. digitalkin/models/services/registry.py +77 -0
  32. digitalkin/modules/__init__.py +5 -1
  33. digitalkin/modules/_base_module.py +253 -90
  34. digitalkin/modules/archetype_module.py +6 -1
  35. digitalkin/modules/tool_module.py +6 -1
  36. digitalkin/modules/triggers/__init__.py +8 -0
  37. digitalkin/modules/triggers/healthcheck_ping_trigger.py +45 -0
  38. digitalkin/modules/triggers/healthcheck_services_trigger.py +63 -0
  39. digitalkin/modules/triggers/healthcheck_status_trigger.py +52 -0
  40. digitalkin/services/__init__.py +4 -0
  41. digitalkin/services/communication/__init__.py +7 -0
  42. digitalkin/services/communication/communication_strategy.py +87 -0
  43. digitalkin/services/communication/default_communication.py +104 -0
  44. digitalkin/services/communication/grpc_communication.py +264 -0
  45. digitalkin/services/cost/cost_strategy.py +36 -14
  46. digitalkin/services/cost/default_cost.py +61 -1
  47. digitalkin/services/cost/grpc_cost.py +98 -2
  48. digitalkin/services/filesystem/grpc_filesystem.py +9 -2
  49. digitalkin/services/registry/__init__.py +22 -1
  50. digitalkin/services/registry/default_registry.py +156 -4
  51. digitalkin/services/registry/exceptions.py +47 -0
  52. digitalkin/services/registry/grpc_registry.py +382 -0
  53. digitalkin/services/registry/registry_models.py +15 -0
  54. digitalkin/services/registry/registry_strategy.py +106 -4
  55. digitalkin/services/services_config.py +25 -3
  56. digitalkin/services/services_models.py +5 -1
  57. digitalkin/services/setup/default_setup.py +1 -1
  58. digitalkin/services/setup/grpc_setup.py +1 -1
  59. digitalkin/services/storage/grpc_storage.py +1 -1
  60. digitalkin/services/user_profile/__init__.py +11 -0
  61. digitalkin/services/user_profile/grpc_user_profile.py +2 -2
  62. digitalkin/services/user_profile/user_profile_strategy.py +0 -15
  63. digitalkin/utils/__init__.py +40 -0
  64. digitalkin/utils/conditional_schema.py +260 -0
  65. digitalkin/utils/dynamic_schema.py +487 -0
  66. digitalkin/utils/schema_splitter.py +290 -0
  67. {digitalkin-0.3.1.dev1.dist-info → digitalkin-0.3.2a2.dist-info}/METADATA +13 -13
  68. digitalkin-0.3.2a2.dist-info/RECORD +144 -0
  69. {digitalkin-0.3.1.dev1.dist-info → digitalkin-0.3.2a2.dist-info}/WHEEL +1 -1
  70. {digitalkin-0.3.1.dev1.dist-info → digitalkin-0.3.2a2.dist-info}/top_level.txt +1 -0
  71. modules/archetype_with_tools_module.py +232 -0
  72. modules/cpu_intensive_module.py +1 -1
  73. modules/dynamic_setup_module.py +338 -0
  74. modules/minimal_llm_module.py +1 -1
  75. modules/text_transform_module.py +1 -1
  76. monitoring/digitalkin_observability/__init__.py +46 -0
  77. monitoring/digitalkin_observability/http_server.py +150 -0
  78. monitoring/digitalkin_observability/interceptors.py +176 -0
  79. monitoring/digitalkin_observability/metrics.py +201 -0
  80. monitoring/digitalkin_observability/prometheus.py +137 -0
  81. monitoring/tests/test_metrics.py +172 -0
  82. services/filesystem_module.py +7 -5
  83. services/storage_module.py +4 -2
  84. digitalkin/grpc_servers/registry_server.py +0 -65
  85. digitalkin/grpc_servers/registry_servicer.py +0 -456
  86. digitalkin-0.3.1.dev1.dist-info/RECORD +0 -117
  87. {digitalkin-0.3.1.dev1.dist-info → digitalkin-0.3.2a2.dist-info}/licenses/LICENSE +0 -0
@@ -1,456 +0,0 @@
1
- """Registry servicer implementation for DigitalKin.
2
-
3
- This module provides the gRPC service implementation for the Module Registry,
4
- which handles registration, deregistration, discovery, and status management
5
- of DigitalKin modules.
6
- """
7
-
8
- from collections.abc import Iterator
9
- from enum import Enum
10
-
11
- import grpc
12
- from digitalkin_proto.agentic_mesh_protocol.module_registry.v1 import (
13
- discover_pb2,
14
- metadata_pb2,
15
- module_registry_service_pb2_grpc,
16
- registration_pb2,
17
- status_pb2,
18
- )
19
- from pydantic import BaseModel
20
- from typing_extensions import Self
21
-
22
- from digitalkin.logger import logger
23
-
24
-
25
- class ExtendedEnum(Enum):
26
- """Tool enum class."""
27
-
28
- @classmethod
29
- def list(cls) -> list:
30
- """Classmethod to generate a list of enum values.
31
-
32
- Returns:
33
- list: Enum members' values
34
- """
35
- return [c.value for c in cls]
36
-
37
-
38
- class ModuleStatus(ExtendedEnum):
39
- """Describe a Module current status.
40
-
41
- Represents the possible states a module can be in during its lifecycle.
42
- """
43
-
44
- # RUNNING: Module alive.
45
- RUNNING = 0
46
- # IDLE: Module waiting for an event / update.
47
- IDLE = 1
48
- # ENDED: Module signals the end of task or have been killed.
49
- ENDED = 2
50
-
51
-
52
- class Tag(BaseModel):
53
- """Words representing a module capabilities.
54
-
55
- Used for module discovery and categorization.
56
- """
57
-
58
- # tag: Describe a Module function.
59
- tag: str
60
-
61
- def to_proto(self) -> metadata_pb2.Tag:
62
- """Convert Tag object from Pydantic to Proto.
63
-
64
- Returns:
65
- metadata_pb2.Tag: The protobuf representation of this tag.
66
- """
67
- return metadata_pb2.Tag(tag=self.tag)
68
-
69
-
70
- class Metadata(BaseModel):
71
- """Different informations to index and describe a module.
72
-
73
- Contains human-readable information about a module and its capabilities.
74
- """
75
-
76
- # name: Module's name
77
- name: str
78
- # tags: List of tag to describe a module functionalities.
79
- tags: list[Tag]
80
- # description: Module's description for search and indexing
81
- description: str | None
82
-
83
- def to_proto(self) -> metadata_pb2.Metadata:
84
- """Convert Metadata object from Pydantic to Proto.
85
-
86
- Returns:
87
- metadata_pb2.Metadata: The protobuf representation of this metadata.
88
- """
89
- return metadata_pb2.Metadata(
90
- name=self.name,
91
- tags=(t.to_proto() for t in self.tags),
92
- description=self.description,
93
- )
94
-
95
- @classmethod
96
- def from_proto(cls, request_metadata: metadata_pb2.Metadata) -> Self:
97
- """Create Metadata object from Proto message.
98
-
99
- Args:
100
- request_metadata: The protobuf metadata to convert.
101
-
102
- Returns:
103
- Metadata: The Pydantic model representation of the metadata.
104
- """
105
- return cls(
106
- name=request_metadata.name,
107
- tags=[Tag(tag=t.tag) for t in request_metadata.tags],
108
- description=request_metadata.description,
109
- )
110
-
111
-
112
- class RegistryModule(BaseModel):
113
- """Module's technical representation to index, search and monitor.
114
-
115
- Contains all the information needed to identify, locate and communicate
116
- with a module in the system.
117
- """
118
-
119
- # module_id: Id of the module
120
- module_id: str
121
- # module_type: Type of the module (trigger, tool, kin, view)
122
- module_type: str
123
- # address: Address used to communicate with the module
124
- address: str
125
- # port: Port used to communicate with the module
126
- port: int
127
- # version: Current module version.
128
- version: str
129
- # metadata: user defined module name, description and tags
130
- metadata: Metadata
131
- # status: Representation of the Module current state (running, idle, ended...).
132
- status: ModuleStatus
133
- # message: (Optional) Details about the status.
134
- message: str | None
135
-
136
- def to_proto(self) -> discover_pb2.DiscoverInfoResponse:
137
- """Convert RegistryModule object from Pydantic to Proto.
138
-
139
- Returns:
140
- metadata_pb2.Metadata: The protobuf representation of this metadata.
141
- """
142
- return discover_pb2.DiscoverInfoResponse(
143
- module_id=self.module_id,
144
- module_type=self.module_type,
145
- address=self.address,
146
- port=self.port,
147
- version=self.version,
148
- metadata=self.metadata.to_proto(),
149
- )
150
-
151
-
152
- class RegistryServicer(module_registry_service_pb2_grpc.ModuleRegistryServiceServicer):
153
- """Implementation of the ModuleRegistryService.
154
-
155
- This servicer handles the registration, deregistration, and discovery of modules.
156
- It maintains an in-memory registry of all active modules and their metadata.
157
-
158
- Attributes:
159
- registered_modules: Dictionary mapping module_id to RegistryModule objects.
160
- """
161
-
162
- registered_modules: dict[str, RegistryModule]
163
-
164
- def __init__(self) -> None:
165
- """Initialize the registry servicer with an empty module registry."""
166
- self.registered_modules = {} # TODO replace with a database
167
-
168
- def RegisterModule( # noqa: N802
169
- self,
170
- request: registration_pb2.RegisterRequest,
171
- context: grpc.ServicerContext,
172
- ) -> registration_pb2.RegisterResponse:
173
- """Register a module with the registry.
174
-
175
- Adds a new module to the registry with its connection information and metadata.
176
- Fails if a module with the same ID is already registered.
177
-
178
- Args:
179
- request: The register request containing module info and address.
180
- context: The gRPC context for setting status codes and details.
181
-
182
- Returns:
183
- registration_pb2.RegisterResponse: A response indicating success or failure.
184
- """
185
- module_id = request.module_id
186
- logger.debug("Registering module: %s", module_id)
187
-
188
- # Check if module is already registered
189
- if module_id in self.registered_modules:
190
- message = f"Module '{module_id}' already registered"
191
- logger.warning(message)
192
-
193
- context.set_code(grpc.StatusCode.ALREADY_EXISTS)
194
- context.set_details(message)
195
- return registration_pb2.RegisterResponse(success=False)
196
-
197
- # Store the module info with address
198
- self.registered_modules[module_id] = RegistryModule(
199
- module_id=request.module_id,
200
- module_type=request.module_type,
201
- address=request.address,
202
- port=request.port,
203
- version=request.version,
204
- metadata=Metadata.from_proto(request.metadata),
205
- status=ModuleStatus.RUNNING,
206
- message=None,
207
- )
208
-
209
- logger.debug("Module %s registered at %s:%d", module_id, request.address, request.port)
210
- return registration_pb2.RegisterResponse(success=True)
211
-
212
- def DeregisterModule( # noqa: N802
213
- self,
214
- request: registration_pb2.DeregisterRequest,
215
- context: grpc.ServicerContext,
216
- ) -> registration_pb2.DeregisterResponse:
217
- """Deregister a module from the registry.
218
-
219
- Removes a module from the registry based on its ID.
220
- Fails if the specified module is not found in the registry.
221
-
222
- Args:
223
- request: The deregister request containing the module ID.
224
- context: The gRPC context for setting status codes and details.
225
-
226
- Returns:
227
- registration_pb2.DeregisterResponse: A response indicating success or failure.
228
- """
229
- module_id = request.module_id
230
- logger.debug("Deregistering module: %s", module_id)
231
-
232
- # Check if module exists in registry
233
- if module_id not in self.registered_modules:
234
- message = f"Module {module_id} not found in registry"
235
- logger.warning(message)
236
-
237
- context.set_code(grpc.StatusCode.NOT_FOUND)
238
- context.set_details(message)
239
- return registration_pb2.DeregisterResponse()
240
-
241
- # Remove the module
242
- del self.registered_modules[module_id]
243
-
244
- logger.debug("Module %s deregistered", module_id)
245
- return registration_pb2.DeregisterResponse(success=True)
246
-
247
- def DiscoverInfoModule( # noqa: N802
248
- self,
249
- request: discover_pb2.DiscoverInfoRequest,
250
- context: grpc.ServicerContext,
251
- ) -> discover_pb2.DiscoverInfoResponse:
252
- """Discover detailed information about a specific module.
253
-
254
- Retrieves complete information about a module based on its ID.
255
-
256
- Args:
257
- request: The discover request containing the module ID.
258
- context: The gRPC context (unused).
259
-
260
- Returns:
261
- discover_pb2.DiscoverInfoResponse: A response containing the module's information.
262
- """
263
- logger.debug("Discovering module: %s", request.module_id)
264
-
265
- # Check if module exists in registry
266
- if request.module_id not in self.registered_modules:
267
- message = f"Module {request.module_id} not found in registry"
268
- logger.warning(message)
269
- context.set_code(grpc.StatusCode.NOT_FOUND)
270
- context.set_details(message)
271
- return discover_pb2.DiscoverInfoResponse()
272
- return self.registered_modules[request.module_id].to_proto()
273
-
274
- def DiscoverSearchModule( # noqa: N802
275
- self,
276
- request: discover_pb2.DiscoverSearchRequest,
277
- context: grpc.ServicerContext, # noqa: ARG002
278
- ) -> discover_pb2.DiscoverSearchResponse:
279
- """Discover modules based on the specified criteria.
280
-
281
- Searches for modules that match the provided filters such as name,
282
- type, and tags.
283
-
284
- Args:
285
- request: The discover request containing search criteria.
286
- context: The gRPC context (unused).
287
-
288
- Returns:
289
- discover_pb2.DiscoverSearchResponse: A response containing matching modules.
290
- """
291
- logger.debug("Discovering modules with criteria:")
292
-
293
- # Start with all modules
294
- results = list(self.registered_modules.values())
295
- logger.debug("%s", list(results))
296
- # Filter by name if specified
297
- if request.name:
298
- logger.debug("\tname %s", request.name)
299
- results = [m for m in results if request.name in m.metadata.name]
300
-
301
- # Filter by type if specified
302
- if request.module_type:
303
- logger.debug("\tmodule_type %s", request.module_type)
304
- results = [m for m in results if m.module_type == request.module_type]
305
-
306
- # Filter by tags if specified
307
- if request.tags:
308
- logger.debug("\ttags %s", request.tags)
309
- results = [m for m in results if any(tag in m.metadata.tags for tag in request.tags)]
310
-
311
- # Filter by description if specified
312
- """
313
- if request.description:
314
- results = [m for m in results if request.description in m.metadata.description]
315
- """
316
-
317
- logger.debug("Found %d matching modules", len(results))
318
- return discover_pb2.DiscoverSearchResponse(modules=[r.to_proto() for r in results])
319
-
320
- def GetModuleStatus( # noqa: N802
321
- self,
322
- request: status_pb2.ModuleStatusRequest,
323
- context: grpc.ServicerContext,
324
- ) -> status_pb2.ModuleStatusResponse:
325
- """Query a specific module's status.
326
-
327
- Retrieves the current status of a module based on its ID.
328
-
329
- Args:
330
- request: The status request containing the module ID.
331
- context: The gRPC context (unused).
332
-
333
- Returns:
334
- status_pb2.ModuleStatusResponse: A response containing the module's status.
335
- """
336
- logger.debug("Getting status for module: %s", request.module_id)
337
-
338
- # Check if module exists in registry
339
- if request.module_id not in self.registered_modules:
340
- message = f"Module {request.module_id} not found in registry"
341
- logger.warning(message)
342
- context.set_code(grpc.StatusCode.NOT_FOUND)
343
- context.set_details(message)
344
- return status_pb2.ModuleStatusResponse()
345
-
346
- module = self.registered_modules[request.module_id]
347
- return status_pb2.ModuleStatusResponse(module_id=module.module_id, status=module.status.value)
348
-
349
- def ListModuleStatus( # noqa: N802
350
- self,
351
- request: status_pb2.ListModulesStatusRequest,
352
- context: grpc.ServicerContext,
353
- ) -> status_pb2.ListModulesStatusResponse:
354
- """Get a paginated list of registered modules and their statuses.
355
-
356
- Returns a subset of registered modules based on pagination parameters.
357
-
358
- Args:
359
- request: The request containing offset and list_size for pagination.
360
- context: The gRPC context (unused).
361
-
362
- Returns:
363
- status_pb2.ListModulesStatusResponse: A response containing a list of module statuses.
364
- """
365
- logger.debug(
366
- "Getting registered modules with offset %d and limit %d",
367
- request.offset,
368
- request.list_size,
369
- )
370
- if request.offset > len(self.registered_modules):
371
- message = f"Out of range {request.offset}"
372
- logger.warning(message)
373
- context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
374
- context.set_details(message)
375
- return status_pb2.ListModulesStatusResponse()
376
-
377
- list_size = request.list_size
378
- if list_size == 0:
379
- list_size = len(self.registered_modules)
380
-
381
- modules_statuses = [
382
- status_pb2.ModuleStatusResponse(module_id=module.module_id, status=module.status.value)
383
- for module in list(self.registered_modules.values())[request.offset : request.offset + list_size]
384
- ]
385
-
386
- logger.debug("Found %d registered modules", len(modules_statuses))
387
- return status_pb2.ListModulesStatusResponse(
388
- list_size=len(modules_statuses),
389
- modules_statuses=modules_statuses,
390
- )
391
-
392
- def GetAllModuleStatus( # noqa: N802
393
- self,
394
- request: status_pb2.GetAllModulesStatusRequest, # noqa: ARG002
395
- context: grpc.ServicerContext, # noqa: ARG002
396
- ) -> Iterator[status_pb2.ModuleStatusResponse]:
397
- """Get all registered modules via a stream.
398
-
399
- Streams the status of all registered modules one by one.
400
-
401
- Args:
402
- request: The get all modules request (unused).
403
- context: The gRPC context (unused).
404
-
405
- Yields:
406
- status_pb2.ModuleStatusResponse: Responses containing individual module statuses.
407
- """
408
- logger.debug("Streaming all %d registered modules", len(self.registered_modules))
409
- for module in self.registered_modules.values():
410
- yield status_pb2.ModuleStatusResponse(
411
- module_id=module.module_id,
412
- status=module.status.value,
413
- )
414
-
415
- def UpdateModuleStatus( # noqa: N802
416
- self,
417
- request: status_pb2.UpdateStatusRequest,
418
- context: grpc.ServicerContext,
419
- ) -> status_pb2.UpdateStatusResponse:
420
- """Update the status of a registered module.
421
-
422
- Changes the current status of a module based on the provided request.
423
- Fails if the specified module is not found in the registry.
424
-
425
- Args:
426
- request: The update status request with module ID and new status.
427
- context: The gRPC context (unused).
428
-
429
- Returns:
430
- status_pb2.UpdateStatusResponse: A response indicating success or failure.
431
- """
432
- module_id = request.module_id
433
- logger.debug("Updating status for module: %s to %s", module_id, request.status)
434
-
435
- # Check if module exists in registry
436
- if request.module_id not in self.registered_modules:
437
- message = f"Module {request.module_id} not found in registry"
438
- logger.warning(message)
439
- context.set_code(grpc.StatusCode.NOT_FOUND)
440
- context.set_details(message)
441
- return status_pb2.UpdateStatusResponse()
442
-
443
- # Check if module status is correct
444
- if request.status not in ModuleStatus.list() or request.status is None:
445
- message = f"ModuleStatus {request.status} is unknonw, please check the requested status"
446
- logger.warning(message)
447
- context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
448
- context.set_details(message)
449
- return status_pb2.UpdateStatusResponse(success=False)
450
-
451
- # Update module status
452
- module_info = self.registered_modules[module_id]
453
- module_info.status = ModuleStatus(request.status)
454
-
455
- logger.debug("Status for module %s updated to %s", module_id, request.status)
456
- return status_pb2.UpdateStatusResponse(success=True)
@@ -1,117 +0,0 @@
1
- base_server/__init__.py,sha256=gs8t9Dg0dNVHRdYYbEQY8bn8tzEUv2zE6eBhKNPG3kU,88
2
- base_server/server_async_insecure.py,sha256=Rvj5Xj8tDMglAj6aOGlQdMeD-FL97_OBEhHYHxxQrVo,3887
3
- base_server/server_async_secure.py,sha256=SV_CqEmD6YNHHP2Y369T2PLPJ-9JG3bvXytchX_Ensk,4684
4
- base_server/server_sync_insecure.py,sha256=VgSH8YghagK3fiwHhc7d6__zjN6lj_FgBUponFbOoxM,3127
5
- base_server/server_sync_secure.py,sha256=MMkq67vAZNiDLJSySjoXtHIEIK1pAlRz57n75Egnndk,3939
6
- base_server/mock/__init__.py,sha256=YZFT-F1l_TpvJYuIPX-7kTeE1CfOjhx9YmNRXVoi-jQ,143
7
- base_server/mock/mock_pb2.py,sha256=sETakcS3PAAm4E-hTCV1jIVaQTPEAIoVVHupB8Z_k7Y,1843
8
- base_server/mock/mock_pb2_grpc.py,sha256=BbOT70H6q3laKgkHfOx1QdfmCS_HxCY4wCOX84YAdG4,3180
9
- digitalkin/__init__.py,sha256=7LLBAba0th-3SGqcpqFO-lopWdUkVLKzLZiMtB-mW3M,162
10
- digitalkin/__version__.py,sha256=IXDN38pf9GYznzUOcCygvxQc4p61JPJp3xDMpPowM8o,195
11
- digitalkin/logger.py,sha256=8ze_tjt2G6mDTuQcsf7-UTXWP3UHZ7LZVSs_iqF4rX4,4685
12
- digitalkin/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- digitalkin/core/__init__.py,sha256=FJRcJ-B1Viyn-38L8XpOpZ8KOnf1I7PCDOAmKXLQhqc,71
14
- digitalkin/core/common/__init__.py,sha256=Gh2eJAJRnrUE93jSEfG7r0nb01Xh1kSkNL6nEpfzK_s,218
15
- digitalkin/core/common/factories.py,sha256=mV6SmXXrZxzIQ7DLdDtPdjapSDZt5Ua-nBIDsozs_Vk,5047
16
- digitalkin/core/job_manager/__init__.py,sha256=gGtgQpE6vbBHxAj1SYMbcpj45Q6x8IcsqnyQPfyZZ-8,25
17
- digitalkin/core/job_manager/base_job_manager.py,sha256=yVaakJNIEPWc6ND1bWrUgBA-8r1yEEQZ_iNP1RnK0jY,10076
18
- digitalkin/core/job_manager/single_job_manager.py,sha256=7MkttI7pP0aZUHgz8apQf3kXHNI3Mbh8F5LfKwLhRpo,13789
19
- digitalkin/core/job_manager/taskiq_broker.py,sha256=4BbuvKZNWIVbAHmle8XdpPolHhiOv9XgCWR1VGAFg8E,11400
20
- digitalkin/core/job_manager/taskiq_job_manager.py,sha256=IQ2g34mA_AsbIHNiSpzxxT6KzoOEUVb_67659LgBT_4,21251
21
- digitalkin/core/task_manager/__init__.py,sha256=k9i-qIoee_1yXogyQolaVFDUQBIZU3ENbYKtjrCNmTQ,31
22
- digitalkin/core/task_manager/base_task_manager.py,sha256=ahkflSul07hMAWRX22CoJf9FxpQhWzi_oKZz3YAN6lc,19416
23
- digitalkin/core/task_manager/local_task_manager.py,sha256=Z1gv4dCGD32LBSfMZJ4dGyYDe80lZRAyowTgGC6E4Vk,3534
24
- digitalkin/core/task_manager/remote_task_manager.py,sha256=zgccmnwwtB0nyeIZlL5Ji8SY1J89z_vjA4JD9ur7HzY,3082
25
- digitalkin/core/task_manager/surrealdb_repository.py,sha256=eNOVrYhTiIM0jd8j46fsKDr_THbGdK3xrog2jeqSQyA,9671
26
- digitalkin/core/task_manager/task_executor.py,sha256=8xh5_1zuRAaGZIH_gWyNsA4T7YYaF0sl51dLS8a6aAk,10981
27
- digitalkin/core/task_manager/task_session.py,sha256=0p8jPsPhtD0TgBNaE4AdU_0QLLHERhD5s2eV5HBLbU0,13307
28
- digitalkin/grpc_servers/__init__.py,sha256=ZIRMJ1Lcas8yQ106GCup6hn2UBOsx1sNk8ap0lpEDnY,72
29
- digitalkin/grpc_servers/_base_server.py,sha256=ZVeCDwI7w7fFbPTXPkeJb_SOuLfd2T7za3T4oCu2UWY,18680
30
- digitalkin/grpc_servers/module_server.py,sha256=fJncoCQ-nHK4rs1PFM99Ds0U1Axjxj1X4ILeud96AvM,10235
31
- digitalkin/grpc_servers/module_servicer.py,sha256=8enBRV5EArfZ9g4ak9fIC4PDk4IRNoHm4e3_B-Mx6VI,19614
32
- digitalkin/grpc_servers/registry_server.py,sha256=v4pFpkcnWHL3Sm4CHw8wTKbSAvppEYgg_ikgdirmazc,2235
33
- digitalkin/grpc_servers/registry_servicer.py,sha256=5AaGacM875fHCiOmMRuqx4Q3ZsR5yvdfjuRsV4xhRcA,16485
34
- digitalkin/grpc_servers/utils/__init__.py,sha256=ZnAIb_F8z4NhtPypqkdmzgRSzolKnJTk3oZx5GfWH5Y,38
35
- digitalkin/grpc_servers/utils/exceptions.py,sha256=LtaDtlqXCeT6iqApogs4pbtezotOVeg4fhnFzGBvFsY,692
36
- digitalkin/grpc_servers/utils/grpc_client_wrapper.py,sha256=a4xeulweovugI-IUVBrSZ-CswZHrBdeh9r-yzP8dl1w,2753
37
- digitalkin/grpc_servers/utils/grpc_error_handler.py,sha256=0wPEU4713_ZlgIilaeXJV2bi90tHwYO1myDrSLeenKk,1848
38
- digitalkin/mixins/__init__.py,sha256=d6ljaoyJZJT9XxOrXZG5FVNvbLURb3_CZrkp4GPZWYM,590
39
- digitalkin/mixins/base_mixin.py,sha256=uLkg6MbDtVc9DysjdfNIGKahxQLnnjuL3DYpuyNLbk8,486
40
- digitalkin/mixins/callback_mixin.py,sha256=90nHm9-pbKT14GAy3CB3fsBtpYu5IH0woOQdNLM2e_Y,836
41
- digitalkin/mixins/chat_history_mixin.py,sha256=SqCmnh6Ybed3TQoQbvUjbzwKs_evvfW_lr4j_Uncg0A,4231
42
- digitalkin/mixins/cost_mixin.py,sha256=nFqhLsRHdXAt3GOH6qI8sqX9KW3leTPW3gaclensBVw,2274
43
- digitalkin/mixins/file_history_mixin.py,sha256=5MgxglccVe11M7YnoeuXbJYXNEwVZdiGd5Fl8sytcTM,3504
44
- digitalkin/mixins/filesystem_mixin.py,sha256=Q1sEY_dKZVi2Sa21fypwpsz9h7uQ7ggVqzpuVgheF_o,1510
45
- digitalkin/mixins/logger_mixin.py,sha256=l-SK3qACIzRfyHgj7KhzvW3ZhmVa-W1JB9tmppgpqg4,1842
46
- digitalkin/mixins/storage_mixin.py,sha256=ptZ4a2bydIa48q0V9e395vWHTu7yw4A6rI4jwKY6gwI,2392
47
- digitalkin/models/__init__.py,sha256=hDHtUfswaNh8wo4NZaBItg9JqC0uNSRqXArNWSrGynY,163
48
- digitalkin/models/core/__init__.py,sha256=jOMDmPX0uSfGA9zUi0u_kOvYJ46VdIssoIhVYvNSeew,19
49
- digitalkin/models/core/job_manager_models.py,sha256=RCrW20HCTQ7l2D1JtNgEKefZpMzoN-uAXK8bPorIqqA,1120
50
- digitalkin/models/core/task_monitor.py,sha256=XNYCxhN9QqJZhuO2LoiWEHZwhA35dsupyfYvek_pgE8,2295
51
- digitalkin/models/grpc_servers/__init__.py,sha256=0tA71nPSXgRrh9DoLvx-TSwZXdYIRUEItoadpTL1cTo,42
52
- digitalkin/models/grpc_servers/models.py,sha256=ZQ1Gk4zmLRX_ueuwFOwXgtyG9OEPSzFa_91I_CXZmZ0,8957
53
- digitalkin/models/grpc_servers/types.py,sha256=rQ78s4nAet2jy-NIDj_PUWriT0kuGHr_w6ELjmjgBao,539
54
- digitalkin/models/module/__init__.py,sha256=nFPHp0JcAZq9ISkcSu1y2zeNyXH3V4j10oMjHzMBYBU,599
55
- digitalkin/models/module/module.py,sha256=k0W8vfJJFth8XdDzkHm32SyTuSf3h2qF0hSrxAfGF1s,956
56
- digitalkin/models/module/module_context.py,sha256=0sKIvLYt0KHR4oF0MUQ4RQZDBrPjmOSaIHNMcl7vUmI,4649
57
- digitalkin/models/module/module_types.py,sha256=FPoF5PenhfFr6gCDF7ZyyJQDkt9JZAfpiHlE8HErIuM,3699
58
- digitalkin/models/services/__init__.py,sha256=jhfVw6egq0OcHmos_fypH9XFehbHTBw09wluVFVFEyw,226
59
- digitalkin/models/services/cost.py,sha256=9PXvd5RrIk9vCrRjcUGQ9ZyAokEbwLg4s0RfnE-aLP4,1616
60
- digitalkin/models/services/storage.py,sha256=wp7F-AvTsU46ujGPcguqM5kUKRZx4399D4EGAAJt2zs,1143
61
- digitalkin/modules/__init__.py,sha256=VwVbKok81NGyPIBZgEj_SR-59G8tTlSb4eBJI9W6Vx4,281
62
- digitalkin/modules/_base_module.py,sha256=UDLPbsVqlRdvT1weJ_Skzgv7R16TOyfSWeddg5ZqxzI,16513
63
- digitalkin/modules/archetype_module.py,sha256=lOe3yYufwfylZR_VGy1w-zqdqVaMI_JANfKkbH9eODE,471
64
- digitalkin/modules/tool_module.py,sha256=rLJfdYMWddiUgPLBDGG_UcHnRCHEeaqX6Fdp4DOUaCs,472
65
- digitalkin/modules/trigger_handler.py,sha256=qPNMi-8NHqscOxciHeaXtpwjXApT3YzjMF23zQAjaZY,1770
66
- digitalkin/services/__init__.py,sha256=LqGk_5DJy8Bzz62ajIq9jCeYNKQUIgtSCpafZk15FLc,910
67
- digitalkin/services/base_strategy.py,sha256=yA9KUJGRKuuaxA6l3GcMv8zKfWoIsW03UxJT80Yea2I,766
68
- digitalkin/services/services_config.py,sha256=JnyzZcG7OYBelwgn-wdVgY2n3yFTEkwLPHRZB8Tjw10,7468
69
- digitalkin/services/services_models.py,sha256=5zXkWcfKnXGwQi9sN4OAL3XrgqOcmsTl8ai5Mi4RPsw,1668
70
- digitalkin/services/agent/__init__.py,sha256=vJc8JN0pdtA8ecypLBeHrwAUIW6H2C8NyW-dk24rTpk,244
71
- digitalkin/services/agent/agent_strategy.py,sha256=42Q9RciHX6tg3CgDQkbrlIx4h_TX0WIuSpLmCjitVmA,492
72
- digitalkin/services/agent/default_agent.py,sha256=4N_E_eQxJGOx1KVUUg5jNOje-3ncMxF3ePB-uDuGrJc,345
73
- digitalkin/services/cost/__init__.py,sha256=sD_a5LrnLluASOC5m5vgIqjaco-MzZJd6XhillIBHr0,400
74
- digitalkin/services/cost/cost_strategy.py,sha256=MpPX33P_S5b2by6F4zT-rcyeRuh2V4NYPZe05VpDOGQ,2649
75
- digitalkin/services/cost/default_cost.py,sha256=XE7kNFde8NmbulU9m1lc3mi-vHFkbaJf0XHUc0D4UHE,3945
76
- digitalkin/services/cost/grpc_cost.py,sha256=B4HlrpsOpeq7jLSDyympOXvl6uXAzq_Ifk4t1EGjCpI,5289
77
- digitalkin/services/filesystem/__init__.py,sha256=BhwMl_BUvM0d65fmglkp0SVwn3RfYiUOKJgIMnOCaGM,381
78
- digitalkin/services/filesystem/default_filesystem.py,sha256=WQbU-Bsi9r-28VqhKbrplce3otzjSKS-5iqKEpGWdQU,15117
79
- digitalkin/services/filesystem/filesystem_strategy.py,sha256=zibVLvX_IBQ-kgh-KYzHdszDeiHFPEAZszu_k99x1GQ,9487
80
- digitalkin/services/filesystem/grpc_filesystem.py,sha256=TSj70so3YxeuTXSvSFJrA6LHwM07HNZ9kDdqCBAbC70,12154
81
- digitalkin/services/identity/__init__.py,sha256=InkeyLgFYYwItx8mePA8HpfacOMWZwwuc0G4pWtKq9s,270
82
- digitalkin/services/identity/default_identity.py,sha256=Y2auZHrGSZTIN5D8HyjLvLcNbYFM1CNUE23x7p5VIGw,386
83
- digitalkin/services/identity/identity_strategy.py,sha256=skappBbds1_qa0Gr24FGrNX1N0_OYhYT1Lh7dUaAirE,429
84
- digitalkin/services/registry/__init__.py,sha256=Zl4QAkCe9tOmmKGBWVuLQVFepdZiL0ec3VDj27IeyYM,270
85
- digitalkin/services/registry/default_registry.py,sha256=VnWkF6nHpFxUKuUbZLPqzXqdA6oXmyV_ySpeuOCf_ko,277
86
- digitalkin/services/registry/registry_strategy.py,sha256=uBXgZIv25jeXbeVO8vWvlNPxxNYu7_KiCw2PoE6AWr8,423
87
- digitalkin/services/setup/__init__.py,sha256=t6xcvEWqTbcRZstBFK9cESEqaZKvpW14VtYygxIqfYQ,65
88
- digitalkin/services/setup/default_setup.py,sha256=fnLSCMFQt5bYxbiOLM6wgP0ElIf1j9hf8whhogvl6Sg,8239
89
- digitalkin/services/setup/grpc_setup.py,sha256=52nRFWLxnDSAWRacve04nRguiIQZAWMM-gcoiwxJ8Mo,13942
90
- digitalkin/services/setup/setup_strategy.py,sha256=ZnJ_HwWCkHCPrqKekSD5L9y3p8wMwfjQ8sj2hLZq6go,4004
91
- digitalkin/services/snapshot/__init__.py,sha256=Uzlnzo0CYlSpVsdiI37hW7xQk8hu3YA1fOI6O6MSzB0,270
92
- digitalkin/services/snapshot/default_snapshot.py,sha256=Mb8QwWRsHh9I_tN0ln_ZiFa1QCZxOVWmuVLemQOTWpc,1058
93
- digitalkin/services/snapshot/snapshot_strategy.py,sha256=B1TU3V_k9A-OdqBkdyc41-ihnrW5Btcwd1KyQdHT46A,898
94
- digitalkin/services/storage/__init__.py,sha256=T-ocYLLphudkQgzvG47jBOm5GQsRFRIGA88y7Ur4akg,341
95
- digitalkin/services/storage/default_storage.py,sha256=D8e-UYUkb2GvDEHMWcN3EkcIKXWA8DrsaQsXVjoXAYQ,7975
96
- digitalkin/services/storage/grpc_storage.py,sha256=fFg83gvwJZW1a7f2AwSrxJFx949-KbNwpakPaCuGEvo,7217
97
- digitalkin/services/storage/storage_strategy.py,sha256=sERF5tIJnzpb1iNqTXic9xRkGaXMifo6kb709ubB-Yo,8848
98
- digitalkin/services/user_profile/__init__.py,sha256=zwD91Q6Q8iL6RXFB5GmtE6ldFQXU6_OVir6dVXAGKqI,35
99
- digitalkin/services/user_profile/default_user_profile.py,sha256=46DH_VBCHKXJVyagVcc8kH5sLwRK54Fe_0ahqYJ1maA,1847
100
- digitalkin/services/user_profile/grpc_user_profile.py,sha256=97-19z7ioBVFeiF3Fc-gejY84pWuRZQXVNPr56gksg8,2794
101
- digitalkin/services/user_profile/user_profile_strategy.py,sha256=luzpPvm2f4xXajWAbRGSk5YCIPBUrn5EOrXSz8NL1So,1148
102
- digitalkin/utils/__init__.py,sha256=sJnY-ZUgsjMfojAjONC1VN14mhgIDnzyOlGkw21rRnM,28
103
- digitalkin/utils/arg_parser.py,sha256=wzscRlE1Qp1gGl-lAJlkkwnbU1O2oezj6BwK_BZFBIk,3158
104
- digitalkin/utils/development_mode_action.py,sha256=2hznh0ajW_4ZTysfoc0Y49161f_PQPATRgNk8NAn1_o,1623
105
- digitalkin/utils/llm_ready_schema.py,sha256=JjMug_lrQllqFoanaC091VgOqwAd-_YzcpqFlS7p778,2375
106
- digitalkin/utils/package_discover.py,sha256=sa6Zp5Kape1Zr4iYiNrnZxiHDnqM06ODk6yfWHom53w,13465
107
- digitalkin-0.3.1.dev1.dist-info/licenses/LICENSE,sha256=Ies4HFv2r2hzDRakJYxk3Y60uDFLiG-orIgeTpstnIo,20327
108
- modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
- modules/cpu_intensive_module.py,sha256=ejB9XPnFfA0uCuFUQbM3fy5UYfqqAlF36rv_P5Ri8ho,8363
110
- modules/minimal_llm_module.py,sha256=Ijld__ZnhzfLwpXD1XVkLZ7jyKZKyOFZczOpiPttJZc,11216
111
- modules/text_transform_module.py,sha256=bwPSnEUthZQyfLwcTLo52iAxItAoknkLh8Y3m5aywaY,7251
112
- services/filesystem_module.py,sha256=71Mcja8jCQqiqFHPdsIXplFIHTvgkxRhp0TRXuCfgkk,7430
113
- services/storage_module.py,sha256=ybTMqmvGaTrR8PqJ4FU0cwxaDjT36TskVrGoetTGmno,6955
114
- digitalkin-0.3.1.dev1.dist-info/METADATA,sha256=Aw7Z4ekcYlhBCCGu7x1gut_2YhOaOvxCoWlNPNBgAOU,29720
115
- digitalkin-0.3.1.dev1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
116
- digitalkin-0.3.1.dev1.dist-info/top_level.txt,sha256=gcjqlyrZuLjIyxrOIavCQM_olpr6ND5kPKkZd2j0xGo,40
117
- digitalkin-0.3.1.dev1.dist-info/RECORD,,