Repository Public
1export const en = {2 langName: "English",3 otherLang: "Français",4 skip: "Skip to content",5 nav: {6 infrastructure: "Infrastructure",7 live: "Live",8 nodes: "Nodes",9 architecture: "Architecture",10 research: "Research",11 benchmarks: "Benchmarks",12 gallery: "Gallery",13 access: "Access",14 menu: "Menu",15 close: "Close",16 home: "MacLustr — home",17 },18 meta: {19 siteName: "MacLustr Research Infrastructure",20 home: {21 title: "MacLustr — a personal Apple Silicon research cluster",22 description:23 "MacLustr is a personally owned Apple Silicon computing cluster used for research in local language models, machine learning and scientific computing. Documented machine by machine, with real photographs.",24 },25 live: {26 title: "Live telemetry",27 description: "Live utilisation of the MacLustr cluster, machine by machine: CPU, memory and GPU load read about every 20 seconds by the cluster's own monitoring agent, with one day of history.",28 },29 nodes: {30 title: "Node inventory",31 description: "Every machine of the MacLustr cluster, one record each: chip, cores, unified memory, storage, role and the date the record was verified.",32 },33 architecture: {34 title: "Technical architecture",35 description: "How the MacLustr cluster is wired and operated: unified memory, networking, storage, orchestration, model serving, and what is and is not distributed.",36 },37 research: {38 title: "Research log",39 description: "Research carried out on the MacLustr cluster: completed working papers, ongoing experiments and proposed protocols, with their references.",40 },41 benchmarks: {42 title: "Benchmarks and methodology",43 description: "The measurement protocol for MacLustr benchmarks and the fields every published observation must carry. Results are published only once measured.",44 },45 gallery: {46 title: "Photographs of the infrastructure",47 description: "Unretouched photographs of the MacLustr shelving units, machines, cabling and cooling.",48 },49 access: {50 title: "Research collaboration and access",51 description: "How to propose a research collaboration or request discretionary access to the MacLustr cluster. Requests are reviewed individually; access is not guaranteed.",52 },53 },54 common: {55 notDocumented: "Not yet documented",56 verified: "Verified",57 source: "Source",58 cores: "cores",59 gb: "GB",60 tb: "TB",61 viewAll: "View all",62 back: "Back to the inventory",63 lifecycle: {64 active: "Active",65 offline: "Offline",66 maintenance: "Maintenance",67 planned: "Planned",68 retired: "Retired",69 unverified: "Unverified",70 },71 roles: {72 gateway: "Gateway and orchestration",73 services: "Service hosting",74 "research-compute": "Research compute",75 data: "Research data",76 monitoring: "Monitoring agent",77 worker: "Compute worker",78 portable: "Laptop node",79 },80 families: { "Mac Studio": "Mac Studio", "Mac mini": "Mac mini", "MacBook Pro": "MacBook Pro", "MacBook Air": "MacBook Air", Other: "Other" },81 status: { completed: "Completed", ongoing: "Ongoing", proposed: "Proposed" },82 kinds: { "working-paper": "Working paper", experiment: "Experiment", protocol: "Protocol" },83 themes: {84 "local-llm": "Local language models",85 "apple-silicon": "Apple Silicon and MLX",86 "distributed-computing": "Distributed workloads",87 "scientific-computing": "Scientific computing",88 "machine-learning": "Machine learning",89 benchmarking: "Reproducible benchmarking",90 agentic: "Agentic research",91 },92 photoOf: "Photograph",93 takenOn: "Taken on",94 },95 home: {96 eyebrow: "Independent research infrastructure",97 title: "Research at the edge of Apple Silicon.",98 lede: "A personal Apple Silicon research cluster, built to explore what distributed computing can make possible.",99 support:100 "MacLustr is an evolving distributed computing infrastructure supporting experiments in local language models, machine learning, and computational research.",101 ctaExplore: "Explore the infrastructure",102 ctaAccess: "Research collaboration",103 heroCaption: "Shelving unit A, photographed on 7 November 2026",104 metrics: {105 heading: "Measured, not estimated",106 note: "Totals are computed from the node records below. Core and memory figures are hardware specifications read from each machine; they are not performance results.",107 nodes: "machines documented",108 nodesSub: (active: number) => `${active} answered the latest discovery`,109 memory: "of unified memory",110 memorySub: "sum over separate machines, not one shared pool",111 cpu: "CPU cores",112 gpu: "GPU cores",113 gpuPartial: "GPU core total withheld: one record is incomplete",114 network: "wired link per machine",115 networkSub: "negotiated rate read on each node",116 asOf: "Inventory verified on",117 },118 real: {119 eyebrow: "Built from real machines",120 title: "Three steel shelving units, one machine at a time.",121 body: [122 "I built MacLustr gradually, starting from a few Mac Studio computers and adding Mac mini and laptop nodes as research needs grew. It lives on ordinary industrial shelving, not in a data centre.",123 "Nothing on this site is rendered or staged. The photographs show the cluster as it runs: labelled machines, tied cable runs, floor fans pushing air up through the shelves, and laptops working with their lids open.",124 ],125 link: "See all photographs",126 },127 topology: {128 eyebrow: "Topology",129 title: "How the machines are connected",130 intro: "A simplified map. It groups machines by kind and shows roles, not addresses; the internal layout is deliberately left out.",131 hint: "Select a block to read what it does.",132 link: "Read the technical architecture",133 },134 families: {135 eyebrow: "Hardware",136 title: "Four kinds of machine",137 intro: "Each family leads to its individual node records.",138 memory: "unified memory",139 link: "Browse the inventory",140 units: (n: number) => (n === 1 ? "1 machine" : `${n} machines`),141 },142 themes: {143 eyebrow: "Research themes",144 title: "What the cluster is used for",145 items: [146 { key: "local-llm", state: "active", title: "Local language models", body: "Running and studying open-weight models on machines I control: architecture experiments on small models, and inference on larger ones within a single node's memory." },147 { key: "apple-silicon", state: "active", title: "Apple Silicon and MLX", body: "Measuring what unified memory and the Apple GPU can do for numerical work, with MLX for models and Metal for custom kernels." },148 { key: "distributed-computing", state: "active", title: "Distributed workloads", body: "Statistical methods designed for many machines and few communication rounds, tested on real hosts rather than simulated ones." },149 { key: "scientific-computing", state: "active", title: "Scientific computing", body: "Large batch computations in econometrics and data analysis, split into independent jobs and placed in proportion to each node's cores." },150 { key: "agentic", state: "active", title: "Agentic research", body: "Autonomous coding agents operate the cluster through a single gateway, and are themselves a subject of study." },151 { key: "benchmarking", state: "planned", title: "Reproducible benchmarking", body: "A fixed protocol for comparing chip generations on identical models and prompts. The protocol is published; the measurements are not yet." },152 ],153 active: "Active",154 planned: "Planned",155 },156 experiments: {157 eyebrow: "Selected work",158 title: "Experiments that ran here",159 intro: "Each entry states how the cluster was actually used, including when it was a single machine.",160 link: "Open the research log",161 benchLink: "Benchmark methodology",162 clusterUse: "Use of the cluster",163 },164 gallery: { eyebrow: "Behind the scenes", title: "Photographic journal", link: "Open the gallery" },165 access: {166 eyebrow: "Collaboration",167 title: "Interested in using MacLustr for research?",168 body: "MacLustr primarily supports my own research. I am open to discussing collaborations and, where capacity and project fit permit, access for external researchers. Requests are reviewed individually; access is not guaranteed.",169 link: "How to propose a project",170 },171 },172 topology: {173 blocks: {174 studio: { title: "Mac Studio nodes", body: "The largest machines. They carry the memory-heavy research runs, the research data, and most long-running services." },175 mini: { title: "Mac mini nodes", body: "Smaller machines used as compute workers for batch jobs, and as hosts for lighter services." },176 laptop: { title: "Laptop nodes", body: "MacBook Pro and MacBook Air machines run with the lid open on wired Ethernet. They join batch computations like any other worker." },177 switch: { title: "Wired Ethernet", body: "Every machine reports a 1 GbE negotiated link. This is the measured rate; no faster interconnect is claimed." },178 gateway: { title: "Gateway node", body: "One Mac Studio is the single entry point. It holds the private git service and the orchestrator that places and repairs workloads. It runs no research job itself." },179 storage: { title: "Network storage", body: "Two network-attached storage units hold backups and shared files. Working data stays on each node's internal SSD." },180 external: { title: "Public gateway (external)", body: "One hosted bare-metal server outside the cluster terminates TLS for public websites and relays requests through an encrypted tunnel. It is not a compute node." },181 internet: { title: "Internet", body: "Visitors reach published sites through the public gateway only. No node is directly exposed." },182 },183 legend: { lan: "Local wired network", tunnel: "Encrypted tunnel", boundary: "Boundary of the cluster" },184 count: (n: number) => `${n} machines`,185 alt: "Diagram: Mac Studio, Mac mini and laptop nodes connect to wired Ethernet together with a gateway node and network storage; an encrypted tunnel links the cluster to one external public gateway, which faces the internet.",186 },187 nodes: {188 eyebrow: "Inventory",189 title: "Every machine, one record each",190 intro:191 "Each record below describes one physical computer. Specifications were read from the machine itself; anything not yet recorded is shown as such rather than filled in.",192 stats: { machines: "machines", memory: "unified memory", cpu: "CPU cores", verified: "last verified" },193 filters: {194 heading: "Filter the inventory",195 search: "Search by name or chip",196 family: "Family",197 chip: "Chip",198 memory: "Minimum memory",199 role: "Role",200 lifecycle: "Status",201 rack: "Shelving unit",202 any: "All",203 rackNone: "Not yet documented",204 rackLabel: (r: string) => `Unit ${r}`,205 reset: "Reset filters",206 atLeast: (n: number) => `${n} GB or more`,207 },208 view: { label: "View", grid: "Grid", table: "Table" },209 sort: { label: "Sort by", number: "Node number", name: "Name", family: "Family", chip: "Chip", cpu: "CPU cores", gpu: "GPU cores", memory: "Memory", storage: "Storage", asc: "ascending", desc: "descending" },210 results: (n: number, total: number) => `${n} of ${total} machines`,211 empty: "No machine matches these filters.",212 cols: { node: "Node", family: "Family", chip: "Chip", cpu: "CPU", gpu: "GPU", memory: "Memory", storage: "Storage", role: "Role", status: "Status", verified: "Verified" },213 statusNote: "“Active” means the machine answered the discovery on the verification date. The dot beside each name is separate: it is the live reading from the monitoring agent.",214 timeline: { eyebrow: "History", title: "How the cluster changed", intro: "Dated events taken from my own operating records." },215 planned: {216 eyebrow: "Planned hardware",217 title: "Not counted in any total",218 empty: "No planned or ordered hardware is documented at the moment. When there is, it will be listed here, separately from the inventory.",219 },220 detail: {221 eyebrow: "Node record",222 specs: "Hardware",223 family: "Family",224 model: "Model identifier",225 chip: "Chip",226 cpu: "CPU cores",227 layout: "Core layout",228 gpu: "GPU cores",229 memory: "Unified memory",230 storage: "Internal storage",231 network: "Network link",232 function: "Research function",233 placement: "Placement",234 rack: "Shelving unit",235 shelf: "Shelf",236 added: "Added to the cluster",237 provenance: "Provenance",238 status: "Status on verification date",239 caveats: "Caveats",240 caveatItems: [241 "Core counts and memory are specifications, not performance measurements.",242 "Storage is the size of the internal volume as reported by the machine, in decimal gigabytes.",243 "The status in this record reflects one discovery run. The live readings above are separate and current.",244 ],245 layoutLegend: "S = super cores, P = performance cores, E = efficiency cores, as named by the operating system.",246 photo: "Photograph",247 photoNone: "This machine has not yet been matched to a position in the photographs.",248 photoNote: "The machine is on this shelving unit; the photograph shows the whole unit.",249 history: "Workload history",250 historyNone: "No public workload history is recorded for this node.",251 benchmarks: "Benchmarks",252 benchmarksNone: "No benchmark has been published for this node.",253 prev: "Previous node",254 next: "Next node",255 },256 },257 architecture: {258 eyebrow: "Architecture",259 title: "A cluster of separate computers",260 intro:261 "MacLustr is a set of independent Apple Silicon machines on one wired network, coordinated by software. This page describes what that does and does not make possible.",262 diagramTitle: "Logical layout",263 diagramNote: "The diagram is abstracted on purpose: it shows roles and boundaries, not addresses or physical wiring.",264 sections: [265 {266 id: "unified-memory",267 title: "Unified memory, one machine at a time",268 body: [269 "On Apple Silicon the CPU and GPU share one pool of memory. A model that fits in a node's unified memory can be loaded once and used by the GPU without copying it to a separate graphics card. This is why a 96 GB Mac Studio can hold models that would not fit on most consumer GPUs.",270 "That pool stops at the edge of the machine. Connecting computers with Ethernet does not combine their unified memory into a single shared GPU address space, whatever the link speed. The memory total on this site is a sum over separate machines: the largest model the cluster can load is bounded by its largest single node, not by the total.",271 ],272 },273 {274 id: "workloads",275 title: "Three kinds of workload",276 body: [277 "Independent: most work runs on one node from start to finish, such as training a small model, estimating a statistical model, or serving an application. The cluster then acts as many computers that can be used at once.",278 "Scheduled across nodes: a large batch is cut into independent jobs and distributed in proportion to each node's core count. Nodes do not talk to each other during the run; results are collected at the end. Most multi-node computation here is of this kind.",279 "Truly distributed: a few experiments have nodes exchange messages during the computation, for example distributed maximum-likelihood estimation with a small number of communication rounds over TCP. These are specific research protocols, not a general capability.",280 "No model has been split across machines here. I make no claim of model sharding or of distributed inference, and training in the usual sense has been limited to models that fit on one node.",281 ],282 },283 {284 id: "network",285 title: "Network",286 body: [287 "Every machine that reported a wired link negotiates 1 GbE (1000BASE-T). I state the measured rate rather than the rated capacity of any switch or adapter. A faster interconnect is not in service on the nodes, and none is claimed.",288 "At 1 GbE the network is the bottleneck for anything that moves tensors between machines: a single generated token is cheap to send, but activations or model weights are not. This is the main reason the cluster favours independent and scheduled jobs.",289 ],290 },291 {292 id: "storage",293 title: "Storage",294 body: [295 "Working data lives on each node's internal SSD, between 245 GB and 995 GB per machine as reported by the machines. Large datasets are kept on the node that computes on them, to avoid reading them over the network.",296 "Two network-attached storage units provide backups and shared files. They are not used as a parallel filesystem.",297 ],298 },299 {300 id: "orchestration",301 title: "Orchestration and control plane",302 body: [303 "One Mac Studio is the gateway. It hosts a private git service and an orchestrator that I wrote: it scans each node's free memory, load, disk and installed runtimes, scores the candidates, places a workload on the best one, checks its health and records where it runs.",304 "A repair loop runs every few minutes and restarts what is missing after an interruption. Machines are configured to log in and resume on their own after a power cut; this was tested involuntarily in September 2026, when sixteen machines restarted together and came back unattended.",305 "This describes how the system is built. It is not an uptime commitment: the cluster is a research installation and can be stopped, rewired or reassigned at any time.",306 ],307 },308 {309 id: "serving",310 title: "Model serving",311 body: [312 "Open-weight models are served with MLX on a single node, started for the duration of an experiment. An always-on, OpenAI-compatible endpoint that served several models existed earlier and was dismantled in June 2026; it is listed in the history, not as a current service.",313 "No public inference endpoint is offered, and none of the node addresses is reachable from the internet.",314 ],315 },316 {317 id: "external",318 title: "External boundary",319 body: [320 "One hosted bare-metal server sits outside the cluster. It terminates TLS for the public websites and relays requests to the right node through an encrypted tunnel. It does no research computation and is not counted in the inventory.",321 "The site you are reading is served this way: by one node of the cluster, behind that gateway.",322 ],323 },324 {325 id: "power-cooling",326 title: "Power and cooling",327 body: [328 "The machines sit on open steel shelving at room temperature, with floor fans moving air up through the shelves, as the photographs show. There is no dedicated cooling plant.",329 "Power draw, temperatures and energy per task have not been measured systematically yet. Until they are, this site publishes no power or efficiency figure.",330 ],331 },332 ],333 diagram: {334 nodes: "Compute nodes",335 nodesSub: "independent machines, each with its own unified memory",336 gateway: "Gateway node",337 gatewaySub: "git service · orchestrator · repair loop",338 monitor: "Monitoring agent",339 monitorSub: "read-only probes",340 storage: "Network storage",341 storageSub: "backups · shared files",342 switch: "Wired Ethernet · 1 GbE measured",343 serving: "Model serving",344 servingSub: "MLX, per experiment, on one node",345 external: "Public gateway",346 externalSub: "TLS · reverse proxy · outside the cluster",347 internet: "Internet",348 tunnel: "encrypted tunnel",349 boundary: "Cluster boundary",350 alt: "Layered diagram. Inside the cluster boundary: compute nodes, a gateway node with the orchestrator, a monitoring agent and network storage all attach to wired Ethernet measured at 1 GbE; model serving runs on a single node. Outside the boundary, a public gateway connects to the cluster through an encrypted tunnel and faces the internet.",351 },352 },353 research: {354 eyebrow: "Research log",355 title: "What has been done, what is under way, what is proposed",356 intro:357 "Entries are listed with their status. Completed work links to its manuscript; ongoing and proposed work makes no result claim. For each entry I state how the cluster was used.",358 filterAll: "All",359 clusterUse: "Use of the cluster",360 reference: "Reference",361 noReference: "No public manuscript yet.",362 read: "Read the paper",363 stack: {364 title: "Software stack",365 intro: "What the experiments above are built with.",366 items: [367 { k: "Models", v: "MLX and mlx-lm for language models on Apple GPUs; PyTorch for conventional training" },368 { k: "Numerics", v: "C++20 with Metal for custom GPU kernels; Python scientific stack for analysis" },369 { k: "Data", v: "Columnar files on local SSD, PostgreSQL on the node that needs it" },370 { k: "Operations", v: "A custom orchestrator, a process manager per node, git as the source of truth" },371 ],372 },373 ownership: {374 title: "Ownership and affiliation",375 body: "MacLustr is personally owned, funded and operated. It does not belong to, and is not funded or endorsed by, any university or other institution. Papers listed here carry their own author and series information.",376 },377 },378 benchmarks: {379 eyebrow: "Benchmarks",380 title: "Reproducible evidence",381 intro: "A benchmark is only useful if someone else can repeat it. This page sets out the protocol; results are added only once they have been measured under it.",382 forthcoming: {383 label: "Results forthcoming",384 title: "No benchmark observation has been published yet.",385 body: "I prefer an empty table to an approximate one. The charts for this page are built and tested against example data in development, and stay hidden until real measurements exist.",386 },387 resultsTitle: "Published observations",388 plannedTitle: "Planned measurements",389 plannedItems: [390 "Generation speed in tokens per second",391 "Time to first token",392 "Throughput under concurrent requests",393 "Peak memory and memory pressure",394 "Power draw and energy per task, once a meter is in place",395 "Network throughput between nodes",396 "Completion time of batch workloads",397 ],398 protocolTitle: "What every observation must carry",399 protocolIntro: "The data model rejects an observation that lacks any of these fields.",400 fields: [401 { k: "Hardware", v: "Node record identifier from the inventory, hence chip, memory and core layout" },402 { k: "Model", v: "Model identifier and exact version or revision" },403 { k: "Quantization", v: "Bit width and scheme" },404 { k: "Runtime", v: "Runtime and version, such as the MLX release" },405 { k: "Lengths", v: "Prompt and output length in tokens" },406 { k: "Concurrency", v: "Number of simultaneous requests" },407 { k: "Method", v: "How the value was measured, including warm-up and what else was running" },408 { k: "Date", v: "Day of measurement" },409 { k: "Repetitions", v: "Number of runs" },410 { k: "Uncertainty", v: "Dispersion across runs" },411 { k: "Raw data", v: "Reference to the raw records" },412 ],413 limitsTitle: "Limits of comparison",414 limits: [415 "Different quantizations of the same model are different models. They are never placed on one axis without saying so.",416 "A node that also hosts services is not a clean test bench. Measurements are taken with the machine otherwise idle, or the load is reported.",417 "Laptops and desktops throttle differently under sustained load, so short runs flatter laptops.",418 "Results across runtime versions are not comparable unless the version is the variable being studied.",419 "Specifications such as core counts are not results. The inventory lists the former; only this page will ever list the latter.",420 ],421 elsewhere: {422 title: "Measurements already in papers",423 body: "Some working papers in the research log contain their own measured results with their own methods, for example GPU against CPU break-even points for numerical kernels. They are cited there rather than restated here, because they were not produced under this protocol.",424 link: "Open the research log",425 },426 chartAlt: (metric: string) => `Bar chart of ${metric} by node. The same values are listed in the table that follows.`,427 table: { node: "Node", model: "Model", quant: "Quantization", runtime: "Runtime", value: "Value", runs: "Runs", date: "Date" },428 },429 gallery: {430 eyebrow: "Gallery",431 title: "The infrastructure as it is",432 intro:433 "Four photographs I took of the cluster. They are cropped for layout only: no retouching, no generated imagery. They show three shelving units on one day and are not a census; the inventory, not the pictures, is the reference for machine counts.",434 open: "Enlarge photograph",435 close: "Close",436 prev: "Previous photograph",437 next: "Next photograph",438 counter: (i: number, n: number) => `${i} of ${n}`,439 note: "Location data and other embedded metadata were removed from the published files.",440 },441 access: {442 eyebrow: "Access",443 title: "Interested in using MacLustr for research?",444 lede: "MacLustr primarily supports my own research. I am open to discussing collaborations and, where capacity and project fit permit, access for external researchers. Requests are reviewed individually; access is not guaranteed.",445 kindsTitle: "What a request can be about",446 kinds: [447 { t: "Reproducibility experiments", d: "Re-running a published result on different hardware." },448 { t: "Language-model inference", d: "Open-weight models that fit in a single node's memory." },449 { t: "Comparative hardware benchmarking", d: "The same workload across chip generations, from M1 Max to M6." },450 { t: "Distributed computing", d: "Methods that need many real hosts rather than a simulation." },451 { t: "Academic collaboration", d: "A joint project where the cluster is one ingredient among others." },452 ],453 termsTitle: "Before any access is granted",454 terms: [455 "Data governance, security, licensing and scheduling are discussed and agreed first.",456 "There are no accounts, no self-service provisioning and no payment. This is not a commercial service.",457 "Capacity is limited and shared with my own work; a project may be declined or postponed.",458 "Availability is never guaranteed: the cluster can be stopped or reconfigured at any time.",459 ],460 contactTitle: "Contact",461 contactBody: "The simplest way is to write to me directly.",462 form: {463 title: "Request form",464 modeMail: "This form does not send anything from this site. It prepares an email in your own mail application, addressed to me, which you can review and send yourself.",465 modeServer: "This form sends your request to me by email. Nothing is stored on this site.",466 name: "Name",467 affiliation: "Institutional affiliation",468 email: "Email",469 projectTitle: "Project title",470 researchQuestion: "Research question",471 researchQuestionHint: "What you want to find out, in a few sentences.",472 compute: "Compute requirements",473 computeHint: "Model, memory, runtime, expected duration.",474 dates: "Proposed dates",475 dataConstraints: "Privacy and data constraints",476 dataConstraintsHint: "Please do not include confidential or personal data in this request.",477 expectedOutputs: "Expected outputs",478 optional: "optional",479 website: "Leave this field empty",480 submitMail: "Prepare the email",481 submitServer: "Send the request",482 sending: "Sending…",483 errors: {484 summary: "Please correct the highlighted fields.",485 name: "Enter your name.",486 email: "Enter a valid email address.",487 projectTitle: "Enter a project title.",488 researchQuestion: "Describe the research question in at least 20 characters.",489 compute: "Describe the compute you need.",490 server: "The request could not be sent. Please write to me by email instead.",491 rate: "Too many requests. Please try again later or write to me by email.",492 },493 mailReady: "Your mail application should now show a prepared message. It has not been sent: review it and send it from there.",494 mailFallback: "If nothing opened, copy the text below into an email to",495 sent: "Your request was sent by email. I reply to every request, though not always quickly.",496 subject: (title: string) => `MacLustr research request — ${title}`,497 },498 privacy: {499 title: "Privacy",500 body: "This site sets no tracking cookie and runs no analytics. Requests reach me by email only and are kept no longer than the discussion requires.",501 },502 },503 live: {504 eyebrow: "Live telemetry",505 title: "The cluster, right now",506 intro: "Utilisation of every machine, read about every 20 seconds by the cluster's own monitoring agent. These are operating readings, not benchmark results.",507 badge: "Live",508 updated: (s: number) => (s < 3 ? "updated just now" : `updated ${s} s ago`),509 loading: "Reading the cluster…",510 pill: (online: number, total: number, cpu: string) => `${online}/${total} online · CPU ${cpu}`,511 unavailable: {512 short: "Telemetry unavailable",513 title: "Live telemetry is unavailable at the moment",514 body: "The monitoring agent did not answer. The inventory remains valid, and live figures return on their own once the agent responds again.",515 },516 kpi: {517 online: "Machines online",518 onlineSub: (off: number) => (off === 0 ? "every machine answered" : off === 1 ? "1 machine not answering" : `${off} machines not answering`),519 cpu: "CPU in use",520 cpuSub: (cores: number) => `weighted over ${cores} cores`,521 memory: "Memory in use",522 memorySub: (used: string, total: string) => `${used} of ${total} GB`,523 gpu: "GPU in use",524 gpuSub: "weighted by GPU cores",525 network: "Network, inbound",526 networkSub: (out: string) => `${out} outbound, all machines`,527 },528 chart: {529 title: "Cluster utilisation",530 unit: "Percent in use, weighted by each machine's capacity",531 window: "Time range",532 w1h: "1 hour",533 w6h: "6 hours",534 w24h: "24 hours",535 cpu: "CPU",536 memory: "Memory",537 gpu: "GPU",538 empty: "No history is recorded for this period.",539 loading: "Loading history…",540 table: "Show the data as a table",541 time: "Time",542 alt: (range: string) => `Line chart of CPU, memory and GPU utilisation in percent over the last ${range}. The same data is available as a table below the chart.`,543 },544 nodes: {545 title: "Machine by machine",546 sort: "Sort by",547 sortNumber: "Number",548 filter: "Show",549 all: "All",550 laptops: "Laptops",551 online: "Online",552 offline: "Offline",553 noReading: "No reading",554 offlineBody: "Not answering the monitoring agent.",555 load: "Load",556 uptime: "Uptime",557 thermal: "Thermal state",558 spark: "CPU over the last hour",559 battery: "Battery",560 },561 node: {562 title: "Live readings",563 history: "Utilisation history",564 netIn: "Network in",565 netOut: "Network out",566 offlineBody: "This machine is not answering the monitoring agent at the moment. Its hardware record below is unaffected.",567 },568 home: {569 eyebrow: "Live",570 title: "What the machines are doing now",571 intro: "Read from the cluster's monitoring agent and refreshed while this page is open.",572 link: "Open the live dashboard",573 wall: "CPU load, one cell per machine",574 wallNote: "Each cell is one machine, numbered as in the inventory. Select a cell to open its record.",575 },576 note: "Readings come from the cluster's monitoring agent and pass through this site's server, which publishes utilisation figures only: no address, process or user information leaves the cluster.",577 thermal: { nominal: "Nominal", fair: "Fair", serious: "Serious", critical: "Critical" },578 units: { kbs: "KB/s", mbs: "MB/s", d: "d", h: "h", min: "min" },579 },580 footer: {581 purpose: "MacLustr is a personally owned and operated research computing installation. This site documents it; it does not sell or guarantee access to it.",582 disclaimer:583 "Not a commercial service. Not owned, funded or endorsed by any institution. Apple, Mac, Mac Studio, Mac mini, MacBook Pro and MacBook Air are trademarks of Apple Inc.; this site is not affiliated with or sponsored by Apple.",584 contact: "Contact",585 updated: "Last updated",586 sections: "Sections",587 },588 notFound: { title: "Page not found", body: "This page does not exist.", link: "Back to the overview" },589};590