Skip to main content

Run AI tasks and workflows locally.

Project description

AIBackends

Run AI tasks and workflows locally.

Build extraction, classification, embeddings, redaction, and analysis pipelines in plain Python with llamacpp and transformers.

  • First-class llamacpp and transformers runtimes
  • Typed outputs for extraction and analysis tasks
  • Reusable tasks and workflows for scripts, apps, and batch jobs
  • Practical local examples for text, image OCR, documents, audio, and video

Install

pip install aibackends

# Local runtimes
pip install aibackends[llamacpp]
pip install aibackends[llamacpp-cuda]
pip install aibackends[llamacpp-metal]
pip install aibackends[transformers]

# Capability extras
pip install aibackends[pdf]
pip install aibackends[audio]
pip install aibackends[video]
pip install aibackends[pii]

Quickstart

Extract an invoice locally

from aibackends.models import GEMMA4_E2B
from aibackends.runtimes import LLAMACPP
from aibackends.tasks import ExtractInvoiceTask, create_task

task = create_task(
    ExtractInvoiceTask,
    runtime=LLAMACPP,
    model=GEMMA4_E2B,
)

result = task.run("invoice.pdf")
print(result.total)

Examples

Single tasks

Classify text locally and redact PII

from aibackends.models import GEMMA4_E2B
from aibackends.runtimes import LLAMACPP
from aibackends.tasks import ClassifyTask, RedactPIITask, create_task

classifier = create_task(
    ClassifyTask,
    runtime=LLAMACPP,
    model=GEMMA4_E2B,
    labels=["invoice", "contract", "receipt"],
)
redactor = create_task(
    RedactPIITask,
    backend="gliner",
    labels=["email", "phone_number"],
)

classification = classifier.run("invoice text")
redacted = redactor.run("john@example.com called from +1 555 0100")

RedactPIITask uses a dedicated backend such as gliner or openai-privacy (the local privacy-filter model) rather than the general LLM runtime interface.

Generate local embeddings

from aibackends.models import MINILM_L6
from aibackends.runtimes import TRANSFORMERS
from aibackends.tasks import EmbedTask, create_task

embedder = create_task(
    EmbedTask,
    runtime=TRANSFORMERS,
    model=MINILM_L6,
)

vector = embedder.run("Payments failed after checkout deploy.")
print(len(vector))
print(vector[:5])

Workflows

Batch-process sales calls analysis locally

from pathlib import Path

from aibackends.models import GEMMA4_E2B
from aibackends.runtimes import LLAMACPP
from aibackends.workflows import SalesCallAnalyser, create_workflow

workflow = create_workflow(
    SalesCallAnalyser,
    runtime=LLAMACPP,
    model=GEMMA4_E2B,
)

results = workflow.run_batch(
    inputs=Path("./calls").glob("*.m4a"),
    max_concurrency=4,
    on_error="collect",
)

Run OCR locally

from pydantic import BaseModel, Field

from aibackends.models import QWEN3_VL_4B
from aibackends.runtimes import LLAMACPP
from aibackends.schemas.common import LineItem
from aibackends.steps.enrich import VisionExtractor
from aibackends.steps.ingest import ImageIngestor
from aibackends.workflows import Pipeline


class Receipt(BaseModel):
    merchant: str | None = None
    total: float | None = None
    line_items: list[LineItem] = Field(default_factory=list)


class ReceiptOCR(Pipeline):
    steps = [
        ImageIngestor(),
        VisionExtractor(
            schema=Receipt,
            prompt="Extract merchant, total, and line_items from this receipt.",
        ),
    ]


result = ReceiptOCR(runtime=LLAMACPP, model=QWEN3_VL_4B).run("receipt.jpeg")
print(result.model_dump_json(indent=2))

Included

  • Local runtimes: llamacpp, transformers
  • Tasks: summarize, extract, classify, embed, extract_invoice, redact_pii, analyse_sales_call, analyse_video_ad
  • Workflows: InvoiceProcessor, PIIRedactor, SalesCallAnalyser, VideoAdIntelligence
  • Outputs: InvoiceOutput, SalesCallReport, VideoAdReport, RedactedText, Classification

Tool and agent integrations can be added later without changing the core task and workflow layer.

CLI

aibackends task extract-invoice --input invoice.pdf
aibackends task redact-pii --input transcript.txt --backend gliner --labels email,phone_number
aibackends task classify --input doc.txt --labels invoice,contract,receipt
aibackends pull gemma4-e2b --runtime llamacpp
aibackends check transformers

Full command reference: docs/cli.md.

Docs and Examples

  • docs/usage.md for install, local runtimes, tasks, and workflows
  • docs/concepts.md for task, runtime, backend, model, and workflow terms
  • docs/extending.md for custom runtimes, backends, tasks, and workflows
  • docs/api-reference/index.md for the public API
  • examples/README.md for runnable examples, including local image OCR

Development

python3 -m pip install -e ".[dev]"
python3 -m pytest tests
python3 -m mypy src tests
ruff check .

See CONTRIBUTING.md for contribution guidelines.

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

aibackends-0.1.0.tar.gz (3.0 MB view details)

Uploaded Source

Built Distribution

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

aibackends-0.1.0-py3-none-any.whl (68.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: aibackends-0.1.0.tar.gz
  • Upload date:
  • Size: 3.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for aibackends-0.1.0.tar.gz
Algorithm Hash digest
SHA256 20d69b5a7ecab87bc8d29984a5218d245c8295595339c70c6a190288f766560e
MD5 d85055a6858e87a751c96ef3d6143496
BLAKE2b-256 70d2e66783300dc5ca6bc08aa19fee2e2bface2d2bade7c0767b164087d1e1a3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aibackends-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 68.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for aibackends-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8f471030533952cf68aaff2d50fa493fadf790ae08c2361422b4c3c206e5ab86
MD5 ca80d7533d5c624c7111946867c942f3
BLAKE2b-256 c7a2355ecadbb56f1e6d031460f3be322e40fca96e1b3e9e14692ba75a5cf900

See more details on using hashes here.

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