Skip to content

Bibliothèque JavaScript

sh
npm install @spavik/client
js
import { Spavik } from '@spavik/client';

const spavik = new Spavik();                                    // lit SPAVIK_API_KEY
const model  = await spavik.train('churn.csv', { target: 'churn' });
console.log(await model.predict({ plan: 'pro', seats: 12 }));

Aucune dépendance en production. Node 18 ou plus, ainsi que les environnements edge qui fournissent fetch et WebCrypto. Livrée en ESM comme en CommonJS.

Les opérations

AppelCoût
spavik.validate(data, { target })gratuit
spavik.train(data, { target })gratuit
spavik.backtest(data, { target, horizon })gratuit
spavik.forecast(data, { target, horizon })horizon x séries
spavik.models()gratuit
spavik.usage()gratuit
model.predict(rows)les crédits du moteur par ligne, 1 sur le moteur par défaut
model.submitOutcomes(outcomes)gratuit
model.performance(days)gratuit
model.refresh()gratuit
model.predictions()gratuit
model.archive(), spavik.archive(modelId)gratuit
spavik.restore(modelId)gratuit

models() est un itérateur asynchrone ; models({ status: 'archived' }) liste ce qui a été mis de côté. Un modèle connaît son engine, sa target et ses features, les colonnes que predict attend.

js
for await (const model of spavik.models()) console.log(model.id, model.name, model.features);

validate() et backtest() disent, gratuitement, si une table vaut un entraînement et si une série vaut une prévision, chacun avec un verdict et la première chose à corriger. archive() libère la place d'un modèle dans le plan sans rien perdre ; spavik.restore(modelId) le remet en service, par identifiant. Même comportement et mêmes champs que la bibliothèque Python.

Vos données, telles qu'elles sont

Tableau d'objets, chemin de fichier CSV ou JSON, CSV brut, ou un objet seul : la bibliothèque accepte les quatre et rend aux nombres leur type.

Les types

Les définitions TypeScript sont livrées avec le paquet. L'autocomplétion couvre toutes les opérations, leurs options et les classes d'erreur, sans rien configurer.

Les mêmes refus qu'en Python

Ce que la bibliothèque Python refuse, celle-ci le refuse aussi, avec le même message et au même moment. Une suite de conformité rejoue le même scénario sur les deux, et sur le serveur MCP.

js
await spavik.train(huitLignes, { target: 'churn' });
// SpavikDataError: training needs at least 10 rows, 8 provided. Nothing was sent.

Les erreurs

js
import { SpavikCreditsExhausted } from '@spavik/client';

try {
  await model.predict(rows);
} catch (exc) {
  if (exc instanceof SpavikCreditsExhausted) {
    console.error(exc.code, exc.balance, exc.requestId);
  }
}

Ce sont les mêmes classes qu'en Python, sous les mêmes noms.

La prévision

L'API répond en CSV. points() vous rend des lignes exploitables, csv le texte d'origine.

js
const p = await spavik.forecast('ventes.csv', { target: 'ventes', horizon: 7 });
await p.points();   // [{ date: '2026-08-01', ventes_prediction: 118.4, ... }]
p.csv;              // le CSV tel que l'API l'a rendu
p.cout;             // 7

Webhooks

js
import { verifier } from '@spavik/client';

const evenement = await verifier(corpsBrut, request.headers, secret);

Avec Express :

js
app.post('/webhooks/spavik', express.raw({ type: 'application/json' }), async (req, res) => {
  try {
    await verifier(req.body, req.headers, process.env.SPAVIK_WEBHOOK_SECRET);
    res.sendStatus(200);
  } catch {
    res.sendStatus(400);
  }
});

Avec Hono :

js
app.post('/webhooks/spavik', async (c) => {
  const corps = await c.req.arrayBuffer();
  await verifier(corps, c.req.raw.headers, c.env.SPAVIK_WEBHOOK_SECRET);
  return c.body(null, 200);
});

Passez les octets reçus tels quels : un corps analysé puis réécrit ne produit plus la même signature.

Les tentatives suivantes

js
new Spavik({ maxRetries: 1 });             // aucune nouvelle tentative
new Spavik({ backoff: (n) => n * 1000 });  // attente linéaire

Comprendre ce qui se passe

sh
SPAVIK_LOG=debug node mon-script.js

La clé est masquée dans la trace.

Documentation générée pour partie depuis le contrat OpenAPI.