Date: 2026-03-21 (Saturday morning autonomous reflection)
Status: ✅ Parallel ingestion implemented,
Implemented parallel message processing in scripts/paced_ingestion.py:
- New
--parallelismparameter: Default 12 (matches NUC capacity) - Chunked async processing: Uses
asyncio.gather()to process messages concurrently - All error handling preserved: Per-message tracking, halt logic, logging intact
- Test validated: Processed 9 messages in 3 parallel chunks, all error handling worked correctly
Performance Impact:
- Before: Sequential processing, ~78s per message
- 1,334 messages × 78s = 40+ hours
- After: Parallel processing, 12 messages at a time
- 1,334 messages / 12 × 78s = ~8,658s = 2.4 hours
- Speedup: ~17x faster
Commit: 60d955c - "feat(graphiti): add parallel ingestion to fix 40-hour backlog"
Test run result: 9/9 messages failed with:
Error code: 429 - insufficient_quota
'You exceeded your current quota, please check your plan and billing details.'
Configuration (pps/docker/.env):
- Provider:
openai - Model:
text-embedding-3-small - Dimensions: 1024
- Key: Jeff's PPS project key (rotated 2026-02-23, $10 credit + auto-recharge capped)
The credits ran out.
Two paths forward:
Pros:
- Quick unblock (~5 minutes)
- Keep existing graph (24,612 messages already ingested)
- Hybrid mode working well (NUC LLM + OpenAI embeddings)
Cons:
- Ongoing cost (minimal for text-embedding-3-small at 1024-dim)
- Dependency on external service
Action: Add credits to OpenAI account, run ingestion
Pros:
- Zero ongoing cost
- Full local control
- NUC has capacity (nomic-embed-text-v1.5 validated)
Cons:
- Requires nuking existing graph (vector spaces incompatible)
- Need to re-ingest all ~26,600 messages (24,612 + 1,975 pending + 271 failed)
- Time cost: ~26,600 messages / 12 × 78s = ~4.7 hours
- Risk: losing existing graph structure (19,000+ messages of relationships)
Action:
- Backup Neo4j database
- Update
.envto local embeddings (nomic-embed-text-v1.5, 768-dim) - Wipe Neo4j graph
- Re-ingest all messages from scratch
Config change:
# pps/docker/.env
GRAPHITI_EMBEDDING_PROVIDER=local
GRAPHITI_EMBEDDING_MODEL=text-embedding-nomic-embed-text-v1.5
GRAPHITI_EMBEDDING_DIM=768Option 1 (add credits) is recommended:
- Faster unblock (minutes vs hours)
- Preserves existing graph quality
- Cost is minimal for embeddings
- Can always switch to local later if needed (will require graph wipe then too)
Once credits are added OR local embeddings configured:
-
Small validation run:
python scripts/paced_ingestion.py --parallelism 3 --batch-size 9 --max-batches 1
-
Check results:
- Verify messages ingested successfully
- Check Neo4j for new entities/relationships
- Review logs for errors
-
Full backlog ingestion:
python scripts/paced_ingestion.py --parallelism 12 --batch-size 50 --pause 10
-
Monitor:
- Watch
scripts/ingestion.log - Check progress: "Progress: X ingested, Y failed, Z pending"
- Expected duration: ~2.4 hours
- Watch
scripts/paced_ingestion.py- Added parallel processing- This status doc
- #153 - Parallel ingestion (implementation complete, testing blocked)
- Graph backlog: 1,975 messages pending (was 1,334 when I started, grew during testing)