Keep the memory schema free of launch and adapter shapes

schemas.py was 473 lines and the memory lifecycle work needs to add
fields to it. The seven adapter and launch-profile models were the
right thing to move: they describe what trained the model and how a
machine starts it, they change when the evidence rules change, and the
memory model should not move with them. They joined the runtime shapes
file that already held the adapter load report.

schemas.py 473 -> 314 lines, runtime_schemas.py 30 -> 192. Every moved
class body is byte-identical (compared with ast.get_source_segment
against HEAD: 37 classes then, 30 + 9 now, none missing, none
differing).

Gates: 333 passed, ruff clean, filesize clean, mypy 24 errors in 9
files on both trees with identical messages, pyright 9 errors on the
package on both trees.
This commit is contained in:
ZacharyZhang-NY committed 2026-10-09 06:24:47 -04:00
1 parent a6a1ef05f0
commit 4c6af87fe0
13 files changed
+189 -183

No files matched your search

+8 -2
View File
@@ -13,8 +13,14 @@ from pydantic import ValidationError
from . import cartridge_store from . import cartridge_store
from .config import Settings from .config import Settings
from .db import Database from .db import Database
from .runtime_schemas import AdapterChoice, AdapterLoadReport, AdapterOrigin, AdapterState from .runtime_schemas import (
from .schemas import AdapterManifest, TrainingAdapterKind AdapterChoice,
AdapterLoadReport,
AdapterManifest,
AdapterOrigin,
AdapterState,
)
from .schemas import TrainingAdapterKind
logger = logging.getLogger("ely_eye.adapters") logger = logging.getLogger("ely_eye.adapters")
+1 -4
View File
@@ -30,10 +30,8 @@ from .profiles import runtime_profile_report
from .proofs import HashHopEvaluator, PRDProofSuite from .proofs import HashHopEvaluator, PRDProofSuite
from .retrieval import RetrievalService from .retrieval import RetrievalService
from .runtime import QwenRuntime, RuntimeUnavailableError from .runtime import QwenRuntime, RuntimeUnavailableError
from .runtime_schemas import AdapterLoadReport from .runtime_schemas import AdapterLoadReport, AdapterManifest, AdapterStatus, RuntimeProfileReport
from .schemas import ( from .schemas import (
AdapterManifest,
AdapterStatus,
AnswerResponse, AnswerResponse,
AtomPage, AtomPage,
EvidenceAtom, EvidenceAtom,
@@ -44,7 +42,6 @@ from .schemas import (
PathIngestRequest, PathIngestRequest,
RememberRequest, RememberRequest,
RuntimeProfile, RuntimeProfile,
RuntimeProfileReport,
SearchRequest, SearchRequest,
SearchResult, SearchResult,
SupersedeRequest, SupersedeRequest,
+2 -1
View File
@@ -12,7 +12,8 @@ from .cartridge import CartridgeService
from .cartridge_assets import CartridgeAssetService from .cartridge_assets import CartridgeAssetService
from .config import Settings from .config import Settings
from .db import Database from .db import Database
from .schemas import AppendRequest, CartridgeAssetReport, CartridgeManifest, MountState from .runtime_schemas import CartridgeAssetReport
from .schemas import AppendRequest, CartridgeManifest, MountState
def register(app: FastAPI, settings_dep: Callable[[], Settings]) -> None: def register(app: FastAPI, settings_dep: Callable[[], Settings]) -> None:
+1 -1
View File
@@ -15,8 +15,8 @@ from . import cartridge_store
from .config import Settings, get_settings from .config import Settings, get_settings
from .db import Database from .db import Database
from .kv_fingerprint import compute_fingerprint, fingerprint_diff, unverifiable_fields from .kv_fingerprint import compute_fingerprint, fingerprint_diff, unverifiable_fields
from .runtime_schemas import AdapterManifest
from .schemas import ( from .schemas import (
AdapterManifest,
CartridgeManifest, CartridgeManifest,
EvidenceAtom, EvidenceAtom,
MountState, MountState,
+1 -1
View File
@@ -17,7 +17,7 @@ from PIL import Image
from .cartridge import JSON_PARQUET_COLUMNS, CartridgeService from .cartridge import JSON_PARQUET_COLUMNS, CartridgeService
from .config import Settings, get_settings from .config import Settings, get_settings
from .db import Database from .db import Database
from .schemas import CartridgeAssetReport, CartridgeAssetStatus from .runtime_schemas import CartridgeAssetReport, CartridgeAssetStatus
from .storage import ObjectStore, sha256_file from .storage import ObjectStore, sha256_file
TEXT_VECTOR_DIMS = 384 TEXT_VECTOR_DIMS = 384
+1 -1
View File
@@ -7,7 +7,7 @@ import subprocess
from pathlib import Path from pathlib import Path
from .config import Settings from .config import Settings
from .schemas import RuntimeLaunchProfile, RuntimeProfileReport, RuntimeProfileValidation from .runtime_schemas import RuntimeLaunchProfile, RuntimeProfileReport, RuntimeProfileValidation
EXTREME_YARN_OVERRIDE = { EXTREME_YARN_OVERRIDE = {
"text_config": { "text_config": {
@@ -14,10 +14,8 @@ from ..db import Database
from ..evaluation_schemas import ( from ..evaluation_schemas import (
ProofCheck, ProofCheck,
) )
from ..schemas import ( from ..runtime_schemas import AdapterManifest
AdapterManifest, from ..schemas import TrainingAdapterKind
TrainingAdapterKind,
)
from ..training_common import sha256_file, sha256_tree from ..training_common import sha256_file, sha256_tree
from ..training_metrics import safetensor_weight_stats from ..training_metrics import safetensor_weight_stats
+2 -4
View File
@@ -8,10 +8,8 @@ import math
from pathlib import Path from pathlib import Path
from typing import Any from typing import Any
from ..schemas import ( from ..runtime_schemas import AdapterManifest
AdapterManifest, from ..schemas import TrainingAdapterKind
TrainingAdapterKind,
)
from ..training_common import ( from ..training_common import (
AUTOCAST_DTYPE, AUTOCAST_DTYPE,
GRADIENT_CHECKPOINTING_MODE, GRADIENT_CHECKPOINTING_MODE,
+165 -3
View File
@@ -1,10 +1,13 @@
"""Runtime observability shapes: what the model holds in memory right now.""" """Runtime and adapter shapes: what the model holds in memory, what trained it, and how a machine
launches it. A proof report moves when the evidence rules move; the memory model should not.
"""
from datetime import datetime
from typing import Literal from typing import Literal
from pydantic import BaseModel from pydantic import BaseModel, Field
from .schemas import TrainingAdapterKind from .schemas import TrainingAdapterKind, utc_now
AdapterState = Literal["loaded", "available", "deferred", "missing"] AdapterState = Literal["loaded", "available", "deferred", "missing"]
AdapterOrigin = Literal["library", "cartridge"] AdapterOrigin = Literal["library", "cartridge"]
@@ -28,3 +31,162 @@ class AdapterLoadReport(BaseModel):
model_id: str model_id: str
mounted: list[str] mounted: list[str]
adapters: list[AdapterChoice] adapters: list[AdapterChoice]
class AdapterManifest(BaseModel):
adapter_id: str
kind: TrainingAdapterKind
created_at: datetime
proof_version: int = 1
training_method: str = "BF16 LoRA"
precision: str = "bf16"
framework: str = "unsloth_patched_transformers_peft"
base_model: str
dataset_path: str
dataset_sha256: str
sample_count: int
max_steps: int
max_length: int
rank: int
alpha: int
target_modules: list[str]
trainable_params: int
total_params: int
optimizer: str
optimizer_family: str | None = None
learning_rate: float
gradient_accumulation_steps: int
gradient_checkpointing: bool = False
gradient_checkpointing_mode: str | None = None
autocast_dtype: str | None = None
unsloth_version: str | None = None
triton_version: str | None = None
xformers_version: str | None = None
unsloth_model_type: str | None = None
bf16: bool
final_loss: float | None
loss_history: list[float] = Field(default_factory=list)
initial_trainable_sha256: str | None = None
final_trainable_sha256: str | None = None
initial_trainable_l2: float | None = None
final_trainable_l2: float | None = None
optimizer_update_count: int = 0
max_optimizer_update_l2: float | None = None
loss_delta: float | None = None
training_proof_path: str | None = None
training_proof_sha256: str | None = None
training_trace_path: str | None = None
training_trace_sha256: str | None = None
training_summary_path: str | None = None
training_summary_sha256: str | None = None
training_started_at: datetime | None = None
training_finished_at: datetime | None = None
training_wall_seconds: float | None = None
training_device: str | None = None
torch_version: str | None = None
cuda_version: str | None = None
adapter_weight_sha256: str | None = None
adapter_tensor_count: int = 0
adapter_lora_tensor_count: int = 0
adapter_total_elements: int = 0
adapter_nonzero_elements: int = 0
adapter_max_abs: float | None = None
adapter_weights_finite: bool = False
artifacts: dict[str, str]
sha256: str
cartridge_id: str | None = None
class AdapterStatus(BaseModel):
name: str
kind: TrainingAdapterKind
proof_version: int = 1
training_method: str = "BF16 LoRA"
precision: str = "bf16"
framework: str = "unsloth_patched_transformers_peft"
base_model: str
path: str
adapter_id: str
sample_count: int
max_steps: int
trainable_params: int
final_loss: float | None
sha256: str
weight_bytes: int
safetensor_keys: int
cartridge_id: str | None = None
cartridge_bound: bool
training_trace_path: str | None = None
training_trace_sha256: str | None = None
training_trace_steps: int = 0
training_proof_path: str | None = None
training_proof_sha256: str | None = None
optimizer: str | None = None
optimizer_family: str | None = None
gradient_checkpointing: bool = False
gradient_checkpointing_mode: str | None = None
autocast_dtype: str | None = None
unsloth_version: str | None = None
triton_version: str | None = None
xformers_version: str | None = None
unsloth_model_type: str | None = None
optimizer_update_count: int = 0
max_optimizer_update_l2: float | None = None
loss_delta: float | None = None
training_summary_path: str | None = None
training_wall_seconds: float | None = None
training_device: str | None = None
bf16: bool = False
torch_version: str | None = None
cuda_version: str | None = None
adapter_weight_sha256: str | None = None
adapter_tensor_count: int = 0
adapter_lora_tensor_count: int = 0
adapter_total_elements: int = 0
adapter_nonzero_elements: int = 0
adapter_max_abs: float | None = None
adapter_weights_finite: bool = False
class CartridgeAssetStatus(BaseModel):
name: str
path: str
sha256: str
size_bytes: int
item_count: int
dtype: str
status: Literal["ready", "missing"]
class CartridgeAssetReport(BaseModel):
cartridge_id: str
status: Literal["ready", "incomplete"]
created_at: datetime = Field(default_factory=utc_now)
assets: list[CartridgeAssetStatus]
class RuntimeLaunchProfile(BaseModel):
name: str
runtime: str
role: str
context_tokens: int
script: str
command: list[str]
environment: dict[str, str] = Field(default_factory=dict)
required_features: list[str] = Field(default_factory=list)
class RuntimeProfileValidation(BaseModel):
name: str
runtime: str
status: Literal["ready", "missing"]
script_exists: bool
package: str | None = None
package_version: str | None = None
executable: str | None = None
gpu_available: bool = False
probe_command: list[str] = Field(default_factory=list)
probe_status: Literal["passed", "failed", "skipped"] = "skipped"
probe_exit_code: int | None = None
probe_output: str | None = None
detail: str
class RuntimeProfileReport(BaseModel):
status: Literal["ready", "incomplete"]
created_at: datetime = Field(default_factory=utc_now)
profiles: list[RuntimeLaunchProfile]
validations: list[RuntimeProfileValidation] = Field(default_factory=list)
-159
View File
@@ -266,165 +266,6 @@ class CartridgeManifest(BaseModel):
kv_fingerprint: KvFingerprint | None = None kv_fingerprint: KvFingerprint | None = None
dna: str | None = None dna: str | None = None
class AdapterManifest(BaseModel):
adapter_id: str
kind: TrainingAdapterKind
created_at: datetime
proof_version: int = 1
training_method: str = "BF16 LoRA"
precision: str = "bf16"
framework: str = "unsloth_patched_transformers_peft"
base_model: str
dataset_path: str
dataset_sha256: str
sample_count: int
max_steps: int
max_length: int
rank: int
alpha: int
target_modules: list[str]
trainable_params: int
total_params: int
optimizer: str
optimizer_family: str | None = None
learning_rate: float
gradient_accumulation_steps: int
gradient_checkpointing: bool = False
gradient_checkpointing_mode: str | None = None
autocast_dtype: str | None = None
unsloth_version: str | None = None
triton_version: str | None = None
xformers_version: str | None = None
unsloth_model_type: str | None = None
bf16: bool
final_loss: float | None
loss_history: list[float] = Field(default_factory=list)
initial_trainable_sha256: str | None = None
final_trainable_sha256: str | None = None
initial_trainable_l2: float | None = None
final_trainable_l2: float | None = None
optimizer_update_count: int = 0
max_optimizer_update_l2: float | None = None
loss_delta: float | None = None
training_proof_path: str | None = None
training_proof_sha256: str | None = None
training_trace_path: str | None = None
training_trace_sha256: str | None = None
training_summary_path: str | None = None
training_summary_sha256: str | None = None
training_started_at: datetime | None = None
training_finished_at: datetime | None = None
training_wall_seconds: float | None = None
training_device: str | None = None
torch_version: str | None = None
cuda_version: str | None = None
adapter_weight_sha256: str | None = None
adapter_tensor_count: int = 0
adapter_lora_tensor_count: int = 0
adapter_total_elements: int = 0
adapter_nonzero_elements: int = 0
adapter_max_abs: float | None = None
adapter_weights_finite: bool = False
artifacts: dict[str, str]
sha256: str
cartridge_id: str | None = None
class AdapterStatus(BaseModel):
name: str
kind: TrainingAdapterKind
proof_version: int = 1
training_method: str = "BF16 LoRA"
precision: str = "bf16"
framework: str = "unsloth_patched_transformers_peft"
base_model: str
path: str
adapter_id: str
sample_count: int
max_steps: int
trainable_params: int
final_loss: float | None
sha256: str
weight_bytes: int
safetensor_keys: int
cartridge_id: str | None = None
cartridge_bound: bool
training_trace_path: str | None = None
training_trace_sha256: str | None = None
training_trace_steps: int = 0
training_proof_path: str | None = None
training_proof_sha256: str | None = None
optimizer: str | None = None
optimizer_family: str | None = None
gradient_checkpointing: bool = False
gradient_checkpointing_mode: str | None = None
autocast_dtype: str | None = None
unsloth_version: str | None = None
triton_version: str | None = None
xformers_version: str | None = None
unsloth_model_type: str | None = None
optimizer_update_count: int = 0
max_optimizer_update_l2: float | None = None
loss_delta: float | None = None
training_summary_path: str | None = None
training_wall_seconds: float | None = None
training_device: str | None = None
bf16: bool = False
torch_version: str | None = None
cuda_version: str | None = None
adapter_weight_sha256: str | None = None
adapter_tensor_count: int = 0
adapter_lora_tensor_count: int = 0
adapter_total_elements: int = 0
adapter_nonzero_elements: int = 0
adapter_max_abs: float | None = None
adapter_weights_finite: bool = False
class CartridgeAssetStatus(BaseModel):
name: str
path: str
sha256: str
size_bytes: int
item_count: int
dtype: str
status: Literal["ready", "missing"]
class CartridgeAssetReport(BaseModel):
cartridge_id: str
status: Literal["ready", "incomplete"]
created_at: datetime = Field(default_factory=utc_now)
assets: list[CartridgeAssetStatus]
class RuntimeLaunchProfile(BaseModel):
name: str
runtime: str
role: str
context_tokens: int
script: str
command: list[str]
environment: dict[str, str] = Field(default_factory=dict)
required_features: list[str] = Field(default_factory=list)
class RuntimeProfileValidation(BaseModel):
name: str
runtime: str
status: Literal["ready", "missing"]
script_exists: bool
package: str | None = None
package_version: str | None = None
executable: str | None = None
gpu_available: bool = False
probe_command: list[str] = Field(default_factory=list)
probe_status: Literal["passed", "failed", "skipped"] = "skipped"
probe_exit_code: int | None = None
probe_output: str | None = None
detail: str
class RuntimeProfileReport(BaseModel):
status: Literal["ready", "incomplete"]
created_at: datetime = Field(default_factory=utc_now)
profiles: list[RuntimeLaunchProfile]
validations: list[RuntimeProfileValidation] = Field(default_factory=list)
class ForgetReport(BaseModel): class ForgetReport(BaseModel):
"""What a forget actually removed, including the derived copies that have to go with it.""" """What a forget actually removed, including the derived copies that have to go with it."""
+2 -1
View File
@@ -6,7 +6,8 @@ from pathlib import Path
from .config import Settings, get_settings from .config import Settings, get_settings
from .db import Database from .db import Database
from .schemas import AdapterManifest, TrainingAdapterKind from .runtime_schemas import AdapterManifest
from .schemas import TrainingAdapterKind
from .training_common import TrainingSample from .training_common import TrainingSample
from .training_datasets import ( from .training_datasets import (
build_prd_dataset, build_prd_dataset,
+2 -1
View File
@@ -10,7 +10,8 @@ from typing import Any
from .config import Settings from .config import Settings
from .db import Database from .db import Database
from .schemas import AdapterManifest, TrainingAdapterKind from .runtime_schemas import AdapterManifest
from .schemas import TrainingAdapterKind
from .training_common import ( from .training_common import (
AUTOCAST_DTYPE, AUTOCAST_DTYPE,
GRADIENT_CHECKPOINTING_MODE, GRADIENT_CHECKPOINTING_MODE,
+2 -1
View File
@@ -9,7 +9,8 @@ from typing import Any
from .config import Settings from .config import Settings
from .db import Database from .db import Database
from .schemas import AdapterManifest, TrainingAdapterKind from .runtime_schemas import AdapterManifest
from .schemas import TrainingAdapterKind
from .training_common import ( from .training_common import (
AUTOCAST_DTYPE, AUTOCAST_DTYPE,
GRADIENT_CHECKPOINTING_MODE, GRADIENT_CHECKPOINTING_MODE,