haiku.rag/docs/capabilities/analysis.md
2026-07-24 15:26:17 +03:00

1.7 KiB

Analysis Capability

AnalysisCapability adds search, citations, and sandboxed Python computation over the document corpus. Use it for counts, aggregation, comparison, structural traversal, and section-scoped reading.

It is deferred by default, keeping its substantial instructions and tool schemas out of context until the model chooses to load it.

Tools

Tool Purpose
analysis_search(query, limit?) Search the corpus for evidence.
analysis_execute_code(code) Run Python against the virtual document filesystem.
analysis_cite(chunk_ids) Register retrieved or filesystem-derived chunk IDs.

The sandbox exposes documents under /documents/{document_id}/ with metadata.json, content.txt, items.jsonl, and toc.json.

Compose with RAG

from pydantic_ai import Agent
from haiku.rag.capabilities.analysis import create_capability as analysis
from haiku.rag.capabilities.rag import create_capability as rag

agent = Agent(
    "openai:gpt-5",
    capabilities=[
        rag(db_path="my.lancedb"),
        analysis(db_path="my.lancedb"),
    ],
)

For the high-level convenience API:

from haiku.rag.client import HaikuRAG

async with HaikuRAG("my.lancedb") as client:
    result = await client.analyze("Which quarter had the highest revenue?")
    print(result.answer)

State

When dependencies expose a state dictionary, AnalysisState is stored under "analysis". It contains the document filter, code execution log, searches, and citations. Per-run searches and executions reset automatically; the filter and citation index persist.

The capability lazily opens both LanceDB and the sandbox only after it is loaded and a tool requires them. Resources close at the end of the agent run.