README: images bill to system key (no customUserVars gate); pluginauths inert

This commit is contained in:
Nathan Schneider committed 2026-10-19 08:30:29 -06:00
1 parent c87f938f76
commit f15307d2f7
1 file changed
+13 -10
+13 -10
View File
@@ -232,13 +232,14 @@ needed.
is deliberately NOT in the chat picker (image models are not chat models; is deliberately NOT in the chat picker (image models are not chat models;
chat-calling it was the source of the old 500s). chat-calling it was the source of the old 500s).
- **Image generation — two paths**: - **Image generation — two paths**:
1. **MCP tool (default, no key ever)**: `inference-image` server (tool 1. **MCP tool (default, no key ever, no gate)**: `inference-image` server
`generate_image`) — members select it in the composer's **+** palette (tool `generate_image`) — members select it in the composer's **+**
and just ask. The server uses the member's `IC_API_KEY` if LibreChat palette and just ask. Images bill to the co-op SYSTEM key
injected one, otherwise sends a **keyless request** (the gateway bills (`SYSTEM_IMAGE_KEY`, LiteLLM alias `system-image-fallback`, $5/30d,
the request; per-member billing is NOT enforced on this path). `regolo/qwen-image` only). No `customUserVars` gate: it made the credential
`customUserVars` were removed from the live yaml on 2026-10-19 — REQUIRED and blocked the whole server for any not-yet-seeded member
members are never asked for a key. (first-login gap) before the fallback could run, and v0.8.8 has no
optional-flag escape hatch.
2. **Agent tool**: LibreChat's built-in "OpenAI Image Tools" (env 2. **Agent tool**: LibreChat's built-in "OpenAI Image Tools" (env
`IMAGE_GEN_OAI_BASEURL`/`IMAGE_GEN_OAI_MODEL` → gateway; no admin key, `IMAGE_GEN_OAI_BASEURL`/`IMAGE_GEN_OAI_MODEL` → gateway; no admin key,
members paste their own). Note LibreChat v0.8.8 renders the generated members paste their own). Note LibreChat v0.8.8 renders the generated
@@ -266,9 +267,11 @@ member's own portal-provisioned key automatically:
that feed and upserts, per member with a sandbox account: that feed and upserts, per member with a sandbox account:
- `keys` collection: `{userId, name: "Inference Co-op", value: encrypt(JSON.stringify({apiKey}))}` - `keys` collection: `{userId, name: "Inference Co-op", value: encrypt(JSON.stringify({apiKey}))}`
— consumed by the chat endpoint (`apiKey: "user_provided"` in the yaml). — consumed by the chat endpoint (`apiKey: "user_provided"` in the yaml).
- `pluginauths` collection: `{userId, pluginKey: "mcp:inference-image", - `pluginauths` collection: `{userId, pluginKey: "mcp_inference-image",
authField: "IC_API_KEY", value: encrypt(key)}` — consumed by the MCP authField: "IC_API_KEY", value: encrypt(key)}` — currently INERT: image
`customUserVars` config so image generation bills to the member's team. generation bills to the system key instead (see Feature notes), so this
row is only written for forward-compatibility if per-member image billing
is re-enabled later.
Encryption uses LibreChat's own scheme (`CREDS_KEY`/`CREDS_IV`, AES-256-CBC Encryption uses LibreChat's own scheme (`CREDS_KEY`/`CREDS_IV`, AES-256-CBC
via `@librechat/data-schemas` `encrypt()`), read from the app process env via `@librechat/data-schemas` `encrypt()`), read from the app process env
(`/proc/1/environ`) because `cloudron exec` sessions don't inherit it. (`/proc/1/environ`) because `cloudron exec` sessions don't inherit it.