Skip to content

v0.4.0 - Graphs, 2x Faster and Realtime Agentic Layer

Latest

Choose a tag to compare

@DevAnimecx DevAnimecx released this 22 Oct 16:25
· 1 commit to main since this release

Version 0.4.0. Query graph, evidence packets, a durable runtime, and the performance work that makes them viable.

  • Query graph (POST /v1/graph/search, jiro graph plan|run) — the planner builds a DAG of SEARCH / FETCH / MERGE / EXTRACT / VERIFY / COMPRESS / SYNTHESIZE nodes; dispatch is ready-driven, so a node starts when its own parents finish rather than when its topological level drains.
  • Adaptive budgets — timeouts derive from a rolling per-engine p50/p95 window. --deadline-ms 0 (the new default) means "derive it".
  • Engine racing + hedging — a slow request is duplicated on an alternate engine, first success wins, and preference order decides among successes so a faster substitute cannot silently replace the requested engine.
  • MCP session_handoff — the structured brief from docs/v0.4.0/MASTER_PLAN.md §5.2, as the 22nd tool.
  • Evidence packets — results compress to claims that each carry their supporting source spans.

Performance — all four claims backed by committed artifacts

Reproduce with python benchmarks/report.py.

Claim | Target | Measured | Status -- | -- | -- | -- speed-2x | 2.0 | 81.6x | PASS efficiency-3x | 3.0 | 59.2x | PASS, caveated citation-complete | 1.0 | 1.0 | PASS setup-15 | 15 | 15/15 | PASS

The efficiency ratio is published with its quality gate stated as pending, per docs/v0.4.0/CLAIMS.md §3 — the 30 LLM-judge runs and 50 blind human spot checks have not run, so it is a tokens-per-citation measurement, not a claim of equivalent answer quality. The registry carries the caveat and benchmarks/report.py refuses to publish it without one.

The speed ratio varies with live-search latency (as low as 2.0x across runs), so the artifact records a declared cold-cache state rather than a favourable sample.

Defects fixed

  • jiro/scraping/client.py referenced _time, never imported — every search raised NameError and /search returned HTTP 500.
  • npm/package.json had been missing its closing brace since it was first added; every revision in history fails to parse.
  • Pagination returned fewer results than requested (num=9 returned 6).
  • runtime.lease_ttl_seconds shipped at 30s against a 3600s attempt timeout, so every process warned about its own defaults.

Test plan

  • Full suite: 1529 passed, 9 skipped, 1 failed
  • The one failure is tests/test_phase2.py::test_recipe_api, verified failing identically on a clean tree — pre-existing and network-dependent
  • Flagship gate: jiro graph run "what is the capital of France" --fetch-top 2 returns 20 cited claims, 8 sources, 0 gaps, 20/20 claims carrying a source
  • All four benchmark artifacts present and above target

Caveat on this branch

The commit history on this branch was rewritten into 222 small commits at the maintainer's request. The 9 original, explanatory commits are preserved at tag pre-222-backup. The final tree is byte-identical either way (be269cc). If you would rather review the 9 meaningful commits, use that tag.