projectadg last reviewed 2026-05-20

Aspire LLM Gateway

Context

Before this project, every Aspire app held its own LLM/vision/OCR provider credentials directly. The gateway consolidates all of it behind one OpenAI-compatible endpoint at https://llm.aspiredigital.group/v1. See aspire-llm-gateway-only-egress for the rationale.

Architecture

graph LR KO["knowledge-os"] --> GW PZ["postiz"] --> GW AG["28 OpenClaw agents"] --> GW GW["Aspire LLM Gateway<br/>llm.aspiredigital.group/v1"] --> CL["Claude Max OAuth"] GW --> CF["cloud-first.ai (Qwen)"] GW --> GM["Gemini OAuth"] CF -.->|qwen-3.6-omni<br/>falls back| CL classDef gw fill:#715EE3,color:#fff,stroke:#291F50; class GW gw;

Detail

Goal

Single egress for all Aspire AI traffic with central budget, audit trail, and provider-swap-without-code-change capability.

Stack

Upstreams configured

AliasUpstreamStatus
claude-haiku-4-5 / claude-sonnet-4-6 / claude-opus-4-7Anthropic OAuth (Claude Max subscription)โœ…
qwen-3.6 (chat)cloud-first.ai LiteLLM passthroughโœ…
qwen-3.6-omni (vision)cloud-first.ai LiteLLM passthroughโŒ broken upstream since 2026-05-09 (needs Proxy Admin on cloud-first.ai to fix)
gpt-4.1 / gpt-5.2 / gpt-5.5codex-shim sidecar (ChatGPT Pro OAuth)โธ Phase 1b deferred โ€” Coolify Dockerfile-only mode blocked builds
gemini-2.5-pro + codex-* aliasesLiteLLM Phase 2/3 OAuth-first fallback chainโœ… added 2026-05-14

Virtual keys provisioned

ConsumerCreatedStatus
postiz2026-05-09Live
knowledge-os2026-05-17Live; smoke-tested via worker-ocr vision path

Milestones

Open questions

  1. When does codex-shim get re-attempted? Currently low-priority because Claude/Qwen aliases cover 90% of need.
  2. Spend ledger threshold โ€” when does MONTHLY_BUDGET_AUD actually start enforcing rejection vs warning?

Provenance

Full operational history: aios-workspace/engineering/projects/aspire-llm-gateway/_STATUS.md (local-only, contains master key).

Related

๐Ÿ”— Relationships

graph LR aspire_llm_gateway["aspire-llm-gateway"]:::self aspire_llm_gateway --> aspire_llm_gateway_only_egress["aspire-llm-gateway-only-egress"] aspire_llm_gateway --> knowledge_os_stage_1["knowledge-os-stage-1"] classDef self fill:#715EE3,color:#fff,stroke:#291F50;