v1.5 — sessions durables, reprise sur point de contrôle & approbations signées

Un protocole canonique pour chaque fournisseur d’IA

SDK IA TypeScript pur · web-first · multi-fournisseur

Anthropic, OpenAI, xAI Grok, Google Gemini et Vertex AI derrière un seul protocole de streaming canonique. Zéro dépendance runtime, déterministe par conception — fonctionne partout où fetch fonctionne.

npm install @deuz-sdk/core

Une seule surface d’API pour

  • Anthropic
  • OpenAI
  • xAI Grok
  • Google Gemini
  • Vertex AI
  • Yunwu

Flux delta canonique

Chaque réponse de fournisseur est normalisée en un flux StreamPart typé avant que votre code ne la voie. Aucun SSE brut ne s’échappe jamais.

Boucle d’outils agentique

Exécution d’outils parallèle et auto-réparatrice avec garde-fous anti-emballement, arrêts budgétaires, portes d’approbation et sous-agents imbriqués.

Cœur edge-safe

API Web uniquement — pas de node:*, pas de Buffer, pas d’état ambiant. Node, Deno, Bun, Vercel Edge et Cloudflare Workers.

Déterministe & testable

Horloge, aléatoire, fetch et clés sont injectés via une seule couture Dependencies. Tests golden-replay, sans réseau réel.

Mémoire, RAG & skills

Pipeline mémoire façon mem0, récupération hybride BM25 + vecteurs et divulgation progressive SKILL.md — le tout edge-safe.

Sortie structurée & wire UI

generateObject / streamObject typés par schéma, hooks React et un wire SSE versionné que vous possédez de bout en bout.

Le streaming en trois lignes

streamChat retourne de façon synchrone et ne lève jamais d’exception — la requête démarre paresseusement à la première lecture. Changez la factory pour changer de fournisseur ; rien d’autre ne bouge.

Quickstart
// 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);
}