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
llamacppandtransformersruntimes - 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.mdfor install, local runtimes, tasks, and workflowsdocs/concepts.mdfor task, runtime, backend, model, and workflow termsdocs/extending.mdfor custom runtimes, backends, tasks, and workflowsdocs/api-reference/index.mdfor the public APIexamples/README.mdfor 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
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20d69b5a7ecab87bc8d29984a5218d245c8295595339c70c6a190288f766560e
|
|
| MD5 |
d85055a6858e87a751c96ef3d6143496
|
|
| BLAKE2b-256 |
70d2e66783300dc5ca6bc08aa19fee2e2bface2d2bade7c0767b164087d1e1a3
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f471030533952cf68aaff2d50fa493fadf790ae08c2361422b4c3c206e5ab86
|
|
| MD5 |
ca80d7533d5c624c7111946867c942f3
|
|
| BLAKE2b-256 |
c7a2355ecadbb56f1e6d031460f3be322e40fca96e1b3e9e14692ba75a5cf900
|