Skip to content

Commit 01a3797

Browse files
committed
v100.38: factual training evidence, diverse fresh tasks and snapshot upgrades
1 parent 8d4811c commit 01a3797

20 files changed

Lines changed: 760 additions & 54 deletions

‎V100_AUDIT.md‎

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,84 @@
1-
# V100 mission release v100.24
1+
# V100 mission audit v100.38
2+
3+
This inventory separates source implementation from configuration, execution and
4+
demonstrated improvement. Passing controller tests does not certify GPU stability,
5+
profitable trading or a successful model promotion. It is not a declaration that
6+
every requested feature is complete or optimal.
7+
8+
## Current requirements inventory
9+
10+
| Requirement | Source mechanism | Limit or evidence still needed |
11+
|---|---|---|
12+
| Autonomous self-upgrade loop | `mission.py`, `continuous.py`, `supervisor.py` | Accepted updates and numerical health, not loop count alone |
13+
| Operator-owned long-term objective | `goals.py`, `chat_goals.py`, `planning.py` | Only a clear current operator request can change it; upgrades preserve old goals |
14+
| Short/mid-term plans from ordinary chat | `mission_chat.py`, `planning.py` | Versioned host receipts; a written plan does not mean its experiment ran |
15+
| Chat while research continues | Persistent queue, accepted master and explicit RTX delegate | One V100 slot shares inference; exclusive training prevents accepted-master chat temporarily |
16+
| Factual status in chat | `mission_evidence.py`, supplied automatically and as a research tool | Report paths, successful optimizer counters and accepted versions are distinct; missing counters mean unknown |
17+
| Long context, Flash Attention, KV | Native configuration and fit checks | Device execution and long-input accuracy; free VRAM alone does not establish speed |
18+
| Adaptive thinking/output | Validated `research_policy.py` budgets | Research only; fixed evaluations retain comparable settings |
19+
| Adaptive batching/speed | MTP/calibration/performance measurements | Master batch is a stopped-server benchmark proposal, not unrestricted live reconfiguration |
20+
| Parallel master/helper research | `paper_agents.py`, resident drones | One RTX request and bounded CPU jobs; concurrent master training/inference models on the single V100 are not enabled |
21+
| Independent A/B evolution/crossbreeding | `lineages.py`, `competition.py`, `crossbreeding.py` | Accepted separate ancestors require passing updates; initial branches share the base |
22+
| Architecture activation/rollback | `architecture_promotion.py`, foundation/custom trials | Fixed/public/fresh gates and actual inference probe; no hardware promotion inferred |
23+
| New independent training/audit tasks | `curriculum.py`, split ledgers, `fresh_audit.py` | Fresh calculations, sequences and typed extraction; finite synthetic coverage is not all-domain robustness |
24+
| Official AI benchmark comparisons | Pinned LiveBench tasks/scorers, same-question published references | A selected panel is not the full leaderboard; provider settings differ; scorer errors block certification |
25+
| Source/CPU/RTX drones | Bounded persistent job queue | Configured and running jobs differ; limits and game pauses can defer work |
26+
| Full tool evidence and compact context | SHA256 archives, paged reads and compact capability routing | Previews are incomplete; oversized original input can still fail explicitly |
27+
| Original memory and summaries | Archive, hierarchical summaries, CPU lexical/embedding retrieval | Retrieval/provenance quality; recursive model transcripts are not facts |
28+
| Read/copy own code, sandbox files | `self_code.py`, private namespace and guest | Host controller protected; arbitrary shell and modified copies operate in private guest |
29+
| Linux GUI/browser/tools/vision | Debian VM, public HTTP(S) broker, RTX vision | Guest/device verification; GUI is not required for native training or calculators |
30+
| Resource/error recovery and uptime | Bounded resources, deadlines, restart backoff, rollback | Best-effort recovery, not unconditional 24/7 uptime or stability |
31+
| Restrict helper only on Windows | Isolated runtime, smaller batches/context, pacing, LoL pause | No hard per-process GPU-utilization/power cap; blackscreen cause unproven |
32+
| Use Windows CPU/RAM/owned machines | Authenticated shared-folder workers, leases and tensor validation | Worker launcher must run there; mailbox configuration alone is insufficient |
33+
| Additional Colab compute | Bounded interactive notebook and safe result import | No autonomous managed-free worker farm or cookie/account quota evasion |
34+
| Free external model consultation | Documented services, zero-price catalog, guest browser, explicit key routing | Existing session/key and allowance needed; stop or hand off at authentication/payment/limit walls |
35+
| Research beyond fixed assets | Catalog discovery, model-selected spot and configurable feeds | Equities/sports require verified fees, rights, liquidity and settlement semantics |
36+
| Historical/event-timed backtests | Chronological splits, events, cash/buy-hold and cost stress | Historical availability/leakage; past sample performance does not prove future income |
37+
| Learn from profitable/losing outcomes | Audited paper accounting, causal DPO, shadow reward head | Resolved valid outcomes required; not unbiased profit-maximizing policy RL |
38+
| Net results and local alerts | Audited paper reports and labeled rejected/accepted proposals | No real orders or demonstrated income edge inferred from signals |
39+
40+
## v100.38 additions
41+
42+
Campaign setup automatically creates a separate public benchmark snapshot when
43+
the installed official-grading adapter changed. A baseline from a different
44+
snapshot is retained as historical evidence, while accepted weights must be
45+
evaluated on the new snapshot before comparison/promotion. Existing input hashes
46+
are checked first; corrupted benchmark inputs are not silently replaced.
47+
48+
`mission_evidence` reads bounded current-run health records and aggregate baseline
49+
summaries. Hidden audit answers never enter this tool. Attempted/global steps are
50+
not successful optimizer updates; old benchmark errors are labeled historical.
51+
Ordinary chat receives evidence even when it does not select the tool. The prompt
52+
rejects invented scorer causes, a GUI prerequisite for unrelated work, and claims
53+
that arithmetic practice is necessary for income.
54+
55+
`read_tool_result` reads complete archived outputs in UTF-8-safe pages, checking
56+
SHA256 on every page. Arbitrary file paths and symlinks are rejected. A preview is
57+
still explicitly incomplete evidence. Original task/resource limits remain enforced.
58+
59+
Fresh training and post-freeze audits add independently checked sequence operations
60+
and typed JSON extraction to the existing three calculation domains. Generation
61+
never reads benchmark answers. Audits stay single-use, drawn after candidate
62+
identities are frozen and reserved against training. Owned-worker examples are
63+
tested to fit without truncation. This adds coverage, not an income policy or
64+
universal no-forgetting proof.
65+
66+
Earlier device logs established native inference, a small CUDA backward probe,
67+
private code namespaces and RTX identity/loading. They did not establish complete
68+
GUI readiness, master architecture promotion, latest-release GPU training or
69+
repeatable net profit. Those claims require fresh device reports.
70+
71+
The official [NVIDIA MPS documentation](https://docs.nvidia.com/deploy/mps/when-to-use-mps.html)
72+
limits MPS support to Linux/QNX; it is not a Windows per-helper utilization cap.
73+
The [Colab FAQ](https://research.google.com/colaboratory/faq.html) distinguishes
74+
ordinary interactive work from distributed workers on free managed runtimes and
75+
disallows multiple accounts to bypass limits. Owned workers and interactive
76+
notebooks remain the implemented routes; no quota-evasion mechanism is added.
77+
78+
## Historical release notes and earlier scope
79+
80+
The sections below record earlier releases. Their test counts and resource defaults
81+
are historical, not evidence that every current feature is active.
282

383
v100.24 normalizes Transformers 5 chat-tokenization mappings and handles Gemma's
484
exact empty-thought inference suffix when encoding answer-only training records.

‎pyproject.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name = "rlms"
33
authors = [
44
{name = "Alex Zhang", email = "altzhang@mit.edu"},
55
]
6-
version = "0.1.3+v100.37"
6+
version = "0.1.3+v100.38"
77
description = "Recursive Language Models."
88
readme = "README.md"
99
license = "MIT"

‎rlm/v100/campaign.py‎

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def prepare(
106106
) -> Path:
107107
from rlm.v100.mission import status
108108
from rlm.v100.public_benchmarks import current
109-
from rlm.v100.public_benchmarks import prepare as prepare_benchmarks
109+
from rlm.v100.public_benchmarks import prepare_current as prepare_benchmarks
110110
from rlm.v100.self_code import prepare as prepare_code
111111

112112
if status(root)["running"]:
@@ -135,12 +135,28 @@ def stage(name, function):
135135
stage("helper-identity", lambda: configure_helper(root))
136136
stage("own-source-and-cpu-sandbox", lambda: prepare_code(root))
137137
if benchmarks:
138-
stage("official-public-benchmarks", lambda: current(root) or prepare_benchmarks(root, 20))
138+
stage("official-public-benchmarks", lambda: prepare_benchmarks(root, 20))
139139
if desktop:
140140
from rlm.v100.desktop import prepare as prepare_desktop
141141

142142
stage("private-desktop", lambda: prepare_desktop(root))
143143
resources = profile.setdefault("resources", {})
144+
if benchmarks and current(root) and resources.get("public_baseline"):
145+
from rlm.v100.protection import file_hash
146+
147+
baseline = Path(resources["public_baseline"])
148+
if file_hash(baseline) != resources["public_baseline_sha256"]:
149+
raise ValueError("Pinned public baseline evidence changed")
150+
old = json.loads(baseline.read_text())
151+
snapshot_hash = file_hash(current(root) / "manifest.json")
152+
if old.get("snapshot_sha256") != snapshot_hash:
153+
resources["public_baseline_requires_refresh"] = {
154+
"previous_report": str(baseline),
155+
"new_snapshot_sha256": snapshot_hash,
156+
"reason": "Evaluate accepted weights again; do not compare different public task snapshots",
157+
}
158+
resources.pop("public_baseline")
159+
resources.pop("public_baseline_sha256")
144160
resources.update(
145161
fresh_audit_required=True,
146162
paper_research_enabled=resources.get("paper_research_enabled", False)

‎rlm/v100/capabilities.py‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def audit(root: Path) -> dict:
2929
"last_cycle": evidence["last_learning_cycle"],
3030
"accepted_updates_this_run": evidence["accepted_weight_updates_this_run"],
3131
"training_metrics": evidence["training_metrics"],
32+
"mission_evidence": evidence["mission_evidence"],
3233
"paper_blockers": evidence["paper_blockers"],
3334
"audited_paper_outcomes": evidence["available_audited_paper_outcomes"],
3435
"research_policy": settings(root),
@@ -88,6 +89,9 @@ def audit(root: Path) -> dict:
8889
],
8990
"not_implemented": [
9091
"profit-maximizing policy RL",
92+
"hard per-helper GPU utilization or power cap on Windows WDDM",
93+
"accepted-master chat inference during exclusive master training on the single V100; RTX delegation is used instead",
94+
"autonomous distributed free managed Colab workers",
9195
"automatic certification of sports/equities provider fees, account rights and settlement semantics",
9296
"automatic account creation or bypassing browser authentication/quotas",
9397
],

‎rlm/v100/curriculum.py‎

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,47 @@
11
"""Fresh training tasks from trusted calculators, independently of sealed audits."""
22

3+
import json
34
import secrets
45
import sqlite3
56
from pathlib import Path
67

7-
from rlm.v100.insights import InsightQueue, verified_record
8+
from rlm.v100.insights import PROOF_DOMAINS, InsightQueue, verified_record
9+
10+
11+
def draw_task(domain: str, rng) -> dict:
12+
if domain not in PROOF_DOMAINS:
13+
raise ValueError("Unsupported independent proof domain")
14+
a, b, c = (rng.randint(2, 999) for _ in range(3))
15+
if domain == "sequence_transform":
16+
payload = {
17+
"operation": rng.choice(("sort", "reverse", "unique_sorted")),
18+
"values": [rng.randint(-999, 999) for _ in range(rng.randint(4, 8))],
19+
}
20+
expression = json.dumps(payload, separators=(",", ":"))
21+
elif domain == "structured_extraction":
22+
data = {"label": "item-" + str(a), "count": b, "code": c, "enabled": bool(rng.randrange(2))}
23+
expression = json.dumps(
24+
{"data": data, "field": rng.choice(tuple(data))}, separators=(",", ":")
25+
)
26+
else:
27+
expression = (
28+
f"({a}+{b})*{c}"
29+
if domain == "arithmetic"
30+
else f"{a}*x+{b}={c}"
31+
if domain == "linear_equation"
32+
else f"{a}.{b:03d}*{c}/10000"
33+
)
34+
return {"kind": domain, "expression": expression}
835

936

1037
def request(root: Path, branch: str, domain: str, count: int) -> dict:
11-
if (
12-
domain not in ("arithmetic", "linear_equation", "decimal_calculation")
13-
or type(count) is not int
14-
or not 1 <= count <= 32
15-
):
38+
if domain not in PROOF_DOMAINS or type(count) is not int or not 1 <= count <= 32:
1639
raise ValueError("Choose a supported proof domain and 1-32 new examples")
1740
queue = InsightQueue(root)
1841
rng, added = secrets.SystemRandom(), 0
1942
try:
2043
for _ in range(count * 10):
21-
a, b, c = (rng.randint(2, 999) for _ in range(3))
22-
expression = (
23-
f"({a}+{b})*{c}"
24-
if domain == "arithmetic"
25-
else f"{a}*x+{b}={c}"
26-
if domain == "linear_equation"
27-
else f"{a}.{b:03d}*{c}/10000"
28-
)
29-
task = {"kind": domain, "expression": expression}
44+
task = draw_task(domain, rng)
3045
row = verified_record(task)
3146
ledger = root / "research/state/splits.sqlite3"
3247
if ledger.exists():
@@ -44,5 +59,5 @@ def request(root: Path, branch: str, domain: str, count: int) -> dict:
4459
"new_verified_examples": added,
4560
"domain": domain,
4661
"weights_changed": False,
47-
"scope": "New calculator-verified training examples; no benchmark or sealed audit answers",
62+
"scope": "New independent proof-verified training examples; no benchmark or sealed audit answers. Extraction/sequence fixtures are synthetic, not income labels.",
4863
}

‎rlm/v100/distributed_compute.py‎

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,24 +45,14 @@ def mailbox_path(root: Path) -> Path:
4545

4646

4747
def fresh_records(domain: str, count: int = 64) -> list[dict]:
48-
from rlm.v100.insights import verified_record
48+
from rlm.v100.curriculum import draw_task
49+
from rlm.v100.insights import PROOF_DOMAINS, verified_record
4950

50-
if (
51-
domain not in ("arithmetic", "linear_equation", "decimal_calculation")
52-
or not 32 <= count <= 128
53-
):
51+
if domain not in PROOF_DOMAINS or not 32 <= count <= 128:
5452
raise ValueError("Compute examples require a trusted proof domain and 32-128 records")
5553
rng, rows = secrets.SystemRandom(), {}
5654
while len(rows) < count:
57-
a, b, c = (rng.randint(2, 999) for _ in range(3))
58-
expression = (
59-
f"({a}-{b})*{c}"
60-
if domain == "arithmetic"
61-
else f"{a}*x+{b}={c}"
62-
if domain == "linear_equation"
63-
else f"{a}.{b:03d}*{c}/10000"
64-
)
65-
row = verified_record({"kind": domain, "expression": expression})
55+
row = verified_record(draw_task(domain, rng))
6656
rows[row["group"]] = row
6757
return list(rows.values())
6858

‎rlm/v100/drones.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ def execute(root: Path, job: dict) -> dict:
151151
client.identity()
152152
client.activity_actor = "resident-" + job["kind"]
153153
client.research_tool_names = {
154+
"mission_evidence",
155+
"read_tool_result",
154156
"read_public_page",
155157
"parallel_source_research",
156158
"search_memory",

‎rlm/v100/fresh_audit.py‎

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
from pathlib import Path
66

77
from rlm.v100.common import atomic_json
8-
from rlm.v100.insights import verified_record
8+
from rlm.v100.curriculum import draw_task
9+
from rlm.v100.insights import PROOF_DOMAINS, verified_record
910
from rlm.v100.protection import compare_reports, file_hash, reserve_audit_sources
1011

1112

@@ -20,15 +21,7 @@ def create(root: Path, parent: dict, candidate: Path, folder: Path, count: int =
2021
folder.mkdir(parents=True, exist_ok=False)
2122
rng, rows, sources = secrets.SystemRandom(), [], []
2223
while len(rows) < count:
23-
a, b, c = (rng.randint(2, 999) for _ in range(3))
24-
kind = len(rows) % 3
25-
task = (
26-
{"kind": "arithmetic", "expression": f"({a}-{b})*{c}"}
27-
if kind == 0
28-
else {"kind": "linear_equation", "expression": f"{a}*x+{b}={c}"}
29-
if kind == 1
30-
else {"kind": "decimal_calculation", "expression": f"{a}.{b:03d}*{c}/10000"}
31-
)
24+
task = draw_task(PROOF_DOMAINS[len(rows) % len(PROOF_DOMAINS)], rng)
3225
record = verified_record(task)
3326
if record["group"] in sources:
3427
continue
@@ -57,7 +50,7 @@ def create(root: Path, parent: dict, candidate: Path, folder: Path, count: int =
5750
**identities,
5851
"suite_sha256": file_hash(suite),
5952
"count": count,
60-
"scope": "Fresh finite arithmetic/equation/decimal checks, not proof of any user goal or universal retention",
53+
"scope": "Fresh finite arithmetic/equation/decimal/sequence/extraction checks, not proof of any user goal or universal retention",
6154
},
6255
)
6356
return folder

0 commit comments

Comments
 (0)