Usage Guide
Real-world examples - streaming, structured output, multi-user BYOK servers, and diagnostics. All completely free ($0 cost).
Streaming
import { createFreeRouter } from "@freerouter/sdk"
import { streamText } from "ai"
const freerouter = createFreeRouter()
const result = streamText({
model: freerouter.languageModel("free:fast", {
groq: process.env.GROQ_API_KEY,
}),
prompt: "Write a short poem about artificial intelligence",
})
for await (const delta of result.textStream) {
process.stdout.write(delta)
}Structured output
import { createFreeRouter } from "@freerouter/sdk"
import { generateObject } from "ai"
import { z } from "zod"
const freerouter = createFreeRouter()
const { object } = await generateObject({
model: freerouter.languageModel("free:auto", {
groq: process.env.GROQ_API_KEY,
}),
schema: z.object({
name: z.string(),
age: z.number(),
email: z.string().email(),
}),
prompt: "Extract name, age, and email from: John Doe, 28, john@example.com",
})
console.log(object)
// { name: "John Doe", age: 28, email: "john@example.com" }AI SDK Compatibility
generateObject and streamObject work with any alias. The model resolves to a provider that supports the required capabilities.
Multi-user server (BYOK per request)
Each user brings their own API keys. Health state is isolated per key fingerprint - user A's rate-limit never affects user B.
import { createFreeRouter } from "@freerouter/sdk"
import { generateText } from "ai"
const freerouter = createFreeRouter()
Bun.serve({
port: 3000,
async fetch(req) {
const { prompt } = await req.json()
const groqKey = req.headers.get("X-Groq-Key")
const googleKey = req.headers.get("X-Google-Key")
const keys: Record<string, string> = {}
if (groqKey) keys.groq = groqKey
if (googleKey) keys.google = googleKey
const { text } = await generateText({
model: freerouter.languageModel("free:auto", keys),
prompt,
})
return Response.json({ text })
},
})Key isolation
Health is tracked per (provider, keyFingerprint) pair. Two users with different Groq keys have completely independent health entries.
Diagnostics
import { createFreeRouter } from "@freerouter/sdk"
const freerouter = createFreeRouter()
// List all ~87 models
console.table(
freerouter.models().map((m) => ({
provider: m.provider,
model: m.modelId,
capabilities: m.capabilities.join(", "),
context: `${(m.contextWindow / 1000).toFixed(0)}K`,
}))
)
// Check health for your keys (scoped - never leaks other users)
const health = freerouter.healthFor({ groq: process.env.GROQ_API_KEY! })
console.log(`Groq state: ${health.groq.state}`)
// "healthy" | "rate-limited" | "down"