simulo-interfaces 0.18.0__tar.gz → 0.19.0__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 (59) hide show
  1. {simulo_interfaces-0.18.0/src/simulo_interfaces.egg-info → simulo_interfaces-0.19.0}/PKG-INFO +1 -1
  2. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/pyproject.toml +1 -1
  3. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/__init__.py +6 -1
  4. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/enums.py +22 -0
  5. simulo_interfaces-0.19.0/src/simulo/interfaces/platform/systems.py +106 -0
  6. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0/src/simulo_interfaces.egg-info}/PKG-INFO +1 -1
  7. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo_interfaces.egg-info/SOURCES.txt +1 -0
  8. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/MANIFEST.in +0 -0
  9. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/PYPI.md +0 -0
  10. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/setup.cfg +0 -0
  11. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/__init__.py +0 -0
  12. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/__init__.py +0 -0
  13. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/actuator.py +0 -0
  14. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/asset.py +0 -0
  15. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/entity.py +0 -0
  16. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/light.py +0 -0
  17. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/materials.py +0 -0
  18. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/physics.py +0 -0
  19. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/pose.py +0 -0
  20. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/primitives.py +0 -0
  21. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/prop.py +0 -0
  22. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/record.py +0 -0
  23. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/robot.py +0 -0
  24. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/scene.py +0 -0
  25. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/sensor.py +0 -0
  26. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/terrain.py +0 -0
  27. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/visual.py +0 -0
  28. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/authoring/world.py +0 -0
  29. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/exceptions.py +0 -0
  30. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/ids.py +0 -0
  31. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/_payload.py +0 -0
  32. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/app.py +0 -0
  33. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/asset.py +0 -0
  34. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/asset_catalog.py +0 -0
  35. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/callbacks.py +0 -0
  36. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/debug.py +0 -0
  37. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/domain.py +0 -0
  38. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/job_events.py +0 -0
  39. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/manifest.py +0 -0
  40. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/outputs.py +0 -0
  41. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/policy_bundle.py +0 -0
  42. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/runs.py +0 -0
  43. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/runtime.py +0 -0
  44. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/submit.py +0 -0
  45. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/platform/volume.py +0 -0
  46. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/py.typed +0 -0
  47. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/runtime/__init__.py +0 -0
  48. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/runtime/anomaly.py +0 -0
  49. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/runtime/components.py +0 -0
  50. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/runtime/env.py +0 -0
  51. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/runtime/player.py +0 -0
  52. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/runtime/policy.py +0 -0
  53. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/runtime/scenario.py +0 -0
  54. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/runtime/task.py +0 -0
  55. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/runtime/tensors.py +0 -0
  56. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo/interfaces/runtime/trainer.py +0 -0
  57. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo_interfaces.egg-info/dependency_links.txt +0 -0
  58. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo_interfaces.egg-info/requires.txt +0 -0
  59. {simulo_interfaces-0.18.0 → simulo_interfaces-0.19.0}/src/simulo_interfaces.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simulo-interfaces
3
- Version: 0.18.0
3
+ Version: 0.19.0
4
4
  Summary: Type contracts for the Simulo SDK. Installed automatically as a dependency of the simulo package.
5
5
  Author-email: Simulo Team <team@simulo.ai>
6
6
  License: BSD-3-Clause
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "simulo-interfaces"
7
- version = "0.18.0"
7
+ version = "0.19.0"
8
8
  description = "Type contracts for the Simulo SDK. Installed automatically as a dependency of the simulo package."
9
9
  readme = "PYPI.md"
10
10
  requires-python = ">=3.11"
@@ -70,7 +70,7 @@ from simulo.interfaces.platform.asset_catalog import (
70
70
  from simulo.interfaces.platform.callbacks import JobCallbackProtocol
71
71
  from simulo.interfaces.platform.debug import DebugSessionProtocol, ReplaySessionProtocol, VisualizationSessionProtocol
72
72
  from simulo.interfaces.platform.domain import Checkpoint, Job, Package, Project, Resource, Tag, TrainedModel
73
- from simulo.interfaces.platform.enums import OutputKind
73
+ from simulo.interfaces.platform.enums import OutputKind, SystemType
74
74
  from simulo.interfaces.platform.job_events import (
75
75
  MAX_PUBLIC_ASSET_FINDING_COUNT,
76
76
  MAX_PUBLIC_JOB_EVENT_ATTEMPT,
@@ -240,11 +240,16 @@ from simulo.interfaces.platform.submit import (
240
240
  canonical_pypi_name,
241
241
  is_platform_pinned,
242
242
  )
243
+ from simulo.interfaces.platform.systems import SYSTEM_SPECS, SystemSpec
243
244
  from simulo.interfaces.platform.volume import VolumeProtocol
244
245
 
245
246
  __all__ = [
246
247
  # enums
247
248
  "OutputKind",
249
+ "SystemType",
250
+ # systems (GPU system-tier catalog, issue #1362)
251
+ "SystemSpec",
252
+ "SYSTEM_SPECS",
248
253
  # closed public job-event contract (#656)
249
254
  "PUBLIC_JOB_EVENT_SCHEMA_VERSION",
250
255
  "WORKER_JOB_EVENTS_ROUTE_TEMPLATE",
@@ -44,6 +44,28 @@ class ResumePolicy(StrEnum):
44
44
  """Resume only on explicit request. Reserved: currently behaves like ``NEVER``."""
45
45
 
46
46
 
47
+ class SystemType(StrEnum):
48
+ """An abstract GPU system tier.
49
+
50
+ Each tier's hardware profile and fleet-provisioning state lives in
51
+ :data:`simulo.interfaces.platform.systems.SYSTEM_SPECS`, keyed by these
52
+ members. The AWS instance type behind a tier is never part of this name —
53
+ see :class:`simulo.interfaces.platform.systems.SystemSpec`'s own docstring.
54
+ """
55
+
56
+ TIER_1 = "tier1"
57
+ """Entry tier — always available."""
58
+
59
+ TIER_2 = "tier2"
60
+ """Mid tier — always available."""
61
+
62
+ TIER_3 = "tier3"
63
+ """High tier — not yet available on the deployable fleet."""
64
+
65
+ TIER_4 = "tier4"
66
+ """Top tier — not yet available on the deployable fleet."""
67
+
68
+
47
69
  class ResourceKind(StrEnum):
48
70
  """Kind of a registry-resolved, read-only resource mount."""
49
71
 
@@ -0,0 +1,106 @@
1
+ """GPU system-tier catalog — the closed hardware contract behind `SystemType`.
2
+
3
+ `SYSTEM_SPECS` is the single published source of truth for what each tier
4
+ means: the marketing GPU name, its VRAM, the host's vCPU/memory, whether the
5
+ tier is provisionable on the deployable fleet today, and (internal-only) the
6
+ AWS instance type behind it. Nothing here schedules a job against real
7
+ hardware — selection stays record-only until a later milestone adds live
8
+ enforcement.
9
+
10
+ Stdlib-only (`dataclasses` plus the sibling `enums` module): this file must
11
+ import nothing else, so the package's zero-runtime-dependency guarantee
12
+ (`test_no_heavy_deps.py`) holds.
13
+ """
14
+
15
+ from dataclasses import dataclass
16
+
17
+ from simulo.interfaces.platform.enums import SystemType
18
+
19
+ # Shared dataclass options: immutable value objects (frozen), memory-lean
20
+ # (slots), and keyword-only construction (kw_only) — see `platform/domain.py`'s
21
+ # identical `_DC` for the full rationale.
22
+ _DC = {"frozen": True, "slots": True, "kw_only": True}
23
+
24
+
25
+ @dataclass(**_DC)
26
+ class SystemSpec:
27
+ """One GPU tier's hardware profile and fleet-provisioning state.
28
+
29
+ `gpu_model` (e.g. `"T4"`) is the user-facing marketing name — the only
30
+ hardware identity a CLI table, `--json` output, or documentation page may
31
+ ever show. `instance_type` is the AWS EC2 instance type behind the tier,
32
+ kept here ONLY for an offline fleet crosscheck against the deployable
33
+ CloudFormation allowlist and the control plane's own bookkeeping — it
34
+ must never reach a user-facing surface. Hiding it is deliberate: a future
35
+ author copying an AWS SKU into an example is exactly how `gpu="L4"`
36
+ (actually Tier 3, not provisionable) ended up in 40 tracked files before
37
+ this catalog existed.
38
+ """
39
+
40
+ system: SystemType
41
+ gpu_model: str
42
+ vram_gb: int
43
+ vcpu: int
44
+ memory_gb: int
45
+ max_parallel_envs: int | None
46
+ available: bool
47
+ instance_type: str
48
+
49
+
50
+ # vcpu/memory_gb: AWS's published instance-type specifications
51
+ # (https://docs.aws.amazon.com/ec2/latest/instancetypes/ac.html, confirmed at
52
+ # M20-system-catalog implementation time, 2026-09-07) for
53
+ # g4dn.xlarge/g5.xlarge/g6.xlarge/g6e.xlarge. vram_gb: each GPU model's
54
+ # published VRAM capacity (NVIDIA product specifications) — deliberately NOT
55
+ # the ~22/44 GiB AWS's own instance-type page reports as *usable* GPU memory
56
+ # on g5/g6/g6e after ECC/hypervisor reservation, since `vram_gb` documents the
57
+ # hardware users are told they are getting (`gpu_model`), not a fleet
58
+ # provisioning detail.
59
+ SYSTEM_SPECS: dict[SystemType, SystemSpec] = {
60
+ SystemType.TIER_1: SystemSpec(
61
+ system=SystemType.TIER_1,
62
+ gpu_model="T4",
63
+ vram_gb=16,
64
+ vcpu=4,
65
+ memory_gb=16,
66
+ # Measured ceiling for g4dn.xlarge's default workload (`.claude/skills/isaaclab/SKILL.md`,
67
+ # `.claude/skills/aws-infra/SKILL.md`, `cloud-infra/gpu-worker/gpu-worker.yaml`): 16
68
+ # parallel environments; a 4096-environment run exhausted GPU memory and made the
69
+ # instance unrecoverable. `aws-infra/SKILL.md` is explicit that this is
70
+ # workload/instance evidence for the template's default workload, not a universal
71
+ # constant — re-benchmark before relying on it for a different workload shape.
72
+ max_parallel_envs=16,
73
+ available=True,
74
+ instance_type="g4dn.xlarge",
75
+ ),
76
+ SystemType.TIER_2: SystemSpec(
77
+ system=SystemType.TIER_2,
78
+ gpu_model="A10G",
79
+ vram_gb=24,
80
+ vcpu=4,
81
+ memory_gb=16,
82
+ max_parallel_envs=None,
83
+ available=True,
84
+ instance_type="g5.xlarge",
85
+ ),
86
+ SystemType.TIER_3: SystemSpec(
87
+ system=SystemType.TIER_3,
88
+ gpu_model="L4",
89
+ vram_gb=24,
90
+ vcpu=4,
91
+ memory_gb=16,
92
+ max_parallel_envs=None,
93
+ available=False,
94
+ instance_type="g6.xlarge",
95
+ ),
96
+ SystemType.TIER_4: SystemSpec(
97
+ system=SystemType.TIER_4,
98
+ gpu_model="L40S",
99
+ vram_gb=48,
100
+ vcpu=4,
101
+ memory_gb=32,
102
+ max_parallel_envs=None,
103
+ available=False,
104
+ instance_type="g6e.xlarge",
105
+ ),
106
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simulo-interfaces
3
- Version: 0.18.0
3
+ Version: 0.19.0
4
4
  Summary: Type contracts for the Simulo SDK. Installed automatically as a dependency of the simulo package.
5
5
  Author-email: Simulo Team <team@simulo.ai>
6
6
  License: BSD-3-Clause
@@ -38,6 +38,7 @@ src/simulo/interfaces/platform/policy_bundle.py
38
38
  src/simulo/interfaces/platform/runs.py
39
39
  src/simulo/interfaces/platform/runtime.py
40
40
  src/simulo/interfaces/platform/submit.py
41
+ src/simulo/interfaces/platform/systems.py
41
42
  src/simulo/interfaces/platform/volume.py
42
43
  src/simulo/interfaces/runtime/__init__.py
43
44
  src/simulo/interfaces/runtime/anomaly.py