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.
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/PKG-INFO +5 -25
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/pyproject.toml +59 -38
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/__version__.py +1 -1
- digitalkin-0.3.0rc2/src/digitalkin/core/__init__.py +1 -0
- digitalkin-0.3.0rc2/src/digitalkin/core/job_manager/__init__.py +1 -0
- {digitalkin-0.3.0rc0/src/digitalkin/modules → digitalkin-0.3.0rc2/src/digitalkin/core}/job_manager/base_job_manager.py +5 -3
- {digitalkin-0.3.0rc0/src/digitalkin/modules → digitalkin-0.3.0rc2/src/digitalkin/core}/job_manager/single_job_manager.py +9 -10
- {digitalkin-0.3.0rc0/src/digitalkin/modules → digitalkin-0.3.0rc2/src/digitalkin/core}/job_manager/taskiq_broker.py +2 -3
- {digitalkin-0.3.0rc0/src/digitalkin/modules → digitalkin-0.3.0rc2/src/digitalkin/core}/job_manager/taskiq_job_manager.py +5 -6
- digitalkin-0.3.0rc2/src/digitalkin/core/task_manager/__init__.py +1 -0
- {digitalkin-0.3.0rc0/src/digitalkin/modules/job_manager → digitalkin-0.3.0rc2/src/digitalkin/core/task_manager}/surrealdb_repository.py +0 -1
- {digitalkin-0.3.0rc0/src/digitalkin/modules/job_manager → digitalkin-0.3.0rc2/src/digitalkin/core/task_manager}/task_manager.py +102 -49
- {digitalkin-0.3.0rc0/src/digitalkin/modules/job_manager → digitalkin-0.3.0rc2/src/digitalkin/core/task_manager}/task_session.py +71 -18
- digitalkin-0.3.0rc2/src/digitalkin/grpc_servers/__init__.py +1 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/grpc_servers/_base_server.py +2 -2
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/grpc_servers/module_server.py +2 -2
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/grpc_servers/module_servicer.py +3 -3
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/grpc_servers/registry_server.py +1 -1
- digitalkin-0.3.0rc2/src/digitalkin/grpc_servers/utils/__init__.py +1 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -8
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +1 -1
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/chat_history_mixin.py +2 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/file_history_mixin.py +14 -20
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/filesystem_mixin.py +1 -2
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/logger_mixin.py +4 -12
- digitalkin-0.3.0rc2/src/digitalkin/models/core/__init__.py +1 -0
- {digitalkin-0.3.0rc0/src/digitalkin/modules/job_manager → digitalkin-0.3.0rc2/src/digitalkin/models/core}/job_manager_models.py +3 -3
- {digitalkin-0.3.0rc0/src/digitalkin/models/module → digitalkin-0.3.0rc2/src/digitalkin/models/core}/task_monitor.py +7 -5
- digitalkin-0.3.0rc2/src/digitalkin/models/grpc_servers/__init__.py +1 -0
- {digitalkin-0.3.0rc0/src/digitalkin/grpc_servers/utils → digitalkin-0.3.0rc2/src/digitalkin/models/grpc_servers}/models.py +4 -4
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/module/module_context.py +33 -1
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/module/module_types.py +5 -1
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/services/cost.py +1 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/modules/_base_module.py +16 -80
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/cost/grpc_cost.py +1 -1
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/filesystem/grpc_filesystem.py +1 -1
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/setup/grpc_setup.py +1 -1
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/storage/grpc_storage.py +1 -1
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/utils/arg_parser.py +1 -1
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/utils/development_mode_action.py +2 -2
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/utils/package_discover.py +1 -2
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin.egg-info/PKG-INFO +5 -25
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin.egg-info/SOURCES.txt +17 -12
- digitalkin-0.3.0rc2/src/digitalkin.egg-info/requires.txt +12 -0
- digitalkin-0.3.0rc0/src/digitalkin/grpc_servers/__init__.py +0 -19
- digitalkin-0.3.0rc0/src/digitalkin/grpc_servers/utils/factory.py +0 -180
- digitalkin-0.3.0rc0/src/digitalkin.egg-info/requires.txt +0 -34
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/LICENSE +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/README.md +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/mock/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/mock/mock_pb2.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/server_async_insecure.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/server_async_secure.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/server_sync_insecure.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/base_server/server_sync_secure.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/modules/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/modules/cpu_intensive_module.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/modules/minimal_llm_module.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/modules/text_transform_module.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/services/filesystem_module.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/examples/services/storage_module.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/setup.cfg +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/grpc_servers/registry_servicer.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/logger.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/base_mixin.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/callback_mixin.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/cost_mixin.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/mixins/storage_mixin.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/__init__.py +0 -0
- {digitalkin-0.3.0rc0/src/digitalkin/grpc_servers/utils → digitalkin-0.3.0rc2/src/digitalkin/models/grpc_servers}/types.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/module/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/module/module.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/services/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/models/services/storage.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/modules/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/modules/archetype_module.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/modules/tool_module.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/modules/trigger_handler.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/py.typed +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/agent/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/agent/agent_strategy.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/agent/default_agent.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/base_strategy.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/cost/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/cost/cost_strategy.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/cost/default_cost.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/filesystem/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/identity/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/identity/default_identity.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/identity/identity_strategy.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/registry/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/registry/default_registry.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/registry/registry_strategy.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/services_config.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/services_models.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/setup/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/setup/default_setup.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/setup/setup_strategy.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/snapshot/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/snapshot/default_snapshot.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/snapshot/snapshot_strategy.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/storage/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/storage/default_storage.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/services/storage/storage_strategy.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/utils/__init__.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin/utils/llm_ready_schema.py +0 -0
- {digitalkin-0.3.0rc0 → digitalkin-0.3.0rc2}/src/digitalkin.egg-info/dependency_links.txt +0 -0
- {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.
|
|
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.
|
|
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.
|
|
463
|
-
Requires-Dist: taskiq-aio-pika>=0.4.
|
|
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.
|
|
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-
|
|
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.
|
|
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.
|
|
42
|
-
"taskiq-aio-pika>=0.4.
|
|
41
|
+
"rstream>=0.40.0",
|
|
42
|
+
"taskiq-aio-pika>=0.4.4",
|
|
43
43
|
"taskiq-redis>=1.1.2",
|
|
44
|
-
"taskiq[reload]>=0.11.
|
|
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
|
-
|
|
161
|
-
"FURB",
|
|
162
|
-
"PL",
|
|
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
|
-
]
|
|
@@ -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]],
|
|
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,
|
|
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.
|
|
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.
|
|
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."""
|