bankml / index.html
Gregory-L's picture
bankML 0.4.3 pages: Savante's input→response pattern, bankML in this browser by default, one palette, phone to desktop
36a3c9b verified
Raw History Blame Contribute Delete
80.8 kB
<!DOCTYPE html>
<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 !important;}
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!important}
#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!important}
.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!important;right:0!important;top:auto!important;bottom:0!important;width:auto!important;
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!important;width:calc(100vw - 16px)!important;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 &amp;&amp; cd bankml &amp;&amp; ./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 &amp;&amp; ./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&nbsp;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 &amp;&amp; cd bankml &amp;&amp; ./install.sh --space</code>.
It builds bankML, imports and verifies Bonsai-8B (1.16&nbsp;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&nbsp;GB of free memory for the 1-bit 8B model, and 1.5&nbsp;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&nbsp;% 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 &amp;&amp; cd bankml &amp;&amp; ./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>