Documentation
¶
Overview ¶
Package documentreader groups the explicit, agent-invocable tools built on a document-conversion backend: read_document_url (fetch+convert a remote document) and convert_document (convert a local file that native extraction can't handle well - scanned PDFs, complex slide decks, audio). Both are opt-in: the agent reaches for them deliberately, as opposed to internal/tools/files/read's own conversion fallback, which stays in place so a scanned PDF or audio file still "just works" through plain FileRead without the agent needing to know this package exists.
Index ¶
- Constants
- type Config
- type ConvertTool
- func (t *ConvertTool) BackfillInput(_ context.Context, input map[string]any) map[string]any
- func (t *ConvertTool) Call(ctx context.Context, input tool.CallInput, permissionCheck types.CanUseToolFn) (tool.CallResult, error)
- func (t *ConvertTool) CheckPermissions(_ context.Context, input map[string]any, toolCtx tool.ToolUseContext) types.PermissionResult
- func (t *ConvertTool) Definition() tool.Definition
- func (t *ConvertTool) Description(_ context.Context) (string, error)
- func (t *ConvertTool) FormatResult(data any) string
- func (t *ConvertTool) IsConcurrencySafe(_ map[string]any) bool
- func (t *ConvertTool) IsEnabled() bool
- func (t *ConvertTool) IsReadOnly(_ map[string]any) bool
- func (t *ConvertTool) ValidateInput(_ context.Context, input map[string]any) (map[string]any, error)
- type ReadURLTool
- func (t *ReadURLTool) BackfillInput(_ context.Context, input map[string]any) map[string]any
- func (t *ReadURLTool) Call(ctx context.Context, input tool.CallInput, permissionCheck types.CanUseToolFn) (tool.CallResult, error)
- func (t *ReadURLTool) CheckPermissions(_ context.Context, input map[string]any, _ tool.ToolUseContext) types.PermissionResult
- func (t *ReadURLTool) Definition() tool.Definition
- func (t *ReadURLTool) Description(_ context.Context) (string, error)
- func (t *ReadURLTool) FormatResult(data any) string
- func (t *ReadURLTool) IsConcurrencySafe(_ map[string]any) bool
- func (t *ReadURLTool) IsEnabled() bool
- func (t *ReadURLTool) IsReadOnly(_ map[string]any) bool
- func (t *ReadURLTool) ValidateInput(_ context.Context, input map[string]any) (map[string]any, error)
- type RenderPageTool
- func (t *RenderPageTool) BackfillInput(_ context.Context, input map[string]any) map[string]any
- func (t *RenderPageTool) Call(ctx context.Context, input tool.CallInput, permissionCheck types.CanUseToolFn) (tool.CallResult, error)
- func (t *RenderPageTool) CheckPermissions(_ context.Context, input map[string]any, toolCtx tool.ToolUseContext) types.PermissionResult
- func (t *RenderPageTool) Definition() tool.Definition
- func (t *RenderPageTool) Description(_ context.Context) (string, error)
- func (t *RenderPageTool) FormatResult(data any) string
- func (t *RenderPageTool) IsConcurrencySafe(_ map[string]any) bool
- func (t *RenderPageTool) IsEnabled() bool
- func (t *RenderPageTool) IsReadOnly(_ map[string]any) bool
- func (t *RenderPageTool) ValidateInput(_ context.Context, input map[string]any) (map[string]any, error)
Constants ¶
const ( // ConvertToolName is the name of the convert_document tool. ConvertToolName = "convert_document" // ConvertDisplayName is the display name of the convert_document tool. ConvertDisplayName = "Convert Document" // ConvertSearchHint is a hint for tool search functionality. ConvertSearchHint = "OCR a scanned PDF, extract a complex slide deck, or transcribe audio through a document reader" // ConvertDescription is the description of the convert_document tool. ConvertDescription = "Convert a local file to markdown using the configured document reader: OCR, layout analysis, table structure, and audio transcription.\n\n" + "## When to use\n\n" + "- A scanned/image-only PDF that read_file reports as having little or no extractable text\n" + "- A PPTX slide deck — most slide decks are mostly visual (screenshots, diagrams, charts) with only a title or two of real text, so read_file's native extraction routinely \"succeeds\" while missing almost everything that actually matters. read_file already auto-falls-back to the document reader for a PPTX whose extracted text is sparse relative to its slide count, but if you're unsure or read_file returned something that looks thin, don't hesitate to call this directly rather than trying to work around it with other tools (terminal, ad-hoc scripts, per-slide image extraction, etc.) — none of that gets better OCR than a whole-document reader does in one shot\n" + "- Audio files (WAV, MP3) that need transcription\n" + "- A DOCX/PPTX/XLSX that read_file's native extraction failed on\n\n" + "## When NOT to use\n\n" + "- Plain text-native PDFs, or text-heavy DOCX/XLSX — use read_file instead, it extracts them natively without the network round-trip to an external document-reader service\n" + "- read_file already tries the document reader automatically as a last resort for unreadable or sparse files, so you usually don't need this tool for a first read. Reach for it when you want deliberate control: forcing a reconversion, or converting a file read_file didn't route to documentreader.\n\n" + "## Rules\n\n" + "- Requires a document reader to be configured (document_reader_url) or injected by the host.\n" + "- Pass the whole file in one call (`path` is the deck/document itself, e.g. \"deck.pptx\") — the document reader converts every slide/page in a single request. Never split a deck into individual slide images and OCR them one at a time: it's slower, it's more tool calls, and it throws away the layout/reading-order/table-structure analysis a whole-document reader does for a whole document at once.\n" )
const ( // ReadURLToolName is the name of the read_document_url tool. ReadURLToolName = "read_document_url" // ReadURLDisplayName is the display name of the read_document_url tool. ReadURLDisplayName = "Read Document URL" // ReadURLSearchHint is a hint for tool search functionality. ReadURLSearchHint = "fetch and convert a remote document or web page to markdown" // ReadURLDescription is the description of the read_document_url tool. ReadURLDescription = "Fetch a document at a URL and convert it to readable markdown. " + "Supports PDF, DOCX, PPTX, XLSX, HTML pages, and arXiv papers. " + "Requires a document reader to be configured. " + "Optionally saves the extracted markdown to a workspace path." )
const ( RenderPageToolName = "render_document_page" RenderPageDisplayName = "Render Document Page" RenderPageSearchHint = "render one PDF page as an image for visual inspection of diagrams, charts, tables, or scanned content" RenderPageDescription = "Render one page of a local document to a PNG image for visual inspection, then attach it to the conversation as an image (in the message that follows this tool's result) so you can actually see it.\n\n" + "Use this after reading a document when markdown extraction may miss important visual details: diagrams, charts, screenshots, equations, scanned pages, or visually structured tables.\n\n" + "Current local support is PDF pages through the configured native document renderer. The page number is 1-indexed." )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
// DocumentReaderURL is the base URL of a document-reader service. Used
// to build the default DocumentConverter when that field is left nil.
// When both are empty/nil, tools register but always report "not
// configured".
DocumentReaderURL string
// DocumentConverter, when set, is used instead of building a
// service client from DocumentReaderURL. Takes precedence over
// DocumentReaderURL.
DocumentConverter internalreader.Converter
// DocumentPageRenderer, when set, renders a specific document page to an
// image so multimodal agents can visually inspect diagrams, charts, and
// scanned pages after markdown extraction.
DocumentPageRenderer pdfsmart.PageRenderer
}
Config holds the shared configuration for every tool in this package.
type ConvertTool ¶
type ConvertTool struct {
// contains filtered or unexported fields
}
ConvertTool converts a local file to markdown via a document-conversion backend.
func NewConvertTool ¶
func NewConvertTool(cfg Config, workingDir string) *ConvertTool
NewConvertTool creates a new convert_document tool.
func (*ConvertTool) BackfillInput ¶
func (*ConvertTool) Call ¶
func (t *ConvertTool) Call( ctx context.Context, input tool.CallInput, permissionCheck types.CanUseToolFn, ) (tool.CallResult, error)
func (*ConvertTool) CheckPermissions ¶
func (t *ConvertTool) CheckPermissions(_ context.Context, input map[string]any, toolCtx tool.ToolUseContext) types.PermissionResult
func (*ConvertTool) Definition ¶
func (t *ConvertTool) Definition() tool.Definition
func (*ConvertTool) Description ¶
func (t *ConvertTool) Description(_ context.Context) (string, error)
func (*ConvertTool) FormatResult ¶
func (t *ConvertTool) FormatResult(data any) string
func (*ConvertTool) IsConcurrencySafe ¶
func (t *ConvertTool) IsConcurrencySafe(_ map[string]any) bool
func (*ConvertTool) IsEnabled ¶
func (t *ConvertTool) IsEnabled() bool
func (*ConvertTool) IsReadOnly ¶
func (t *ConvertTool) IsReadOnly(_ map[string]any) bool
func (*ConvertTool) ValidateInput ¶
type ReadURLTool ¶
type ReadURLTool struct {
// contains filtered or unexported fields
}
ReadURLTool fetches a remote document and converts it to markdown via a document-conversion backend.
func NewReadURLTool ¶
func NewReadURLTool(cfg Config) *ReadURLTool
NewReadURLTool creates a new read_document_url tool.
func (*ReadURLTool) BackfillInput ¶
func (*ReadURLTool) Call ¶
func (t *ReadURLTool) Call( ctx context.Context, input tool.CallInput, permissionCheck types.CanUseToolFn, ) (tool.CallResult, error)
func (*ReadURLTool) CheckPermissions ¶
func (t *ReadURLTool) CheckPermissions(_ context.Context, input map[string]any, _ tool.ToolUseContext) types.PermissionResult
func (*ReadURLTool) Definition ¶
func (t *ReadURLTool) Definition() tool.Definition
func (*ReadURLTool) Description ¶
func (t *ReadURLTool) Description(_ context.Context) (string, error)
func (*ReadURLTool) FormatResult ¶
func (t *ReadURLTool) FormatResult(data any) string
func (*ReadURLTool) IsConcurrencySafe ¶
func (t *ReadURLTool) IsConcurrencySafe(_ map[string]any) bool
func (*ReadURLTool) IsEnabled ¶
func (t *ReadURLTool) IsEnabled() bool
func (*ReadURLTool) IsReadOnly ¶
func (t *ReadURLTool) IsReadOnly(_ map[string]any) bool
func (*ReadURLTool) ValidateInput ¶
type RenderPageTool ¶
type RenderPageTool struct {
// contains filtered or unexported fields
}
func NewRenderPageTool ¶
func NewRenderPageTool(cfg Config, workingDir string) *RenderPageTool
func (*RenderPageTool) BackfillInput ¶
func (*RenderPageTool) Call ¶
func (t *RenderPageTool) Call(ctx context.Context, input tool.CallInput, permissionCheck types.CanUseToolFn) (tool.CallResult, error)
func (*RenderPageTool) CheckPermissions ¶
func (t *RenderPageTool) CheckPermissions(_ context.Context, input map[string]any, toolCtx tool.ToolUseContext) types.PermissionResult
func (*RenderPageTool) Definition ¶
func (t *RenderPageTool) Definition() tool.Definition
func (*RenderPageTool) Description ¶
func (t *RenderPageTool) Description(_ context.Context) (string, error)
func (*RenderPageTool) FormatResult ¶
func (t *RenderPageTool) FormatResult(data any) string
func (*RenderPageTool) IsConcurrencySafe ¶
func (t *RenderPageTool) IsConcurrencySafe(_ map[string]any) bool
func (*RenderPageTool) IsEnabled ¶
func (t *RenderPageTool) IsEnabled() bool
func (*RenderPageTool) IsReadOnly ¶
func (t *RenderPageTool) IsReadOnly(_ map[string]any) bool