experiment log
Ingestion Pipeline Scaffold — 2026-06-26
- File
2026-06-26_ingestion_pipeline_scaffold.md- Size
- 4.5 KB
- SHA-256
4f1a00b1a1a01a18…
Ingestion Pipeline Scaffold — 2026-06-26
Question
Can we build a single ingestion scaffold that turns a long utterance into chunk-level traces and a single within-turn digest, so that future ablations (chunking strategy, salience filter, embedder choice, gate architecture) are config flags rather than separate implementations?
Method
Add a new IngestionPipeline module (src/oczy/experiments/ingestion.py)
upstream of CortexAgent.metabolize(). The pipeline is selected by string
flags in a single config dict and emits:
ChunkSignalobjects → stored directly inneural_hippocampus(bypassing the digestive gate, per the spec)TurnDigestobject → consumed byDigestiveGate.ingest_digest()
Implemented stages:
| stage | flag options |
|---|---|
| Chunker | fixed-window, sentence, paragraph, recursive |
| Salience | pass-through, correction-marker, lexical-novelty, centroid-cosine |
| Embedder | none, same-lm, identity (foreign placeholder) |
| Aggregator | stats |
| Observation mode | parallel, sequential |
DigestiveGate.ingest_digest(digest) maps the digest back onto the existing
scalar ingest() surface:
drift←digest.drift_maxcorrection_signal←digest.correction_fractionnovelty←density + novelty_spreadcritic_correction_prob←digest.critic_prob_max
The entire pipeline is gated by CortexAgentConfig.use_ingestion_pipeline and
defaults to False, preserving the existing single-trace metabolism path.
Results
src/oczy/experiments/ingestion.py: 660 lines, pure NumPy, no new dependencies.src/oczy/experiments/tests/test_ingestion.py: 19 tests covering chunking, salience, embedding drift, observation modes, top-K pruning, gate digest mapping, and CortexAgent end-to-end wiring.- Related verification:
test_ingestion.py: 19 passedtest_digestive_gate.py: 13 passedtest_cortex_agent.py: 11 passed- Full fast suite:
290 passed, 17 deselected ruff checkclean on modified files
bash autoresearch.shrun #79:code_qa_accuracy = 1.0with the pipeline gated off (default).
Smoke test: correction-marker salience on a long utterance
"This is a long sentence that should be split into chunks. "
"No, this part is a correction and should score high."
With a 10-token fixed window:
| chunk | salience | is_correction |
|---|---|---|
This is a long sentence that should be split into |
0.00 | False |
split into chunks. No, this part is a correction a |
1.00 | True |
correction and should score high. |
0.00 | False |
TurnDigest reports correction_fraction=0.33 and
novelty_spread=0.47.
Interpretation
- A single scaffold can support the full design matrix.
- Within-turn resolution is now available to the digestive gate without changing the gate's scalar surface.
- Chunking and salience filtering are decoupled from embedding cost: the salience stage runs before embedding and can cull chunks before expensive same-LM forwards.
Implication for architecture
This is row 4 of the ablation ladder (chunking + salience + stats gate). Next steps:
- Build needle-per-turn stressors with position and length sweeps.
- Run ladder rows 0–4 to isolate truncation vs chunking vs salience vs gate resolution.
- Decide the embedder fork: same-LM forwards vs foreign CPU embedder + learned projection.
Trade-offs
same-lmembedder is faithful but expensive per chunk; the salience filter must be good enough to keep embedding counts sublinear in turn length.- Foreign embedder + projection is cheaper but adds a trainable projection layer and potential recall-fidelity loss.
- Sequential observation mode is more faithful to reading order but creates order-dependence; parallel mode is simpler and cheaper.
Open questions
- What tokenizer should the fixed-window chunker use for token spans? Current implementation uses a whitespace estimate; real token spans would improve throughput accounting.
- Should the salience filter share a running centroid across turns or reset per turn?
- How does
TurnDigestinteract withauto_consolidatepressure calculation?
Artifacts
src/oczy/experiments/ingestion.pysrc/oczy/experiments/digestive_gate.py(addedingest_digest)src/oczy/experiments/cortex_agent.py(addeduse_ingestion_pipeline)src/oczy/experiments/tests/test_ingestion.pysrc/oczy/experiments/logs/SUMMARY.md
Commits
ffbe2b9— Add configurable IngestionPipeline scaffold.928eb3c— Update experiments/logs/SUMMARY.md with run #79 result.