[](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-1)def search(query: str, source: str = None, n_chunks: int = 10) -> dict: [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-2) """ [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-3) Search documents with source tracking. Returns chunks with metadata [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-4) so you can cite sources and see document patterns. [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-5) [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-6) When you see multiple chunks from the same document, that usually means [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-7) the document has comprehensive coverage of your topic. [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-8) [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-9) Args: [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-10) query: What you're looking for in natural language [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-11) source: Limit search to a specific document (optional) [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-12) n_chunks: How many chunks to return (default: 10) [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-13) [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-14) Returns: [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-15) Results with source files, page numbers, and chunk content [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-16) """ [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-17) pass [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-18) [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-19)def load_pages(source: str, pages: list[int]) -> dict: [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-20) """ [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-21) Get full pages from a document when you need complete context instead [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-22) of fragmented chunks. [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-23) [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-24) Use this when search results show multiple chunks from the same document - [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-25) usually means you should read the full pages rather than piecing together [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-26) fragments. [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-27) [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-28) Args: [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-29) source: Document path (like "contracts/MSA-2024.pdf") [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-30) pages: Which pages to load (like [3, 7, 12]) [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-31) [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-32) Returns: [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-33) Complete page content with source information [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-34) """ [](https://jxnl.co/writing/2025/08/27/facets-context-engineering/#__codelineno-2-35) pass