Skip to content

Per-Tenant LLM Providers

The Designer’s AI features — the flow builder, the Agentic Worker composer, the SoRLa and OperaLa composers — all run through a Large Language Model. By default a platform operator configures those providers centrally. With per-tenant LLM providers, a tenant can also bring its own API key and have the Designer use it.

A provider row has a source:

  • operator — set by the platform operator, read-only to the tenant.
  • tenant — created and owned by the tenant administrator.

The resolution rule is simple and predictable: the operator’s key always wins. A tenant key can only fill a composer role that the operator has not already assigned. A tenant can never take over (or “steal”) a role the operator manages.

Each LLM provider can be assigned to one or more composer roles, which map to the Designer surfaces that use them:

RolePowers
flow_editor_composerThe flow builder (BUILD / EDIT) and AI chat
agentic_worker_composerThe Agentic Worker / DW composer
sorla_composerThe SoRLa authoring studio
operala_composerThe OperaLa operations panel
telco_playbook_composerTelco playbook authoring

A role is owned by exactly one provider. Assigning a role that an operator already owns is rejected, so there is never an ambiguous “which key serves this surface” question.

In the Designer, a tenant administrator opens Settings → Credentials → My LLM providers. From there they can:

  • add a provider (OpenAI, Anthropic, Azure OpenAI, Google, and more) with their own API key, optional base URL, and model,
  • test the key before saving,
  • assign it to any composer role the operator has not reserved,
  • remove a provider they own.

Roles reserved by the operator are shown but disabled — a clear signal of what is centrally managed versus what the tenant controls.

  • Tenant keys are encrypted at rest and decrypted only in memory when a request needs them.
  • The Designer resolves its LLM stacks from the admin and refreshes them within about 30 seconds of a change, so adding or rotating a key takes effect without a restart.
  • An unassigned role falls back to the Designer’s local startup configuration when one was provided; with no key for a role, that surface reports that no provider is configured rather than silently using the wrong one.