digitalkin 0.2.25rc0__tar.gz → 0.2.26__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 (94) hide show
  1. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/PKG-INFO +1 -1
  2. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/pyproject.toml +1 -1
  3. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/__version__.py +1 -1
  4. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/grpc_servers/_base_server.py +1 -1
  5. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/grpc_servers/module_server.py +2 -1
  6. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/grpc_servers/module_servicer.py +5 -4
  7. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +3 -3
  8. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/logger.py +69 -24
  9. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/models/module/module_types.py +1 -1
  10. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/modules/_base_module.py +58 -6
  11. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin.egg-info/PKG-INFO +1 -1
  12. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/LICENSE +0 -0
  13. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/README.md +0 -0
  14. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/examples/base_server/__init__.py +0 -0
  15. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/examples/base_server/mock/__init__.py +0 -0
  16. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/examples/base_server/mock/mock_pb2.py +0 -0
  17. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
  18. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/examples/base_server/server_async_insecure.py +0 -0
  19. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/examples/base_server/server_async_secure.py +0 -0
  20. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/examples/base_server/server_sync_insecure.py +0 -0
  21. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/examples/base_server/server_sync_secure.py +0 -0
  22. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/examples/modules/__init__.py +0 -0
  23. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/examples/modules/cpu_intensive_module.py +0 -0
  24. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/examples/modules/minimal_llm_module.py +0 -0
  25. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/examples/modules/text_transform_module.py +0 -0
  26. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/examples/services/filesystem_module.py +0 -0
  27. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/examples/services/storage_module.py +0 -0
  28. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/setup.cfg +0 -0
  29. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/__init__.py +0 -0
  30. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/grpc_servers/__init__.py +0 -0
  31. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/grpc_servers/registry_server.py +0 -0
  32. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/grpc_servers/registry_servicer.py +0 -0
  33. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -0
  34. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/grpc_servers/utils/factory.py +0 -0
  35. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/grpc_servers/utils/models.py +0 -0
  36. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/grpc_servers/utils/types.py +0 -0
  37. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/models/__init__.py +0 -0
  38. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/models/module/__init__.py +0 -0
  39. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/models/module/module.py +0 -0
  40. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/models/module/module_context.py +0 -0
  41. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/models/services/__init__.py +0 -0
  42. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/models/services/cost.py +0 -0
  43. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/models/services/storage.py +0 -0
  44. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/modules/__init__.py +0 -0
  45. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/modules/archetype_module.py +0 -0
  46. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/modules/job_manager/base_job_manager.py +0 -0
  47. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/modules/job_manager/job_manager_models.py +0 -0
  48. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/modules/job_manager/single_job_manager.py +0 -0
  49. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/modules/job_manager/taskiq_broker.py +0 -0
  50. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/modules/job_manager/taskiq_job_manager.py +0 -0
  51. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/modules/tool_module.py +0 -0
  52. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/modules/trigger_handler.py +0 -0
  53. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/py.typed +0 -0
  54. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/__init__.py +0 -0
  55. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/agent/__init__.py +0 -0
  56. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/agent/agent_strategy.py +0 -0
  57. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/agent/default_agent.py +0 -0
  58. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/base_strategy.py +0 -0
  59. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/cost/__init__.py +0 -0
  60. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/cost/cost_strategy.py +0 -0
  61. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/cost/default_cost.py +0 -0
  62. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/cost/grpc_cost.py +0 -0
  63. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/filesystem/__init__.py +0 -0
  64. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
  65. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
  66. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
  67. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/identity/__init__.py +0 -0
  68. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/identity/default_identity.py +0 -0
  69. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/identity/identity_strategy.py +0 -0
  70. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/registry/__init__.py +0 -0
  71. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/registry/default_registry.py +0 -0
  72. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/registry/registry_strategy.py +0 -0
  73. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/services_config.py +0 -0
  74. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/services_models.py +0 -0
  75. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/setup/__init__.py +0 -0
  76. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/setup/default_setup.py +0 -0
  77. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/setup/grpc_setup.py +0 -0
  78. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/setup/setup_strategy.py +0 -0
  79. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/snapshot/__init__.py +0 -0
  80. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/snapshot/default_snapshot.py +0 -0
  81. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/snapshot/snapshot_strategy.py +0 -0
  82. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/storage/__init__.py +0 -0
  83. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/storage/default_storage.py +0 -0
  84. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/storage/grpc_storage.py +0 -0
  85. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/services/storage/storage_strategy.py +0 -0
  86. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/utils/__init__.py +0 -0
  87. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/utils/arg_parser.py +0 -0
  88. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/utils/development_mode_action.py +0 -0
  89. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/utils/llm_ready_schema.py +0 -0
  90. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin/utils/package_discover.py +0 -0
  91. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin.egg-info/SOURCES.txt +0 -0
  92. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin.egg-info/dependency_links.txt +0 -0
  93. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/src/digitalkin.egg-info/requires.txt +0 -0
  94. {digitalkin-0.2.25rc0 → digitalkin-0.2.26}/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.2.25rc0
3
+ Version: 0.2.26
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
@@ -12,7 +12,7 @@
12
12
 
13
13
  keywords = [ "digitalkin", "kin", "agent", "gprc", "sdk" ]
14
14
  # Version of the package automatically updated by bump2version (that is why it is separated)
15
- version = "0.2.25rc0"
15
+ version = "0.2.26"
16
16
 
17
17
  classifiers = [
18
18
  "Development Status :: 3 - Alpha",
@@ -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.2.25rc0"
8
+ __version__ = "0.2.26"
@@ -299,7 +299,7 @@ class BaseServer(abc.ABC):
299
299
  self._add_reflection()
300
300
 
301
301
  # Start the server
302
- logger.debug("Starting gRPC server on %s", self.config.address)
302
+ logger.debug("Starting gRPC server on %s", self.config.address, extra={"config": self.config})
303
303
  try:
304
304
  if self.config.mode == ServerMode.ASYNC:
305
305
  # For async server, use the event loop
@@ -133,7 +133,7 @@ class ModuleServer(BaseServer):
133
133
  """
134
134
  logger.debug(
135
135
  "Registering module with registry at %s",
136
- self.server_config.registry_address,
136
+ self.server_config.registry_address, extra={"server_config": self.server_config}
137
137
  )
138
138
 
139
139
  # Create appropriate channel based on security mode
@@ -173,6 +173,7 @@ class ModuleServer(BaseServer):
173
173
  "Request sent to registry for module: %s:%s",
174
174
  self.module_class.metadata["name"],
175
175
  self.module_class.metadata["module_id"],
176
+ extra={"module_info": self.module_class.metadata}
176
177
  )
177
178
  response = stub.RegisterModule(request)
178
179
 
@@ -76,9 +76,9 @@ class ModuleServicer(module_service_pb2_grpc.ModuleServiceServicer, ArgParser):
76
76
  self.job_manager = job_manager_class(module_class, self.args.services_mode)
77
77
 
78
78
  logger.debug(
79
- "ModuleServicer initialized with job manager: %s | %s",
79
+ "ModuleServicer initialized with job manager: %s",
80
80
  self.args.job_manager_mode,
81
- self.job_manager,
81
+ extra={"job_manager": self.job_manager},
82
82
  )
83
83
  self.setup = GrpcSetup() if self.args.services_mode == ServicesMode.REMOTE else DefaultSetup()
84
84
 
@@ -204,13 +204,14 @@ class ModuleServicer(module_service_pb2_grpc.ModuleServiceServicer, ArgParser):
204
204
  async with self.job_manager.generate_stream_consumer(job_id) as stream: # type: ignore
205
205
  async for message in stream:
206
206
  if message.get("error", None) is not None:
207
+ logger.error("Error in output_data", extra={"message": message})
207
208
  context.set_code(message["error"]["code"])
208
209
  context.set_details(message["error"]["error_message"])
209
210
  yield lifecycle_pb2.StartModuleResponse(success=False, job_id=job_id)
210
211
  break
211
212
 
212
213
  if message.get("exception", None) is not None:
213
- logger.error("Error in output_data")
214
+ logger.error("Exception in output_data", extra={"message": message})
214
215
  context.set_code(message["short_description"])
215
216
  context.set_details(message["exception"])
216
217
  yield lifecycle_pb2.StartModuleResponse(success=False, job_id=job_id)
@@ -248,7 +249,7 @@ class ModuleServicer(module_service_pb2_grpc.ModuleServiceServicer, ArgParser):
248
249
  context.set_details(message)
249
250
  return lifecycle_pb2.StopModuleResponse(success=False)
250
251
 
251
- logger.debug("Job %s stopped successfully", request.job_id)
252
+ logger.debug("Job %s stopped successfully", request.job_id, extra={"job_id": request.job_id})
252
253
  return lifecycle_pb2.StopModuleResponse(success=True)
253
254
 
254
255
  async def GetModuleStatus( # noqa: N802
@@ -62,11 +62,11 @@ class GrpcClientWrapper:
62
62
  """
63
63
  try:
64
64
  # Call the register method
65
- logger.debug("send request to %s", query_endpoint)
65
+ logger.debug("send request to %s", query_endpoint, extra={"request": request})
66
66
  response = getattr(self.stub, query_endpoint)(request)
67
- logger.debug("receive response from request to registry: %s", response)
67
+ logger.debug("receive response from request to %s", query_endpoint, extra={"response": response})
68
68
  except grpc.RpcError as e:
69
- logger.exception("RPC error during %s: %s", query_endpoint, e.details())
69
+ logger.exception("RPC error during %s", query_endpoint, extra={"error": e.details()})
70
70
  raise ServerError
71
71
  else:
72
72
  return response
@@ -50,10 +50,16 @@ class ColorJSONFormatter(logging.Formatter):
50
50
  "level": record.levelname.lower(),
51
51
  "logger": record.name,
52
52
  "message": record.getMessage(),
53
+ "module": record.module,
53
54
  "location": f"{record.filename}:{record.lineno}",
54
55
  "function": record.funcName,
56
+ "pathname": record.pathname,
57
+ "process": record.process,
58
+ "processName": record.processName,
59
+ "relativeCreated": record.relativeCreated,
60
+ "thread": record.thread,
61
+ "threadName": record.threadName,
55
62
  }
56
-
57
63
  # Add exception info if present
58
64
  if record.exc_info:
59
65
  log_obj["exception"] = self.formatException(record.exc_info)
@@ -91,30 +97,69 @@ class ColorJSONFormatter(logging.Formatter):
91
97
  # Pretty print with color
92
98
  color = self.COLORS.get(record.levelno, self.grey)
93
99
  if self.is_production:
94
- json_str = json.dumps(log_obj, default=str, separators=(",", ":"))
95
- else:
96
- json_str = json.dumps(log_obj, indent=2, default=str)
97
- json_str = json_str.replace("\\n", "\n")
100
+ log_obj["message"] = f"{color}{log_obj.get('message', '')}{self.reset}"
101
+ return json.dumps(log_obj, default=str, separators=(",", ":"))
102
+ json_str = json.dumps(log_obj, indent=2, default=str)
103
+ json_str = json_str.replace("\\n", "\n")
98
104
  return f"{color}{json_str}{self.reset}"
99
105
 
100
106
 
101
- logging.basicConfig(
102
- level=logging.DEBUG,
103
- stream=sys.stdout,
104
- datefmt="%Y-%m-%d %H:%M:%S",
107
+ def setup_logger(
108
+ name: str,
109
+ level: int = logging.INFO,
110
+ additional_loggers: dict[str, int] | None = None,
111
+ *,
112
+ is_production: bool | None = None,
113
+ configure_root: bool = True,
114
+ ) -> logging.Logger:
115
+ """Set up a logger with the ColorJSONFormatter.
116
+
117
+ Args:
118
+ name: Name of the logger to create
119
+ level: Logging level (default: logging.INFO)
120
+ is_production: Whether running in production. If None, checks RAILWAY_SERVICE_NAME env var
121
+ configure_root: Whether to configure root logger (default: True)
122
+ additional_loggers: Dict of additional logger names and their levels to configure
123
+
124
+ Returns:
125
+ logging.Logger: Configured logger instance
126
+ """
127
+ # Determine if we're in production
128
+ if is_production is None:
129
+ is_production = os.getenv("RAILWAY_SERVICE_NAME") is not None
130
+
131
+ # Configure root logger if requested
132
+ if configure_root:
133
+ logging.basicConfig(
134
+ level=logging.DEBUG,
135
+ stream=sys.stdout,
136
+ datefmt="%Y-%m-%d %H:%M:%S",
137
+ )
138
+
139
+ # Configure additional loggers
140
+ if additional_loggers:
141
+ for logger_name, logger_level in additional_loggers.items():
142
+ logging.getLogger(logger_name).setLevel(logger_level)
143
+
144
+ # Create and configure the main logger
145
+ logger = logging.getLogger(name)
146
+ logger.setLevel(level)
147
+ # Only add handler if not already configured
148
+ if not logger.handlers:
149
+ ch = logging.StreamHandler()
150
+ ch.setLevel(level)
151
+ ch.setFormatter(ColorJSONFormatter(is_production=is_production))
152
+ logger.addHandler(ch)
153
+ logger.propagate = False
154
+
155
+ return logger
156
+
157
+
158
+ logger = setup_logger(
159
+ "digitalkin",
160
+ level=logging.INFO,
161
+ additional_loggers={
162
+ "grpc": logging.DEBUG,
163
+ "asyncio": logging.DEBUG,
164
+ },
105
165
  )
106
-
107
- logging.getLogger("grpc").setLevel(logging.DEBUG)
108
- logging.getLogger("asyncio").setLevel(logging.DEBUG)
109
-
110
-
111
- logger = logging.getLogger("digitalkin")
112
- is_production = os.getenv("RAILWAY_SERVICE_NAME") is not None
113
-
114
- if not logger.handlers:
115
- ch = logging.StreamHandler()
116
- ch.setLevel(logging.INFO)
117
- ch.setFormatter(ColorJSONFormatter(is_production=is_production))
118
-
119
- logger.addHandler(ch)
120
- logger.propagate = False
@@ -24,7 +24,7 @@ class DataTrigger(BaseModel):
24
24
  """
25
25
 
26
26
  protocol: ClassVar[str]
27
- created_at: str = datetime.now(tz=timezone.utc).isoformat()
27
+ created_at: str = Field(default_factory=lambda: datetime.now(timezone.utc).isoformat())
28
28
 
29
29
 
30
30
  DataTriggerT = TypeVar("DataTriggerT", bound=DataTrigger)
@@ -381,15 +381,51 @@ class BaseModule( # noqa: PLR0904
381
381
  asyncio.CancelledError: If the module is cancelled
382
382
  """
383
383
  try:
384
- logger.info("Starting module %s", self.name)
384
+ logger.info(
385
+ "Starting module %s",
386
+ self.name,
387
+ extra={
388
+ "mission_id": self.mission_id,
389
+ "setup_id": self.setup_id,
390
+ "setup_version_id": self.setup_version_id,
391
+ "job_id": self.job_id,
392
+ },
393
+ )
385
394
  await self.run(input_data, setup_data, callback)
386
- logger.info("Module %s finished", self.name)
395
+ logger.info(
396
+ "Module %s finished",
397
+ self.name,
398
+ extra={
399
+ "mission_id": self.mission_id,
400
+ "setup_id": self.setup_id,
401
+ "setup_version_id": self.setup_version_id,
402
+ "job_id": self.job_id,
403
+ },
404
+ )
387
405
  except asyncio.CancelledError:
388
406
  self._status = ModuleStatus.CANCELLED
389
- logger.error(f"Module {self.name} cancelled")
407
+ logger.error(
408
+ "Module %s cancelled",
409
+ self.name,
410
+ extra={
411
+ "mission_id": self.mission_id,
412
+ "setup_id": self.setup_id,
413
+ "setup_version_id": self.setup_version_id,
414
+ "job_id": self.job_id,
415
+ },
416
+ )
390
417
  except Exception:
391
418
  self._status = ModuleStatus.FAILED
392
- logger.exception("Error inside module %s", self.name)
419
+ logger.exception(
420
+ "Error inside module %s",
421
+ self.name,
422
+ extra={
423
+ "mission_id": self.mission_id,
424
+ "setup_id": self.setup_id,
425
+ "setup_version_id": self.setup_version_id,
426
+ "job_id": self.job_id,
427
+ },
428
+ )
393
429
  else:
394
430
  self._status = ModuleStatus.STOPPING
395
431
  finally:
@@ -464,7 +500,15 @@ class BaseModule( # noqa: PLR0904
464
500
  ) -> None:
465
501
  """Start the module."""
466
502
  try:
467
- logger.info("Run Config Setup lifecycle")
503
+ logger.info(
504
+ "Run Config Setup lifecycle",
505
+ extra={
506
+ "mission_id": self.mission_id,
507
+ "setup_id": self.setup_id,
508
+ "setup_version_id": self.setup_version_id,
509
+ "job_id": self.job_id,
510
+ },
511
+ )
468
512
  self._status = ModuleStatus.RUNNING
469
513
  content = await self.run_config_setup(config_setup_data)
470
514
 
@@ -474,4 +518,12 @@ class BaseModule( # noqa: PLR0904
474
518
  self._status = ModuleStatus.STOPPING
475
519
  except Exception:
476
520
  self._status = ModuleStatus.FAILED
477
- logger.exception("Error during module lifecyle")
521
+ logger.exception(
522
+ "Error during module lifecyle",
523
+ extra={
524
+ "mission_id": self.mission_id,
525
+ "setup_id": self.setup_id,
526
+ "setup_version_id": self.setup_version_id,
527
+ "job_id": self.job_id,
528
+ },
529
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: digitalkin
3
- Version: 0.2.25rc0
3
+ Version: 0.2.26
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
File without changes
File without changes
File without changes