Repository navigation
fix(telemetry): measure response bytes and retrieval work (W0-1) - #468
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Symptôme
W0-1 / ⚪2 : les opérations instrumentées écrivaient
bytes_out=0, tandis quequery_methodology,session_startetauto_recallétaient absents du journal.Le chemin de récupération et le travail effectif du reranker n'étaient pas mesurés.
Cause racine
Contrat de mesure incomplet :
_telemetry_wrapn'envoyait pas la réponse aucompteur. Les erreurs et validations de sortie sont converties par le SDK après
le handler ; les compter dans le handler seul laisse encore des zéros faux.
Les hooks ne possédaient pas de frontière de mesure, et le chemin du journal
ignorait
CORTEX_CLAUDE_DIR.Changement
dans un middleware de composition ; publier chaque échantillon une seule fois.
Les appels directs aux handlers mesurent leur résultat sérialisé.
encodage et conversion des fins de ligne, sans reconstruire l'encodeur stdout.
tieretreranked_countdans un contexte propre à l'opération,restauré après les appels imbriqués. Le compteur ne croît qu'après une inférence
réussie ; il vaut zéro si le modèle est sauté ou échoue.
CORTEX_CLAUDE_DIRpour le journal et signaler ses échecs d'écriture.Documenter la frontière de mesure et la signification des champs dans PRIVACY.md.
Les poids de récupération, les décisions du reranker et les réponses ne changent
pas.
tier=pgnomme le pipeline actuellement exécuté, y compris avec son storeSQLite ; les anciennes routes conservent
simple/mixed/deep.tier=nullsignifie qu'aucune route instrumentée n'a été exécutée. Un hook silencieux et un
handler direct qui lève sans réponse gardent légitimement
bytes_out=0.Preuve
Base :
10a0f38152d15625b58b4027ea86eb7705377ae7.Commit testé :
24f7a398abd3371d983421ae94ff177e2ecfb5c9; aucun rebase.Checkout propre :
/private/tmp/cortex-green-w0-1-validation, macOS arm64,Python 3.12.11, versions installées depuis
uv.lock.Conditions relevées avant validation :
getconf NPROCESSORS_ONLN→10;uptime→load averages: 5.66 6.04 4.93;df -h /→68Gidisponibles.Avant la suite complète : charge
5.65 5.44 5.19;67Gidisponibles aprèspréparation du checkout. Un seul travail lourd local à la fois.
Après validation : charge
6.84 6.33 5.62, espace disponible67Gi.Avant correction, le test du wrapper sur les handlers publics
recall({})etremember({})échouait sur la première assertion de volume :bytes_out=0malgré une réponse non vide (
1 failed, 1 passed). Après correction, les testscomparent le volume à la sérialisation du SDK et au stdout effectivement écrit.
Signaux d'acceptation W0-1 présents dans les tests :
test_real_store_round_trip_records_nonempty_response_sizes: vrai storeSQLite jetable, rappel suivi d'une écriture, exactement les deux échantillons,
bytes_out>0,tieretreranked_countprésents.test_isolated_session_records_all_context_operations: session avec sourcessimulées, journal jetable contenant exactement
query_methodology,session_start,auto_recall; tailles du banner et de l'injection exactes.test_sdk_text_response_is_counted_exactly_once: vrai client/serveur SDK enmémoire, succès, exception et rejet du schéma de sortie ; volume, statut et
compteurs concordent avec le résultat reçu.
restauration de stdout, scopes concurrents/imbriqués et worker tardif.
Gates exécutées dans cet ordre :
Environnement des commandes pytest ci-dessous :
PostgreSQL est volontairement inaccessible : les tests qui le requièrent sont
signalés comme sautés, pas comme validés. La suite redirige tous ses chemins de
données vers des arbres jetables. Aucun score de qualité de rappel ni gain
énergétique n'est revendiqué par cette PR d'instrumentation.
Conformité
fix/green-telemetry, commit conventionnel, une PR W0-1 ;fusion laissée au propriétaire.
method-size: record, rendue inutile par l'extraction des étapes de publication.les sources de la sérialisation et des conversions sont nommées dans le code.
La dette historique conservée est détaillée ci-dessous.
/tmp,aucun shim ni mécanisme retiré.
lecture/écriture ni de revendication de floors. L'acceptation spécifique W0-1
est démontrée par les tests ci-dessus.
Candidats issues
core/telemetry.pyconserve ses imports historiquesosetpathlib, déjàprésents dans la baseline de la base. Cette PR corrige la résolution du chemin
existant sans introduire de nouvel import de couche ; extraire tout le sink
demanderait une tâche distincte.
query_methodology.py,session_start.py,auto_recall.pyet certaines fonctions de récupération dépassent déjà les caps.Le diff ajoute leurs points d'observation sans absorber leur refonte générale.
benchmarks/energy/présente des erreurs Ruffpréexistantes ; il n'entre pas dans W0-1. La décision du propriétaire pour W0-2
reste nécessaire. Le checkout isolé vérifie l'intégralité des fichiers de la PR.
mainliste encore des jobs individuels, contrairementau check agrégé décrit par CONTRIBUTING.md ; traitement prévu par W1-2.
Runbook
Aucune migration, purge ou opération de maintenance sur la production.
Après fusion, redémarrer l'hôte MCP pour charger l'instrumentation.