pi-l1-cache im Benchmark: eine 138-”s-In-Memory-Cache-Schicht fĂŒr den pi Coding Agent
Der pi Coding Agent erlaubt Extensions, den Provider-Round-Trip mit den Events before_provider_request und after_provider_response abzufangen. Das ist genug Raum fĂŒr einen schnellen In-Memory-Cache â aber nur, wenn das Abfangen selbst billiger ist als der Round-Trip, den es spart. pi-l1-cache (v1.2.0, installierbar als npm:pi-l1-cache) ist ein bewusst minimalistischer Ansatz dafĂŒr: eine Datei, null AbhĂ€ngigkeiten, ein FNV-1a-Hash, eine harte Speichergrenze, TTLs und ein CPU-Kill-Schalter bei 95 %. Wir haben es von npm installiert, gegen eine echte pi-Session geladen und das publizierte Artefakt benchmarkt â nicht das README.
Die Kernzahl ist ehrlich und brauchbar: Jeder abgefangene Request kostet etwa 138 ”s â aber nur wenn der Request byte-identisch zu einem gecachten ist, entfĂ€llt der Provider-Round-Trip (1â3 s) komplett. Das ist das gesamte Wertversprechen, und es hat scharfe Kanten, die man kennen sollte, bevor man es einsetzt.
Wo es in pi einhakt
Der Cache sitzt zwischen Agent-Loop und Provider:
pi â [L1: RAM Map] â [L2: Redis via LiteLLM] â Provider
~138 ”s ~150 ms 1â3 s
Bei before_provider_request hasht die Extension model.id + JSON.stringify(messages) + JSON.stringify(parameters), schlĂ€gt in einer Map nach und liefert eine gecachte Antwort zurĂŒck, wenn der Eintrag frisch ist. Bei after_provider_response speichert sie die Antwort (mit einer GröBenschĂ€tzung auf JSON-LĂ€nge-Basis) und stöĂt die Eviction an. Ein 10-Minuten-setInterval rĂ€umt abgelaufene EintrĂ€ge ab und wird bei session_shutdown sauber beendet.
Die SchlĂŒsselableitung ist inhaltsadressiert: Modell, Messages und Parameter flieĂen alle in den Hash ein, der Cache antwortet also nur auf Requests, die buchstĂ€blich identisch zu einem bereits gesehenen sind. Er rĂ€t nie und generalisiert nicht.
Die Konfiguration lĂ€uft ĂŒber Umgebungsvariablen statt ĂŒber Config-Dateien:
L1_CACHE_ENABLED=false # hart aus
L1_CACHE_MAX_ENTRIES=500 # Eintragslimit (Standard 200)
L1_CACHE_MAX_MB=50 # Speicherlimit (Standard 20 MB)
L1_CACHE_TTL=7200 # TTL in Sekunden (Standard 3600)
Zur Laufzeit steuert ein einziger Slash-Command:
/l1-cache stats # EintrÀge, MB, Hit-Rate, Init-CPU
/l1-cache clear # ZĂ€hler + Map zurĂŒcksetzen
/l1-cache enable # / disable
Was wir gemessen haben
Wir haben das echte npm-Artefakt (pi-l1-cache@1.2.0) unter Node 22.23 mit den eigenen Test-Hooks der Extension benchmarkt und dann den realen Interceptor-Pfad mit einer gemockten ExtensionAPI durchgespielt â genau so, wie pi Extensions bootet.