Skip to main content

StruAI Drawing Analysis SDK - AI-powered construction drawing analysis

Project description

StruAI Python SDK

Official Python SDK for the StruAI Drawing Analysis API.

Installation

pip install struai

Quick Start

from struai import StruAI

client = StruAI(api_key="sk-xxx")  # or set STRUAI_API_KEY env var

Tier 1: Raw Detection ($0.02/page)

Fast geometric detection. Returns annotations in ~1-2 seconds.

# Analyze a PDF page
result = client.drawings.analyze("structural.pdf", page=4)

print(f"Processed in {result.processing_ms}ms")
print(f"Page size: {result.dimensions.width}x{result.dimensions.height}")

# Access detected annotations
for leader in result.annotations.leaders:
    texts = [t.text for t in leader.texts_inside]
    print(f"Leader at {leader.arrow_tip}: {', '.join(texts)}")

for tag in result.annotations.section_tags:
    label = tag.texts_inside[0].text
    print(f"Section {label}, direction: {tag.direction}")

# Retrieve/delete previous results
drawing = client.drawings.get("drw_7f8a9b2c")
client.drawings.delete("drw_7f8a9b2c")

Tier 2: Graph + Search ($0.15/page)

Full pipeline: detection → LLM enrichment → knowledge graph → semantic search.

# Create a project
project = client.projects.create(
    name="Building A Structural",
    description="96-page structural drawing set"
)

# Add sheets (async processing)
job = project.sheets.add("structural.pdf", page=4)
result = job.wait(timeout=120)  # Blocks until complete
print(f"Created {result.entities_created} entities")

# Semantic search
results = project.search(
    query="W12x26 beam connections at grid A",
    limit=10,
    include_graph_context=True
)

for hit in results.results:
    print(f"{hit.entity.label}: {hit.score:.2f}")
    if hit.graph_context:
        for rel in hit.graph_context.relationships:
            print(f"  - {rel.type}: {rel.fact}")

# Natural language query
answer = project.query("What beams connect to column C3?")
print(answer.answer)
print(f"Confidence: {answer.confidence:.0%}")

# Browse entities
entities = project.entities.list(type="Component", limit=50)
entity = project.entities.get("ent_abc123")

Async Support

from struai import AsyncStruAI

async with AsyncStruAI(api_key="sk-xxx") as client:
    # Tier 1
    result = await client.drawings.analyze("structural.pdf", page=4)

    # Tier 2
    project = await client.projects.create(name="Building A")
    job = await project.sheets.add("structural.pdf", page=4)
    result = await job.wait(timeout=120)
    results = await project.search("W12x26 beam connections")

Error Handling

from struai import StruAI, AuthenticationError, RateLimitError, NotFoundError

try:
    result = client.drawings.analyze("plans.pdf", page=99)
except AuthenticationError:
    print("Invalid API key")
except RateLimitError as e:
    print(f"Rate limited. Retry after {e.retry_after}s")
except NotFoundError:
    print("Resource not found")

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

struai-0.1.0.tar.gz (15.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

struai-0.1.0-py3-none-any.whl (15.7 kB view details)

Uploaded Python 3

File details

Details for the file struai-0.1.0.tar.gz.

File metadata

  • Download URL: struai-0.1.0.tar.gz
  • Upload date:
  • Size: 15.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for struai-0.1.0.tar.gz
Algorithm Hash digest
SHA256 738213db51cc010a672beff6fee3cf712a01facea4c8a35024b85edce56899a6
MD5 2be10a31ebca1687aea12eff249500db
BLAKE2b-256 52583c7d14d8d26d699d332727a03b31894af431305fbf27481306a9c6979833

See more details on using hashes here.

Provenance

The following attestation bundles were made for struai-0.1.0.tar.gz:

Publisher: publish-python.yml on bhoshaga/struai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file struai-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: struai-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for struai-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a90ab97ffc41a236ebd033c0bf2b3416d2146f15aecd2ef2d67a8f06807b774c
MD5 3d3fef195f79c3d73c2e6a48e8375b21
BLAKE2b-256 a8420b85f922d4970e62b5cfdfb5b25d90eb0f6d221d73ad6c6ff3f36e276618

See more details on using hashes here.

Provenance

The following attestation bundles were made for struai-0.1.0-py3-none-any.whl:

Publisher: publish-python.yml on bhoshaga/struai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page