The pool watchdog counts only the time a worker spends running code, so a read that blocks the worker never trips it. The margin above code_timeout therefore guarded a race that cannot happen, and only bought a runaway call 90s where 60s was configured. Pass code_timeout straight through. The two limits are disjoint: the watchdog bounds a call that computes, and the read deadline bounds a call that reads. Drop the ordering test, which was true for any positive margin. The containment test no longer sets code_timeout to zero, because that value now also disables the watchdog and kills the worker before the read guard can refuse. It patches the guard instead. Monty 0.0.19 runs a plain class and a class with __enter__ and __exit__. Only inheritance and metaclasses raise. Say that in the instructions. MemoryFile is no longer constructed, so drop the import, the annotation, and the stale references in the sandbox docstring and CLAUDE.md. That CLAUDE.md line also still claimed a ThreadPoolExecutor, _run_async, and a fresh interpreter per call.
3.9 KiB
Search and Question Answering
Search Settings
Configure search behavior and context expansion:
search:
limit: 10 # Default number of results to return
max_context_chars: 5000 # Maximum characters in expanded context
- limit: Default number of search results to return when no limit is specified. Used by CLI, MCP server, and QA. Default: 10
- max_context_chars: Hard limit on total characters in expanded content. Default: 5000.
Context expansion is automatic and section-aware. For structured documents (with section headers), expansion includes the entire section containing the match. For sections that exceed the budget or are too small (e.g., a title+authors area), expansion grows outward item-by-item from the match center, skipping noise labels (footnotes, page headers). This naturally crosses into adjacent sections until the budget is filled. Picture and table matches are exempt: they return their enclosing section as-is and never cross section boundaries. For unstructured documents, expansion grows outward item-by-item. Results without doc_item_refs (e.g., custom chunks passed to import_document) pass through unexpanded.
!!! note "Reranking behavior"
When a reranker is configured, search automatically retrieves 10x the requested limit, then reranks to return the final count. This improves result quality without requiring you to adjust limit.
Question Answering Configuration
Configure the RAG capability (used by client.ask, haiku-rag ask, and the MCP ask_question tool):
qa:
model:
provider: ollama
name: gpt-oss
enable_thinking: true
temperature: 0.3 # Default: 0.3
vision: false # Set true for vision-capable models
max_searches: 3 # Maximum search tool calls per question
- model: LLM configuration (see Providers)
- model.vision: Set to
truefor vision-capable models (qwen2.5vl,qwen3.6,gpt-4o,claude-sonnet, …). The capability'ssearchtool only attaches picture bytes (BinaryContent) to itsToolReturnwhen this istrue, otherwise picture bytes are withheld. See Pictures × embedder × QA model for the full matrix. - max_searches: Maximum number of search tool calls the RAG capability can make per question (default: 3)
!!! note "Thinking on vLLM"
enable_thinking only applies to models with a pydantic-ai reasoning profile (o-series, gpt-5, gpt-oss). For other vLLM-served models such as Qwen3 or the Gemma family, the field is a silent no-op — set the chat template switch via extra_body instead.
Analysis Configuration
Configure the analysis capability:
analysis:
model:
provider: anthropic
name: claude-sonnet-4-20250514
temperature: 0.0 # Default: 0.0 (deterministic for code generation)
code_timeout: 60.0 # Max seconds a call may spend reading documents
max_output_chars: 50000 # Truncate output after this many chars
max_executions: 15 # Max execute_code calls per question
- model: LLM configuration (see Providers). When unset, falls back to
qa.model. - code_timeout: Seconds a single
execute_codecall may spend reading documents (default: 60). The sandbox refuses further reads past this point. Code that computes without reading is killed by the worker watchdog at the same limit.code_timeout * max_executionsis the cumulative ceiling across all calls in one question. - max_output_chars: Truncate code output after this many characters (default: 50000)
- max_executions: Maximum
execute_codecalls per question before the capability is told to answer from what it has (default: 15)
See Analysis capability for usage details.