Python wrapper for the Ethos document evidence CLI.
Project description
Ethos Python Package
This directory contains the ethos-pdf Python package source for Ethos.
Install the published evaluation wheel from PyPI with:
python3 -m pip install ethos-pdf==0.1.2
v0.2.0 release-candidate source versions are activated for JSON verification and evidence-anchor
wrapper calls through a caller-provided ethos CLI binary. Do not use 0.2.0 install wording
until the package is published, matching CLI artifacts are available, and the post-publication
smoke tests are recorded.
The package exposes a public semver API beginning at 0.1.0 for Python >=3.8. Patch releases
must not break public function signatures, exception classes, or documented return shapes. Minor
releases may add backward-compatible API, and major releases may break API after a release-scope
decision.
Public API:
EthosCliEthosPythonSurfaceErrorEthosNotFoundErrorEthosTimeoutErrorEthosCommandErrorPdfiumNotFoundErrorInvalidPdfErrorCorruptPdfErrorParseTimeoutErrorEthosOutputErrorparse_pdf_jsonparse_pdf_markdownparse_pdf_textcrop_elementverifyanchor
The current module is intentionally thin: it shells out to a caller-provided local ethos CLI
binary and returns ethos doc parse output, source-bound ethos crop_element JSON, ethos verify
JSON reports, or ethos evidence anchor JSON reports. It can pass caller-provided source PDF and
crop artifact directory arguments for rendered crop artifacts. It does not bundle PDFium, does not
publish hosted surfaces, and does not expand parser behavior. The Rust CLI remains the source of
truth.
The package name is historical continuity naming. JSON verification and evidence-anchor calls do
not require PDF parsing, but the package is still named ethos-pdf.
PDFium-backed parse and crop paths require caller-provided PDFium through
ETHOS_PDFIUM_LIBRARY_PATH. Importing ethos_pdf does not require PDFium. If PDFium is missing,
the wrapper raises PdfiumNotFoundError and preserves the underlying CLI stderr so callers can show
the setup guidance from QUICKSTART.md or docs/pdfium-manual-setup.md.
Exceptions
All wrapper-owned exceptions inherit from EthosPythonSurfaceError.
Subprocess failures inherit from EthosCommandError and expose command, returncode, stdout,
and stderr. When the CLI emits its stable JSON error envelope on stderr, the wrapper maps by
error.code; otherwise it falls back to the documented exit code:
| CLI condition | Exit | Python exception |
|---|---|---|
| missing caller-provided PDFium | any non-zero exit with PDFium setup stderr | PdfiumNotFoundError |
invalid_pdf |
3 | InvalidPdfError |
corrupt_pdf |
4 | CorruptPdfError |
parse_timeout |
10 | ParseTimeoutError |
| any other non-zero CLI exit | other | EthosCommandError |
Wrapper-side timeouts raised by subprocess.run(..., timeout=...) use EthosTimeoutError.
Missing input files raise Python FileNotFoundError before invoking the CLI.
JSON Verify And Evidence Anchor
Use the binary constructor alias when a caller manages the CLI path explicitly:
from ethos_pdf import EthosCli
ethos = EthosCli(binary="/path/to/ethos")
report = ethos.verify(
source="source.ethos.json",
citations="citations.json",
grounding=None,
config=None,
fail_on_ungrounded=False,
output_format="json",
timeout=30,
)
anchor_report = ethos.anchor(
source="source.ethos.json",
evidence_refs="evidence_refs.json",
grounding=None,
output_format="json",
timeout=30,
)
verify(...) maps source to the positional CLI input, maps citations to --citations, maps
grounding to an adapter id such as opendataloader-json, maps config to --config, and maps
fail_on_ungrounded=True to --fail-on-ungrounded.
anchor(...) maps source to the positional CLI input, maps evidence_refs to --evidence-refs,
and maps grounding to an adapter id. It does not expose a fail flag in the v0.2 preparation
surface. Non-bound evidence-anchor outcomes are returned as structured reports, not exceptions.
Verify exit semantics:
- exit
0with JSON returns a report; - exit
1with JSON returns a negative verification report; - exit
>=2raisesEthosCommandErroror a more specific subclass.
Run the focused tests with:
make python-surface-test
The tests use a fake local command, so they do not require PDFium.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ethos_pdf-0.2.0.tar.gz.
File metadata
- Download URL: ethos_pdf-0.2.0.tar.gz
- Upload date:
- Size: 21.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c99c5872e6ac8a47358221b427a58133f46f58abc3fd0f31d011b8d52ee8b55
|
|
| MD5 |
03606559529da2d898439f316320039c
|
|
| BLAKE2b-256 |
5c0c6ad1f48febc4ba2150c2604127671e95367959eab00f55890d6f88e4709e
|
File details
Details for the file ethos_pdf-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ethos_pdf-0.2.0-py3-none-any.whl
- Upload date:
- Size: 13.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
131f60451eb43bc6588ed7e325b42fbed283ce4b9102590e6567e2e64f0176a9
|
|
| MD5 |
19b336abe2d4f2dd4d0aaded6acef274
|
|
| BLAKE2b-256 |
89b265b11e7ca993c16c87b1312df66a1630dc118072efd0923f30e0e2cf31fc
|