One canonical wire for every AI provider
Pure · Web-first · Multi-provider AI SDK for TypeScript
29 providers behind one StreamPart delta stream. Zero runtime dependencies — SQLite, Redis and Postgres packs, guardrails and handoffs in the loop, MCP that connects itself. Runs anywhere fetch runs.
npm install @deuz-sdk/core- provider ids
- 29
- subpaths
- 53
- database packs
- 3
- mostly additive
- 1.9 → 2.0
One API surface across
- Anthropic
- OpenAI
- Google Gemini
- xAI Grok
- Azure
- Bedrock
- Ollama
- LM Studio
+ 21 more, including Ollama and LM Studio
Canonical delta stream
Every provider response is normalized to one typed StreamPart stream before your code sees it. No raw SSE ever leaks through.
Agentic loop, now with policy
Parallel self-healing tools, nested sub-agents, plus 2.0 guardrails (pass / block / rewrite) and handoff() to transfer the whole run.
Point persistence at a database
SQLite, Redis and Postgres packs behind memory, chat, session and run seams. FTS5 + pgvector when you want them — zero deps when you do not.
Zero-config MCP
Name servers on the call; the loop connects, namespaces, hot-refreshes and closes them. OAuth 2.0, sampling, roots and ping-verified reconnect.
Edge-safe core
Web APIs only — no node:*, no Buffer, no ambient state. Node, Deno, Bun, Vercel Edge and Cloudflare Workers.
Speech, transcription, video
generateSpeech, transcribe and generateVideo as their own model kinds — OpenAI, ElevenLabs, Deepgram, and any OpenAI-Videos relay.
Streaming in three lines
streamChat returns synchronously and never throws — the request starts lazily on first read. Swap the factory to change provider; nothing else moves.
Get started// swap the factory to swap providers
import { streamChat } from '@deuz-sdk/core';
import { createAnthropic } from '@deuz-sdk/core/anthropic';
const anthropic = createAnthropic({ apiKey });
const res = streamChat({
model: anthropic('claude-opus-4-8'),
messages: [{ role: 'user', content: 'Hello!' }],
});
for await (const chunk of res.textStream) {
process.stdout.write(chunk);
}For your coding agent
Your coding agent already knows this SDK
Two Agent Skills ship with the repository, so an agent writes against the real surface instead of reconstructing it from memory. Every symbol in them is resolved against the export table on each commit and every example is compiled, so a name that does not exist cannot be merged.
How they are verified$ npx skills add Deuz-AI/Deuz-SDKdeuz-sdkThe whole surface: the invariants, a task-to-file router, and thirteen reference files loaded only when a task needs them.
migrate-from-ai-sdkThe verified name-by-name port from ai and @ai-sdk packages.