digitalkin 0.3.0rc0__tar.gz → 0.3.0rc2__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 (115) hide show
  1. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/PKG-INFO +5 -25
  2. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/pyproject.toml +59 -38
  3. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/__version__.py +1 -1
  4. digitalkin-0.3.0rc2/src/digitalkin/core/__init__.py +1 -0
  5. digitalkin-0.3.0rc2/src/digitalkin/core/job_manager/__init__.py +1 -0
  6. {digitalkin-0.3.0rc0/src/digitalkin/modules → digitalkin-0.3.0rc2/src/digitalkin/core}/job_manager/base_job_manager.py +5 -3
  7. {digitalkin-0.3.0rc0/src/digitalkin/modules → digitalkin-0.3.0rc2/src/digitalkin/core}/job_manager/single_job_manager.py +9 -10
  8. {digitalkin-0.3.0rc0/src/digitalkin/modules → digitalkin-0.3.0rc2/src/digitalkin/core}/job_manager/taskiq_broker.py +2 -3
  9. {digitalkin-0.3.0rc0/src/digitalkin/modules → digitalkin-0.3.0rc2/src/digitalkin/core}/job_manager/taskiq_job_manager.py +5 -6
  10. digitalkin-0.3.0rc2/src/digitalkin/core/task_manager/__init__.py +1 -0
  11. {digitalkin-0.3.0rc0/src/digitalkin/modules/job_manager → digitalkin-0.3.0rc2/src/digitalkin/core/task_manager}/surrealdb_repository.py +0 -1
  12. {digitalkin-0.3.0rc0/src/digitalkin/modules/job_manager → digitalkin-0.3.0rc2/src/digitalkin/core/task_manager}/task_manager.py +102 -49
  13. {digitalkin-0.3.0rc0/src/digitalkin/modules/job_manager → digitalkin-0.3.0rc2/src/digitalkin/core/task_manager}/task_session.py +71 -18
  14. digitalkin-0.3.0rc2/src/digitalkin/grpc_servers/__init__.py +1 -0
  15. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/grpc_servers/_base_server.py +2 -2
  16. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/grpc_servers/module_server.py +2 -2
  17. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/grpc_servers/module_servicer.py +3 -3
  18. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/grpc_servers/registry_server.py +1 -1
  19. digitalkin-0.3.0rc2/src/digitalkin/grpc_servers/utils/__init__.py +1 -0
  20. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -8
  21. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +1 -1
  22. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/chat_history_mixin.py +2 -0
  23. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/file_history_mixin.py +14 -20
  24. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/filesystem_mixin.py +1 -2
  25. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/logger_mixin.py +4 -12
  26. digitalkin-0.3.0rc2/src/digitalkin/models/core/__init__.py +1 -0
  27. {digitalkin-0.3.0rc0/src/digitalkin/modules/job_manager → digitalkin-0.3.0rc2/src/digitalkin/models/core}/job_manager_models.py +3 -3
  28. {digitalkin-0.3.0rc0/src/digitalkin/models/module → digitalkin-0.3.0rc2/src/digitalkin/models/core}/task_monitor.py +7 -5
  29. digitalkin-0.3.0rc2/src/digitalkin/models/grpc_servers/__init__.py +1 -0
  30. {digitalkin-0.3.0rc0/src/digitalkin/grpc_servers/utils → digitalkin-0.3.0rc2/src/digitalkin/models/grpc_servers}/models.py +4 -4
  31. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/module/module_context.py +33 -1
  32. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/module/module_types.py +5 -1
  33. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/services/cost.py +1 -0
  34. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/modules/_base_module.py +16 -80
  35. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/cost/grpc_cost.py +1 -1
  36. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/filesystem/grpc_filesystem.py +1 -1
  37. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/setup/grpc_setup.py +1 -1
  38. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/storage/grpc_storage.py +1 -1
  39. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/utils/arg_parser.py +1 -1
  40. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/utils/development_mode_action.py +2 -2
  41. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/utils/package_discover.py +1 -2
  42. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin.egg-info/PKG-INFO +5 -25
  43. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin.egg-info/SOURCES.txt +17 -12
  44. digitalkin-0.3.0rc2/src/digitalkin.egg-info/requires.txt +12 -0
  45. digitalkin-0.3.0rc0/src/digitalkin/grpc_servers/__init__.py +0 -19
  46. digitalkin-0.3.0rc0/src/digitalkin/grpc_servers/utils/factory.py +0 -180
  47. digitalkin-0.3.0rc0/src/digitalkin.egg-info/requires.txt +0 -34
  48. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/LICENSE +0 -0
  49. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/README.md +0 -0
  50. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/__init__.py +0 -0
  51. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/mock/__init__.py +0 -0
  52. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/mock/mock_pb2.py +0 -0
  53. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
  54. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/server_async_insecure.py +0 -0
  55. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/server_async_secure.py +0 -0
  56. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/server_sync_insecure.py +0 -0
  57. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/server_sync_secure.py +0 -0
  58. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/modules/__init__.py +0 -0
  59. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/modules/cpu_intensive_module.py +0 -0
  60. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/modules/minimal_llm_module.py +0 -0
  61. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/modules/text_transform_module.py +0 -0
  62. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/services/filesystem_module.py +0 -0
  63. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/services/storage_module.py +0 -0
  64. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/setup.cfg +0 -0
  65. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/__init__.py +0 -0
  66. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/grpc_servers/registry_servicer.py +0 -0
  67. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/logger.py +0 -0
  68. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/__init__.py +0 -0
  69. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/base_mixin.py +0 -0
  70. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/callback_mixin.py +0 -0
  71. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/cost_mixin.py +0 -0
  72. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/storage_mixin.py +0 -0
  73. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/__init__.py +0 -0
  74. {digitalkin-0.3.0rc0/src/digitalkin/grpc_servers/utils → digitalkin-0.3.0rc2/src/digitalkin/models/grpc_servers}/types.py +0 -0
  75. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/module/__init__.py +0 -0
  76. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/module/module.py +0 -0
  77. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/services/__init__.py +0 -0
  78. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/services/storage.py +0 -0
  79. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/modules/__init__.py +0 -0
  80. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/modules/archetype_module.py +0 -0
  81. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/modules/tool_module.py +0 -0
  82. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/modules/trigger_handler.py +0 -0
  83. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/py.typed +0 -0
  84. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/__init__.py +0 -0
  85. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/agent/__init__.py +0 -0
  86. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/agent/agent_strategy.py +0 -0
  87. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/agent/default_agent.py +0 -0
  88. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/base_strategy.py +0 -0
  89. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/cost/__init__.py +0 -0
  90. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/cost/cost_strategy.py +0 -0
  91. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/cost/default_cost.py +0 -0
  92. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/filesystem/__init__.py +0 -0
  93. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
  94. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
  95. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/identity/__init__.py +0 -0
  96. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/identity/default_identity.py +0 -0
  97. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/identity/identity_strategy.py +0 -0
  98. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/registry/__init__.py +0 -0
  99. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/registry/default_registry.py +0 -0
  100. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/registry/registry_strategy.py +0 -0
  101. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/services_config.py +0 -0
  102. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/services_models.py +0 -0
  103. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/setup/__init__.py +0 -0
  104. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/setup/default_setup.py +0 -0
  105. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/setup/setup_strategy.py +0 -0
  106. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/snapshot/__init__.py +0 -0
  107. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/snapshot/default_snapshot.py +0 -0
  108. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/snapshot/snapshot_strategy.py +0 -0
  109. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/storage/__init__.py +0 -0
  110. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/storage/default_storage.py +0 -0
  111. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/storage/storage_strategy.py +0 -0
  112. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/utils/__init__.py +0 -0
  113. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/utils/llm_ready_schema.py +0 -0
  114. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin.egg-info/dependency_links.txt +0 -0
  115. {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/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.0rc0
3
+ Version: 0.3.0rc2
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
@@ -456,33 +456,13 @@ Requires-Dist: digitalkin-proto>=0.1.16
456
456
  Requires-Dist: grpcio-health-checking>=1.71.0
457
457
  Requires-Dist: grpcio-reflection>=1.71.0
458
458
  Requires-Dist: grpcio-status>=1.71.0
459
- Requires-Dist: pydantic>=2.12.1
459
+ Requires-Dist: pydantic>=2.12.3
460
460
  Requires-Dist: surrealdb>=1.0.6
461
461
  Provides-Extra: taskiq
462
- Requires-Dist: rstream>=0.31.0; extra == "taskiq"
463
- Requires-Dist: taskiq-aio-pika>=0.4.3; extra == "taskiq"
462
+ Requires-Dist: rstream>=0.40.0; extra == "taskiq"
463
+ Requires-Dist: taskiq-aio-pika>=0.4.4; extra == "taskiq"
464
464
  Requires-Dist: taskiq-redis>=1.1.2; extra == "taskiq"
465
- Requires-Dist: taskiq[reload]>=0.11.18; extra == "taskiq"
466
- Provides-Extra: dev
467
- Requires-Dist: typos>=1.38.0; extra == "dev"
468
- Requires-Dist: ruff>=0.14.1; extra == "dev"
469
- Requires-Dist: mypy>=1.18.2; extra == "dev"
470
- Requires-Dist: pyright>=1.1.406; extra == "dev"
471
- Requires-Dist: pre-commit>=4.3.0; extra == "dev"
472
- Requires-Dist: bump-my-version>=1.2.4; extra == "dev"
473
- Requires-Dist: build>=1.3.0; extra == "dev"
474
- Requires-Dist: twine>=6.2.0; extra == "dev"
475
- Requires-Dist: cryptography>=46.0.2; extra == "dev"
476
- Provides-Extra: tests
477
- Requires-Dist: freezegun>=1.5.3; extra == "tests"
478
- Requires-Dist: hdrhistogram>=0.10.3; extra == "tests"
479
- Requires-Dist: grpcio-testing>=1.71.0; extra == "tests"
480
- Requires-Dist: psutil>=7.0.0; extra == "tests"
481
- Requires-Dist: pytest>=8.4.2; extra == "tests"
482
- Requires-Dist: pytest-asyncio>=1.2.0; extra == "tests"
483
- Requires-Dist: pytest-cov>=7.0.0; extra == "tests"
484
- Requires-Dist: pytest-html==4.1.1; extra == "tests"
485
- Requires-Dist: pytest-json-report==1.5.0; extra == "tests"
465
+ Requires-Dist: taskiq[reload]>=0.11.19; extra == "taskiq"
486
466
  Dynamic: license-file
487
467
 
488
468
  # DigitalKin Python SDK
@@ -12,7 +12,7 @@
12
12
 
13
13
  keywords = [ "digitalkin", "kin", "agent", "gprc", "sdk" ]
14
14
 
15
- version = "0.3.0-rc0"
15
+ version = "0.3.0-rc2"
16
16
  classifiers = [
17
17
  "Development Status :: 3 - Alpha",
18
18
  "Intended Audience :: Developers",
@@ -32,39 +32,18 @@
32
32
  "grpcio-health-checking>=1.71.0",
33
33
  "grpcio-reflection>=1.71.0",
34
34
  "grpcio-status>=1.71.0",
35
- "pydantic>=2.12.1",
35
+ "pydantic>=2.12.3",
36
36
  "surrealdb>=1.0.6",
37
37
  ]
38
38
 
39
39
  [project.optional-dependencies]
40
40
  taskiq = [
41
- "rstream>=0.31.0",
42
- "taskiq-aio-pika>=0.4.3",
41
+ "rstream>=0.40.0",
42
+ "taskiq-aio-pika>=0.4.4",
43
43
  "taskiq-redis>=1.1.2",
44
- "taskiq[reload]>=0.11.18",
45
- ]
46
- dev = [
47
- "typos>=1.38.0",
48
- "ruff>=0.14.1",
49
- "mypy>=1.18.2",
50
- "pyright>=1.1.406",
51
- "pre-commit>=4.3.0",
52
- "bump-my-version>=1.2.4",
53
- "build>=1.3.0",
54
- "twine>=6.2.0",
55
- "cryptography>=46.0.2",
56
- ]
57
- tests = [
58
- "freezegun>=1.5.3",
59
- "hdrhistogram>=0.10.3",
60
- "grpcio-testing>=1.71.0",
61
- "psutil>=7.0.0",
62
- "pytest>=8.4.2",
63
- "pytest-asyncio>=1.2.0",
64
- "pytest-cov>=7.0.0",
65
- "pytest-html==4.1.1",
66
- "pytest-json-report==1.5.0",
44
+ "taskiq[reload]>=0.11.19",
67
45
  ]
46
+
68
47
  [project.urls]
69
48
  Homepage = "https://github.com/DigitalKin-ai/digitalkin"
70
49
  Documentation = "https://github.com/DigitalKin-ai/digitalkin"
@@ -74,6 +53,55 @@
74
53
  name = "DigitalKin.ai"
75
54
  email = "contact@digitalkin.ai"
76
55
 
56
+ [dependency-groups]
57
+ dev = [
58
+ "typos>=1.38.0",
59
+ "ruff>=0.14.2",
60
+ "mypy>=1.18.2",
61
+ "pyright>=1.1.407",
62
+ "pre-commit>=4.3.0",
63
+ "bump-my-version>=1.2.4",
64
+ "build>=1.3.0",
65
+ "twine>=6.2.0",
66
+ "cryptography>=46.0.3",
67
+ ]
68
+ tests = [
69
+ "freezegun>=1.5.3",
70
+ "hdrhistogram>=0.10.3",
71
+ "grpcio-testing>=1.71.0",
72
+ "psutil>=7.1.2",
73
+ "pytest>=8.4.2",
74
+ "pytest-asyncio>=1.2.0",
75
+ "pytest-cov>=7.0.0",
76
+ "pytest-html==4.1.1",
77
+ "pytest-json-report==1.5.0",
78
+ ]
79
+ docs = [
80
+ "mike>=2.1.3",
81
+ "markdown-callouts>=0.4",
82
+ "markdown-exec>=1.8",
83
+ "mkdocs>=1.6",
84
+ "mkdocs-coverage>=2.0.0",
85
+ "mkdocs-llmstxt>=0.2",
86
+ "mkdocs-redirects>=1.2",
87
+ "mkdocstrings>=0.29",
88
+ "griffe-inherited-docstrings>=1.1.2",
89
+ "mkdocs-autorefs>=1.4.3",
90
+ "mkdocs-awesome-pages-plugin>=2.10.1",
91
+ "mkdocs-git-committers-plugin-2>=2.5.0",
92
+ "mkdocs-git-revision-date-localized-plugin>=1.4.7",
93
+ "mkdocs-glightbox>=0.5.2",
94
+ "mkdocs-include-markdown-plugin>=7.2.0",
95
+ "mkdocs-literate-nav>=0.6.2",
96
+ "mkdocs-material[imaging]>=9.6.22",
97
+ "mkdocs-minify-plugin>=0.8.0",
98
+ "mkdocs-section-index>=0.3.10",
99
+ "mkdocstrings>=0.30.1",
100
+ "mkdocstrings-python>=1.18.2",
101
+ "mkdocs-open-in-new-tab>=1.0.8",
102
+ "tomli>=2.3.0",
103
+ ]
104
+
77
105
  [tool.setuptools]
78
106
  package-dir = { "" = "src" }
79
107
 
@@ -114,6 +142,7 @@
114
142
  "generate_certificates.py",
115
143
  "examples/*",
116
144
  "tests/*",
145
+ "docs/*",
117
146
  ]
118
147
  preview = true
119
148
 
@@ -157,9 +186,9 @@
157
186
  "N", # pep8-naming
158
187
  "ERA", # eradicate
159
188
  "RUF", # Ruff-specific rules
160
- # "DOC", # pydoclint
161
- "FURB", # Refurb
162
- "PL", # Pylint
189
+ "DOC", # pydoclint
190
+ "FURB", # Refurb
191
+ "PL", # Pylint
163
192
  ]
164
193
 
165
194
  ignore = [
@@ -232,11 +261,3 @@
232
261
  testpaths = [ "tests" ]
233
262
  python_files = "test_*.py"
234
263
  asyncio_mode = "auto"
235
-
236
- [dependency-groups]
237
- dev = [
238
- "pytest>=8.4.2",
239
- "pytest-cov>=7.0.0",
240
- "pytest-html>=4.1.1",
241
- "pytest-json-report>=1.5.0",
242
- ]
@@ -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.0-rc0"
8
+ __version__ = "0.3.0-rc2"
@@ -0,0 +1 @@
1
+ """Core of Digitlakin defining the task management and sub-modules."""
@@ -0,0 +1 @@
1
+ """Job Manager logic."""
@@ -5,15 +5,16 @@ from collections.abc import AsyncGenerator, AsyncIterator, Callable, Coroutine
5
5
  from contextlib import asynccontextmanager
6
6
  from typing import Any, Generic
7
7
 
8
+ from digitalkin.core.task_manager.task_manager import TaskManager
9
+ from digitalkin.models.core.task_monitor import TaskStatus
8
10
  from digitalkin.models.module import InputModelT, OutputModelT, SetupModelT
9
11
  from digitalkin.models.module.module import ModuleCodeModel
10
- from digitalkin.models.module.task_monitor import TaskStatus
11
12
  from digitalkin.modules._base_module import BaseModule
12
13
  from digitalkin.services.services_config import ServicesConfig
13
14
  from digitalkin.services.services_models import ServicesMode
14
15
 
15
16
 
16
- class BaseJobManager(abc.ABC, Generic[InputModelT, SetupModelT, OutputModelT]):
17
+ class BaseJobManager(abc.ABC, TaskManager, Generic[InputModelT, SetupModelT, OutputModelT]):
17
18
  """Abstract base class for managing background module jobs."""
18
19
 
19
20
  async def start(self) -> None:
@@ -25,7 +26,8 @@ class BaseJobManager(abc.ABC, Generic[InputModelT, SetupModelT, OutputModelT]):
25
26
 
26
27
  @staticmethod
27
28
  async def job_specific_callback(
28
- callback: Callable[[str, OutputModelT | ModuleCodeModel], Coroutine[Any, Any, None]], job_id: str
29
+ callback: Callable[[str, OutputModelT | ModuleCodeModel], Coroutine[Any, Any, None]],
30
+ job_id: str,
29
31
  ) -> Callable[[OutputModelT | ModuleCodeModel], Coroutine[Any, Any, None]]:
30
32
  """Generate a job-specific callback function.
31
33
 
@@ -9,19 +9,18 @@ from typing import Any, Generic
9
9
 
10
10
  import grpc
11
11
 
12
+ from digitalkin.core.job_manager.base_job_manager import BaseJobManager
13
+ from digitalkin.core.task_manager.surrealdb_repository import SurrealDBConnection
14
+ from digitalkin.core.task_manager.task_session import TaskSession
12
15
  from digitalkin.logger import logger
16
+ from digitalkin.models.core.task_monitor import TaskStatus
13
17
  from digitalkin.models.module import InputModelT, OutputModelT, SetupModelT
14
18
  from digitalkin.models.module.module import ModuleCodeModel
15
- from digitalkin.models.module.task_monitor import TaskStatus
16
19
  from digitalkin.modules._base_module import BaseModule
17
- from digitalkin.modules.job_manager.base_job_manager import BaseJobManager
18
- from digitalkin.modules.job_manager.surrealdb_repository import SurrealDBConnection
19
- from digitalkin.modules.job_manager.task_manager import TaskManager
20
- from digitalkin.modules.job_manager.task_session import TaskSession
21
20
  from digitalkin.services.services_models import ServicesMode
22
21
 
23
22
 
24
- class SingleJobManager(BaseJobManager, TaskManager, Generic[InputModelT, OutputModelT, SetupModelT]):
23
+ class SingleJobManager(BaseJobManager, Generic[InputModelT, OutputModelT, SetupModelT]):
25
24
  """Manages a single instance of a module job.
26
25
 
27
26
  This class ensures that only one instance of a module job is active at a time.
@@ -31,7 +30,7 @@ class SingleJobManager(BaseJobManager, TaskManager, Generic[InputModelT, OutputM
31
30
 
32
31
  async def start(self) -> None:
33
32
  """Start manager."""
34
- self.channel = SurrealDBConnection("task_manager", datetime.timedelta(seconds=5))
33
+ self.channel: SurrealDBConnection = SurrealDBConnection("task_manager", datetime.timedelta(seconds=5))
35
34
  await self.channel.init_surreal_instance()
36
35
 
37
36
  def __init__(
@@ -87,7 +86,6 @@ class SingleJobManager(BaseJobManager, TaskManager, Generic[InputModelT, OutputM
87
86
 
88
87
  Args:
89
88
  config_setup_data: The input data required to start the job.
90
- setup_data: The setup configuration for the module.
91
89
  mission_id: The mission ID associated with the job.
92
90
  setup_id: The setup ID associated with the module.
93
91
  setup_version_id: The setup ID.
@@ -101,7 +99,7 @@ class SingleJobManager(BaseJobManager, TaskManager, Generic[InputModelT, OutputM
101
99
  job_id = str(uuid.uuid4())
102
100
  # TODO: Ensure the job_id is unique.
103
101
  module = self.module_class(job_id, mission_id=mission_id, setup_id=setup_id, setup_version_id=setup_version_id)
104
- self.tasks_sessions[job_id] = TaskSession(job_id, self.channel, module)
102
+ self.tasks_sessions[job_id] = TaskSession(job_id, mission_id, self.channel, module)
105
103
 
106
104
  try:
107
105
  await module.start_config_setup(
@@ -224,6 +222,7 @@ class SingleJobManager(BaseJobManager, TaskManager, Generic[InputModelT, OutputM
224
222
 
225
223
  await self.create_task(
226
224
  job_id,
225
+ mission_id,
227
226
  module,
228
227
  module.start(input_data, setup_data, callback, done_callback=None),
229
228
  )
@@ -254,7 +253,7 @@ class SingleJobManager(BaseJobManager, TaskManager, Generic[InputModelT, OutputM
254
253
  await session.module.stop()
255
254
 
256
255
  if job_id in self.tasks:
257
- await self.cancel_task(job_id)
256
+ await self.cancel_task(job_id, session.mission_id)
258
257
  logger.debug(f"session {job_id} ({session.module.name}) stopped successfully")
259
258
  except Exception as e:
260
259
  logger.error(f"Error while stopping module {job_id}: {e}")
@@ -14,11 +14,11 @@ from taskiq.compat import model_validate
14
14
  from taskiq.message import BrokerMessage
15
15
  from taskiq_aio_pika import AioPikaBroker
16
16
 
17
+ from digitalkin.core.job_manager.base_job_manager import BaseJobManager
17
18
  from digitalkin.logger import logger
19
+ from digitalkin.models.core.job_manager_models import StreamCodeModel
18
20
  from digitalkin.models.module.module_types import OutputModelT
19
21
  from digitalkin.modules._base_module import BaseModule
20
- from digitalkin.modules.job_manager.base_job_manager import BaseJobManager
21
- from digitalkin.modules.job_manager.job_manager_models import StreamCodeModel
22
22
  from digitalkin.services.services_config import ServicesConfig
23
23
  from digitalkin.services.services_models import ServicesMode
24
24
 
@@ -194,7 +194,6 @@ async def run_config_module(
194
194
  module_class: type[BaseModule],
195
195
  services_mode: ServicesMode,
196
196
  config_setup_data: dict,
197
- setup_data: dict,
198
197
  context: Allow TaskIQ context access
199
198
  """
200
199
  logger.warning("%s", services_mode)
@@ -17,12 +17,12 @@ from typing import TYPE_CHECKING, Any, Generic
17
17
 
18
18
  from rstream import Consumer, ConsumerOffsetSpecification, MessageContext, OffsetType
19
19
 
20
+ from digitalkin.core.job_manager.base_job_manager import BaseJobManager
21
+ from digitalkin.core.job_manager.taskiq_broker import STREAM, STREAM_RETENTION, TASKIQ_BROKER
20
22
  from digitalkin.logger import logger
23
+ from digitalkin.models.core.task_monitor import TaskStatus
21
24
  from digitalkin.models.module import InputModelT, SetupModelT
22
- from digitalkin.models.module.task_monitor import TaskStatus
23
25
  from digitalkin.modules._base_module import BaseModule
24
- from digitalkin.modules.job_manager.base_job_manager import BaseJobManager
25
- from digitalkin.modules.job_manager.taskiq_broker import STREAM, STREAM_RETENTION, TASKIQ_BROKER
26
26
  from digitalkin.services.services_models import ServicesMode
27
27
 
28
28
  if TYPE_CHECKING:
@@ -146,7 +146,6 @@ class TaskiqJobManager(BaseJobManager, Generic[InputModelT, SetupModelT]):
146
146
 
147
147
  Args:
148
148
  config_setup_data: The input data required to start the job.
149
- setup_data: The setup configuration for the module.
150
149
  mission_id: The mission ID associated with the job.
151
150
  setup_id: The setup ID associated with the module.
152
151
  setup_version_id: The setup ID.
@@ -158,7 +157,7 @@ class TaskiqJobManager(BaseJobManager, Generic[InputModelT, SetupModelT]):
158
157
  TypeError: If the function is called with bad data type.
159
158
  ValueError: If the module fails to start.
160
159
  """
161
- task = TASKIQ_BROKER.find_task("digitalkin.modules.job_manager.taskiq_broker:run_config_module")
160
+ task = TASKIQ_BROKER.find_task("digitalkin.core.taskiq_broker:run_config_module")
162
161
 
163
162
  if task is None:
164
163
  msg = "Task not found"
@@ -242,7 +241,7 @@ class TaskiqJobManager(BaseJobManager, Generic[InputModelT, SetupModelT]):
242
241
  Raises:
243
242
  ValueError: If the task is not found.
244
243
  """
245
- task = TASKIQ_BROKER.find_task("digitalkin.modules.job_manager.taskiq_broker:run_start_module")
244
+ task = TASKIQ_BROKER.find_task("digitalkin.core.taskiq_broker:run_start_module")
246
245
 
247
246
  if task is None:
248
247
  msg = "Task not found"
@@ -0,0 +1 @@
1
+ """Base task manager logic."""
@@ -71,7 +71,6 @@ class SurrealDBConnection(Generic[TSurreal]):
71
71
 
72
72
  Args:
73
73
  database: AsyncSurrealDB connection to a specific database
74
- table_name: Name of the table to interact with
75
74
  timeout: Timeout for database operations
76
75
  """
77
76
  self.timeout = timeout