Download index.html from PYTHAI/bankml: direct link, hf CLI and curl.
- Browser
- Download file 80.8 kB
-
https://huggingface.co/spaces/PYTHAI/bankml/resolve/main/index.html
- Command line
-
hf download hf://spaces/PYTHAI/bankml/index.html
-
curl -L -o index.html https://huggingface.co/spaces/PYTHAI/bankml/resolve/main/index.html
80.8 kB
| <html lang="en" class="dark"> | |
| <head> | |
| <meta charset="utf-8" /> | |
| <!-- what this page may connect to: itself, Hugging Face (the free CPU Space, sign-in, providers, the model), the | |
| Gradio client's CDN, the Savante persona on GitHub, and the visitor's own bankML on this machine --> | |
| <meta http-equiv="Content-Security-Policy" content="connect-src 'self' https://huggingface.co https://router.huggingface.co https://*.huggingface.co https://*.hf.co https://*.hf.space wss://*.hf.space https://cdn.jsdelivr.net https://raw.githubusercontent.com https://deltaverse.pythai.net http://127.0.0.1:* http://localhost:*; object-src 'none'; base-uri 'self'" /> | |
| <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover, interactive-widget=resizes-content" /> | |
| <title>Why bankML — verified 1-bit and ternary AI on the CPU you already have</title> | |
| <meta name="description" content="1-bit and ternary language models on the CPU you already have: llama.cpp's exact answers, checked bit for bit, then faster. Zero-dependency Rust." /> | |
| <meta name="keywords" content="bankML, bankml, 1-bit LLM, ternary LLM, BitNet, Bonsai-8B, Q1_0, Q2_0, low-bit inference, CPU inference, Rust, llama.cpp, bit-exact, verified inference, receipts, Ollama API, OpenAI API, mindX, Savante, DeltaVerse, cryptoAGI" /> | |
| <meta name="author" content="Professor Codephreak · Gregory L. Magnusson (cryptoAGI)" /> | |
| <meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1" /> | |
| <meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large" /> | |
| <meta name="theme-color" content="#000000" /> | |
| <meta name="color-scheme" content="dark" /> | |
| <meta name="date" content="2026-10-07" /> | |
| <link rel="canonical" href="https://deltaverse.pythai.net/bankml" /> | |
| <link rel="stylesheet" href="uif-space.css" /> | |
| <link rel="alternate" type="text/plain" title="llms.txt" href="https://github.com/cryptoAGI/bankml/blob/main/llms.txt" /> | |
| <!-- the DeltaVerse $ --> | |
| <link rel="icon" href="https://deltaverse.pythai.net/favicon.ico" sizes="16x16 32x32 48x48" /> | |
| <link rel="apple-touch-icon" href="https://deltaverse.pythai.net/gfx/bankml-touch-icon.png" /> | |
| <link rel="image_src" href="https://deltaverse.pythai.net/gfx/og-bankml.jpg" /> | |
| <meta property="og:type" content="article" /> | |
| <meta property="og:site_name" content="PYTHAI on Hugging Face" /> | |
| <meta property="og:locale" content="en_US" /> | |
| <meta property="og:url" content="https://deltaverse.pythai.net/bankml" /> | |
| <meta property="og:title" content="Why bankML — verified 1-bit and ternary AI on the CPU you already have" /> | |
| <meta property="og:description" content="Exactly the same answers as llama.cpp, checked bit for bit, then faster: 9.4–10× per ternary matrix, about 8× llama-server end to end. One zero-dependency Rust binary, a receipt on every answer." /> | |
| <meta property="og:image" content="https://deltaverse.pythai.net/gfx/og-bankml.jpg" /> | |
| <meta property="og:image:secure_url" content="https://deltaverse.pythai.net/gfx/og-bankml.jpg" /> | |
| <meta property="og:image:type" content="image/jpeg" /> | |
| <meta property="og:image:width" content="1200" /> | |
| <meta property="og:image:height" content="630" /> | |
| <meta property="og:image:alt" content="bankML — the DeltaVerse $ over a triangulated lattice: verified 1-bit and ternary language models on the CPU you already have; bit-exact vs llama.cpp, 9.4–10× ternary kernel, 0 dependencies" /> | |
| <meta property="og:image" content="https://deltaverse.pythai.net/gfx/og-bankml-square.jpg" /> | |
| <meta property="og:image:secure_url" content="https://deltaverse.pythai.net/gfx/og-bankml-square.jpg" /> | |
| <meta property="og:image:type" content="image/jpeg" /> | |
| <meta property="og:image:width" content="1200" /> | |
| <meta property="og:image:height" content="1200" /> | |
| <meta property="og:image:alt" content="bankML — the DeltaVerse $ and the bankML wordmark" /> | |
| <meta property="article:published_time" content="2026-10-06T00:00:00Z" /> | |
| <meta property="article:author" content="https://github.com/Professor-Codephreak" /> | |
| <meta property="article:section" content="Technology" /> | |
| <meta property="article:tag" content="Rust" /> | |
| <meta property="article:tag" content="1-bit LLM" /> | |
| <meta property="article:tag" content="ternary LLM" /> | |
| <meta property="article:tag" content="verified inference" /> | |
| <meta name="twitter:card" content="summary_large_image" /> | |
| <meta name="twitter:site" content="@aiosml" /> | |
| <meta name="twitter:creator" content="@aiosml" /> | |
| <meta name="twitter:title" content="Why bankML — verified 1-bit and ternary AI on the CPU you already have" /> | |
| <meta name="twitter:description" content="Exactly llama.cpp's answers, checked bit for bit, then faster: 9.4–10× per ternary matrix. Zero-dependency Rust, a receipt on every answer." /> | |
| <meta name="twitter:image" content="https://deltaverse.pythai.net/gfx/og-bankml.jpg" /> | |
| <meta name="twitter:image:alt" content="bankML — the DeltaVerse $ over a triangulated lattice; bit-exact vs llama.cpp, 9.4–10× ternary kernel, 0 dependencies" /> | |
| <meta name="twitter:url" content="https://deltaverse.pythai.net/bankml" /> | |
| <script type="application/ld+json"> | |
| {"@context":"https://schema.org","@graph":[ | |
| {"@type":"TechArticle","@id":"https://deltaverse.pythai.net/bankml#article", | |
| "headline":"Why bankML — verified 1-bit and ternary AI on the CPU you already have", | |
| "description":"What bankML is good for, how Rust makes it fast and exact, and where it is going.", | |
| "datePublished":"2026-10-06","dateModified":"2026-10-06","inLanguage":"en", | |
| "url":"https://deltaverse.pythai.net/bankml", | |
| "image":[{"@type":"ImageObject","url":"https://deltaverse.pythai.net/gfx/og-bankml.jpg","width":1200,"height":630}, | |
| {"@type":"ImageObject","url":"https://deltaverse.pythai.net/gfx/og-bankml-square.jpg","width":1200,"height":1200}], | |
| "author":[{"@type":"Person","name":"Professor Codephreak","url":"https://github.com/Professor-Codephreak"}, | |
| {"@type":"Person","name":"Gregory L. Magnusson"}], | |
| "publisher":{"@type":"Organization","name":"DeltaVerse","url":"https://deltaverse.pythai.net/","logo":"https://deltaverse.pythai.net/gfx/bankml-touch-icon.png"}, | |
| "about":{"@id":"https://deltaverse.pythai.net/bankml#software"}, | |
| "isPartOf":{"@id":"https://deltaverse.pythai.net/#website"}, | |
| "breadcrumb":{"@id":"https://deltaverse.pythai.net/bankml#crumb"}}, | |
| {"@type":"SoftwareSourceCode","@id":"https://deltaverse.pythai.net/bankml#software", | |
| "name":"bankML","alternateName":"bankml", | |
| "description":"A zero-dependency Rust runtime for 1-bit (Q1_0) and ternary (Q2_0_g64) GGUF language models, bit-exact against llama.cpp b11192, with a verifying server that puts a receipt on every answer.", | |
| "codeRepository":"https://github.com/cryptoAGI/bankml","programmingLanguage":"Rust", | |
| "license":"https://github.com/cryptoAGI/bankml/blob/main/LICENSING.md","runtimePlatform":"Linux x86-64 (AVX2)", | |
| "author":{"@type":"Organization","name":"cryptoAGI","url":"https://github.com/cryptoAGI"}, | |
| "sameAs":["https://github.com/cryptoAGI/bankml","https://cryptoagi.github.io/bankml/","https://x.com/aiosml"]}, | |
| {"@type":"BreadcrumbList","@id":"https://deltaverse.pythai.net/bankml#crumb", | |
| "itemListElement":[{"@type":"ListItem","position":1,"name":"DeltaVerse","item":"https://deltaverse.pythai.net/"}, | |
| {"@type":"ListItem","position":2,"name":"bankML","item":"https://deltaverse.pythai.net/bankml"}]} | |
| ]} | |
| </script> | |
| <style> | |
| :root{ | |
| --bg0:#000000; --bg1:#080a16; | |
| --txt:#ffffff; --muted:rgba(255,255,255,.78); --quiet:rgba(255,255,255,.46); | |
| --cy:34,211,238; --vi:157,78,221; --am:255,176,84; | |
| --panel:rgba(8,10,22,.80); --rule:rgba(34,211,238,.18); | |
| /* the palette (operator, 2026-10-10): defined once, used everywhere, the same in both of the field's themes */ | |
| --candle-green:#0ECB81; --candle-ink:#04140d; /* Send, and positive events: ✓ receipt, connected, verified, delivered */ | |
| --btc-orange:#F7931A; /* accents and working: the active answerer, downloading, reading, streaming, focus */ | |
| --stop-red:#F6465D; /* Stop and failure: ✗ receipt, errors, no delivery (the chart's red candle) */ | |
| --term-green:#33FF66; --term-bg:#000; /* T mode */ | |
| --field-bg:#0d1117; --field-text:#f1f5f9; --field-placeholder:#9aa6b8; /* placeholder 7:1 on the field */ | |
| --glass:rgba(13,17,23,.72); --glass-solid:#0d1117; /* the windows the field spawns */ | |
| --gutter:16px; --tap:44px; | |
| } | |
| html{background:radial-gradient(circle at center, var(--bg1) 0%, var(--bg0) 70%) fixed; background-color:#000;} | |
| body{margin:0; color:var(--txt); font:17px/1.62 system-ui,-apple-system,"Segoe UI",Roboto,Ubuntu,sans-serif; background:transparent;} | |
| /* the substrate: the DELTAVERSE ground, one layer above it, both behind the page and never taking the pointer */ | |
| #mark,#layer{position:fixed; inset:0; width:100%; height:100%; display:block; pointer-events:none;} | |
| #mark{z-index:0; opacity:.9;} | |
| #layer{z-index:1; opacity:0; transition:opacity 1.2s ease;} | |
| main,footer{position:relative; z-index:2;} | |
| main{max-width:780px; margin:0 auto; padding:56px 16px 24px;} | |
| .hero{text-align:center; padding:2.5vh 0 2vh;} | |
| .hero .delta{font-size:15px; letter-spacing:.5em; color:rgba(var(--cy),.75); text-transform:uppercase;} | |
| .hero .delta a{color:inherit;border:none;text-decoration:none} .hero .delta a:hover,.hero .delta a:focus-visible{color:#fff;text-decoration:underline;text-underline-offset:4px} | |
| .hero h1{font-size:clamp(40px,9vw,76px); letter-spacing:.14em; margin:.2em 0 .1em; font-weight:300; | |
| text-shadow:0 0 28px rgba(var(--cy),.35);} | |
| .hero p{color:var(--muted); margin:.4em auto 0; max-width:34em;} | |
| .date{color:var(--quiet); font-size:14px; margin-top:1.2em ;} | |
| section{background:var(--panel); backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px); | |
| border:1px solid var(--rule); border-radius:14px; padding:22px 26px; margin:0 0 22px;} | |
| h2{font-size:22px; font-weight:500; letter-spacing:.04em; margin:0 0 .6em; color:#fff;} | |
| h3{font-size:17px; font-weight:600; margin:1.3em 0 .3em; color:rgb(var(--cy));} | |
| h3:first-of-type{margin-top:.2em;} | |
| p,li{color:var(--muted);} | |
| strong{color:#fff; font-weight:600;} | |
| a{color:rgb(var(--cy)); text-decoration:none; border-bottom:1px solid rgba(var(--cy),.3);} | |
| a:hover{color:#fff; border-bottom-color:rgba(var(--vi),.9);} | |
| code{font:14px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; background:rgba(255,255,255,.07); padding:1px 5px; border-radius:4px; color:#e6f7fb;} | |
| .more{font-size:14.5px; color:var(--quiet); margin-top:.3em;} | |
| .more::before{content:"→ "; color:rgba(var(--cy),.7);} | |
| ul{padding-left:1.2em;} li{margin:.35em 0;} | |
| .stats{display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:12px; margin:16px 0 4px;} | |
| .stat{border:1px solid var(--rule); border-radius:10px; padding:12px 14px; background:rgba(0,0,0,.25);} | |
| .stat b{display:block; font-size:24px; font-weight:500; color:#fff;} | |
| .stat span{font-size:13.5px; color:var(--quiet);} | |
| .table{width:100%; border-collapse:collapse; font-size:15.5px;} | |
| .table td{padding:9px 8px; border-top:1px solid var(--rule); vertical-align:top; color:var(--muted);} | |
| .table td:first-child{color:#fff; font-weight:500; width:34%;} | |
| .road li strong{color:rgb(var(--am));} | |
| .hope p{font-size:18px; color:#eef;} | |
| .release{border:1px solid rgba(var(--am),.45); border-radius:14px; padding:6px 22px 14px; background:rgba(var(--am),.06); | |
| box-shadow:0 1px 0 rgba(255,255,255,.05) inset, 0 14px 34px -14px rgba(0,0,0,.7);} | |
| .release li, .thesis li{margin:0 0 10px;} | |
| .release li strong, .thesis li strong{color:rgb(var(--am));} | |
| .thesis ol{padding-left:1.3em;} | |
| .spaces{display:inline-flex;flex-wrap:wrap;justify-content:center;gap:2px;max-width:100%;border:1px solid var(--rule);border-radius:22px;padding:3px;font-size:13px;margin-bottom:18px;background:rgba(0,0,0,.35)} | |
| .spaces a,.spaces span{padding:3px 14px;border-radius:999px;border:none;color:var(--muted)} | |
| .spaces a:hover{color:#fff} | |
| .spaces .on{background:#fff;color:#000;font-weight:600} | |
| a.unpublished{color:var(--muted);border-bottom:1px dotted rgba(255,255,255,.3);cursor:default} a.unpublished:hover{color:var(--muted)} | |
| .pub-tag{font-size:.78em;color:var(--quiet);margin-left:.35em} .spaces .pub-tag{align-self:center;margin:0 6px 0 -8px} | |
| .spaces a.unpublished{border-bottom:0} | |
| #ask .mantra{font-size:19px;color:#fff;margin:.2em 0 .6em} | |
| #ask .speakers{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin:6px 0 4px;font-size:14px} | |
| #ask .speakers .lbl{color:var(--quiet)} | |
| #ask .speakers label{cursor:pointer;color:var(--muted)} | |
| #ask .speakers input:checked + *{color:inherit} | |
| #ask .browserow{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:4px 0 10px} | |
| #ask .linkish{background:none;border:0;padding:0 2px;color:var(--muted);text-decoration:underline;cursor:pointer;font:13.5px system-ui,sans-serif} | |
| #ask [hidden]{display:none} | |
| #ask .row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:8px 0} | |
| #ask input[type=text],#ask #endpoint,#ask #model{flex:1 1 220px;min-width:0;min-height:var(--tap);background:var(--field-bg);color:var(--field-text);-webkit-text-fill-color:var(--field-text);caret-color:var(--btc-orange);border:1px solid rgba(148,163,184,.35);border-radius:8px;padding:8px 10px;font:16px ui-monospace,Menlo,monospace} | |
| #ask button{min-height:var(--tap);background:rgba(var(--cy),.16);color:#fff;border:1px solid rgba(var(--cy),.5);border-radius:8px;padding:8px 14px;font:600 14px system-ui,sans-serif;cursor:pointer} | |
| #ask button:hover{background:rgba(var(--cy),.3)} | |
| #ask button:disabled{opacity:.5;cursor:wait} | |
| #ask .status{font-size:13.5px;color:var(--muted);flex:1 1 100%} | |
| #ask .status.is-working{color:var(--btc-orange)} #ask .status.is-ok{color:var(--candle-green)} #ask .status.is-bad{color:var(--stop-red)} #ask .status.is-warn{color:rgb(var(--am))} | |
| #ask details{flex:1 1 100%;font-size:14.5px;color:var(--muted)} | |
| #ask details code{word-break:break-all} | |
| /* the page behind the input field: this computer's controls and diagnostics (space-dashboard.js) */ | |
| .dash{margin:18px 0 120px} | |
| .dash h2{margin:0 0 4px} | |
| .dash .dlede{font-size:14px;color:var(--quiet);margin:0 0 12px} | |
| .dgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px} | |
| .dcard{background:rgba(0,0,0,.32);border:1px solid var(--rule);border-radius:12px;padding:12px 14px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)} | |
| .dcard h3{margin:0 0 8px;font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)} | |
| .dkv{display:grid;grid-template-columns:max-content 1fr;gap:3px 12px;margin:0 0 8px;font-size:13.5px} | |
| .dkv dt{color:var(--quiet)} .dkv dd{margin:0;font-family:ui-monospace,Menlo,monospace;font-size:12.5px;overflow-wrap:anywhere} | |
| .dkv dd.ok{color:var(--candle-green)} .dkv dd.warn{color:rgb(var(--am))} | |
| .dctl{display:grid;grid-template-columns:7.5em 1fr auto;align-items:center;gap:4px 8px;margin:0 0 10px;font-size:13.5px} | |
| .dctl > span{color:var(--quiet)} .dctl small{grid-column:2 / -1;color:var(--quiet);font-size:12px} | |
| .dctl select,.dctl input[type=range]{width:100%} | |
| .dctl output{font-family:ui-monospace,Menlo,monospace;min-width:3ch;text-align:right} | |
| .drow{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center} | |
| .dcard button{font:inherit;font-size:13px;padding:5px 10px;border-radius:8px;border:1px solid var(--rule);background:rgba(255,255,255,.06);color:inherit;cursor:pointer} | |
| .dcard button.primary{background:rgba(var(--vi),.35);border-color:rgba(var(--vi),.7)} | |
| .dcard button:disabled{opacity:.45;cursor:default} | |
| .dspark{display:flex;align-items:center;gap:10px;margin:0 0 8px} | |
| .dspark small{color:var(--quiet);font-size:12px} | |
| .spark{width:220px;height:40px;background:rgba(0,0,0,.25);border-radius:6px} | |
| .spark polyline{fill:none;stroke:var(--candle-green);stroke-width:1.6;stroke-linejoin:round} | |
| .dadvice{margin:0;padding-left:18px;font-size:13.5px;line-height:1.45} | |
| .dadvice li{margin:0 0 6px} .dadvice li.warn::marker{color:rgb(var(--am))} .dadvice li.ok::marker{color:var(--candle-green)} | |
| .dnote{font-size:13px;margin:4px 0 0} .dnote.warn{color:rgb(var(--am))} | |
| .dnow{font:12.5px ui-monospace,Menlo,monospace;color:var(--btc-orange);margin:0 0 10px;min-height:1.2em} | |
| /* what is happening now: fixed at the top, above everything but the field's own windows */ | |
| .activity{position:fixed;top:10px;left:50%;transform:translateX(-50%);z-index:1500;max-width:min(860px,calc(100vw - 24px)); | |
| display:grid;grid-template-columns:auto 1fr;gap:4px 10px;align-items:center;padding:8px 14px;border-radius:12px; | |
| background:rgba(8,14,24,.92);border:1px solid color-mix(in srgb,var(--btc-orange) 45%,transparent);box-shadow:0 8px 28px rgba(0,0,0,.45); | |
| font:13px/1.4 ui-monospace,Menlo,monospace;color:#fdeedd;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)} | |
| .activity.is-ok{border-color:color-mix(in srgb,var(--candle-green) 50%,transparent);color:#d8fbe9} | |
| .activity.is-bad{border-color:color-mix(in srgb,var(--stop-red) 60%,transparent);color:#ffe1e5} | |
| .activity.is-ok .act-dot{background:var(--candle-green);animation:none} .activity.is-bad .act-dot{background:var(--stop-red);animation:none} | |
| .activity[hidden]{display:none} | |
| .act-dot{width:9px;height:9px;border-radius:50%;background:var(--btc-orange);box-shadow:0 0 0 0 rgba(247,147,26,.6);animation:actpulse 1.4s infinite} | |
| @keyframes actpulse{70%{box-shadow:0 0 0 8px rgba(247,147,26,0)}100%{box-shadow:0 0 0 0 rgba(247,147,26,0)}} | |
| @media (prefers-reduced-motion: reduce){.act-dot{animation:none}} | |
| .act-bar{grid-column:1 / -1;height:4px;border-radius:2px;background:rgba(255,255,255,.1);overflow:hidden} | |
| .act-bar[hidden]{display:none} | |
| .act-bar i{display:block;height:100%;width:0;background:var(--btc-orange);transition:width .4s ease} | |
| #browseprogress{width:160px;max-width:100%;height:8px;vertical-align:middle;accent-color:var(--btc-orange)} | |
| .highlights{margin:10px 0 6px;padding:14px 16px;border-radius:14px;border:1px solid var(--rule); | |
| background:linear-gradient(160deg,rgba(var(--cy),.10),rgba(var(--vi),.08));box-shadow:0 0 0 1px rgba(255,255,255,.04) inset,0 18px 40px -22px rgba(var(--cy),.45); | |
| transition:opacity .35s ease,transform .35s ease,max-height .35s ease;max-height:900px;overflow:hidden} | |
| .highlights ul{margin:0;padding-left:1.1em;display:grid;gap:6px 26px} | |
| @media (min-width:760px){.highlights ul{grid-template-columns:1fr 1fr}} | |
| .highlights li{color:var(--muted);font-size:14.5px;line-height:1.5} | |
| .highlights b{color:#fff} | |
| .highlights .hl-hint{margin:10px 0 0;font-size:13px;color:var(--quiet)} | |
| .highlights.leaving{opacity:0;transform:translateY(-6px);max-height:0;padding-top:0;padding-bottom:0;margin:0;border-width:0} | |
| /* the tabs under the conversation */ | |
| .tabs{position:sticky;top:0;z-index:5;display:flex;flex-wrap:wrap;gap:4px;margin:26px 0 0;padding:6px;border-radius:14px 14px 0 0; | |
| background:rgba(8,10,22,.88);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--rule);border-bottom:0} | |
| .tabs [role=tab]{flex:1 1 auto;background:transparent;border:1px solid transparent;color:var(--muted);border-radius:10px;padding:7px 12px; | |
| font:600 14px system-ui,sans-serif;cursor:pointer;letter-spacing:.02em;position:relative} | |
| .tabs [role=tab]:hover{color:#fff;background:rgba(255,255,255,.05)} | |
| .tabs [role=tab][aria-selected=true]{color:#fff;background:rgba(var(--cy),.14);border-color:rgba(var(--cy),.35);box-shadow:0 0 18px -6px rgba(var(--cy),.6)} | |
| .tabs [role=tab]:focus-visible{outline:2px solid rgba(var(--cy),.8);outline-offset:2px} | |
| .tabs [role=tab].has-news::after{content:"";position:absolute;top:6px;right:7px;width:7px;height:7px;border-radius:50%;background:rgb(var(--am))} | |
| .panel > section:first-child{margin-top:0;border-top-left-radius:0;border-top-right-radius:0} | |
| .panel[hidden]{display:none} | |
| /* FAQ */ | |
| .faq details{border-top:1px solid var(--rule);padding:10px 2px} | |
| .faq details:first-of-type{border-top:0} | |
| .faq summary{cursor:pointer;color:#fff;font-weight:600;list-style:none;display:flex;gap:10px;align-items:baseline} | |
| .faq summary::-webkit-details-marker{display:none} | |
| .faq summary::before{content:"+";color:rgba(var(--cy),.9);font:700 16px ui-monospace,monospace;transition:transform .2s ease} | |
| .faq details[open] summary::before{transform:rotate(45deg)} | |
| .faq details p{margin:.5em 0 0 1.4em} | |
| .faq .faq-group{margin:18px 0 4px;font-size:13px;letter-spacing:.1em;text-transform:uppercase;color:var(--quiet)} | |
| .faq .faq-body{margin:.4em 0 0 1.4em} .faq .faq-body p,.faq .faq-body li{font-size:15.5px} .faq .faq-body h4{margin:.8em 0 .2em;color:#fff} | |
| .faq .faq-body .more{font-size:14px} | |
| /* Logs */ | |
| .logs .quiet-note{font-size:14px;color:var(--quiet)} | |
| .logtools{display:flex;gap:8px;margin:6px 0 10px} | |
| .logtools button{background:rgba(255,255,255,.06);color:#fff;border:1px solid var(--rule);border-radius:8px;padding:4px 12px;cursor:pointer;font:13px system-ui} | |
| .pagelog{list-style:none;margin:0;padding:10px 12px;border-radius:10px;background:rgba(0,0,0,.55);border:1px solid rgba(var(--cy),.25); | |
| font:12.5px/1.6 ui-monospace,Menlo,monospace;max-height:420px;overflow:auto} | |
| .pagelog li{display:grid;grid-template-columns:auto 4.5em 1fr;gap:10px;color:#a7f3d0} | |
| .pagelog li time{color:var(--quiet)} | |
| .pagelog li .k{color:rgba(var(--cy),.9)} | |
| .pagelog li.is-error,.pagelog li.is-error .k{color:var(--stop-red)} .pagelog li.is-warn .k{color:rgb(var(--am))} .pagelog li.is-ok .k{color:var(--candle-green)} | |
| .pagelog li.empty{display:block;color:var(--quiet)} | |
| @media (prefers-reduced-motion:reduce){.highlights{transition:none}.faq summary::before{transition:none}} | |
| /* Ask: the stable Space's note, the chooser and its carrier note, the environment, the session, examples */ | |
| #ask .edition{font-size:14px;color:var(--muted);margin:0 0 12px;padding:8px 12px;border-left:3px solid var(--btc-orange);background:rgba(247,147,26,.06);border-radius:0 8px 8px 0} | |
| #ask .edition a{color:var(--btc-orange);border-bottom-color:rgba(247,147,26,.4)} | |
| /* who answers: a real tablist over the conversation; the active tab in bitcoin orange; on phones it scrolls sideways */ | |
| #ask .anstabs{display:flex;gap:6px;margin:10px 0 0;overflow-x:auto;overflow-y:hidden;max-width:100%;min-width:0; | |
| scrollbar-width:thin;scrollbar-color:rgba(247,147,26,.5) transparent;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;scroll-snap-type:x proximity;padding-bottom:4px} | |
| #ask .anstabs::-webkit-scrollbar{height:6px} #ask .anstabs::-webkit-scrollbar-thumb{background:rgba(247,147,26,.45);border-radius:3px} | |
| #ask .anstabs [role=tab]{flex:1 1 0;min-width:0;scroll-snap-align:start;display:flex;flex-direction:column;align-items:flex-start;gap:1px;min-height:var(--tap); | |
| text-align:left;padding:8px 12px;border:1px solid var(--rule);border-radius:12px;background:rgba(0,0,0,.3);color:var(--muted);font:inherit;cursor:pointer;line-height:1.25} | |
| #ask .anstabs [role=tab] b{color:#fff;font-weight:600;font-size:15px;white-space:nowrap} | |
| #ask .anstabs [role=tab] small{font-size:12.5px;color:var(--quiet)} | |
| #ask .anstabs [role=tab]:hover{background:rgba(247,147,26,.08)} | |
| #ask .anstabs [role=tab][aria-selected=true]{border-color:var(--btc-orange);background:rgba(247,147,26,.14);box-shadow:0 0 0 1px var(--btc-orange) inset} | |
| #ask .anstabs [role=tab][aria-selected=true] b{color:var(--btc-orange)} #ask .anstabs [role=tab][aria-selected=true] small{color:#fbd9ae} | |
| #ask .anstabs [role=tab]:focus-visible{outline:2px solid var(--btc-orange);outline-offset:2px} | |
| #ask .anspanel{min-width:0} | |
| #ask .spacemodel{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;font-size:14px;color:var(--muted)} | |
| #ask .spacemodel select,#ask .cscard select{min-height:var(--tap);background:var(--field-bg);color:var(--field-text);border:1px solid rgba(148,163,184,.35);border-radius:8px;padding:6px 8px;font-size:16px;max-width:100%} | |
| /* the browseML consent card and the not-found card: glass, in the palette */ | |
| #ask .cscard{flex:1 1 100%;min-width:0;background:rgba(0,0,0,.34);border:1px solid var(--rule);border-radius:12px;padding:12px 14px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)} | |
| #ask .cscard h3{margin:0 0 6px;font-size:15px;color:#fff} | |
| #ask .cs-what,#ask .nf-lede{font-size:14px;color:var(--muted);margin:0 0 8px} | |
| #ask .cs-line{font-size:13.5px;margin:6px 0;color:var(--muted);overflow-wrap:anywhere} | |
| #ask .cs-line.is-working{color:var(--btc-orange)} #ask .cs-line.is-ok{color:var(--candle-green)} #ask .cs-line.is-bad{color:var(--stop-red)} | |
| #ask .cs-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:8px 0} | |
| #ask .cs-stop{border-color:var(--stop-red);background:color-mix(in srgb,var(--stop-red) 16%,transparent)} | |
| #ask .cs-bar{width:100%;height:8px;accent-color:var(--btc-orange)} | |
| #ask .cs-kv{margin:6px 0} #ask .cs-verdicts{margin:6px 0} | |
| #ask .cs-controls{margin:8px 0 0} #ask .cs-controls summary{cursor:pointer;min-height:var(--tap);display:flex;align-items:center} | |
| #ask .cs-controls input[type=range]{width:100%;accent-color:var(--btc-orange)} | |
| #ask .cs-note,#ask .nf-note{font-size:12.5px;color:var(--quiet);margin:6px 0 0} | |
| #ask .nfcard{border-color:color-mix(in srgb,var(--stop-red) 45%,var(--rule))} | |
| #ask .nf-ways{margin:0;padding-left:1.3em;font-size:14px;color:var(--muted)} #ask .nf-ways > li{margin:0 0 10px} #ask .nf-ways b{color:#fff} | |
| #ask .nf-ways button{margin-top:6px} | |
| #ask .nf-code{display:flex;gap:8px;align-items:flex-start;margin:6px 0} | |
| #ask .nf-code pre{flex:1;min-width:0;margin:0;overflow-x:auto;padding:8px 10px;border-radius:8px;background:rgba(0,0,0,.55);color:#a7f3d0;font:12.5px/1.5 ui-monospace,Menlo,monospace} | |
| #ask .credspanel{flex:1 1 100%;min-width:0} | |
| #ask .credspanel button,#ask .credspanel a{min-height:var(--tap)} | |
| #ask .carrier{font-size:14px;color:var(--muted);margin:8px 0 10px} | |
| #ask .load{background:rgba(247,147,26,.16);border-color:var(--btc-orange)} | |
| #ask .load:hover{background:rgba(247,147,26,.3)} | |
| #ask .env,#ask .counter{display:flex;flex-wrap:wrap;gap:4px 16px;font-size:13px;color:var(--quiet);margin:6px 0;overflow-wrap:anywhere} | |
| #ask .env i,#ask .counter i{font-style:normal;color:var(--quiet)} #ask .env b,#ask .counter b{color:var(--field-text);font-weight:500} | |
| #ask .env small{font-size:12px} | |
| #ask .counter .live{color:var(--btc-orange)} #ask .counter .muted{color:var(--quiet)} | |
| #ask .chips{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 4px} | |
| #ask .chips button{background:rgba(255,255,255,.05);border-color:rgba(148,163,184,.35);font-weight:500;border-radius:999px;padding:8px 14px} | |
| #ask .chips button:hover{border-color:var(--btc-orange)} | |
| #ask .askhint{font-size:13.5px;color:var(--quiet);margin:6px 0 8px} | |
| :focus-visible{outline:2px solid var(--btc-orange);outline-offset:2px} | |
| /* the input field (uif-space.css): its text was the bundle's light-theme ink (#020817) on a dark field — the page | |
| now sets .dark on <html> and gives the field its own colours from the palette */ | |
| .ultimate-input-field.glass-effect{background:color-mix(in srgb,var(--field-bg) 94%,transparent);border-color:rgba(148,163,184,.32)} | |
| .ultimate-textarea.text-mode{color:var(--field-text);-webkit-text-fill-color:var(--field-text);caret-color:var(--btc-orange);font-size:16px} | |
| .ultimate-textarea.text-mode::placeholder{color:var(--field-placeholder);-webkit-text-fill-color:var(--field-placeholder);opacity:1} | |
| .ultimate-textarea:focus{box-shadow:0 0 0 2px var(--btc-orange)} | |
| .ultimate-input-field.terminal-glass{background:var(--term-bg);border-color:color-mix(in srgb,var(--term-green) 40%,transparent)} | |
| .ultimate-input-field.is-terminal{--uif-term:var(--term-green);--uif-text:var(--term-green)} | |
| .ultimate-textarea.terminal-mode{color:var(--term-green);-webkit-text-fill-color:var(--term-green);caret-color:var(--term-green);font-size:16px} | |
| .ultimate-textarea.terminal-mode:focus{box-shadow:0 0 0 2px var(--term-green)} | |
| .uif-termlog{background:var(--term-bg);color:var(--term-green);border-color:color-mix(in srgb,var(--term-green) 40%,transparent)} | |
| .uif-termline.is-dim{color:color-mix(in srgb,var(--term-green) 62%,transparent)} .uif-termline.is-err{color:var(--stop-red)} | |
| .ultimate-textarea.terminal-mode::placeholder{color:rgba(51,255,102,.62);-webkit-text-fill-color:rgba(51,255,102,.62);opacity:1} | |
| .uif-send{min-width:var(--tap);min-height:var(--tap);background:var(--candle-green);border-color:var(--candle-green);color:var(--candle-ink);font-weight:700;font-size:18px} | |
| .uif-send{position:relative;z-index:3;flex:none} | |
| .ultimate-controls-left,.uif-actionbar{min-width:0;overflow-x:clip;overflow-y:visible} /* the actions clip before they reach Send */ | |
| .uif-send:hover{filter:brightness(1.08)} .uif-send:disabled{opacity:.78;filter:saturate(.8)} /* still candle green while the field is empty */ | |
| /* room for two lines of question above the 44px controls (min-height wins over the field's own height) */ | |
| .ultimate-input-field.is-chat:not(.is-maximized){min-height:150px} | |
| .uif-status.is-err{color:var(--stop-red)} | |
| .bk-uif-pill.ok{color:var(--candle-green);border-color:color-mix(in srgb,var(--candle-green) 55%,transparent)} | |
| .bk-uif-pill.bad{color:var(--stop-red);border-color:color-mix(in srgb,var(--stop-red) 60%,transparent)} | |
| .uif-input,.uif-output-reply-input,.uif-output-rename{background:var(--field-bg);color:var(--field-text);-webkit-text-fill-color:var(--field-text);caret-color:var(--btc-orange)} | |
| .uif-input::placeholder,.uif-output-reply-input::placeholder{color:var(--field-placeholder);-webkit-text-fill-color:var(--field-placeholder)} | |
| /* the windows the field spawns: glass, the page showing through, the text readable over it */ | |
| .uif-output{background:var(--glass);backdrop-filter:blur(10px) saturate(1.2);-webkit-backdrop-filter:blur(10px) saturate(1.2);color:#eef2f7} | |
| .uif-output .uif-msg-assistant{background:rgba(148,163,184,.14);color:#f1f5f9} | |
| .uif-output .uif-msg-system{color:#c3ccd8} | |
| /* a failure or "No delivery" in red, a delivery line marked green, an answer taken back hidden (bankml-chat.js markWindows) */ | |
| .uif-output .uif-msg-system.bk-fail,.uif-output .uif-msg-assistant.bk-fail{color:#ffd7dd;background:color-mix(in srgb,var(--stop-red) 16%,transparent);border-left:3px solid var(--stop-red);border-radius:6px;padding:.375rem .6rem;align-self:stretch;max-width:none} | |
| .uif-output .uif-msg-system.bk-fail::first-line{color:var(--stop-red)} | |
| .uif-output .uif-msg-system.bk-delivered{color:#d4f7e7;border-left:3px solid var(--candle-green);padding-left:.5rem;align-self:stretch} | |
| .uif-output .bk-withdrawn,.uif-output .uif-msg-assistant:empty{display:none} | |
| @supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.uif-output{background:var(--glass-solid)}} | |
| /* tablet and up: the page a little wider where there is room */ | |
| @media (min-width:1200px){ main{max-width:880px;} } | |
| @media (pointer:coarse){ .spaces a,.spaces span{min-height:var(--tap);display:inline-flex;align-items:center} .dcard button,.logtools button,.tabs [role=tab]{min-height:var(--tap)} .faq summary{min-height:var(--tap);align-items:center} } | |
| /* phone: 16px gutters, the field docked to the bottom above the keyboard and the safe area, windows inside the screen */ | |
| @media (max-width:640px){ | |
| #ask .anstabs [role=tab]{flex:0 0 auto;min-width:44px} #ask .anstabs [role=tab] small{white-space:nowrap} | |
| main{padding:44px var(--gutter) calc(190px + env(safe-area-inset-bottom));} | |
| section{padding:16px;} | |
| .hero h1{letter-spacing:.08em;} .hero .delta{letter-spacing:.3em;} | |
| .ultimate-input-field:not(.is-maximized){left:0;right:0;top:auto;bottom:0;width:auto; | |
| border-radius:14px 14px 0 0;padding:8px max(8px,env(safe-area-inset-right)) calc(8px + env(safe-area-inset-bottom)) max(8px,env(safe-area-inset-left))} | |
| .ultimate-input-field:not(.is-maximized)>.uif-corner{display:none} | |
| .dv-em{translate:0 calc(-156px - env(safe-area-inset-bottom))} /* the ⟁ layers menu, above the docked field */ | |
| .uif-output:not(.is-maximized){left:8px;width:calc(100vw - 16px);max-width:calc(100vw - 16px)} | |
| .activity{top:max(8px,env(safe-area-inset-top))} | |
| .dash{margin-bottom:24px} .dctl{grid-template-columns:6.5em 1fr auto} .spark{width:100%;max-width:220px} | |
| } | |
| /* tablet and desktop: the field floats over the bottom of the screen — the chooser, its note and Load sit above it on | |
| the first view, and the page ends clear of it */ | |
| @media (min-width:641px){ | |
| main{padding-top:28px} .hero{padding:1vh 0 1.2vh} .hero h1{font-size:clamp(40px,7vw,64px);margin:.1em 0 0} .spaces{margin-bottom:10px} | |
| #ask .mantra{margin:.1em 0 .3em} footer{margin-bottom:170px} | |
| } | |
| @media (max-width:560px){ body{font-size:16px;} section{padding:18px 16px;} .table td:first-child{width:auto;} .table td{display:block; border-top:none; padding:4px 0;} .table tr{display:block; border-top:1px solid var(--rule); padding:8px 0;} } | |
| </style> | |
| </head> | |
| <body> | |
| <canvas id="mark" aria-hidden="true"></canvas> | |
| <canvas id="layer" aria-hidden="true"></canvas> | |
| <main> | |
| <header class="hero"> | |
| <div class="spaces" role="group" aria-label="the Spaces"><a href="https://huggingface.co/spaces/PYTHAI/savante" rel="noopener">Savante</a><span class="on" aria-current="page">bankML · stable</span><a data-space="PYTHAI/bankML-UIF" class="unpublished" title="not yet public on Hugging Face">bankML UIF · experimental</a><small class="pub-tag">not yet public</small><a data-space="PYTHAI/browseML" class="unpublished" title="not yet public on Hugging Face">browseML</a><small class="pub-tag">not yet public</small></div> | |
| <div class="delta">Δ <a href="https://deltaverse.pythai.net" rel="noopener">deltaverse</a> · <a href="https://github.com/cryptoAGI" rel="noopener">cryptoAGI</a></div> | |
| <h1>bankML</h1> | |
| <p>Verified 1-bit and ternary language models on the CPU you already have.</p> | |
| </header> | |
| <section id="ask"> | |
| <h2>Ask bankML</h2> | |
| <p class="mantra" id="mantra"></p> | |
| <div class="speakers" role="radiogroup" aria-label="who speaks"> | |
| <span class="lbl">speaks as</span> | |
| <label><input type="radio" name="speaker" value="bankml" checked> bankML</label> | |
| <label><input type="radio" name="speaker" value="savante"> Savante</label> | |
| </div> | |
| <div id="anstabs" class="anstabs" role="tablist" aria-label="who answers"> | |
| <button type="button" role="tab" id="anst-space" data-mode="space" aria-controls="anspanel" aria-selected="true" tabindex="0"><b>bankML · free CPU</b><small>Bonsai on HF's free CPU · no receipt · free</small></button> | |
| <button type="button" role="tab" id="anst-browse" data-mode="browse" aria-controls="anspanel" aria-selected="false" tabindex="-1"><b>browseML</b><small>bankML in this browser · receipt · free</small></button> | |
| <button type="button" role="tab" id="anst-local" data-mode="local" aria-controls="anspanel" aria-selected="false" tabindex="-1"><b>your own bankML</b><small>bankml serve · receipt · free</small></button> | |
| <button type="button" role="tab" id="anst-hf" data-mode="hf" aria-controls="anspanel" aria-selected="false" tabindex="-1"><b>Hugging Face</b><small>not bankML · no receipt · your quota</small></button> | |
| </div> | |
| <div id="anspanel" class="anspanel" role="tabpanel" aria-labelledby="anst-space"> | |
| <p class="carrier" id="modenote"></p> | |
| <div id="spacerow" class="row"> | |
| <label class="spacemodel">model on the free CPU | |
| <select id="spacemodel" aria-label="model on the free CPU"> | |
| <option value="ternary">Ternary-Bonsai-8B (llama.cpp)</option> | |
| <option value="bonsai">Bonsai-8B, 1-bit (llama.cpp)</option> | |
| </select></label> | |
| <span class="status is-warn">Public: what you type is processed on the public Space Gregory-L/mindXhfgradio. Not bankML's engine, no receipt.</span> | |
| </div> | |
| <div id="browserow" class="row browserow" hidden> | |
| <div id="browsecard" class="cscard" aria-live="polite"> | |
| <h3>browseML — bankML in this browser</h3> | |
| <div id="browsestate"></div> | |
| <p id="browsestatus" class="status" aria-live="polite"></p> | |
| <progress id="browseprogress" max="1" value="0" hidden aria-label="loading"></progress> | |
| <details class="cs-controls"><summary>CPU and RAM for browseML (kept in this browser)</summary><div id="browsectl"></div></details> | |
| <p class="cs-note">The disk and cache controls (what browseML keeps, persistent storage, remove after this session, clear) are in “This computer” below.</p> | |
| </div> | |
| </div> | |
| <div id="localrow" class="row" hidden> | |
| <input id="endpoint" aria-label="your bankml serve address" spellcheck="false"> | |
| <button id="connect" type="button">connect</button> | |
| <span id="localstatus" class="status"></span> | |
| <div id="notfound" class="cscard nfcard" role="region" aria-label="your own bankML did not answer" hidden></div> | |
| <details> | |
| <summary>Start your own bankML for this page (Linux x86-64 with AVX2, or Windows in WSL2; free)</summary> | |
| <ol> | |
| <li><code>git clone https://github.com/cryptoAGI/bankml && cd bankml && ./install.sh --space</code> — builds bankML, | |
| imports and verifies Bonsai-8B, and starts it so this page (<span id="origin"></span>) may talk to it. Already installed? | |
| <code>git pull && ./install.sh build start --space</code></li> | |
| <li>Press <b>connect</b>. Your browser may ask to let this page reach devices on your local network: that is the | |
| request for your own bankML on 127.0.0.1, and nothing else.</li> | |
| <li><code>./install.sh start --no-space</code> takes the permission back.</li> | |
| </ol> | |
| </details> | |
| </div> | |
| <div id="hfrow" class="row" hidden> | |
| <input id="model" aria-label="provider model (owner/name)" spellcheck="false"> | |
| <div id="credspanel" class="credspanel" aria-label="your credentials"></div> | |
| <p class="status">Free Hugging Face accounts have no included inference credit since 2026-10-07: provider answers need PRO or purchased credits. No account? <a href="https://huggingface.co/join" rel="noopener" target="_blank">Create one on huggingface.co</a>.</p> | |
| </div> | |
| </div> | |
| <div class="env" aria-label="environment"> | |
| <span><i>model runs on</i> <b id="env_server">—</b></span> | |
| <span><i>this device</i> <b id="env_client">reading…</b></span> | |
| <small>read in this browser, never sent</small> | |
| </div> | |
| <div class="counter" aria-live="polite"> | |
| <span><i>session</i> <b id="c_in">0</b> in · <b id="c_out">0</b> out · <b id="c_turns">0</b> turns</span> | |
| <span id="c_live" class="live"></span> | |
| <span id="c_last" class="muted"></span> | |
| </div> | |
| <div class="chips" aria-label="example questions"> | |
| <button type="button" data-example="What makes your answers exact, in three sentences?">What makes it exact?</button> | |
| <button type="button" data-example="What is a receipt, and how does this page check it?">What is a receipt?</button> | |
| <button type="button" data-example="How fast are you on this computer, and what did you measure?">How fast here?</button> | |
| <button type="button" data-example="Why 1-bit and ternary models?">Why 1-bit?</button> | |
| </div> | |
| <p class="askhint">Ask in the field at the bottom of the screen: <b>Enter</b> sends, <b>Shift+Enter</b> starts a new line. | |
| Each answer opens in its own window, with its delivery line under it.</p> | |
| <p class="edition">This is <b>bankML's stable Space</b>. The experimental edition, still expanding, is | |
| <a data-space="PYTHAI/bankML-UIF" class="unpublished" title="not yet public on Hugging Face">bankML UIF</a><small class="pub-tag">not yet public</small>; bankML alone in the | |
| browser is <a data-space="PYTHAI/browseML" class="unpublished" title="not yet public on Hugging Face">PYTHAI/browseML</a><small class="pub-tag">not yet public</small>.</p> | |
| <div id="highlights" class="highlights" aria-label="bankML at a glance"> | |
| <ul> | |
| <li><b>Verified before it speaks</b> — the model's sha256 checked against its pin, a receipt on every answer.</li> | |
| <li><b>The same bits as llama.cpp</b> — token for token, proven in every release, then faster.</li> | |
| <li><b>On the CPU you have</b> — one Rust crate, no dependencies; v0.4.2 is the latest. <a href="#faq-release">What's new</a></li> | |
| </ul> | |
| <p class="hl-hint">Double-click a window's header to fill the screen; ❏ in the field closes, tiles or cascades them all. | |
| Everything else is in the FAQ below.</p> | |
| </div> | |
| <section id="dash" class="dash" aria-label="This computer: controls and diagnostics"></section> | |
| </section> | |
| <nav class="tabs" role="tablist" aria-label="more about bankML"><button type="button" role="tab" id="tab-faq" aria-controls="panel-faq" aria-selected="true" tabindex="0">FAQ</button><button type="button" role="tab" id="tab-logs" aria-controls="panel-logs" aria-selected="false" tabindex="-1">Logs</button></nav> | |
| <div class="panel" role="tabpanel" id="panel-faq" aria-labelledby="tab-faq"> | |
| <section class="faq"> | |
| <h2>Questions people ask</h2> | |
| <details open><summary>What is bankML?</summary><p>A runtime for 1-bit and ternary language models, written in Rust, | |
| that runs them on an ordinary CPU and answers exactly as llama.cpp does — checked bit for bit — before any | |
| speed counts. It serves the APIs your tools already use (Ollama's and OpenAI's) and puts a receipt on every answer.</p></details> | |
| <details><summary>What does “verified” mean here?</summary><p>Before it listens, bankML hashes the whole model | |
| file and compares it with a pin (a FORK.json naming its sha256 and where it came from); a guard refuses files | |
| that would answer in nonsense. Every answer then carries a receipt: the sha256 of the model, the request and | |
| the answer. This page recomputes the answer's hash and shows ✓ when it matches.</p></details> | |
| <details><summary>How do I know it is exact?</summary><p>Each release runs a gate: oracles that record llama.cpp | |
| b11192's own answers — tensors, dot products, whole conversations, sampled tokens, JSON grammars, logprobs — | |
| and require bankML to match every one. The record of every run is published beside the release. | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/oracles.md">The oracles</a>.</p></details> | |
| <details><summary>Which answers on this page are bankML's?</summary><p>Those from <b>browseML</b> (bankML in this | |
| browser) and <b>your own bankML</b>, each with a receipt this page checks. <b>bankML · free CPU</b>, the tab that | |
| answers at once, is Bonsai on Hugging Face's free CPU — llama.cpp, not bankML's engine, no receipt — on the | |
| public Space Gregory-L/mindXhfgradio, asked as PYTHAI/savante asks it; every answer says so, and what you type | |
| there is processed on that public Space. When that Space runs bankML itself and returns a receipt, this page | |
| checks it. From <b>Hugging Face</b> a provider-hosted model speaks with the chosen persona, without bankML's | |
| arithmetic or a receipt, under your own account; free accounts have no included inference credit since | |
| 2026-10-07, so that needs PRO or purchased credits.</p> | |
| <p>Under every answer the page writes its delivery line — the prompt and completion tokens the engine counted, | |
| the time to the first token, the speed, where it ran and the receipt's verdict. When no completion tokens were | |
| counted it says “No delivery from the model” instead, and that turn is not added to the conversation.</p></details> | |
| <details id="faq-browseml"><summary>What is browseML — bankML in this browser?</summary><p>bankML's own engine, | |
| the same Rust code that runs <code>bankml serve</code>, compiled to WebAssembly and run by this page on your CPU. | |
| Press <b>Download and verify</b> on its card and it downloads Bonsai-1.7B (1-bit, 248 MB) once from its Hugging Face repository at a pinned | |
| revision, keeps it in this browser's cache, and verifies it exactly as the native engine does — the GGUF guard, | |
| then the sha256 of the whole file against its FORK.json — before it answers. Every answer carries the same receipt | |
| <code>bankml serve</code> gives. Nothing is installed and nothing you ask leaves your computer.</p> | |
| <p>It is exact before it is fast: the release check runs browseML against llama-server b11192's recorded answers | |
| and requires the same text, token for token. Today it uses one thread (with WebAssembly SIMD) — about one to | |
| two tokens a second on a laptop, slower than the native engine; the 8B models and full speed are in | |
| <b>Your own bankML</b>.</p></details> | |
| <details><summary>Who speaks — bankML or Savante?</summary><p><b>speaks as</b> chooses the persona: bankML, from | |
| <code>sAGI/personas/bankml.persona</code> with the context of its own codebase, or Savante, from her own | |
| repository's <code>savante.persona</code> (read at a pinned commit and refused unless its sha256 matches) with | |
| the context of her designer, Professor Codephreak, and her family of repositories. Changing it starts a new | |
| conversation. Who <i>answers</i> — the free CPU, browseML, your own bankML, or Hugging Face — is chosen separately, with the tabs over the conversation.</p></details> | |
| <details><summary>How do I run my own bankML for this page?</summary><p>On Linux with AVX2: | |
| <code>git clone https://github.com/cryptoAGI/bankml && cd bankml && ./install.sh --space</code>. | |
| It builds bankML, imports and verifies Bonsai-8B (1.16 GB), and lets this page reach it. Then press | |
| <b>connect</b>. <code>./install.sh start --no-space</code> takes the permission back.</p></details> | |
| <details><summary>Does my question leave my computer?</summary><p>Not in <b>Your own bankML</b> mode: the page talks | |
| to 127.0.0.1, and bankML sends nothing anywhere. In provider mode, the question goes to the provider you chose, | |
| on your Hugging Face account.</p></details> | |
| <details><summary>Why is the first answer slow?</summary><p>A 1-bit 8B model reads its prompt at a few tokens per | |
| second on a small CPU, and the first answer of a session reads the whole persona. Later turns reuse what was | |
| read (the prompt cache), so they start much sooner.</p></details> | |
| <details><summary>What machine do I need?</summary><p>Linux on x86-64 with AVX2 for the fast kernels (others fall | |
| back to exact scalar code), about 2 GB of free memory for the 1-bit 8B model, and 1.5 GB of disk. | |
| CI also builds and tests natively on ARM.</p></details> | |
| <details><summary>Which models?</summary><p>Bonsai-8B (1-bit, Q1_0), Ternary-Bonsai-8B (Q2_0), Bonsai-1.7B, | |
| SmolLM2-135M and mindX's own lineage model, each answered by bankML's own forward pass; other GGUF files through | |
| llama.cpp behind the same gate. Imported models must carry an open licence.</p></details> | |
| <details><summary>What does it cost?</summary><p>Your own bankML is free: your CPU, your electricity. bankML is | |
| MIT or Apache-2.0. Provider mode uses your Hugging Face inference quota.</p></details> | |
| <details><summary>Where is everything else?</summary><p>In the tabs here, and in | |
| <a href="https://github.com/cryptoAGI/bankml">the repository</a>: the | |
| <a href="https://cryptoagi.github.io/bankml/">documentation</a>, the | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/CHANGELOG.md">changelog</a> and the | |
| <a href="https://github.com/cryptoAGI/bankml/tree/main/testing/results">gate records</a>.</p></details> | |
| <h3 class="faq-group">More about bankML</h3> | |
| <details><summary>What's new — updated 8 October 2026</summary><div class="faq-body"><p>bankML 0.4.2 is the latest release, after 0.4.0, the milestone. <a href="#faq-release">The release, in full</a>.</p></div></details> | |
| <details id="faq-release"><summary>Latest release: v0.4.2</summary><div class="faq-body"><p>Released 8 October 2026 with 0.4.1, which was never tagged. Each item was checked against llama-server b11192 | |
| in the release gate.</p> | |
| <ul> | |
| <li><strong>Logprobs on Ollama's API.</strong> <code>/api/chat</code> and <code>/api/generate</code> take | |
| <code>logprobs</code> and <code>top_logprobs</code> and return llama-server's numbers in Ollama's shape (19 of 19).</li> | |
| <li><strong>Receipts that cover them.</strong> An answer with logprobs carries <code>logprobs_sha256</code>, the | |
| hash of exactly what was received.</li> | |
| <li><strong><code>max_tokens: 0</code> as llama-server answers it</strong> — one token and its probabilities (7 of 7).</li> | |
| <li><strong>A request whose client has gone stops</strong>, and keeps what it computed; the ternary kernel runs on | |
| the GPU bit for bit; CI builds and tests on ARM.</li> | |
| <li><strong>The console and Savante:</strong> one theme with a dark-mode switch, Savante's exact calculator, and | |
| <code>install.sh restart</code>.</li> | |
| </ul> | |
| <p class="more"><a href="https://github.com/cryptoAGI/bankml/releases/tag/v0.4.2">the release</a> · | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/testing/results/0.4.2.txt">the gate record</a></p> | |
| <h4>The milestone: v0.4.0 — native serving complete</h4> | |
| <p>Released 7 October 2026, after one run of the full release gate in which every stage passed. Everything Savante | |
| and mindX ask of llama-server is now answered by bankML's own engine, identical to llama-server b11192.</p> | |
| <ul> | |
| <li><strong>1-bit at llama-server's speed.</strong> In the pinned 8B test, bankML was at least as fast in all | |
| three rounds (median 2.02 against 0.77 tokens per second under the same load), and every answer was identical. | |
| The default engine is now bankML's own for 1-bit as well as ternary models.</li> | |
| <li><strong>A smaller conversation memory.</strong> A <code>q8_0</code> cache with llama.cpp's own Hadamard | |
| rotation: 53 % of the memory, the same answers (6 of 6).</li> | |
| <li><strong>The serving contract.</strong> The context limit, saved and restored slots, a prompt cache for | |
| conversations that take turns, and token probabilities, each identical to llama-server's.</li> | |
| <li><strong>It shows its work.</strong> A status page on the engine's own address (CPU, memory, disk, GPU, its | |
| log). The console opens on the ultimate input field and has Engine, Diagnostics and Thesis tabs. A | |
| <em>scientific diagnostic</em> writes every token's probability from both engines to 18 decimals: 32 of 32 | |
| bit-equal, difference <code>0.000000000000000000</code>.</li> | |
| <li><strong>Kernels on this laptop, three threads:</strong> 1-bit level with llama.cpp's own (1.02×), ternary | |
| 8.9× faster, the same bits.</li> | |
| </ul> | |
| <p class="more"><a href="https://github.com/cryptoAGI/bankml/releases/tag/v0.4.0">the release</a> · | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/CHANGELOG.md">what changed, in full</a> · | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/testing/results/0.4.0.txt">the gate record</a> · | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/PERFORMANCE.md#1-bit-decode-against-llama-server-040">the speed test, with the machine's load</a></p></div></details> | |
| <details id="faq-thesis"><summary>The thesis — Professor Codephreak and Gregory L. Magnusson</summary><div class="faq-body"><p>bankML is built to test its authors' design intent, stated in their own words over the course of the project. | |
| Every release is measured against it. <strong>Exact and precise first, then efficient and optimized:</strong> | |
| the same bits as the reference, every value held to its last bit and every measurement stated with its | |
| resolution; then the CPU you already have, used well, and speed that counts only once the oracle passes.</p> | |
| <ol> | |
| <li><strong>Port what works, and only what works.</strong> "We prototyped in python and we switch to rust from | |
| working architecture." A proven system's behaviour is the specification, so exactness against its compiled | |
| code comes first.</li> | |
| <li><strong>Optimization, succinct, and verified response.</strong> Speed is measured, never quoted. The runtime is one | |
| crate with no dependencies. A model that cannot be verified does not answer.</li> | |
| <li><strong>The standing machine is the CPU you already have.</strong> One server powers one autonomous AI | |
| system for about a dollar a day. Accelerators are rented for events, not owned.</li> | |
| <li><strong>Consume the inference, and prefer the better answer.</strong> "A better answer is more important than | |
| speed where speed under one minute is fine for now". That is why the better ternary model is the one made fast.</li> | |
| <li><strong>Know the limit, and code around it.</strong> The guard refuses, with its reason, a file that would | |
| answer in nonsense. Where the reference is slow, the answer is a new kernel, not acceptance.</li> | |
| <li><strong>Improve by increments, with the oracle in the loop.</strong> A speed counts only when every oracle has | |
| passed on the same code; the rejected variants are kept as evidence.</li> | |
| <li><strong>Use the machine at hand.</strong> Every number was taken on a two-core laptop. Where the machine | |
| disturbs a measurement, the record says so.</li> | |
| <li><strong>Prove the data; keep the data.</strong> What travels is a commitment (a sha256, a CID, a Merkle root), | |
| never the data itself.</li> | |
| </ol> | |
| <p class="more"><a href="https://github.com/cryptoAGI/bankml/blob/main/docs/TECHNICAL.md#thesis--professor-codephreak-and-gregory-l-magnusson">the Thesis, in full, with its sixteen contributions</a> · | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/thesis.md">the argument, with the contemporary field</a> · | |
| <a href="https://rage.pythai.net/bankML-thesis">hear it read</a></p></div></details> | |
| <details id="faq-advantages"><summary>The advantages</summary><div class="faq-body"><h3>1. It is fast where it matters most</h3> | |
| <p>llama.cpp has no fast x86 code for ternary weights; it falls back to plain C. bankML wrote the missing | |
| kernel. Each matrix is <strong>9.4–10× faster</strong>, and whole answers on the ternary model come out at | |
| <strong>about 8× llama-server's speed</strong> (2.3–2.4 tokens/s against 0.30 on the same laptop). The | |
| ternary model gives the better answers of the two, so this is the speed that counts.</p> | |
| <p class="more"><a href="https://github.com/cryptoAGI/bankml/blob/main/docs/PERFORMANCE.md">PERFORMANCE.md</a> · | |
| the kernel: <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/modules/q2_0.md">modules/q2_0.md</a>, | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/bankML/q2_0.rs"><code>bankML/q2_0.rs</code></a></p> | |
| <h3>2. It is exact, and proves it</h3> | |
| <p>Speed only counts if the numbers are the same. Every kernel, the tokenizer, the chat templates, the | |
| samplers and whole conversations are checked against llama.cpp b11192's own compiled code. These checks are | |
| called <strong>oracles</strong>, and a release ships only when every oracle passes in its <strong>release | |
| gate</strong>.</p> | |
| <p class="more"><a href="https://github.com/cryptoAGI/bankml/blob/main/docs/oracles.md">oracles.md</a> · the gate: | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/testing/release_gate.sh"><code>testing/release_gate.sh</code></a> | |
| and its records in <a href="https://github.com/cryptoAGI/bankml/tree/main/testing/results"><code>testing/results/</code></a></p> | |
| <h3>3. It refuses to answer from a model it cannot verify</h3> | |
| <p>Before a model answers, three gates run. A <strong>guard</strong> reads the file's header and refuses | |
| known-bad files. A <strong>pin</strong> checks the file's sha256 against the record of where it came from. | |
| The <strong>oracle</strong>, run ahead of time, has proven the arithmetic. Each answer then carries a | |
| <strong>receipt</strong> with the model's sha256 and the hashes of the request and the answer.</p> | |
| <p class="more"><a href="https://github.com/cryptoAGI/bankml/blob/main/docs/TECHNICAL.md#iii1-verified-response-three-gates-before-an-answer">TECHNICAL.md §III.1</a> · | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/usage.md#9-receipts-and-how-to-check-an-answer">receipts (usage.md §9)</a> · | |
| the guard: <a href="https://github.com/cryptoAGI/bankml/blob/main/bankML/gguf.rs"><code>bankML/gguf.rs</code></a> · | |
| the pin: <a href="https://github.com/cryptoAGI/bankml/blob/main/bankML/sha256.rs"><code>bankML/sha256.rs</code></a></p> | |
| <h3>4. It is small and has nothing to install around it</h3> | |
| <p>bankML is one Rust crate with <strong>zero external dependencies</strong>. The GGUF reader, sha256, f16 | |
| maths, the thread pool, the HTTP server and every kernel are written in the crate. You get one binary and | |
| nothing else to trust.</p> | |
| <p class="more"><a href="https://github.com/cryptoAGI/bankml/blob/main/docs/modules/README.md">one page per source file</a> · | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/Cargo.toml"><code>Cargo.toml</code></a></p> | |
| <h3>5. It speaks the languages your tools already use</h3> | |
| <ul> | |
| <li>the <strong>OpenAI</strong> chat API (<code>/v1/chat/completions</code>), streamed or not — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/modules/serve.md">serve.md</a></li> | |
| <li>the <strong>Ollama</strong> API (<code>/api/chat</code>, <code>/api/generate</code>, a registry of pinned | |
| models), so programs written for Ollama work unchanged — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/OLLAMA.md">OLLAMA.md</a></li> | |
| <li>a <strong>C library</strong> (<code>libbankml</code>) for C, C++, Python, Go or Swift programs — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/CAPI.md">CAPI.md</a></li> | |
| <li><strong>JSON mode and JSON schemas</strong>: answers forced into a shape you choose — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/modules/grammar.md">grammar.md</a>, | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/modules/schema.md">schema.md</a></li> | |
| </ul> | |
| <h3>6. It measures itself</h3> | |
| <p>bankML reports its own time to first token, tokens per second and, where the machine allows, the energy | |
| each token costs. It also limits how much of a graphics card it may use.</p> | |
| <p class="more"><a href="https://github.com/cryptoAGI/bankml/blob/main/docs/modules/metrics.md">metrics.md</a> · | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/modules/console.md">console.md</a> · the GPU: | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/modules/gpu.md">gpu.md</a></p></div></details> | |
| <details><summary>bankML in one paragraph</summary><div class="faq-body"><p>bankML runs language models on the computer you already have: a laptop, a small server, no graphics card | |
| needed. It specialises in <strong>1-bit and ternary models</strong>, which store each weight in one or two | |
| bits instead of sixteen. An 8-billion-parameter model then fits in 1.2 GB (1-bit) or 2.3 GB (ternary). bankML | |
| gives <strong>exactly the same answers as llama.cpp</strong>, the reference engine, and checks that it does, | |
| bit for bit, before it is allowed to be faster. Every answer carries a <strong>receipt</strong> that says | |
| which model file produced it.</p> | |
| <div class="stats"> | |
| <div class="stat"><b>9.4–10×</b><span>faster per ternary matrix than llama.cpp</span></div> | |
| <div class="stat"><b>≈ 8×</b><span>whole ternary answers vs llama-server</span></div> | |
| <div class="stat"><b>0</b><span>external dependencies</span></div> | |
| <div class="stat"><b>bit-exact</b><span>against llama.cpp b11192</span></div> | |
| </div> | |
| <p class="more">the full story: <a href="https://github.com/cryptoAGI/bankml#readme">README</a> · the technical | |
| report: <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/TECHNICAL.md">TECHNICAL.md</a></p></div></details> | |
| <details><summary>bankML, in its own words</summary><div class="faq-body"><p>The console that talks to bankML speaks as bankML itself, from its persona file, | |
| <a href="https://huggingface.co/spaces/PYTHAI/bankml/blob/main/sAGI/personas/bankml.persona"><code>sAGI/personas/bankml.persona</code></a>. | |
| It knows its own use only from measurement: each question carries a SELF block of what bankML measured at that moment, and a value it did not measure it says it did not measure.</p> | |
| <p style="font-size:22px;color:#fff;margin:.6em 0">“The same bits first, then the speed.”</p> | |
| <p><strong>Its oath.</strong> I answer only from verified weights. What I cannot reproduce exactly I refuse, with the reason. Every answer carries its receipt, and what I say about my own use I have measured.</p> | |
| <p class="more">the persona's sources: README's design goals and the thesis · | |
| <a href="https://huggingface.co/spaces/PYTHAI/bankml/blob/main/sAGI/console.py">the console (<code>sAGI/console.py</code>)</a></p></div></details> | |
| <details><summary>This Space is the source</summary><div class="faq-body"><p>Every file of bankML is here: the Rust engine (<code>bankML/</code>), the C API (<code>capi/</code>), the oracles and | |
| the release gate (<code>testing/</code>), the tools, the docs and Savante's UI (<code>sAGI/</code>) — | |
| <a href="https://huggingface.co/spaces/PYTHAI/bankml/tree/main">browse the files</a>. The source of record is | |
| <a href="https://github.com/cryptoAGI/bankml">github.com/cryptoAGI/bankml</a>.</p> | |
| <p><strong>Talk to bankML yourself.</strong> On a Linux machine with AVX2:</p> | |
| <p><code>git clone https://github.com/cryptoAGI/bankml && cd bankml && ./install.sh</code><br> | |
| then <code>python3 sAGI/console.py</code> and open <code>http://127.0.0.1:7875</code>.</p> | |
| <p class="more">the live engine here: this Space already carries its <code>Dockerfile</code> and | |
| <code>hf/start.sh</code> (bankML serving the ternary Bonsai-8B, the console in front, public and read-only); | |
| it runs once the Space is switched to Docker hardware</p></div></details> | |
| <details><summary>What people use it for</summary><div class="faq-body"><table class="table"> | |
| <tr><td>A private assistant on your own machine</td><td>Savante, a chat page on <code>127.0.0.1:7873</code>, answered by bankML — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/usage.md#4-talk-to-savante">usage.md §4</a>, | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/playback.md">playback.md</a></td></tr> | |
| <tr><td>The engine behind mindX</td><td>mindX's default model server on its VPS since 4 October 2026, in place of Ollama — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/OLLAMA.md">OLLAMA.md</a></td></tr> | |
| <tr><td>A drop-in Ollama or OpenAI server</td><td><code>bankml serve --native --registry</code> — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/usage.md#6a-ollamas-api">usage.md §6a</a>, | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/install.md">install.md</a></td></tr> | |
| <tr><td>Your own model, verified</td><td><code>bankml convert</code> (safetensors → GGUF, byte-identical to llama.cpp's) and | |
| <code>bankml create</code> (a persona layer from a Modelfile) — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/modules/convert.md">convert.md</a>, | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/modules/create.md">create.md</a></td></tr> | |
| <tr><td>Structured answers for programs</td><td>JSON mode, JSON schemas and grammars — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/usage.md#json-mode-and-grammars-033">usage.md</a></td></tr> | |
| <tr><td>Inference inside another program</td><td><code>libbankml</code> and <code>bankml.h</code> — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/CAPI.md">CAPI.md</a></td></tr> | |
| <tr><td>Agents with a provable history</td><td>receipts, Merkle commitments of the conversation, THOT bundles and iNFTs — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/usage.md#8a-proof-of-data-without-the-data">usage.md §8a</a>, | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/usage.md#8e-inft-mint-an-agent-load-one-from-a-token">§8e</a></td></tr> | |
| <tr><td>Meaning search over notes</td><td>bge-m3 embeddings fused with keyword search — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/embedding.md">embedding.md</a></td></tr> | |
| </table> | |
| <p class="more">new here? start with <code>./install.sh</code>: | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/usage.md#1-install">usage.md §1</a></p></div></details> | |
| <details><summary>How Rust helps bankML go fast and stay exact</summary><div class="faq-body"><p>Rust lets bankML write code as close to the hardware as C, while the compiler checks much of what C leaves | |
| to the programmer.</p> | |
| <ul> | |
| <li><strong>Direct access to the CPU's vector instructions.</strong> The kernels use AVX2 through | |
| <code>std::arch</code>, compiled with <code>#[target_feature(enable = "avx2,fma,f16c")]</code>. bankML checks | |
| at run time which instructions the CPU has, so one binary runs everywhere and uses the fast path where it | |
| can. — <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/modules/q1_0.md">q1_0.md</a>, | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/modules/q2_0.md">q2_0.md</a></li> | |
| <li><strong>No hidden costs.</strong> No garbage collector and no runtime pauses. Iterators and fixed-size | |
| chunks (<code>as_chunks</code>) compile down to plain loops, which lets the compiler drop bounds checks | |
| inside the hot kernels.</li> | |
| <li><strong>Safe threads, the same bits on any thread count.</strong> The thread pool hands out rows from an | |
| atomic counter. Ownership rules guarantee each output chunk has exactly one writer, so threads can never | |
| race, and the answer does not depend on how many threads ran. — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/modules/par.md">par.md</a>, | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/bankML/par.rs"><code>bankML/par.rs</code></a></li> | |
| <li><strong><code>unsafe</code> kept in small, named places.</strong> The memory map, the vector intrinsics and | |
| the GPU loader carry documented safety contracts behind safe functions; the compiler checks the rest. — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/modules/gguf.md">gguf.md</a></li> | |
| <li><strong>Zero-copy model loading.</strong> The model file is memory-mapped, and the kernels read the | |
| weights straight from the mapping. — <a href="https://github.com/cryptoAGI/bankml/blob/main/bankML/gguf.rs"><code>bankML/gguf.rs</code></a></li> | |
| <li><strong>Hostile files handled safely.</strong> All header arithmetic is checked (<code>checked_add</code>, | |
| <code>checked_mul</code>), so a malformed file is refused with a reason instead of crashing.</li> | |
| <li><strong>Whole-program optimisation.</strong> Release builds use link-time optimisation, one | |
| code-generation unit and abort-on-panic: one small, fast binary. — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/Cargo.toml"><code>Cargo.toml</code></a></li> | |
| <li><strong>A pinned toolchain.</strong> Rust 1.99 is pinned, so a build today gives the same machine code as | |
| a build next month, which an exactness project needs. — | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/rust-toolchain.toml"><code>rust-toolchain.toml</code></a></li> | |
| </ul></div></details> | |
| <details><summary>Where it is going</summary><div class="faq-body"><p>The road is laid out release by release in | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/TODO.md">TODO.md</a>, and each step counts only once | |
| its oracle passes.</p> | |
| <ul> | |
| <li><strong>0.3.7</strong> (released): llama-server's whole sampler chain, bankML measuring itself, a GPU | |
| limiter, and the bankML console.</li> | |
| <li><strong>0.3.8</strong> (released): llama-server's behaviour at the context limit, saved and restored | |
| conversations (slots), a prompt cache so conversations taking turns each keep their context, and token | |
| probabilities, streamed or not.</li> | |
| <li><strong>0.4.0, the milestone</strong> (released 7 October 2026): native serving complete. bankML answers | |
| everything Savante and mindX ask of llama-server, and its own engine is chosen by default for both 1-bit and | |
| ternary models.</li> | |
| <li><strong>0.4.x:</strong> stop the work of a request whose client has gone, and a one-line measured self for the | |
| console, so long conversations keep their cache.</li> | |
| <li><strong>0.5.0, hardware:</strong> ARM phones and tablets (NEON), newer x86 instructions (AVX-512), and more | |
| graphics cards.</li> | |
| <li><strong>1.0.0:</strong> llama.cpp is needed only as the oracle in the gate, never at run time. bankML runs | |
| at llama.cpp's speed or better on every supported format, its interfaces are stable, and receipts are | |
| signed.</li> | |
| </ul></div></details> | |
| <details><summary>Our hope for bankML</summary><div class="faq-body"><p>We hope bankML shows that a capable, private AI does not need a data centre or a graphics card: that an | |
| eight-billion-parameter model can run on the laptop in front of you and give answers you can check. We want | |
| every speed claim to come with proof that the numbers are the same, so that "faster" always means faster | |
| <em>and</em> correct. We hope the ternary kernel goes back upstream to llama.cpp, so everyone benefits from it. | |
| We want bankML to become the dependable, verifiable engine under Savante, mindX and the agents built on them. | |
| And we want it to stay small enough that one person can read all of it.</p> | |
| <p class="more">the authors' own words: | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/TECHNICAL.md#thesis--professor-codephreak-and-gregory-l-magnusson">the Thesis</a> · | |
| the argument in full, with the contemporary field: <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/thesis.md">the thesis</a> · | |
| among other engines and papers: <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/research.md">research.md</a> · | |
| how it was built: <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/BUILD_HISTORY.md">BUILD_HISTORY.md</a></p></div></details> | |
| </section> | |
| </div> | |
| <div class="panel" role="tabpanel" id="panel-logs" aria-labelledby="tab-logs" hidden> | |
| <section class="logs"> | |
| <h2>This page's log</h2> | |
| <p class="quiet-note">What this page did, newest last: connections to your bankML, questions, the time to the | |
| first token, receipt checks, errors. It stays in this browser tab; nothing is sent anywhere.</p> | |
| <div class="logtools"><button type="button" id="logcopy">copy</button><button type="button" id="logclear">clear</button></div> | |
| <ol id="pagelog" class="pagelog"><li class="empty">nothing yet — connect, or ask a question</li></ol> | |
| </section> | |
| </div> | |
| <footer> | |
| <div class="social"> | |
| <a href="https://github.com/cryptoAGI/bankml" rel="noopener" aria-label="bankML on GitHub"> | |
| <svg viewBox="0 0 16 16" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg> | |
| cryptoAGI/bankml | |
| </a> | |
| <a href="https://x.com/aiosml" rel="noopener" aria-label="aiosml on X"> | |
| <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg> | |
| @aiosml | |
| </a> | |
| </div> | |
| <p><a href="https://huggingface.co/spaces/PYTHAI/savante">Savante</a> — the oversight office bankML serves · | |
| <a href="https://huggingface.co/spaces/PYTHAI/bankml">bankML on Hugging Face</a> (this stable Space) · | |
| <a data-space="PYTHAI/bankML-UIF" class="unpublished" title="not yet public on Hugging Face">bankML UIF</a><small class="pub-tag">not yet public</small>, the experimental edition · | |
| <a data-space="PYTHAI/browseML" class="unpublished" title="not yet public on Hugging Face">browseML</a><small class="pub-tag">not yet public</small>, bankML in the browser · | |
| <a href="https://github.com/minaiml">minaiml</a> (<a href="https://huggingface.co/spaces/PYTHAI/minaiml">Space</a>), language models in miniature · | |
| <a href="https://github.com/cryptoAGI/bankml/blob/main/docs/thesis.md">thesis</a></p> | |
| <p class="licence">Licences: the page's core (this page, bankml-chat.js, browseML, the input field) is MIT OR Apache-2.0 | |
| (the input field's bundle MIT); the credential module <code>bankml-creds.js</code> — Hugging Face sign-in, the token's | |
| storage, the only code that sends it — is <b>GPL-3.0-only</b> (<a href="bankml-creds-LICENSE.txt">licence</a>), in its own | |
| file the core never imports: bankML's rule for code that makes, holds or checks a secret, so no build can ship a | |
| modified, closed copy of what handles your credentials. The page works without it, with no sign-in.</p> | |
| <p>bankML · MIT OR Apache-2.0 · Professor Codephreak · Gregory L. Magnusson · the substrate: DeltaVerse (MIT) · | |
| <a href="https://deltaverse.pythai.net/bankml">deltaverse.pythai.net/bankml</a></p> | |
| </footer> | |
| <script src="https://deltaverse.pythai.net/engine/frequency-source.js?v=09912494"></script> | |
| <script src="https://deltaverse.pythai.net/engine/ngn/deltaverse-substrate.js?v=09912494"></script> | |
| <script> | |
| (() => { | |
| if (!window.DVDeltaverse) return; // the page stands without its ground | |
| const mark = new DVDeltaverse.Field('#mark', { demo: true, scale: 1.35, depth: 0.62 }).start(); | |
| window.DVMark = mark; | |
| if (window.FrequencySource) { try { mark.attachFrequency(new FrequencySource()); } catch (e) {} } | |
| })(); | |
| </script> | |
| <script src="https://deltaverse.pythai.net/engine/ngn/half-sweep.js?v=09912494"></script> | |
| <script src="https://deltaverse.pythai.net/engine/ngn/triad-genesis.js?v=09912494"></script> | |
| <script src="https://deltaverse.pythai.net/engine/ngn/platonic-lattice.js?v=09912494"></script> | |
| <script src="https://deltaverse.pythai.net/engine/ngn/prime-horizon.js?v=09912494"></script> | |
| <script src="https://deltaverse.pythai.net/engine/ngn/emergent-menu.js?v=09912494"></script> | |
| <script> | |
| /* the bankML substrate: the DELTAVERSE ground under the page, and one layer chosen from the ⟁ layers menu, | |
| 'ground only' first and the default — as on the landing page and in bankML's Savante UI (sAGI/substrate) */ | |
| (function layers(){ | |
| if (!window.DVEmergentMenu) return; | |
| var cv = document.getElementById('layer'), KEY = 'bankml_page'; | |
| var MAKE = { | |
| 'platonic-lattice': function(){ return window.DVPlatonicLattice && new DVPlatonicLattice.Field(cv, { scale:0.30, scope:0.5, pop:9, nested:true }); }, | |
| 'prime-horizon': function(){ return window.DVPrimeHorizon && new DVPrimeHorizon.Field(cv, { cols:110 }); }, | |
| 'triad-genesis': function(){ return window.DVTriadGenesis && new DVTriadGenesis.Field(cv, { loop:true }); }, | |
| 'half-sweep': function(){ return window.DVHalfSweep && new DVHalfSweep.Field(cv, { axis:'both' }); } | |
| }; | |
| var layer = 'none'; | |
| try { layer = localStorage.getItem(KEY) || 'none'; } catch (e) {} | |
| var current = null; | |
| function mount(id){ | |
| if (current) { try { current.stop(); } catch (e) {} current = null; } | |
| cv.style.opacity = '0'; layer = id; | |
| try { localStorage.setItem(KEY, id); } catch (e) {} | |
| if (!MAKE[id]) return; | |
| try { current = MAKE[id](); if (current) { current.start(); cv.style.opacity = '0.55'; } } catch (e) {} | |
| try { document.dispatchEvent(new CustomEvent('dv:layer', { detail: { id: id } })); } catch (e) {} | |
| } | |
| DVEmergentMenu.mount({ | |
| id:'bankml-layers', anchor:'bottom-left', label:'⟁ layers', selected:layer, // explicit: never items[0] by accident | |
| items:[ {id:'none',label:'ground only'}, | |
| {id:'platonic-lattice',label:'platonic lattice'}, | |
| {id:'prime-horizon',label:'prime horizon'}, | |
| {id:'triad-genesis',label:'triad genesis'}, | |
| {id:'half-sweep',label:'half sweep'} ], | |
| onSelect:function(it){ mount(it.id); } | |
| }); | |
| mount(layer); | |
| })(); | |
| </script> | |
| <script src="space-tabs.js"></script> | |
| <!-- what is happening now (bankml-chat.js): downloading, verifying, reading the prompt, writing --> | |
| <div id="activity" class="activity" role="status" aria-live="polite" hidden> | |
| <span class="act-dot" aria-hidden="true"></span><span id="activity-text"></span> | |
| <span class="act-bar" hidden><i id="activity-bar"></i></span> | |
| </div> | |
| <!-- the ultimate input field (cryptoAGI/ultimate-bankml-ui, space-mount: src/space/main.tsx), and its engine --> | |
| <div id="uif-root"></div> | |
| <script src="uif-space.js"></script> | |
| <!-- the credential module: Hugging Face sign-in and the token, GPL-3.0-only, in its own file the core never imports | |
| (bankml-creds.js; licence: bankml-creds-LICENSE.txt). The page works without it, with no sign-in. --> | |
| <script type="module" src="bankml-creds.js" data-bankml-creds></script> | |
| <script type="module" src="bankml-chat.js"></script> | |
| <script type="module" src="space-dashboard.js"></script> | |
| </body> | |
| </html> | |