v0.2.15
MODSetter/SurfSensev0.2.15Sep 6, 2026by github-actions[bot]
Upgrading?
AI Summary
This release marks the debut of the local, serverless PageIndex SDK with a new Flash indexing engine and improved agent integrations, allowing images to be processed by custom models.
Key Highlights
- Introduced the Flash engine for faster indexing and local mode support.
- Enabled images to be processed directly by the custom chat model.
- Added typed config shapes for better developer experience.
New Features
- get_document_image method for page and figure images.
- ChatStream real import for type hints.
- Quieter LiteLLM logging configuration.
- Typed config shapes (IndexConfig, ChatConfig, etc.).
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(stream=True)` shows the run as it happens, thinking and tool calls woven into the text, or as typed events via `.events`; `chat(protocol="responses" | "messages")` drives the OpenAI Responses or Anthropic Messages API natively with that protocol's own shapes, and `chat_completions()` keeps the OpenAI-compatible envelope — all with `doc_id` targeting, streaming, honest usage accounting, and prompt-cache continuity across turns. Transcripts append verbatim: a protocol lane's 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.15
- **Images reach your model.** A document's page and figure images (`get_document_image`) now arrive at the model as images on the own-model chat and the in-process agent integrations: tool results travel as MCP content and each framework renders them itself. `mcp` joins the base install.
- **Chat lanes**: `extra_body` can no longer replace the SDK's own request rows (`system`, `instructions`, `input`, `messages`, `tools`), and its sampling fields ride their `ModelSettings` field on LiteLLM-routed models; on the Responses lane `reasoning_effort` joins `extra_body["reasoning"]`; a managed-chat failure reported mid-stream raises after the partial answer; a partial read of `.events` no longer cancels the run; `ChatStream` is a real import, so `chat()`'s type hints resolve at runtime.
- **Quieter LiteLLM**: its loggers are quieted only while unset, the "Provider List" banner no longer prints mid-answer, and the model cost map is never fetched on import. The README charts now render on PyPI.
**Full Changelog**: https://github.com/VectifyAI/PageIndex/compare/v0.2.14...v0.2.15
Related Repositories
public-apis/public-apis★ 491,123
A collective list of free APIs
NousResearch/hermes-agent★ 255,887
The agent that grows with you
yt-dlp/yt-dlp★ 199,986
A feature-rich command-line audio/video downloader
microsoft/markitdown★ 191,478
Python tool for converting files and office documents to Markdown.
Significant-Gravitas/AutoGPT★ 187,699
AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.