Python API
Generated from the source. For a guided introduction, see Python usage .
Top-level helpers
parse
parse (
path ,
* ,
backend : str | None = None ,
mode : str = "balanced" ,
fallback : bool | None = None ,
ocr : bool | None = None ,
)
Synchronous convenience wrapper around Gateway().parse.
backend: "auto" (router decides) or an engine id; None uses $DOCTOPUS_BACKEND, else "auto".
chunk
chunk (
path ,
* ,
max_chars : int = 1500 ,
backend : str | None = None ,
mode : str = "balanced" ,
)
Parse then split into layout-aware chunks (list of doctopus.core.chunk.Chunk).
plan
plan (
path ,
* ,
backend : str | None = None ,
mode : str = "balanced" ,
)
Routing decision only (no extraction).
Gateway
Gateway (
max_bytes : int = MAX_BYTES ,
default_backend : str | None = None ,
)
The single entry point. CLI, REST and MCP are thin wrappers around this.
default_backend: engine used when a request does not name one ("auto" = let the router decide).
Falls back to $DOCTOPUS_BACKEND, then "auto". A request that names an engine (or "auto") always wins.
parse
async
parse (
path : str | Path ,
* ,
backend : str | None = None ,
mode : Mode = "balanced" ,
fallback : bool | None = None ,
ocr : bool | None = None ,
) -> Document
plan
plan (
path : str | Path ,
* ,
backend : str | None = None ,
mode : Mode = "balanced" ,
) -> Decision
Routing decision only -- nothing is extracted.
Document schema
Canonical, versioned output contract. Unknown values stay None -- never fabricated.
SCHEMA_VERSION
module-attribute
Document
Bases: BaseModel
schema_version
class-attribute
instance-attribute
schema_version : str = SCHEMA_VERSION
markdown
instance-attribute
blocks
class-attribute
instance-attribute
blocks : list [ Block ] = Field ( default_factory = list )
tables
class-attribute
instance-attribute
tables : list [ Table ] = Field ( default_factory = list )
pages
class-attribute
instance-attribute
pages : list [ Page ] = Field ( default_factory = list )
processing
instance-attribute
Bases: BaseModel
mime_type : str | None = None
page_count
class-attribute
instance-attribute
page_count : int | None = None
content_hash
instance-attribute
processed_at : datetime = Field (
default_factory = lambda : datetime . now ( timezone . utc )
)
Block
Bases: BaseModel
page
class-attribute
instance-attribute
bbox
class-attribute
instance-attribute
level
class-attribute
instance-attribute
source
instance-attribute
Table
Bases: BaseModel
page
class-attribute
instance-attribute
markdown
instance-attribute
rows
class-attribute
instance-attribute
rows : list [ list [ str ]] | None = None
bbox
class-attribute
instance-attribute
source
instance-attribute
Processing
Bases: BaseModel
backend
instance-attribute
backend_version
class-attribute
instance-attribute
backend_version : str | None = None
elapsed_ms
instance-attribute
peak_rss_mb : float | None = None
ocr_used
class-attribute
instance-attribute
ocr_used : bool | None = None
fallback_from
class-attribute
instance-attribute
fallback_from : str | None = None
warnings
class-attribute
instance-attribute
warnings : list [ str ] = Field ( default_factory = list )
decision
class-attribute
instance-attribute
decision : Decision | None = None
Decision
Bases: BaseModel
Why the router chose what it chose -- shown in CLI, API, MCP and the UI.
backend
instance-attribute
reasons
instance-attribute
inspection
class-attribute
instance-attribute
inspection : dict [ str , Any ] = Field ( default_factory = dict )
BackendInfo
Bases: BaseModel
version
class-attribute
instance-attribute
version : str | None = None
available
instance-attribute
reason_unavailable
class-attribute
instance-attribute
reason_unavailable : str | None = None
capabilities
instance-attribute
capabilities : dict [ str , bool ]
weight
instance-attribute
weight : Literal [ 'light' , 'heavy' ]
ram_mb
class-attribute
instance-attribute
ram_mb : int | None = None
licence
class-attribute
instance-attribute
licence : str | None = None
runtime
class-attribute
instance-attribute
runtime : Literal [ "in-process" , "sidecar" , "service" ] = (
"in-process"
)
Chunks
Layout-aware chunking for RAG and dataset export. A pure function over the canonical Document.
Rules: a heading closes the current chunk and becomes context (heading_path) for the next ones;
text blocks are packed up to max_chars and over-long ones split at sentence boundaries; tables are
always whole chunks placed in page order; page headers/footers are dropped. Chunk ids are
deterministic (content hash + ordinal), so re-running over the same file gives the same ids.
Chunk
Bases: BaseModel
kind
instance-attribute
kind : Literal [ 'text' , 'table' ]
n_chars
instance-attribute
heading_path
instance-attribute
block_ids
class-attribute
instance-attribute
block_ids : list [ str ] = Field ( default_factory = list )
table_id
class-attribute
instance-attribute
table_id : str | None = None
source
instance-attribute
ChunkSource
Bases: BaseModel
filename
instance-attribute
document_id
instance-attribute
content_hash
instance-attribute
backend
instance-attribute
schema_version
class-attribute
instance-attribute
schema_version : str = SCHEMA_VERSION
chunk
chunk (
doc : Document , * , max_chars : int = MAX_CHARS
) -> list [ Chunk ]
Errors
Every error carries a stable code, which the REST API and MCP tools return in their error payloads.
DoctopusError
Bases: Exception
Base class; carries a stable code for API/MCP error payloads.
code
class-attribute
instance-attribute
BackendUnavailable
Bases: DoctopusError
code
class-attribute
instance-attribute
code = 'backend_unavailable'
Backend protocol
Adapters implement this protocol and return a RawResult, which the gateway wraps into a Document.
Backend
Bases: Protocol
supports
supports ( ext : str ) -> bool
process
async
process (
path : Path , * , ocr : bool | None = None
) -> RawResult
RawResult
dataclass
RawResult (
markdown : str ,
text : str ,
blocks : list [ Block ] = list (),
tables : list [ Table ] = list (),
pages : list [ Page ] = list (),
page_count : int | None = None ,
title : str | None = None ,
mime_type : str | None = None ,
ocr_used : bool | None = None ,
quality : float | None = None ,
warnings : list [ str ] = list (),
)
What an adapter returns; the Gateway wraps it into a canonical Document.
markdown
instance-attribute
blocks
class-attribute
instance-attribute
blocks : list [ Block ] = field ( default_factory = list )
tables
class-attribute
instance-attribute
tables : list [ Table ] = field ( default_factory = list )
pages
class-attribute
instance-attribute
pages : list [ Page ] = field ( default_factory = list )
page_count
class-attribute
instance-attribute
page_count : int | None = None
title
class-attribute
instance-attribute
mime_type
class-attribute
instance-attribute
mime_type : str | None = None
ocr_used
class-attribute
instance-attribute
ocr_used : bool | None = None
quality
class-attribute
instance-attribute
quality : float | None = None
warnings
class-attribute
instance-attribute
warnings : list [ str ] = field ( default_factory = list )