v0.2.12
VectifyAI/PageIndexv0.2.12Aug 30, 2026by github-actions[bot]
AI Summary
Introduced the PageIndex Flash engine for faster indexing and unified the local and cloud client APIs. The release adds robust agent integration via MCP tools and introduces typed configuration classes for improved type safety.
Key Highlights
- Much faster indexing via the PageIndex Flash engine, which uses layout stats for structure and concurrent node expansion instead of round-trip LLM calls.
- Unified client API allowing code to run identically on both local and cloud modes via `PageIndexLocalClient` and `PageIndexClient`.
- Enhanced agent integration with Cloud MCP tool contracts, including adapter methods like `as_openai_tools()` and configuration bundles.
- Flexible configuration via `index=`/`chat=` slots and the introduction of typed config shapes (`IndexConfig`, `ChatConfig`) with `py.typed` support.
- Support for custom chat models and multiple backends (LiteLLM, Azure, Bedrock, Vertex) in cloud documents.
Breaking Changes
- .env discovery is now restricted to the current working directory's tree; a `.env` file sitting next to the installed package is no longer loaded.
New Features
- PageIndex Flash engine for high-performance indexing.
- Unified LocalClient and CloudClient interfaces.
- MCP tool integration for agents (as_openai_tools, as_anthropic_tools, etc.).
- Typed configuration classes with py.typed support.
- Custom chat model support in cloud documents.
Full Release Notes
- The **PageIndex SDK**, **local** or **cloud** — vectorless, reasoning-based RAG, end to end.
- **Much faster indexing** — the **PageIndex Flash** engine gets the tree from layout stats: no LLM involved for the structure generation itself, LLMs only write the node summaries, and tree expansion proposes a wave of nodes concurrently.
```python
client = PageIndexClient()
client.submit_document("report.pdf")
client.chat("What does the report conclude?")
```
Index, to chat, to agent integration, one client.
Local mode needs no server, no vector DB, no PageIndex API key.
## Highlights
- **Flash engine**: the local default (`mode="standard"` keeps the classic LLM pipeline). Embedded bookmarks are consumed when trustworthy, and tree optimization is on by default — `optimize="merge"` for the deterministic LLM-free pass, `"full"` (default) adds LLM expand, which runs a wave of nodes concurrently instead of one round-trip at a time.
- **One complete surface, local and cloud**: `PageIndexLocalClient(storage_path=...)` is the same client as cloud — submit, tree, page content, chat, and agent tools all present in both modes, so code moves between them unchanged.
- **Cloud documents, your own model**: `api_key` decides where your documents live; a configured chat model decides who answers — and the two combine. `PageIndexClient(api_key="pi-...", chat_model="openai/gpt-5.2")` runs the same in-process document-QA engine over the live cloud tool set. Page content flows through your process to your provider on your credentials; `doc_id` targets at the prompt level; `enable_citations` stays with the managed chat.
- **Agent integration**: the cloud MCP tool contract, in-process — `client.agent_tools()` (plain functions), `as_openai_tools()`, `as_anthropic_tools()`, `as_claude_mcp()`, plus one-call `openai_agent_config()` / `anthropic_runner_config()` / `claude_agent_config()` bundles and `agent_instructions()` for the system prompt. Cloud clients get the live server tool set over the MCP bridge (read-only endpoint by default); local clients get the in-process subset with the same schemas and envelopes — agent prompts port unchanged.
- **Chat surfaces**: `chat()` — question in, answer out, on any backend; `chat_completions()` / `responses()` / `messages()` protocol doors with `doc_id` targeting, streaming, honest usage accounting, and prompt-cache continuity across turns. Envelopes append verbatim: `messages()` output goes back into the next request unchanged.
- **Model & connection knobs**: `index_model` / `chat_model`, `index_backend` / `chat_backend` (and per-call `backend`) passed verbatim to each lane — LiteLLM-routed providers, keyless OpenAI-compatible servers, Azure/Bedrock/Vertex included.
- **`index=` / `chat=` slots**: the grouped spelling of the flat arguments — a string shorthand or a mapping (`index={"model": ..., "storage_path": ...}`, `chat={"model": ..., "backend": ...}`). `"cloud"` / `"local"` name a side, an optional `mode=` cross-checks it, and `PageIndexLocalClient` / `PageIndexCloudClient` take the same slots. `PageIndexCloudClient()` reads `PAGEINDEX_API_KEY`; a bare `PageIndexClient()` stays local no matter what the environment holds.
- **Typed config shapes**: `IndexConfig` / `CloudIndexConfig` / `LocalIndexConfig` / `ChatConfig`, with `py.typed` shipped so your type checker sees them.
- **Nothing fails quietly**: unknown keys, mixed sides, empty values and mode/content conflicts refuse at construction with the legal vocabulary in the message; dead credentials or a missing model fail the indexing run instead of storing a document with blank summaries; every cloud error carries its HTTP status.
- **Dependencies**: Python >= 3.10; `openai-agents` in the base install (the chat engine); `[anthropic]` and `[claude]` extras for those SDKs.
## Also in 0.2.12
- `.env` discovery ends at the current working directory's tree — a `.env` sitting next to the installed package is no longer loaded behind your back.
- A local client with a blank chat model refuses at the chat door, saying what to set, instead of failing deeper in on the managed path it has no access to.
- The `index=` / `chat=` slots take any `Mapping`, so the shipped `IndexConfig` / `ChatConfig` TypedDicts pass a strict type checker.
- `storage_path` accepts `os.PathLike` — `Path("./docs")` is typed as well as accepted, in the flat argument and in `LocalIndexConfig`.
- The LiteLLM lanes hide litellm's own bridge usage warning (the pydantic `Expected ResponseAPIUsage` line on every streamed turn); every other warning still surfaces.
- Docs: API-key URLs follow the dashboard move to `developer.pageindex.ai`, the README gets a quickstart-first restructure with indexing-time and FinanceBench charts and a collapsed usage guide, and the cloud `doc_id` docstrings stop describing tool scoping as server-side — cloud tools take no allowlist, so targeting there is prompt-level.
**Full Changelog**: https://github.com/VectifyAI/PageIndex/compare/v0.2.11...v0.2.12