Skip to main content

AbstractGateway: deployable Run Gateway host for AbstractRuntime (commands + ledger).

Project description

AbstractGateway

AbstractGateway is a deployable Run Gateway host for AbstractRuntime runs:

  • start durable runs
  • accept a durable command inbox
  • replay/stream a durable ledger (replay-first)
  • enforce a security baseline (token + origin allowlist + limits)

This decouples the gateway service from any specific UI (AbstractFlow, AbstractCode, web/PWA thin clients).

Start here: docs/getting-started.md

AbstractFramework ecosystem

AbstractGateway is part of the AbstractFramework ecosystem:

  • AbstractRuntime (required): durable run model + workflow registry + stores (pyproject.toml, src/abstractgateway/runner.py)
  • AbstractCore (optional, via abstractruntime[abstractcore] / abstractruntime[multimodal]): LLM/tool execution, provider-level prompt-cache controls, and workflow-backed generated image/voice/audio capabilities used by many bundles (src/abstractgateway/hosts/bundle_host.py)
  • Higher-level UIs (optional): AbstractFlow (authoring/bundling), AbstractCode / AbstractObserver / thin clients (rendering + operations)

Related repos:

Quickstart (HTTP server, bundle mode)

pip install "abstractgateway[http]"

export ABSTRACTGATEWAY_FLOWS_DIR="/path/to/bundles"   # *.flow dir (or a single .flow file)
export ABSTRACTGATEWAY_DATA_DIR="$PWD/runtime/gateway"

# Required by default: the server refuses to start without a token.
export ABSTRACTGATEWAY_AUTH_TOKEN="$(python -c 'import secrets; print(secrets.token_urlsafe(32))')"
# Browser-origin allowlist (glob patterns). Default allows localhost; customize when exposing remotely.
export ABSTRACTGATEWAY_ALLOWED_ORIGINS="http://localhost:*,http://127.0.0.1:*"

abstractgateway serve --host 127.0.0.1 --port 8080

OpenAPI docs (Swagger UI): http://127.0.0.1:8080/docs

Smoke checks:

curl -sS "http://127.0.0.1:8080/api/health"

curl -sS -H "Authorization: Bearer $ABSTRACTGATEWAY_AUTH_TOKEN" \
  "http://127.0.0.1:8080/api/gateway/bundles"

Docker server

Release images are published to GHCR:

docker pull ghcr.io/lpalbou/abstractgateway-server:0.2.3

The image installs abstractgateway[server]: HTTP server, AbstractRuntime[multimodal], AbstractCore remote/commercial provider support, OpenAI-compatible text providers, workflow-backed and direct image generation through Runtime/Core/AbstractVision, direct Gateway voice/audio endpoints through AbstractVoice, provider/session prompt-cache helpers, media/tool helpers, token counting, compression, AbstractAgent, and AbstractFlow compatibility.

export ABSTRACTGATEWAY_AUTH_TOKEN="$(python -c 'import secrets; print(secrets.token_urlsafe(32))')"

docker run --rm --name abstractgateway-server \
  -p 127.0.0.1:8080:8080 \
  -e ABSTRACTGATEWAY_AUTH_TOKEN="$ABSTRACTGATEWAY_AUTH_TOKEN" \
  -e ABSTRACTGATEWAY_PROVIDER="openai-compatible" \
  -e ABSTRACTGATEWAY_MODEL="your-model" \
  -e OPENAI_COMPATIBLE_BASE_URL="http://host.docker.internal:1234/v1" \
  -v "$PWD/runtime/gateway:/data/gateway" \
  -v "$PWD/flows/bundles:/data/flows:ro" \
  ghcr.io/lpalbou/abstractgateway-server:0.2.3

Compose and deployment details: docs/deployment.md.

0.2.3 capability scope

Direct Gateway APIs in this release:

  • POST /api/gateway/runs/{run_id}/voice/tts
  • POST /api/gateway/runs/{run_id}/audio/transcribe
  • POST /api/gateway/runs/{run_id}/images/generate
  • /api/gateway/prompt_cache/* provider/model operator controls
  • /api/gateway/sessions/{session_id}/prompt_cache/* session lifecycle controls
  • /api/gateway/discovery/capabilities package, plugin, and thin-client contract discovery

Workflow/Core-backed capabilities:

  • Generated images are available to Runtime/Core workflows through AbstractVision when installed and configured, and the direct Gateway image route uses the same Runtime/Core image-generation contract.
  • Prompt-cache support depends on the active provider/model. Session lifecycle routes provide Gateway-owned naming and orchestration, not a provider- independent local KV cache.

Client contract (replay-first)

  • Clients start runs: POST /api/gateway/runs/start
  • Clients can schedule runs (bundle mode): POST /api/gateway/runs/schedule
  • Clients act by submitting durable commands: POST /api/gateway/commands
    • supported types: pause|resume|cancel|emit_event|update_schedule|compact_memory
  • Clients render by replaying/streaming the durable ledger:
    • replay: GET /api/gateway/runs/{run_id}/ledger?after=...
    • stream (SSE): GET /api/gateway/runs/{run_id}/ledger/stream?after=...

See docs/api.md for curl examples and the live OpenAPI spec (/openapi.json).

Install

Base (runner + stores + CLI)

Requires Python >=3.10 (see pyproject.toml).

pip install abstractgateway

HTTP API/SSE server (FastAPI + Uvicorn)

pip install "abstractgateway[http]"

Optional extras

  • abstractgateway[visualflow]: run VisualFlow JSON from a directory of *.json files (requires abstractflow)
  • abstractgateway[server]: container/server profile with AbstractRuntime multimodal support, AbstractCore remote providers, OpenAI-compatible text providers, workflow-backed/direct AbstractVision image generation, direct Gateway voice/audio/image endpoints, provider/session prompt-cache helpers, media/tool helpers, tokens, and compression
  • abstractgateway[telegram]: Telegram bridge dependencies
  • abstractgateway[voice]: enable voice/audio endpoints (TTS/STT) via AbstractVoice and AbstractCore's voice/audio plugin extras
  • abstractgateway[vision]: enable generative vision via AbstractCore's AbstractVision plugin
  • abstractgateway[multimodal]: Runtime/Core multimodal profile without the HTTP server deps
  • abstractgateway[all]: batteries-included install (HTTP + tools + voice/audio + vision + media + visualflow)
  • abstractgateway[docs]: MkDocs site tooling
  • abstractgateway[dev]: local test/dev deps

Bundle-dependent dependencies (only if your workflows need them)

  • LLM/tool nodes in bundle mode require AbstractRuntime’s AbstractCore integration.
    • If you installed abstractgateway[http], this is already included.
    • If you installed only the base package, install it explicitly:
pip install "abstractruntime[abstractcore]>=0.4.6"

Visual Agent nodes require abstractagent (also included by abstractgateway[http]):

pip install abstractagent

For details on ABSTRACTGATEWAY_PROVIDER/MODEL, store backends, and workflow sources, see docs/configuration.md.

Creating a .flow bundle (authoring)

Use AbstractFlow to pack a bundle:

abstractflow bundle pack /path/to/root.json --out /path/to/bundles/my.flow --flows-dir /path/to/flows

See docs/getting-started.md for running, split API/runner, and file→SQLite migration.

Docs

Published docs site: https://www.lpalbou.info/AbstractGateway/

Project docs

Package docs

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

abstractgateway-0.2.3.tar.gz (398.0 kB view details)

Uploaded Source

Built Distribution

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

abstractgateway-0.2.3-py3-none-any.whl (247.9 kB view details)

Uploaded Python 3

File details

Details for the file abstractgateway-0.2.3.tar.gz.

File metadata

  • Download URL: abstractgateway-0.2.3.tar.gz
  • Upload date:
  • Size: 398.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for abstractgateway-0.2.3.tar.gz
Algorithm Hash digest
SHA256 81c982f4dcbbb622c3d2f9e04f328dc9914084f75f075494c86434ad9f5593f4
MD5 4819de0b73840433ea9c1a2b8b7036b4
BLAKE2b-256 563c95962c8095315c5bab248133ff63d7f83182623b53356de3e0f6d121d969

See more details on using hashes here.

Provenance

The following attestation bundles were made for abstractgateway-0.2.3.tar.gz:

Publisher: release.yml on lpalbou/AbstractGateway

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

File details

Details for the file abstractgateway-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: abstractgateway-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 247.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for abstractgateway-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 df306cb4c5ee0b35bb256f8594e68d776c26260a7cf798d8454aa8e8d8476ad4
MD5 a1441d32baded0a437314e66f6eba831
BLAKE2b-256 e11a3687bd6a719fec327162a7f7791f27497f8c6e253f00f25a0177dab6c64f

See more details on using hashes here.

Provenance

The following attestation bundles were made for abstractgateway-0.2.3-py3-none-any.whl:

Publisher: release.yml on lpalbou/AbstractGateway

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