Cache de rappel

Les rappels répétés, au dixième du prix.

Activez-le par requête et WOS met en cache le résultat de recherche sous le texte de la requête, avec les mêmes règles de préfixe que le prompt caching des LLM. Tant que le cache est chaud, une requête répétée ou prolongée réutilise le résultat précédent, et la partie en cache est facturée à 10% du tarif normal par token.

Tablet et Scroll uniquement. Le cache fonctionne sur tous les modèles Tablet et Scroll, actuels et futurs. Book ne le prend pas en charge : Book raisonne sur vos mémoires et apprend entre les appels, la même question peut donc légitimement revenir avec une réponse différente, et un résultat en cache serait faux par conception. Envoyer cache_control à Book renvoie un 403 clair.

Une conversation, trois tours

Voici ce qui se passe réellement quand un agent continue de parler à sa mémoire. À chaque tour, la conversation accumulée est envoyée comme requête, avec cache_control activé.

writeTour 1 - « Alice : J’ai déménagé à Lisbonne au printemps dernier. »

La requête complète est recherchée et mise en cache : entrée à 2x (TTL de 5 minutes).

extendTour 2 - le même texte plus « Bob : Quel temps fait-il là-bas ? »

Seule la phrase de Bob est indexée et recherchée. L’ancienne partie coûte 0,1x, la nouvelle phrase 2x, et le cache se termine désormais sur elle.

hitTour 3 - exactement la même requête encore (un réessai, un rafraîchissement)

Aucun appel au moteur. Tout à 0,1x : la remise de 90%.

Les tarifs

OpérationFacturation des tokensSignification
Écriture du cache - TTL 5 minutesLa première requête. Son résultat est conservé 5 minutes, et chaque lecture fait glisser la fenêtre vers l’avant.
Écriture du cache - TTL 1 heureLa première requête, conservée pendant une heure entière.
Lecture du cache - hit ou hit de préfixe0.1×Chaque requête après l’écriture : la partie en cache coûte un dixième du tarif normal par token.

Ce que ça économise

Un exemple concret : votre agent envoie une conversation de 3 000 tokens comme requête et la répète ou la prolonge 10 fois en cinq minutes. Sans cache, cela fait 30 000 tokens d’entrée au plein tarif. Avec un cache de 5 minutes, c’est 6 000 pour la première écriture (2x) plus environ 2 700 pour les neuf lectures en cache : 8 700 tokens facturés, 71% de moins. Plus la conversation dure, plus l’économie grandit.

La règle du préfixe

La correspondance se fait sur le début de la requête. Si le début reste identique et que du nouveau texte est seulement ajouté à la fin, la partie en cache est réutilisée et seule la nouvelle partie est recherchée. Si quelque chose change avant la fin du texte en cache, rien ne peut être réutilisé.

prefix match
cached    [ A B C D E F G ]

○   [ A B C D E F G ] E
✗   [ B C D E F G ] E

hit - le début est inchangé, E est la seule partie nouvelle
miss - le début a changé, toute la requête est donc recherchée et mise en cache à nouveau

Trois règles à retenir

  • Prolonger remet en cache jusqu’à la nouvelle fin. Après [A B C D E F G] + E, le cache se termine désormais à E : la fin est facturée une fois au tarif d’écriture, et le tour suivant peut de nouveau faire correspondre tout A..E comme préfixe.
  • Un seul préfixe contigu par requête. Une requête ne peut pas être découpée en deux segments de cache ; seul son début peut correspondre.
  • Les écritures invalident instantanément. Tout store, store-turn, bulk-store, forget, supersede ou suppression du store jette son cache : une réponse en cache ne peut jamais être périmée.

Comment l’activer

hits = mem.search(
    "...the conversation so far...", user_id="alice",
    cache_control={"ttl": "5m"},   # or "1h"
)
const hits = await mem.search(
  "...the conversation so far...", "alice", 10,
  { cache_control: { ttl: "5m" } },   // or "1h"
);
let hits = mem.search_with(
    "...the conversation so far...", "alice", 10,
    serde_json::json!({"cache_control": {"ttl": "5m"}}),   // or "1h"
).await?;
curl -X POST https://api.wontopos.com/api/v1/memory/search \
  -H "X-API-Key: $WOS_API_KEY" -H "Content-Type: application/json" \
  -d '{"user_id":"alice",
       "query":"...the conversation so far...",
       "cache_control":{"ttl":"5m"}}'   # or "1h"
Réponse - l’objet cache indique ce qui s’est passé
{ "memories": [ ... ],
  "cache": { "status": "hit",              // "write" | "hit" | "extend"
             "ttl": "5m",
             "cache_read_input_tokens": 412,
             "cache_creation_input_tokens": 0 } }

Aucun SDK n'est nécessaire pour tout cela. Le caching est un champ sur un appel HTTP, il fonctionne donc depuis n'importe quel langage de programmation. L'onglet curl est la recette universelle, et les SDK Python, TypeScript et Rust ne sont que des enrobages pratiques du même appel.

Le cache est isolé par store et par modèle dans votre espace de travail, et il est désactivé par défaut : sans cache_control, rien ne change dans vos requêtes.