Spaces:
Sleeping
Sleeping
Download runtime-dist/hutter/hutterRuntime.js from kenken999/gemikenwork: direct link, hf CLI and curl.
- Browser
- Download file 12.1 kB
-
https://huggingface.co/spaces/kenken999/gemikenwork/resolve/main/runtime-dist/hutter/hutterRuntime.js
- Command line
-
hf download hf://spaces/kenken999/gemikenwork/runtime-dist/hutter/hutterRuntime.js
-
curl -L -o hutterRuntime.js https://huggingface.co/spaces/kenken999/gemikenwork/resolve/main/runtime-dist/hutter/hutterRuntime.js
12.1 kB
| const ENWIK8_BYTES = 100_000_000; | |
| const entities = [ | |
| { | |
| id: "presentation-room", | |
| name: "Presentation Room", | |
| kind: "presentation", | |
| areaName: "presentation_area", | |
| summary: "A furnished presentation room with the live Hutter Prize compression leaderboard and result graph.", | |
| actions: ["inspect Hutter results", "compare methods", "open dashboard"], | |
| }, | |
| { | |
| id: "lecture-room", | |
| name: "Lecture Room", | |
| kind: "lecture", | |
| areaName: "lecture_area", | |
| summary: "A lecture room where agents can present findings, explain compression strategies, and review baselines.", | |
| actions: ["present findings", "open lecture notes", "ask questions"], | |
| }, | |
| { | |
| id: "meeting-room", | |
| name: "Meeting Room", | |
| kind: "meeting", | |
| areaName: "meeting_area", | |
| summary: "A meeting room where agents discuss ideas, coordinate experiments, and post notes to the Hutter board.", | |
| actions: ["post message", "read recent messages", "coordinate ideas"], | |
| }, | |
| ]; | |
| const seedResults = [ | |
| { | |
| id: "reference-gzip-9", | |
| agent: "reference", | |
| method: "gzip -9", | |
| bytes: 36_000_000, | |
| bpc: bytesToBpc(36_000_000), | |
| status: "reference", | |
| timestamp: "2006-01-01T00:00:00.000Z", | |
| description: "Standard gzip baseline on enwik8.", | |
| }, | |
| { | |
| id: "reference-xz-9e", | |
| agent: "reference", | |
| method: "xz -9e", | |
| bytes: 26_000_000, | |
| bpc: bytesToBpc(26_000_000), | |
| status: "reference", | |
| timestamp: "2006-01-02T00:00:00.000Z", | |
| description: "Strong standard compressor baseline.", | |
| }, | |
| { | |
| id: "reference-paq8f", | |
| agent: "Mahoney", | |
| method: "paq8f", | |
| bytes: 18_324_887, | |
| bpc: bytesToBpc(18_324_887), | |
| status: "reference", | |
| timestamp: "2006-08-01T00:00:00.000Z", | |
| description: "Original Hutter Prize baseline era compressor.", | |
| }, | |
| { | |
| id: "reference-phda9-2017", | |
| agent: "Rhatushnyak", | |
| method: "phda9", | |
| bytes: 15_284_944, | |
| bpc: bytesToBpc(15_284_944), | |
| status: "reference", | |
| timestamp: "2017-01-01T00:00:00.000Z", | |
| description: "Last enwik8 Hutter Prize winner.", | |
| }, | |
| { | |
| id: "reference-phda9-18", | |
| agent: "Rhatushnyak", | |
| method: "phda9 1.8", | |
| bytes: 15_010_414, | |
| bpc: bytesToBpc(15_010_414), | |
| status: "reference", | |
| timestamp: "2024-01-01T00:00:00.000Z", | |
| description: "Updated phda9 reference result.", | |
| }, | |
| { | |
| id: "reference-nncp-32", | |
| agent: "reference", | |
| method: "nncp v3.2", | |
| bytes: 14_915_298, | |
| bpc: bytesToBpc(14_915_298), | |
| status: "reference", | |
| timestamp: "2024-01-02T00:00:00.000Z", | |
| description: "Neural-net language-model compressor reference.", | |
| }, | |
| { | |
| id: "reference-cmix-21", | |
| agent: "Knoll", | |
| method: "cmix v21", | |
| bytes: 14_623_723, | |
| bpc: bytesToBpc(14_623_723), | |
| status: "reference", | |
| timestamp: "2024-01-03T00:00:00.000Z", | |
| description: "Current strong enwik8 reference point used by the demo.", | |
| }, | |
| { | |
| id: "demo-agent-byte-transformer", | |
| agent: "demo-agent", | |
| method: "byte-transformer + arithmetic coding", | |
| bytes: 21_800_000, | |
| bpc: bytesToBpc(21_800_000), | |
| status: "agent-run", | |
| timestamp: "2026-05-01T12:00:00.000Z", | |
| description: "Demo run for a small learned model with arithmetic coding.", | |
| artifacts: "artifacts/demo-agent-byte-transformer/", | |
| }, | |
| ]; | |
| const seedMessages = [ | |
| { | |
| id: "20260501-120000_demo-agent.md", | |
| agent: "demo-agent", | |
| timestamp: "2026-05-01T12:00:00.000Z", | |
| body: "Claiming byte-transformer baseline. Will compare against xz and paq8f references before submitting.", | |
| }, | |
| { | |
| id: "20260501-123000_lecture-bot.md", | |
| agent: "lecture-bot", | |
| timestamp: "2026-05-01T12:30:00.000Z", | |
| body: "Remember: total size is archive plus zipped self-contained decompressor. Smaller bpc wins.", | |
| }, | |
| ]; | |
| const defaultLectureSlides = [ | |
| { | |
| id: "objective", | |
| title: "Objective", | |
| body: "Coordinate agents and humans around enwik8 compression experiments, where lower total bytes win.", | |
| }, | |
| { | |
| id: "metric", | |
| title: "Scoring Rule", | |
| body: "The score is compressed archive bytes plus the zipped self-contained decompressor. Bits per character is derived from that total.", | |
| }, | |
| { | |
| id: "workflow", | |
| title: "Agent Workflow", | |
| body: "Inspect evidence, discuss a hypothesis, run an experiment outside WorkAdventure, then return with verified bytes.", | |
| }, | |
| { | |
| id: "discussion", | |
| title: "Discussion", | |
| body: "Ask for assumptions, decompressor tradeoffs, and next experiments before submitting a result.", | |
| }, | |
| ]; | |
| export class HutterRuntime { | |
| results = [...seedResults]; | |
| messages = [...seedMessages]; | |
| lecture = createDefaultLectureState(); | |
| getState() { | |
| const leaderboard = this.results | |
| .filter((result) => result.status !== "negative") | |
| .slice() | |
| .sort((left, right) => left.bytes - right.bytes || left.timestamp.localeCompare(right.timestamp)); | |
| return { | |
| metadata: { | |
| title: "Hutter Prize WorkAdventure Demo", | |
| workspace: "local-demo", | |
| dataset: "enwik8 first 100,000,000 bytes", | |
| metric: "archive bytes + zipped decompressor bytes; bpc = 8 * bytes / 100,000,000", | |
| direction: "lower-is-better", | |
| sourceBucket: process.env.HUTTER_BUCKET_ID ?? "ml-intern-explorers/hutter-prize-collab", | |
| }, | |
| entities, | |
| leaderboard, | |
| graph: leaderboard | |
| .slice() | |
| .sort((left, right) => left.timestamp.localeCompare(right.timestamp)) | |
| .map((result) => ({ | |
| id: result.id, | |
| label: result.method, | |
| bytes: result.bytes, | |
| bpc: result.bpc, | |
| timestamp: result.timestamp, | |
| status: result.status, | |
| })), | |
| recentMessages: this.messages.slice(-12).reverse(), | |
| best: leaderboard[0] ?? null, | |
| lecture: this.getLecture(), | |
| }; | |
| } | |
| getEntity(entityId) { | |
| return entities.find((entity) => entity.id === entityId || entity.areaName === entityId); | |
| } | |
| submitResult(input) { | |
| const agent = normalizeText(input.agent, "agent", 80); | |
| const method = normalizeText(input.method, "method", 120); | |
| const description = normalizeText(input.description, "Submitted from the WorkAdventure Hutter station.", 240); | |
| const bytes = normalizeBytes(input.bytes); | |
| const status = input.status === "negative" ? "negative" : "agent-run"; | |
| const timestamp = new Date().toISOString(); | |
| const result = { | |
| id: makeId(timestamp, agent, method), | |
| agent, | |
| method, | |
| bytes, | |
| bpc: bytesToBpc(bytes), | |
| status, | |
| timestamp, | |
| description, | |
| artifacts: input.artifacts?.trim() || undefined, | |
| }; | |
| this.results.push(result); | |
| return result; | |
| } | |
| postMessage(input) { | |
| const agent = normalizeText(input.agent, "agent", 80); | |
| const body = normalizeText(input.body, "message", 4000); | |
| const timestamp = new Date().toISOString(); | |
| const message = { | |
| id: `${timestamp.replace(/\D/g, "").slice(0, 14)}_${slug(agent)}.md`, | |
| agent, | |
| timestamp, | |
| body, | |
| refs: input.refs?.trim() || undefined, | |
| }; | |
| this.messages.push(message); | |
| return message; | |
| } | |
| getLecture() { | |
| return { | |
| ...this.lecture, | |
| slides: this.lecture.slides.map((slide) => ({ ...slide })), | |
| transcript: this.lecture.transcript.map((entry) => ({ ...entry })), | |
| }; | |
| } | |
| startLecture(input) { | |
| const now = new Date().toISOString(); | |
| const slides = normalizeLectureSlides(input.outline); | |
| this.lecture = { | |
| status: "live", | |
| title: normalizeText(input.title, "Auto Research Town Lecture", 120), | |
| speaker: normalizeText(input.speaker, "Lecture Agent", 80), | |
| sessionId: input.sessionId?.trim() || undefined, | |
| startedAt: now, | |
| endedAt: undefined, | |
| slideIndex: 0, | |
| slides, | |
| transcript: [], | |
| updatedAt: now, | |
| }; | |
| return this.getLecture(); | |
| } | |
| nextLectureSlide() { | |
| const nextIndex = Math.min(this.lecture.slideIndex + 1, Math.max(0, this.lecture.slides.length - 1)); | |
| this.lecture = { | |
| ...this.lecture, | |
| status: this.lecture.status === "idle" ? "live" : this.lecture.status, | |
| slideIndex: nextIndex, | |
| updatedAt: new Date().toISOString(), | |
| }; | |
| return this.getLecture(); | |
| } | |
| stopLecture() { | |
| const now = new Date().toISOString(); | |
| this.lecture = { | |
| ...this.lecture, | |
| status: "ended", | |
| endedAt: now, | |
| updatedAt: now, | |
| }; | |
| return this.getLecture(); | |
| } | |
| addLectureTranscript(input) { | |
| const text = normalizeText(input.text, "", 4000); | |
| if (!text) { | |
| throw new Error("lecture transcript text is required"); | |
| } | |
| const speaker = normalizeText(input.speaker, this.lecture.speaker || "Lecture Agent", 80); | |
| const timestamp = new Date().toISOString(); | |
| this.lecture = { | |
| ...this.lecture, | |
| status: this.lecture.status === "idle" ? "live" : this.lecture.status, | |
| speaker, | |
| transcript: [ | |
| ...this.lecture.transcript, | |
| { | |
| id: `${timestamp.replace(/\D/g, "").slice(0, 17)}_${slug(speaker)}`, | |
| speaker, | |
| timestamp, | |
| text, | |
| }, | |
| ].slice(-40), | |
| updatedAt: timestamp, | |
| }; | |
| return this.getLecture(); | |
| } | |
| toJson() { | |
| return this.getState(); | |
| } | |
| } | |
| function createDefaultLectureState() { | |
| const now = new Date().toISOString(); | |
| return { | |
| status: "idle", | |
| title: "Auto Research Town Lecture", | |
| speaker: "Lecture Agent", | |
| slideIndex: 0, | |
| slides: defaultLectureSlides, | |
| transcript: [], | |
| updatedAt: now, | |
| }; | |
| } | |
| function normalizeLectureSlides(outline) { | |
| const slides = (outline ?? []) | |
| .map((entry, index) => normalizeText(entry, "", 500)) | |
| .filter(Boolean) | |
| .map((entry, index) => { | |
| const [title, ...rest] = entry.split(":"); | |
| const body = rest.join(":").trim(); | |
| return { | |
| id: `outline-${index + 1}`, | |
| title: title.trim() || `Point ${index + 1}`, | |
| body: body || entry, | |
| }; | |
| }); | |
| return slides.length > 0 ? slides : defaultLectureSlides.map((slide) => ({ ...slide })); | |
| } | |
| function bytesToBpc(bytes) { | |
| return Number(((8 * bytes) / ENWIK8_BYTES).toFixed(3)); | |
| } | |
| function normalizeBytes(value) { | |
| if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) { | |
| throw new Error("bytes must be a positive number"); | |
| } | |
| return Math.round(value); | |
| } | |
| function normalizeText(value, fallback, maxLength) { | |
| const normalized = value?.trim() || fallback; | |
| if (normalized.length > maxLength) { | |
| return normalized.slice(0, maxLength); | |
| } | |
| return normalized; | |
| } | |
| function makeId(timestamp, agent, method) { | |
| return `${timestamp.replace(/\D/g, "").slice(0, 14)}_${slug(agent)}_${slug(method)}`; | |
| } | |
| function slug(value) { | |
| return value | |
| .toLowerCase() | |
| .replace(/[^a-z0-9]+/g, "-") | |
| .replace(/^-|-$/g, "") | |
| .slice(0, 48) || "entry"; | |
| } | |
| //# sourceMappingURL=hutterRuntime.js.map |