Skip to main content

aec-document-review

Document Review: an LLM agent that reviews architecture, engineering and construction (AEC) documents, as a Streamlit page. Upload drawings, specifications, submittals, reports or calculation packages; it reads the text, looks at the pages where the text is not the page (drawings, scans, tables drawn as lines), answers with the sheet or page it found each thing on, and hands back Word memos and marked-up copies of the PDF. A review aid: the judgement stays with the reviewer, and every markup it writes is signed as an AI draft.

It runs on two packages of the same project:

  • aec-agent-core, the shared core (model connections, vision calls, guards and records, Word and Excel), pinned exactly;
  • planlens, the document layer (page maps, located text, tables, review markups), pinned exactly.

It imports nothing geotechnical. The geotechnical agent it was split from, GeotechStaffEngineer, is a separate package.

Install

pip install aec-document-review
pip install "aec-document-review[azure]"   # Key Vault and certificate sign-in

Python 3.11 or later; it is tested on 3.11 and 3.12. A host behind a package mirror installs it from the mirror like any other package; a wheel installed by path works the same way.

Run

aec-document-review                       # streamlit run of the page
aec-document-review --server.port 8502    # further arguments go to Streamlit

or, in a host that starts Streamlit on a script of its own (an app.py of a few lines):

from aec_document_review.tinyapps_entry import main
main()

With no model configured the page starts and says so in a banner.

Settings

Read from the environment, then from an Azure Key Vault (when KV_NAME names one and the host has a managed identity), then from a .env file in the working folder.

Setting What it is
PROMPTER_URL, PROMPTER_MODEL, PROMPTER_API_KEY, PROMPTER_CA_BUNDLE The OpenAI-compatible model endpoint (the "Prompter"), its model (it must accept images), the key, and a CA bundle for the endpoint's certificate
PROMPTER-API-KEY--<NAME>, PROMPTER_KEYS, PROMPTER_SHARED_KEY_FALLBACK One key per signed-in user (a Key Vault secret per user, or a JSON map), and whether a user without one may use the shared key
KV_NAME The Key Vault the settings above may be read from
GRAPH_TENANT_ID, GRAPH_CLIENT_ID, GRAPH_CLIENT_SECRET (or GRAPH_CLIENT_CERT, GRAPH_CLIENT_KEY, GRAPH_CLIENT_KEY_PASSWORD, GRAPH_CLIENT_CERT_THUMBPRINT) An app registration that may read and write the SharePoint site, by secret or certificate
SHAREPOINT_SITE_URL (or SHAREPOINT_SITE_URLS), GEOTECH_SHAREPOINT_ROOT The site, or several, and the folder conversations are kept in; the cloud is read off the site's address (GRAPH_CLOUD to set it)
X-Windows-Auth-Header (a request header, WINDOWS_AUTH_HEADER to rename it) The signed-in user, as a reverse proxy doing Windows sign-in passes it; each user's conversations are kept apart
DEV_IDENTITY A stand-in for that header on a laptop (DOMAIN\user)
GEOTECH_WEBAPP_DATA The folder conversations are kept in locally
GEOTECH_MARKUP_AUTHOR Who markups are signed by (default: <user> via Document Review (AI draft))
GEOTECH_INSTRUCTIONS A folder of the deployment's own instructions for the agents: all.md for every agent and helper, then one <role>.md per role (main, general-purpose for the reading helper, figure). Each role's text goes last in its prompt, under protected rules the text cannot switch off, at most 4,000 characters a role; the connection diagnostics say what each role gets. Details: GeotechStaffEngineer's webapp/README.md, "Your deployment's own instructions"

The settings keep the GEOTECH_ names the page had before the split, so a deployment carries on unchanged.

The project's deployment notes are in its repository: tinyapps/TINYAPPS.md and the wrapper template tinyapps/wrapper_repo/.

The review suite

The 38 review tasks the page is measured on, with deterministic checks, run through the core's suite framework on this page:

from aec_document_review.review_eval import score_review_suite
score_review_suite(model, out_dir="review_eval_run", docs_dir="docs",
                   dry_run=True)   # lists the tasks and checks the documents

Licence

MIT. See LICENSE.

Metadata

Release files for aec-document-review 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aec-document-review 0.1.1
File Size Uploaded Provenance Actions
aec_document_review-0.1.1.tar.gz 261.7 kB With provenance Details for aec_document_review-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for aec-document-review 0.1.1
File Interpreter ABI Platform Actions
aec_document_review-0.1.1-py3-none-any.whl Python 3 none any Details for aec_document_review-0.1.1-py3-none-any.whl

Total release size: 544.3 kB

Release files / aec_document_review-0.1.1.tar.gz

Download URL aec_document_review-0.1.1.tar.gz
Size 261.7 kB
Tags Source
SHA-256 checksum
How to use checksums
d5f6ab2d285543a09699eda9aea10fdfc1f01da5124e5e636258ef0f289da625
BLAKE2b-256 checksum
How to use checksums
4e46cafcb7138c8dcc0f395aa01df0782cc38e29a3fe60903d5959daea698ed9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Release files / aec_document_review-0.1.1-py3-none-any.whl

Download URL aec_document_review-0.1.1-py3-none-any.whl
Size 282.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
140cede50f5cd8ff08e5744f0988959dde1d1a2d95e433d87043a7c0a4de62d6
BLAKE2b-256 checksum
How to use checksums
2d293060506c4152fcaaf85728b6f0bec46248a01abb8a30959ffff01ffcf3b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

Security for aec-document-review 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for aec_document_review-0.1.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page