Every fleet model card (and the #models docs section) now states, in plain family-facing terms, what the model is equivalent to: frank-large ~ Claude Sonnet 5 / OpenAI-Luna, frank-primary ~ Claude Opus 4.8 / OpenAI-Terra (both Summer 2026 frontier), frank-secondary ~ last year (2025) frontier. Rendered as a new details.equiv line (desc-equiv, styled in the head color, bare-mode clean); pinned in homepage_config.bats.
214 lines
11 KiB
HTML
214 lines
11 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>frank — docs</title>
|
|
<base href="/">
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=VT323&display=swap">
|
|
<link rel="stylesheet" href="style.css">
|
|
</head>
|
|
<body>
|
|
<header class="top">
|
|
<span class="title">frank@home:~$ docs</span>
|
|
<a id="bare-toggle" class="toggle" href="?bare=1">bare</a>
|
|
</header>
|
|
<main class="docs">
|
|
|
|
<section id="getting-in">
|
|
<h1>Getting in</h1>
|
|
<p>Everything here lives behind two doors. The first is <strong>Anubis</strong>, a
|
|
quiet bot-check: the first time you visit any guarded page in a session you see a
|
|
short "making sure you're not a bot" screen. It runs once. The second door is
|
|
<strong>Authentik</strong>, the family single sign-on: log in once and every
|
|
guarded service (this homepage, search, chat, media requests, and friends) opens
|
|
for you without a second password.</p>
|
|
<ul>
|
|
<li>Need an account? Ask Frank. Accounts are issued by hand; there is no signup.</li>
|
|
<li>Your clearance lives in a cookie. Clearing cookies means re-clearing both doors.</li>
|
|
<li>If a page asks you to log in repeatedly, that is a server-side problem — tell Frank, don't brute-force it.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section id="chat">
|
|
<h1>Talking to the AI</h1>
|
|
<p>The everyday front door is <a href="https://ai.franksdank.cloud">Open WebUI</a>,
|
|
the family chat app. Open the address, click <strong>Continue with authentik</strong>,
|
|
and use the same single sign-on as everything else — no separate password. Your
|
|
conversations are saved to your account, so history follows you between devices.</p>
|
|
<img src="img/openwebui-chat.png" alt="Open WebUI chat screen with a question and the AI's answer">
|
|
<p>Below the text box, the model box on the right chooses which model answers you.
|
|
Family accounts get <code>frank-secondary</code> — the fleet's fast all-rounder,
|
|
which also sees images: drag a photo or screenshot straight into the chat box.
|
|
Frank's account can additionally reach the bigger models.</p>
|
|
<img src="img/openwebui-model-picker.png" alt="The Open WebUI welcome screen with frank-secondary selected in the model box">
|
|
<p>Open WebUI keeps your chat history; the raw model endpoints (used by developer
|
|
tools, see <a href="#api-access">API access</a>) do not.</p>
|
|
</section>
|
|
|
|
<section id="models">
|
|
<h1>The running models</h1>
|
|
<p>Three models serve the family. The homepage status cards show whether
|
|
each one is up right now.</p>
|
|
|
|
<h2>frank-large — deep reasoning</h2>
|
|
<ul>
|
|
<li><strong>Model:</strong> Qwen3.8-Flash-Next v2 Swift1.5 abliterated (halogen flash-server, ~62 GiB) — an uncensored edition that thinks before answering.</li>
|
|
<li><strong>Equivalent:</strong> Claude Sonnet 5 / OpenAI-Luna (Summer 2026 frontier intelligence).</li>
|
|
<li><strong>Capacity:</strong> 200k-token context, two conversations at a time; sees images.</li>
|
|
<li><strong>Inputs:</strong> text, image.</li>
|
|
<li><strong>Best for:</strong> cybersecurity and debugging. <em>Use requires Frank's permission.</em></li>
|
|
</ul>
|
|
|
|
<h2>frank-primary — the primary model</h2>
|
|
<ul>
|
|
<li><strong>Model:</strong> Qwen3.8-Flash-Next at native FP8 precision (radiance, 173 GiB across both R9700s) — the biggest brain on the network.</li>
|
|
<li><strong>Equivalent:</strong> Claude Opus 4.8 / OpenAI-Terra (Summer 2026 frontier intelligence).</li>
|
|
<li><strong>Capacity:</strong> 200k-token context, two conversations at a time; sees images.</li>
|
|
<li><strong>Inputs:</strong> text, image.</li>
|
|
<li><strong>Best for:</strong> software engineering, system administration, and instruction tasks.</li>
|
|
</ul>
|
|
|
|
<h2>frank-secondary — the fast utility model</h2>
|
|
<ul>
|
|
<li><strong>Model:</strong> Qwen3.5-9B-Uncensored (Q6_K, 6.9 GiB) on the RTX 3090 — roughly 95 tokens per second.</li>
|
|
<li><strong>Equivalent:</strong> last year's frontier level (2025).</li>
|
|
<li><strong>Capacity:</strong> two simultaneous conversations, 200k tokens each; sees images.</li>
|
|
<li><strong>Inputs:</strong> text, image.</li>
|
|
<li><strong>Best for:</strong> agentic search, RAG, research subagents, translation, roleplay, and summarization — any small task that doesn't need much intelligence, and anything with a picture (screenshots, photos, diagrams). This is the model Open WebUI offers to family accounts.</li>
|
|
</ul>
|
|
|
|
<p class="foot-note">Which one to pick? Small utility work, RAG, search, and
|
|
screenshots: <code>frank-secondary</code>. Software engineering, sysadmin, and
|
|
instruction tasks: <code>frank-primary</code>. Cybersecurity and debugging:
|
|
<code>frank-large</code> (with Frank's permission).</p>
|
|
</section>
|
|
|
|
<section id="api-access">
|
|
<h1>API access — the AI on your own laptop</h1>
|
|
<p>Developer assistants like <strong>Opencode</strong> and <strong>Pi</strong> are
|
|
chat programs that run on your own computer and can read your files, run commands,
|
|
and edit code while they talk. They are all built to speak the same standard
|
|
language as the big commercial products (the "OpenAI-compatible" API), and our
|
|
server speaks it too. You give the program three things — an address, a personal
|
|
key, and a model name — and your laptop thinks through our hardware.</p>
|
|
|
|
<h2>Step 1 — get your personal key</h2>
|
|
<ol>
|
|
<li>Open <a href="https://ai.franksdank.cloud">ai.franksdank.cloud</a> and log in.</li>
|
|
<li>Click your circle (bottom-left corner) → <strong>Settings</strong> → <strong>Account</strong>.</li>
|
|
<li>Scroll to <strong>API keys</strong> → press <strong>Show</strong> → <strong>Create new secret key</strong>.</li>
|
|
<li>Press the copy icon. The key looks like <code>sk-3f2a…</code>.</li>
|
|
</ol>
|
|
<img src="img/openwebui-api-keys.png" alt="The Open WebUI Account settings page with the API key field at the bottom">
|
|
<p class="key-warn">The key is a password. Anyone who has it can use our AI as
|
|
you. Paste it only into the program's config file — never into a shared chat,
|
|
a screenshot, or a git repository.</p>
|
|
|
|
<h2>Step 2 — the three details every tool asks for</h2>
|
|
<ul>
|
|
<li><strong>Base URL:</strong> <code>https://ai.franksdank.cloud/api/v1</code></li>
|
|
<li><strong>Model:</strong> <code>frank-secondary</code></li>
|
|
<li><strong>API key:</strong> the <code>sk-…</code> from step 1 — sent as the header <code>Authorization: Bearer sk-…</code></li>
|
|
</ul>
|
|
<p>Proof that it works, from any terminal (replace the key):</p>
|
|
<pre><code>curl https://ai.franksdank.cloud/api/v1/chat/completions \
|
|
-H "Authorization: Bearer PASTE-YOUR-KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"model": "frank-secondary", "messages": [{"role": "user", "content": "Hello!"}]}'</code></pre>
|
|
|
|
<h2>Step 3a — Opencode</h2>
|
|
<p>Install once (<code>npm install -g opencode-ai</code>), then create the file
|
|
<code>~/.config/opencode/opencode.json</code> with:</p>
|
|
<pre><code>{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"provider": {
|
|
"frank": {
|
|
"npm": "@ai-sdk/openai-compatible",
|
|
"name": "Frank fleet",
|
|
"options": {
|
|
"baseURL": "https://ai.franksdank.cloud/api/v1",
|
|
"apiKey": "PASTE-YOUR-KEY"
|
|
},
|
|
"models": {
|
|
"frank-secondary": { "name": "frank-secondary" }
|
|
}
|
|
}
|
|
}
|
|
}</code></pre>
|
|
<p>Start <code>opencode</code> and pick the model with <code>/model</code> —
|
|
it appears as <code>frank/frank-secondary</code>.</p>
|
|
|
|
<h2>Step 3b — Pi</h2>
|
|
<p>Create the file <code>~/.pi/agent/models.json</code> with:</p>
|
|
<pre><code>{
|
|
"providers": {
|
|
"frank": {
|
|
"baseUrl": "https://ai.franksdank.cloud/api/v1",
|
|
"api": "openai-completions",
|
|
"apiKey": "PASTE-YOUR-KEY",
|
|
"models": [
|
|
{ "id": "frank-secondary" }
|
|
]
|
|
}
|
|
}
|
|
}</code></pre>
|
|
<p>Then start Pi with <code>pi --model frank/frank-secondary</code>.</p>
|
|
|
|
<p class="foot-note">The key works only for the family AI — it is not your
|
|
Authentik password, and losing it costs nothing beyond asking Frank to rotate it.
|
|
Want a bigger model (frank-primary, frank-large)? Ask Frank to raise your access.</p>
|
|
</section>
|
|
|
|
<section id="media">
|
|
<h1>Media & files</h1>
|
|
<ul>
|
|
<li><strong>Movies & TV:</strong> request with <a href="https://seerr.franksdank.cloud">Seerr</a>;
|
|
watch with <a href="https://plex.franksdank.cloud/web/index.html">Plex</a> or
|
|
<a href="https://jelly.franksdank.cloud">Jellyfin</a>. Don't ask the *arrs directly —
|
|
Seerr is the front door, and requests ride the tunnel from there.</li>
|
|
<li><strong>Books:</strong> <a href="https://books.franksdank.cloud">Calibre-Web</a> — the e-book library, with its own login.</li>
|
|
<li><strong>Games:</strong> <a href="https://romm.franksdank.cloud">RomM</a> — ROM library and emulator collection.</li>
|
|
<li><strong>Raw files:</strong> <a href="https://files.franksdank.cloud">Copyparty</a> — direct downloads and shares.</li>
|
|
<li><strong>Search:</strong> <a href="https://search.franksdank.cloud">SearXNG</a> — metasearch, VPN-routed, no AI snoop.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section id="troubleshooting">
|
|
<h1>When something looks broken</h1>
|
|
<ul>
|
|
<li><strong>A status card says DOWN.</strong> Reload the page once; the checker
|
|
re-probes every few minutes. If it stays down, that service really is unhappy — tell Frank.</li>
|
|
<li><strong>"status unavailable" on the homepage.</strong> The page couldn't read
|
|
its status file. Hard-reload (Ctrl/Cmd-Shift-R).</li>
|
|
<li><strong>Connection timeout on a home device.</strong> Nine times out of ten
|
|
the device isn't using the house DNS (Pi-hole at 192.168.0.143) and resolved
|
|
our names to the public address, which doesn't answer. Point the device's DNS at
|
|
192.168.0.143 and retry.</li>
|
|
<li><strong>The bot-check spins forever.</strong> Let it finish; heavy JS blocking
|
|
(privacy extensions) can starve it. Pause the blocker, reload, resume.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
</main>
|
|
<footer class="foot">
|
|
<span><a href="/">← services</a></span>
|
|
<span>docs · written by the chief designer · ask Frank for anything missing</span>
|
|
</footer>
|
|
<script>
|
|
// The same bare-mode toggle the service pages use (?bare=1), for this static page.
|
|
(function () {
|
|
var bare = new URLSearchParams(window.location.search).get('bare') === '1';
|
|
document.documentElement.setAttribute('data-bare', bare ? '1' : '0');
|
|
var t = document.getElementById('bare-toggle');
|
|
if (t) {
|
|
t.textContent = bare ? 'styled' : 'bare';
|
|
t.href = bare ? '?bare=0' : '?bare=1';
|
|
}
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|