labs / static /faq.html
3v324v23's picture
deploy: unified router + dreamy website (2026-06-16T09:46:52Z)
c1a683f
Raw
History Blame Contribute Delete
20.5 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#FFD6E8" />
<!-- CRITICAL: paint the dawn sky on the first byte (see base.css rationale) -->
<style>
html{background:linear-gradient(180deg,#E8E0FF 0%,#FFD6E8 52%,#FFE5D9 100%) fixed;background-color:#FFD6E8;}
</style>
<title>FAQ — DreamRouter</title>
<meta name="description" content="Answers to common questions about DreamRouter: how the free multi-model router works, which models are available, authentication, and technical details." />
<link rel="canonical" href="https://apiarium-labs.hf.space/faq.html" />
<meta property="og:type" content="website" />
<meta property="og:title" content="DreamRouter FAQ" />
<meta property="og:description" content="How the free multi-model router works, models, auth, and technical details." />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Comfortaa:wght@400;500;700&family=Nunito:wght@400;600;700;800&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet" />
<script src="https://unpkg.com/lenis@1.1.13/dist/lenis.min.js" defer></script>
<link rel="stylesheet" href="css/tokens.css?v=20260620b" />
<link rel="stylesheet" href="css/base.css?v=20260620b" />
<link rel="stylesheet" href="css/scene.css?v=20260620b" />
<link rel="stylesheet" href="css/nav.css?v=20260620b" />
<link rel="stylesheet" href="css/sections.css?v=20260620b" />
<link rel="stylesheet" href="css/faq.css?v=20260620b" />
</head>
<body data-page="faq">
<!-- dream overlays -->
<div class="blur-overlay" aria-hidden="true"></div>
<div class="grain-overlay" aria-hidden="true"></div>
<!-- a lighter scene for inner pages: far clouds + moon only -->
<div class="scene" aria-hidden="true">
<div class="layer layer-far-clouds" data-speed="0.06" data-mouse="6">
<svg class="cloud-far c1" viewBox="0 0 200 100"><use href="#cloud"/></svg>
<svg class="cloud-far c3" viewBox="0 0 200 100"><use href="#cloud"/></svg>
</div>
<div class="layer layer-moon" data-speed="0.10" data-mouse="10">
<div class="moon"><span class="moon-disc"></span></div>
</div>
</div>
<!-- shared nav + footer -->
<div data-site-nav></div>
<main id="main">
<header class="faq-hero" data-od-id="faq-header">
<div class="container">
<h1 data-split>frequently asked</h1>
<p data-reveal>Everything about routing requests across free models, authenticating, and using the dashboard. Search or pick a topic below.</p>
</div>
</header>
<div class="container">
<!-- search -->
<div class="faq-search" data-od-id="faq-search">
<svg class="search-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true">
<circle cx="11" cy="11" r="8" /><line x1="21" y1="21" x2="16.65" y2="16.65" />
</svg>
<label for="faq-search" class="visually-hidden" style="position:absolute;left:-9999px;">Search questions</label>
<input id="faq-search" type="search" placeholder="Search questions…" autocomplete="off" />
</div>
<!-- category filters -->
<div class="faq-cats" data-od-id="faq-categories" role="group" aria-label="Filter by category">
<button class="faq-cat" data-cat="all" aria-pressed="true">All <span class="count">(<span id="faq-count">16</span>)</span></button>
<button class="faq-cat" data-cat="general" aria-pressed="false">General</button>
<button class="faq-cat" data-cat="models" aria-pressed="false">Models</button>
<button class="faq-cat" data-cat="access" aria-pressed="false">Access</button>
<button class="faq-cat" data-cat="technical" aria-pressed="false">Technical</button>
</div>
<!-- accordion -->
<div class="faq-list" id="faq-list" data-od-id="faq-accordion">
<!-- ============ GENERAL ============ -->
<div class="faq-item" data-category="general" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">General</span>
<span class="q-text">What is DreamRouter?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>DreamRouter is one OpenAI-compatible endpoint that fans a single request out across hundreds of free model endpoints. You point your client at <code>apiarium-labs.hf.space/v1</code>, pick a model name, and it swaps the model field, picks a healthy upstream, and forwards — retrying bad keys automatically.</p>
</div></div></div>
</div>
<div class="faq-item" data-category="general" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">General</span>
<span class="q-text">Is it really free? Are there usage limits?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>Yes. Every upstream is a free-tier or open endpoint — OpenRouter <code>:free</code> models, Gemini's free tier, and open Claude proxies. There's no billing and no balance to burn. The only limit is each upstream's own rate cap, which the router hides by round-robining across many targets.</p>
</div></div></div>
</div>
<div class="faq-item" data-category="general" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">General</span>
<span class="q-text">How does it pick which endpoint to use?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>Each request uses a thread-safe round-robin counter that cycles through every target serving that model. Targets that return auth, quota, rate-limit, or 5xx errors are cooled down for a short window and skipped, so traffic keeps flowing to healthy ones automatically.</p>
</div></div></div>
</div>
<div class="faq-item" data-category="general" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">General</span>
<span class="q-text">Can I use it for production workloads?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>It's best for prototyping, experimentation, and personal projects. Because upstreams are third-party free tiers, uptime and latency aren't guaranteed — a single provider can rate-limit the whole pool at peak times. Treat it as a convenience layer, not a critical dependency.</p>
</div></div></div>
</div>
<!-- ============ MODELS ============ -->
<div class="faq-item" data-category="models" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">Models</span>
<span class="q-text">Which models are available?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>Claude Opus 4.5–4.8 (with and without thinking), plus free OpenRouter models like Gemma 4, Gemini 2.5 Flash, and Liquid LFM. Browse the full live list with live target counts on the <a href="models.html">Models page</a>, or call <code>GET /v1/models</code>.</p>
</div></div></div>
</div>
<div class="faq-item" data-category="models" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">Models</span>
<span class="q-text">Why do some model names start with "free:"?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>The <code>free:</code> prefix marks non-Anthropic models that run on free-tier endpoints (e.g. <code>free:google/gemini-2.5-flash</code>). It's purely cosmetic on your side — the router strips it and sends the real upstream id. Claude models keep their plain <code>anthropic/…</code> names.</p>
</div></div></div>
</div>
<div class="faq-item" data-category="models" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">Models</span>
<span class="q-text">Do you support streaming and tool calling?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>Yes to both. Pass <code>"stream": true</code> for SSE token streaming, and include a <code>tools</code> array for function calling. Both work whenever the underlying model supports them — the router passes request and response bodies through unchanged.</p>
</div></div></div>
</div>
<div class="faq-item" data-category="models" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">Models</span>
<span class="q-text">What are the context window limits?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>Limits come from each upstream model, not the router. Claude Opus offers up to 200k tokens of context; the free Gemini and Gemma tiers vary from 128k down to 8k. If you exceed a model's window the upstream returns a 400, which surfaces to you directly.</p>
</div></div></div>
</div>
<!-- ============ ACCESS ============ -->
<div class="faq-item" data-category="access" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">Access</span>
<span class="q-text">How do I sign in?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>Sign in on the <a href="login.html">login page</a> with the <strong>Continue with Google</strong> button — it&rsquo;s the only way in. You&rsquo;ll get <strong>500 free credits</strong> and your own personal API key (<code>dr_u_&hellip;</code>) for programmatic access. There&rsquo;s no shared key to paste and nothing to manage by hand.</p>
</div></div></div>
</div>
<div class="faq-item" data-category="access" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">Access</span>
<span class="q-text">Do I need a Google account?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>Yes &mdash; Google is the sole sign-in method. It signs you in with a stateless session cookie (no database), and unverified emails are rejected automatically. Your Google identity is used only to create your account and give you a unique deposit address; it&rsquo;s never shared or sold.</p>
</div></div></div>
</div>
<div class="faq-item" data-category="access" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">Access</span>
<span class="q-text">Is my API key shared with other users?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>No. Your <code>dr_u_&hellip;</code> key is unique to your account &mdash; only you ever see it (once, at signup). The many upstream keys pooled behind the router are never exposed to you or anyone else. Your request contents are forwarded and not logged beyond a status line.</p>
</div></div></div>
</div>
<div class="faq-item" data-category="access" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">Access</span>
<span class="q-text">What can I do in the dashboard?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>The <a href="dashboard.html">dashboard</a> shows live model and target counts, a searchable model grid with provider badges, and a streaming playground where you can chat with any model and watch tokens arrive over SSE. It uses your session to authenticate automatically.</p>
</div></div></div>
</div>
<!-- ============ TECHNICAL ============ -->
<div class="faq-item" data-category="technical" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">Technical</span>
<span class="q-text">Is the API OpenAI-compatible?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>Yes. <code>POST /v1/chat/completions</code> and <code>GET /v1/models</code> match the OpenAI shape, so any client that accepts a custom base URL works — the OpenAI SDK, LangChain, LiteLLM, pi, curl. Full request/response details are in the <a href="docs.html">docs</a>.</p>
</div></div></div>
</div>
<div class="faq-item" data-category="technical" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">Technical</span>
<span class="q-text">What is the base URL and how do I authenticate?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>Base URL is <code>https://apiarium-labs.hf.space/v1</code>. Send your key as <code>Authorization: Bearer &lt;key&gt;</code>. If you're signed in via Google, your browser session cookie also works for same-origin dashboard requests.</p>
</div></div></div>
</div>
<div class="faq-item" data-category="technical" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">Technical</span>
<span class="q-text">How are failures and rate limits handled?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>On a 401, 402, 403, 429, or 5xx the router marks that target down, rotates to the next one, and retries — up to 5 attempts per request. If every target is exhausted it returns 503. A bad model name returns 404 before any upstream call.</p>
</div></div></div>
</div>
<div class="faq-item" data-category="technical" data-open="false">
<button class="faq-q" aria-expanded="false">
<span class="q-tag">Technical</span>
<span class="q-text">Why is my streaming response dropping lines?</span>
<svg class="chevron" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
</button>
<div class="faq-a-wrap"><div class="faq-a"><div class="faq-a-inner">
<p>The router filters the SSE stream to emit only valid <code>data:</code> lines and blank separators, because some clients choke on upstream commentary. If output looks truncated, the upstream likely hit its token or time limit — add a higher <code>max_tokens</code> or retry. If a non-streaming request timed out, an upstream was slow and all retries were spent.</p>
</div></div></div>
</div>
</div>
<!-- empty state (shown by JS when no results) -->
<div class="faq-empty" id="faq-empty" style="display:none" role="status">
<span class="emoji">🫧</span>
<p>No questions match your search. Try a different word or category.</p>
</div>
<!-- footer CTA -->
<section class="faq-cta" data-od-id="faq-cta">
<h2>Still have questions?</h2>
<p>Skim the full API reference, or open the dashboard playground to try a request live.</p>
<a class="btn-primary" href="docs.html">Read the docs</a>
</section>
</div><!-- /.container -->
<div data-site-footer></div>
</main>
<!-- SVG sprite (cloud symbol) -->
<svg width="0" height="0" style="position:absolute" aria-hidden="true">
<symbol id="cloud" viewBox="0 0 200 100">
<path fill="currentColor" d="M44,82 C24,82 18,58 38,53 C32,32 62,26 74,42 C80,22 116,22 122,44 C142,32 168,48 158,68 C172,72 172,90 152,90 L54,90 C40,92 35,88 44,82 Z" />
</symbol>
</svg>
<script src="js/layout.js?v=20260620b"></script>
<script src="js/motion.js?v=20260620b"></script>
<script src="js/parallax.js?v=20260620b"></script>
<script src="js/faq.js?v=20260620b"></script>
</body>
</html>