tuneplane-node 0.3.15__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.
- tuneplane_node-0.3.15/.gitignore +59 -0
- tuneplane_node-0.3.15/LICENSE +1 -0
- tuneplane_node-0.3.15/NOTICE +1 -0
- tuneplane_node-0.3.15/PKG-INFO +14 -0
- tuneplane_node-0.3.15/pyproject.toml +48 -0
- tuneplane_node-0.3.15/src/tuneplane_node/__init__.py +1 -0
- tuneplane_node-0.3.15/src/tuneplane_node/allocator.py +596 -0
- tuneplane_node-0.3.15/src/tuneplane_node/cli.py +189 -0
- tuneplane_node-0.3.15/src/tuneplane_node/daemon.py +497 -0
- tuneplane_node-0.3.15/src/tuneplane_node/inventory.py +163 -0
- tuneplane_node-0.3.15/src/tuneplane_node/join.py +199 -0
- tuneplane_node-0.3.15/src/tuneplane_node/runtime.py +611 -0
- tuneplane_node-0.3.15/src/tuneplane_node/settings.py +77 -0
- tuneplane_node-0.3.15/src/tuneplane_node/wire.py +85 -0
- tuneplane_node-0.3.15/tests/test_allocator.py +555 -0
- tuneplane_node-0.3.15/tests/test_runtime.py +610 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.egg-info/
|
|
5
|
+
.eggs/
|
|
6
|
+
build/
|
|
7
|
+
dist/
|
|
8
|
+
.venv/
|
|
9
|
+
venv/
|
|
10
|
+
.python-version
|
|
11
|
+
.pytest_cache/
|
|
12
|
+
.ruff_cache/
|
|
13
|
+
|
|
14
|
+
# Frontend
|
|
15
|
+
web/node_modules/
|
|
16
|
+
web/dist/
|
|
17
|
+
mintlify/scripts/node_modules/
|
|
18
|
+
mintlify/scripts/console-shots.local.json
|
|
19
|
+
|
|
20
|
+
# Local database / credentials / ledgers
|
|
21
|
+
# Local platform data: the console's database, its job work directories and the
|
|
22
|
+
# single-machine storage-root fallback. `.tuneplane-data/` is the current
|
|
23
|
+
# default; `.forge/` and a repository-root `.tuneplane/` are what earlier
|
|
24
|
+
# defaults wrote. Both are ignored rather than deleted -- they are somebody's
|
|
25
|
+
# data, and the platform does not move it on its own initiative. See
|
|
26
|
+
# docs/ops/local-data-after-the-rename.md.
|
|
27
|
+
.tuneplane-data/
|
|
28
|
+
/.forge/
|
|
29
|
+
/.tuneplane/
|
|
30
|
+
*.db
|
|
31
|
+
|
|
32
|
+
# Secrets / local configuration
|
|
33
|
+
.env
|
|
34
|
+
.env.*
|
|
35
|
+
!.env.example
|
|
36
|
+
docker-compose.override.yml
|
|
37
|
+
*.key
|
|
38
|
+
secrets.*
|
|
39
|
+
|
|
40
|
+
# Operating system / editor
|
|
41
|
+
.DS_Store
|
|
42
|
+
.idea/
|
|
43
|
+
.vscode/
|
|
44
|
+
*.swp
|
|
45
|
+
SwanLab/
|
|
46
|
+
RL/
|
|
47
|
+
.cursor/
|
|
48
|
+
# Claude Code: the shared hook config is committed, personal overrides are not.
|
|
49
|
+
.claude/settings.local.json
|
|
50
|
+
|
|
51
|
+
# Hydra run droppings from any tool invoked at the repo root (gym env validate,
|
|
52
|
+
# a bare verl compile). Generated, never read back, and they carry local paths.
|
|
53
|
+
outputs/
|
|
54
|
+
|
|
55
|
+
.codegraph/
|
|
56
|
+
.pnpm-store/
|
|
57
|
+
|
|
58
|
+
# Agent worktrees, created by the harness and never part of a commit.
|
|
59
|
+
.claude/worktrees/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
../LICENSE
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
../NOTICE
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: tuneplane-node
|
|
3
|
+
Version: 0.3.15
|
|
4
|
+
Summary: TunePlane node daemon: runs job containers on one machine and reports it to a console.
|
|
5
|
+
License-Expression: AGPL-3.0-only
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
License-File: NOTICE
|
|
8
|
+
Requires-Python: >=3.12
|
|
9
|
+
Requires-Dist: fastapi>=0.110
|
|
10
|
+
Requires-Dist: httpx>=0.28.1
|
|
11
|
+
Requires-Dist: pydantic-settings>=2.0
|
|
12
|
+
Requires-Dist: tuneplane
|
|
13
|
+
Requires-Dist: typer>=0.12
|
|
14
|
+
Requires-Dist: uvicorn>=0.29
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Node-side distribution (`tuneplane-node`, imported as `tuneplane_node`). It sits
|
|
2
|
+
# in its own distribution rather than inside tuneplane-server for one blunt
|
|
3
|
+
# reason: installing the daemon used to install the entire control plane --
|
|
4
|
+
# fastapi, sqlalchemy, alembic,
|
|
5
|
+
# psycopg, redis, boto3, pyarrow, mcp -- onto every GPU machine in the fleet.
|
|
6
|
+
#
|
|
7
|
+
# What is here is what a machine needs to *be* a node: the container runtime
|
|
8
|
+
# wrapper, the GPU allocator, the daemon the console talks to, and the join /
|
|
9
|
+
# heartbeat client. The console depends on this package (not the reverse) because
|
|
10
|
+
# the local backend runs the same container runtime and allocator on its own host.
|
|
11
|
+
[project]
|
|
12
|
+
name = "tuneplane-node"
|
|
13
|
+
version = "0.3.15"
|
|
14
|
+
description = "TunePlane node daemon: runs job containers on one machine and reports it to a console."
|
|
15
|
+
requires-python = ">=3.12"
|
|
16
|
+
# Same licence as the control plane: this is infrastructure an organization runs,
|
|
17
|
+
# not the contract its users import. See ../LICENSING.md.
|
|
18
|
+
license = "AGPL-3.0-only"
|
|
19
|
+
license-files = ["LICENSE", "NOTICE"]
|
|
20
|
+
dependencies = [
|
|
21
|
+
# The JobSpec contract and the storage layout. Both sides of a job have to
|
|
22
|
+
# agree on where things live, so the layout cannot be re-derived here.
|
|
23
|
+
"tuneplane",
|
|
24
|
+
# The daemon is an HTTP server; the console calls it.
|
|
25
|
+
"fastapi>=0.110",
|
|
26
|
+
"uvicorn>=0.29",
|
|
27
|
+
"httpx>=0.28.1",
|
|
28
|
+
"pydantic-settings>=2.0",
|
|
29
|
+
"typer>=0.12",
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
[project.scripts]
|
|
33
|
+
tuneplane-node = "tuneplane_node.cli:app"
|
|
34
|
+
|
|
35
|
+
[build-system]
|
|
36
|
+
requires = ["hatchling"]
|
|
37
|
+
build-backend = "hatchling.build"
|
|
38
|
+
|
|
39
|
+
[tool.hatch.build.targets.wheel]
|
|
40
|
+
packages = ["src/tuneplane_node"]
|
|
41
|
+
|
|
42
|
+
[tool.ruff]
|
|
43
|
+
line-length = 120
|
|
44
|
+
target-version = "py312"
|
|
45
|
+
|
|
46
|
+
[tool.ruff.lint]
|
|
47
|
+
select = ["E", "F", "I", "W", "B"]
|
|
48
|
+
ignore = ["E501", "B008"]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""TunePlane node agent: what a machine needs to be a Fleet node."""
|