{"full_name":"VectifyAI/PageIndex","owner":"VectifyAI","name":"PageIndex","url":"https://github.com/VectifyAI/PageIndex","description":"📑 PageIndex: Document Index for Vectorless, Reasoning-based RAG","homepage":"https://pageindex.ai","topics":[],"language":"Python","license":"MIT","avatar":"https://avatars.githubusercontent.com/u/133959746?v=4","created_at":"2025-04-01T10:53:54Z","pushed_at":"2026-11-10T07:43:34Z","metrics":{"stars":40330,"forks":3472,"watchers":152,"issues":153,"prs":484,"releases":32,"issues_open":null,"issues_closed":null,"prs_open":null,"prs_closed":null,"prs_merged":null,"discussions":15},"growth":{"day":{"stars":61,"forks":6,"base_day":"2026-11-09"},"week":{"stars":373,"forks":34,"base_day":"2026-11-03"}},"history":{"dates":["2026-10-12","2026-10-13","2026-10-14","2026-10-15","2026-10-16","2026-10-17","2026-10-18","2026-10-19","2026-10-20","2026-10-21","2026-10-22","2026-10-23","2026-10-24","2026-10-25","2026-10-26","2026-10-27","2026-10-28","2026-10-29","2026-10-30","2026-10-31","2026-11-01","2026-11-02","2026-11-03","2026-11-04","2026-11-09","2026-11-10"],"stars":[38776,38895,38989,39019,39047,39080,39108,39124,39137,39180,39237,39304,39355,39433,39471,39556,39616,39781,39843,39877,39890,39913,39957,39965,40269,40330],"forks":[3358,3367,3378,3381,3385,3392,3395,3399,3400,3402,3405,3416,3419,3423,3425,3428,3426,3432,3431,3432,3433,3435,3438,3440,3466,3472],"watchers":[159,159,158,158,159,159,159,159,157,157,158,158,158,157,158,159,152,152,152,152,152,153,153,152,152,152],"issues_open":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"prs_open":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]},"boards":{},"same_owner":[],"issues":[{"number":316,"title":"Feature Request: Incremental Index Updates for Large Documents","comments":8,"created_at":"2026-06-04T08:43:15Z"},{"number":557,"title":"Expose per-call chat usage and measurement completeness across protocols","comments":4,"created_at":"2026-10-09T11:12:05Z"},{"number":330,"title":"Bug: `get_leaf_nodes` raises KeyError on leaf nodes due to missing `nodes` key","comments":3,"created_at":"2026-06-16T04:18:09Z"},{"number":169,"title":"Using TOON to replace json","comments":3,"created_at":"2026-03-16T13:27:38Z"},{"number":99,"title":"Introduce Pydantic validation for LLM JSON outputs in page_index.py","comments":3,"created_at":"2026-02-04T10:29:18Z"},{"number":540,"title":"[Feature] Standalone local MCP server so Claude Desktop / Cursor / any MCP client can use a local library","comments":2,"created_at":"2026-10-01T04:45:38Z"},{"number":175,"title":"Hello everyone, I have some questions regarding Hybrid Tree Search and would appreciate your insights.","comments":2,"created_at":"2026-03-24T00:31:22Z"},{"number":153,"title":"Unsupported operand type(s) for +: 'int' and 'NoneType'","comments":2,"created_at":"2026-03-07T10:15:43Z"}],"discussions":[{"number":231,"title":"utils.py 缺少 import re","comments":1,"category":"Show and tell","created_at":"2026-04-15T15:05:33Z"},{"number":185,"title":"Question","comments":2,"category":"Q&A","created_at":"2026-03-27T04:01:44Z"},{"number":171,"title":"Clarification on Metadata, Semantics, Description, Storage & Tree-Based Retrieval in PageIndex","comments":2,"category":"Q&A","created_at":"2026-03-18T06:54:33Z"},{"number":162,"title":"Image URL / Base64 not returned in Chat API response","comments":1,"category":"Q&A","created_at":"2026-03-13T06:19:56Z"},{"number":159,"title":"Based on pageIndex, I have built a complete RAG question-answering system with similar performance, supplemented the missing reasoning module, and enabled interaction via a web UI.","comments":1,"category":"Show and tell","created_at":"2026-03-12T07:28:28Z"},{"number":127,"title":"High Performance Version Experiment","comments":0,"category":"General","created_at":"2026-03-01T15:41:10Z"},{"number":111,"title":"Can I only connect with an OpenAI API key, or any key that follows the OpenAI-compatible standard?","comments":2,"category":"Q&A","created_at":"2026-02-16T11:37:35Z"},{"number":94,"title":"Chat UI answers section-specific questions correctly, but Chat API ignores indexed nodes and falls back to generic assistant","comments":1,"category":"Q&A","created_at":"2026-01-29T11:50:20Z"}],"latest_release":{"name":"PageIndex 0.5.3 — Lower Cost, Higher Accuracy than Vector RAG","tag":"v0.5.3","published_at":"2026-11-05T18:16:08Z","body":"- **Cheaper** than vector RAG: for both index and query.\n- **Faster**: trees are created from layout stats.\n- **Unified** SDK: vectorless RAG. **Local** or **cloud**, for index and chat.\n- Runs on your **Claude subscription**.\n\nIndex, to chat, to agent integration, one client.\nLocal mode needs no server, no vector DB, no PageIndex API key.\n\n```python\nclient = PageIndexClient()\nclient.submit_document(\"report.pdf\")\nclient.chat(\"What does the report conclude?\")\n```\n\n## Highlights\n\n- **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.\n- **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.\n- **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.\n- **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.\n- **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.\n- **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.\n- **`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.\n- **Typed config shapes**: `IndexConfig` / `CloudIndexConfig` / `LocalIndexConfig` / `ChatConfig`, with `py.typed` shipped so your type checker sees them.\n- **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.\n- **Dependencies**: Python >= 3.10; `openai-agents` in the base install (the chat engine); `[anthropic]` and `[claude]` extras for those SDKs. **Pillow >= 9.0** is n"},"readme":true,"readme_zh":false,"news":[{"title":"Show HN: PageIndex – Vectorless RAG","url":"https://github.com/VectifyAI/PageIndex/blob/main/cookbook/pageindex_RAG_simple.ipynb","hn":"https://news.ycombinator.com/item?id=45036944","source":"Hacker News","lang":"en","date":"2025-08-27","points":192,"comments":128},{"title":"Show HN: A Vectorless LLM-Native Document Index Method","url":"https://github.com/VectifyAI/pageindex-mcp","hn":"https://news.ycombinator.com/item?id=45482992","source":"Hacker News","lang":"en","date":"2025-10-05","points":14,"comments":3},{"title":"Show HN: Human-like RAG — no vectors","url":"https://github.com/VectifyAI/PageIndex","hn":"https://news.ycombinator.com/item?id=45015281","source":"Hacker News","lang":"en","date":"2025-08-25","points":11,"comments":0},{"title":"Show HN: RAG, No Vectors","url":"https://github.com/VectifyAI/PageIndex","hn":"https://news.ycombinator.com/item?id=43656476","source":"Hacker News","lang":"en","date":"2025-04-11","points":11,"comments":1},{"title":"Show HN: Vectorless, Reasoning-Based RAG","url":"https://github.com/VectifyAI/PageIndex","hn":"https://news.ycombinator.com/item?id=49918836","source":"Hacker News","lang":"en","date":"2026-10-01","points":8,"comments":0},{"title":"Show HN: Vision-Based, Vectorless RAG for Long Douments","url":"https://github.com/VectifyAI/PageIndex/blob/main/cookbook/vision_RAG_pageindex.ipynb","hn":"https://news.ycombinator.com/item?id=45773923","source":"Hacker News","lang":"en","date":"2025-10-31","points":6,"comments":0},{"title":"Show HN: In-Context Index for In-Context Retrieval","url":"https://github.com/VectifyAI/pageindex-mcp","hn":"https://news.ycombinator.com/item?id=45529851","source":"Hacker News","lang":"en","date":"2025-10-09","points":5,"comments":0},{"title":"Show HN: An MCP that allows you break LLM's context limit","url":"https://github.com/VectifyAI/pageindex-mcp","hn":"https://news.ycombinator.com/item?id=45339974","source":"Hacker News","lang":"en","date":"2025-09-22","points":5,"comments":0},{"title":"[Introduction] How to use PageIndex. A 3-step guide to querying long PDFs using an OSS that reads tables of contents instead of vectors","url":"https://note.com/opensourcelab/n/nf08e63c5a5d4?hl=en","source":"note","lang":"en","date":"2026-10-15"},{"title":"如何用PageIndex实现无向量智能检索：开发者的终极集成指南","url":"https://blog.csdn.net/gitblog_00408/article/details/154464353","source":"blog.csdn","lang":"zh","date":"2026-06-23"},{"title":"PageIndex Challenges Vector Databases in RAG with Tree-Based Retrieval","url":"https://x.com/i/trending/2051633296229216626","source":"x","lang":"en","date":"2026-05-05"},{"title":"如何通过PageIndex提示词设计提升检索准确性：10个实用技巧","url":"https://blog.csdn.net/gitblog_00193/article/details/152019524","source":"blog.csdn","lang":"zh","date":"2025-11-30"},{"title":"拆解开源知识库OpenKB：Karpathy的wiki 理念，如何被PageIndex做成无向量知识库","url":"https://news.google.com/rss/articles/CBMiakFVX3lxTE1INlRWbE53Rmp4c2xzLXNQQ3d0Rjc0bFNBRUpuTUpTWjdLSU5idGlEMV9JX0E4RDZmSWNfbXdzWkxIcmZJSEliRmhXWUJXdEc0aElGTml3MGhKQko0M0xMYnU1M09mWDBrR3c?oc=5","source":"53AI","lang":"zh","date":"2026-06-30"},{"title":"从 RAG 到 Context：2025 年 RAG 技术年终总结","url":"https://news.google.com/rss/articles/CBMiXkFVX3lxTE9EaWFBd0pUbmpHb1pzekxhdU1vLThkd3Zmb0dHQ3N2NzVqT01qb2hiR3Q5RjFrME8yWnUzN2w3OVJrcUdRVm1aQTFZZElNVEtkYnhpZ1ZCRWpsYmpyYUE?oc=5","source":"InfoQ.cn","lang":"zh","date":"2025-12-25"},{"title":"当“相似度 ≠ 相关性”：PageIndex 带来的 RAG 新范式","url":"https://news.google.com/rss/articles/CBMiXEFVX3lxTE1EU1RqSFlpY3U4OEc1dm9lNXNSb3RCV0FaT0pXcTFTM0x0VmZDR0F6RGJyNzE0Y0NJbXdSYUZ5ZFR5bnZldWl4eGJWYlNKVmF2RkF6UTJpMm1oWkdL?oc=5","source":"53AI","lang":"zh","date":"2025-09-17"}],"stale":false,"snapshot_at":"2026-11-10T09:35:25Z","history_start":"2026-09-06"}