Présentation de Wire

Wire est un conteneur de contexte pour les agents IA, stockant des connaissances traitées (entrées, embeddings, graphes de connaissances et de provenance) interrogées via MCP. Depuis le début, chaque conteneur était un Cloudflare Durable Object. Cependant, nous avons reconstruit le runtime du conteneur et l'avons benchmarké contre l'ancien sur des données identiques.

Limites structurelles de Durable Objects

Nous avons identifié quatre limites structurelles qui nous ont poussés à quitter Durable Objects : 1. L'index vectoriel vivait en dehors de l'objet, ce qui nécessitait un saut de réseau sur le chemin le plus chaud et une deuxième copie d'état pouvant dériver. 2. Nous voulions le calcul à côté des données, mais seul un petit slice de cela pouvait s'exécuter où les données vivaient. 3. Le placement est limité au moment de la création et le calcul est toujours partagé, ce qui signifie qu'un objet créé à Londres servira toujours un agent à Virginie, et qu'il n'est pas possible d'acheter une capacité dédiée pour un seul locataire. 4. Il n'est pas possible d'héberger soi-même un Durable Object, ce qui pose problème pour les équipes réglementées qui souhaitent exécuter des conteneurs sur leur propre infrastructure.

Nouvelle architecture

Nous avons construit une nouvelle architecture dans laquelle chaque organisation reçoit un processus hôte (Bun) sur Fly Machines pour tous ses conteneurs. Un conteneur est un fichier SQLite avec l'index vectoriel intégré via sqlite-vec, ce qui permet la récupération des candidats en interne. Les appels de modèle, l'incorporation de requête et la réévaluation sont toujours effectués à l'extérieur. Les instantanés sont stockés dans le stockage d'objets, ce qui permet à un conteneur de se reconstruire byte par byte n'importe où. Un routeur par région place les conteneurs à proximité de l'appelant.

Résultats et analyse

Nos tests ont montré des gains significatifs en termes de temps de réponse, avec des appels d'outils chauds qui passent de 0,4 seconde avec des pointes à 2 secondes à 0,3 seconde stable. Les conteneurs inactifs se réveillent en 1,4 seconde contre 3,7 secondes auparavant. Les gains de récupération (recall@5 de 78,1% à 89,1%) ne sont pas uniquement dus à l'architecture, mais également au nouveau modèle d'incorporation. L'architecture rend les parties coûteuses peu coûteuses, permettant la recherche de nearest-neighbor exacte.