RikaidoDeveloper

COMMENCER

Un premier appel

Une recette, ses contraintes, un verdict. Le tout tient dans une requête.

La recette

Le harnais lit la plus petite structure sur laquelle un verdict peut se rendre : un titre, des ingrédients chiffrés, des étapes dans l’ordre. Une recette écrite par ChatGPT, par ton propre modèle ou lue dans un livre a déjà cette forme.

recette.json
{
  "recipe": {
    "title": "Satay de poulet",
    "ingredients": [
      { "name": "cuisse de poulet", "quantity": "600", "unit": "g" },
      { "name": "beurre d’arachide", "quantity": "80", "unit": "g" },
      { "name": "sel", "quantity": "1", "unit": "c. à thé" }
    ],
    "steps": [
      { "instruction": "Saisir les cuisses jusqu’à ce qu’elles soient bien dorées.", "tempC": 200 },
      { "instruction": "Fouetter la sauce jusqu’à ce qu’elle nappe la cuillère." }
    ]
  },
  "constraints": { "allergies": ["arachide"] }
}

L’appel

curl
curl https://api.rikaido.app/v1/harness/validate \
  -H "Authorization: Bearer $RIKAIDO_KEY" \
  -H "Content-Type: application/json" \
  -d @recette.json
TypeScript
const res = await fetch("https://api.rikaido.app/v1/harness/validate", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.RIKAIDO_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ recipe, constraints: { allergies: ["arachide"] } }),
});
const verdict = await res.json();
if (!verdict.safe) throw new Error("Refusée : " + verdict.issues[0].message);
Python
import os, requests

r = requests.post(
    "https://api.rikaido.app/v1/harness/validate",
    headers={"Authorization": f"Bearer {os.environ['RIKAIDO_KEY']}"},
    json={"recipe": recipe, "constraints": {"allergies": ["arachide"]}},
)
verdict = r.json()
if not verdict["safe"]:
    raise ValueError(verdict["issues"][0]["message"])

Ce qui revient

200
{
  "ok": false,
  "safe": false,
  "issues": [
    {
      "code": "allergen-violation",
      "severity": "error",
      "safety": true,
      "message": "",
      "constraint": "peanut",
      "ingredient": "beurre d’arachide"
    },
    { "code": "salt-out-of-band", "severity": "warn", "message": "" }
  ],
  "classification": { "category": "savory", "baked": false },
  "constraints": { "allergies": ["arachide"], "dietaryPrefs": [], "exclusions": [] },
  "feedback": ""
}

La réponse porte aussi un en-tête, Rikaido-Usage-Op: validate, qui dit ce que l’appel a coûté sans un deuxième appel. La page suivante lit le verdict ligne par ligne.