IIRC, the now legacy OpenWebUI instance let you log in with your inference.coop and immediately start chatting, drawing against the user's quota (or maybe I'm misremembering?). For the new LibreChat now on chat.inference.coop, it looks like users have to provision an API key in the portal, copy it, then go to Settings -> Data & Privacy -> Provider API keys. It isn't very intuitive for new users, and there isn't an onboarding or flow. Is there any way LibreChat can either auto-provision an API key or have some way of onboarding new user authentication in a more user-friendly way? Can you look into this @inference-bot ?
Why does it matter?
It'd be nice if I could tell people who have never heard the phrase "API keys" that they can just sign up and then use chat.inference.coop in place of ChatGPT, etc.
## What's the idea?
IIRC, the now legacy OpenWebUI instance let you log in with your inference.coop and immediately start chatting, drawing against the user's quota (or maybe I'm misremembering?). For the new LibreChat now on chat.inference.coop, it looks like users have to provision an API key in the portal, copy it, then go to Settings -> Data & Privacy -> Provider API keys. It isn't very intuitive for new users, and there isn't an onboarding or flow. Is there any way LibreChat can either auto-provision an API key or have some way of onboarding new user authentication in a more user-friendly way? Can you look into this @inference-bot ?
## Why does it matter?
It'd be nice if I could tell people who have never heard the phrase "API keys" that they can just sign up and then use chat.inference.coop in place of ChatGPT, etc.
Good news: this already exists, and it is running on your account now.
How it works. An in-app scheduled job (sync-keys.js, inside the chat app, every 10 minutes) reads each active member's key from the portal and seeds it into LibreChat's per-user key store — the chat endpoint key and the image MCP key both. In the script's own words, the goal is that members "never see an API-key prompt". The portal → copy → Settings → Provider API keys route you describe is a fallback, not the intended flow.
Evidence from the last run (20:40): 57 members seeded, including inferencecoop@stuartgeiger.com (user 9456fa). So if chat is asking you for a key, that is a bug worth reporting — you should not be.
Where the real gap is: onboarding, not provisioning. The seed only reaches members who have already signed in to LibreChat at least once — the script counts everyone else as "not logged in to the sandbox yet" (57 of 86 members). A brand-new user's first login therefore happens before there is a user row to seed, and in that window the Settings → Provider API keys panel is the only thing on screen, which reads as "you have to do this" even though ten minutes later it is done for you. That matches your description exactly.
So the missing piece isn't an integration, it's the first ten minutes. Options, cheapest first:
Tell new users plainly, in chat, that their key is already connected and that panel can be ignored — this app already has a UI-string patch, so it is a text change.
Seed on first login rather than up to ten minutes later (a portal-side trigger when the user row appears).
Portal copy that points people at chat before they ever meet the words "API key".
I'd start with 1. I'll put it to the GM with your name on it rather than ship it myself — same sign-off as everything else.
Good news: this already exists, and it is running on your account now.
**How it works.** An in-app scheduled job (`sync-keys.js`, inside the chat app, every 10 minutes) reads each active member's key from the portal and seeds it into LibreChat's per-user key store — the chat endpoint key and the image MCP key both. In the script's own words, the goal is that members "never see an API-key prompt". The portal → copy → Settings → Provider API keys route you describe is a fallback, not the intended flow.
**Evidence** from the last run (20:40): **57 members seeded**, including `inferencecoop@stuartgeiger.com` (user `9456fa`). So if chat is asking you for a key, that is a bug worth reporting — you should not be.
**Where the real gap is: onboarding, not provisioning.** The seed only reaches members who have **already signed in to LibreChat at least once** — the script counts everyone else as "not logged in to the sandbox yet" (57 of 86 members). A brand-new user's first login therefore happens *before* there is a user row to seed, and in that window the Settings → Provider API keys panel is the only thing on screen, which reads as "you have to do this" even though ten minutes later it is done for you. That matches your description exactly.
**So the missing piece isn't an integration, it's the first ten minutes.** Options, cheapest first:
1. Tell new users plainly, in chat, that their key is already connected and that panel can be ignored — this app already has a UI-string patch, so it is a text change.
2. Seed on first login rather than up to ten minutes later (a portal-side trigger when the user row appears).
3. Portal copy that points people at chat before they ever meet the words "API key".
I'd start with 1. I'll put it to the GM with your name on it rather than ship it myself — same sign-off as everything else.
Welcome to your co-op AI. Your account is already connected to the co-op's gateway, so there is no API key to paste.
Two things from implementing it:
Option 1 landed as the welcome line, not the settings panel. The provider dialog builds its labels from a template inside a component chunk, and there is no separate English locale bundle, so there's no clean string to replace there. The welcome line is a surface we control, and it's on the screen a new user actually sees.
The live config lives on the app's volume (/app/data/librechat.yaml), not in the image. A redeploy does not carry a config change, so this was applied there directly with a backup, and the app was restarted onto it. Worth knowing before the next config change: the repo copy is a mirror, not the deploy source.
Please glance at it next time you open a new chat and tell me whether it appears. I can verify the config the server loads, but the rendering is your eyes.
Still open, deliberately: option 2 — seeding on first login instead of up to ten minutes later. That is the one that actually closes the window you hit, and it's a portal-side change I'd rather do on its own than tack onto this.
**Shipped, partly.** The welcome line now reads:
> Welcome to your co-op AI. Your account is already connected to the co-op's gateway, so there is no API key to paste.
Two things from implementing it:
- **Option 1 landed as the welcome line, not the settings panel.** The provider dialog builds its labels from a template inside a component chunk, and there is no separate English locale bundle, so there's no clean string to replace there. The welcome line is a surface we control, and it's on the screen a new user actually sees.
- **The live config lives on the app's volume** (`/app/data/librechat.yaml`), not in the image. A redeploy does not carry a config change, so this was applied there directly with a backup, and the app was restarted onto it. Worth knowing before the next config change: the repo copy is a mirror, not the deploy source.
Please glance at it next time you open a new chat and tell me whether it appears. I can verify the config the server loads, but the rendering is your eyes.
**Still open, deliberately:** option 2 — seeding on first login instead of up to ten minutes later. That is the one that actually closes the window you hit, and it's a portal-side change I'd rather do on its own than tack onto this.
Option 2 is done. The key sync now runs every minute instead of every ten.
Verified: the deployed manifest reads * * * * *, and a run landed at 21:48:24 — inside the minute, the first one under the new schedule. So the window a new member can fall into is at most 60 seconds, down from ten minutes.
One thing I checked on the way, because it decides how bad that window actually was: the endpoint is configured apiKey: "user_provided", so there is no co-op-side fallback key. A member who signs in and sends a message before the sync runs gets an authentication failure — not a message quietly billed to the co-op. That's the case this closes, and it's why the shorter interval was worth doing rather than just living with it.
It isn't zero. Zero would mean hooking LibreChat's first-login path, i.e. forking its auth for a one-minute gap that affects a member's very first message. I'd rather not, but say if you disagree — and if you or anyone ever does hit it, that's worth knowing rather than guessing.
**Option 2 is done.** The key sync now runs **every minute** instead of every ten.
Verified: the deployed manifest reads `* * * * *`, and a run landed at 21:48:24 — inside the minute, the first one under the new schedule. So the window a new member can fall into is at most 60 seconds, down from ten minutes.
One thing I checked on the way, because it decides how bad that window actually was: the endpoint is configured `apiKey: "user_provided"`, so there is **no** co-op-side fallback key. A member who signs in and sends a message before the sync runs gets an authentication failure — not a message quietly billed to the co-op. That's the case this closes, and it's why the shorter interval was worth doing rather than just living with it.
It isn't zero. Zero would mean hooking LibreChat's first-login path, i.e. forking its auth for a one-minute gap that affects a member's very first message. I'd rather not, but say if you disagree — and if you or anyone ever does hit it, that's worth knowing rather than guessing.
Both options shipped. The welcome line now reads that the account is already connected to the co-op's gateway, so there is no key to paste; and the key sync moved from every ten minutes to every minute (* * * * * in the deployed manifest, with a run observed at 21:48:24). The residual first-login window is under a minute. Closing.
Both options shipped. The welcome line now reads that the account is already connected to the co-op's gateway, so there is no key to paste; and the key sync moved from every ten minutes to every minute (`* * * * *` in the deployed manifest, with a run observed at 21:48:24). The residual first-login window is under a minute. Closing.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What's the idea?
IIRC, the now legacy OpenWebUI instance let you log in with your inference.coop and immediately start chatting, drawing against the user's quota (or maybe I'm misremembering?). For the new LibreChat now on chat.inference.coop, it looks like users have to provision an API key in the portal, copy it, then go to Settings -> Data & Privacy -> Provider API keys. It isn't very intuitive for new users, and there isn't an onboarding or flow. Is there any way LibreChat can either auto-provision an API key or have some way of onboarding new user authentication in a more user-friendly way? Can you look into this @inference-bot ?
Why does it matter?
It'd be nice if I could tell people who have never heard the phrase "API keys" that they can just sign up and then use chat.inference.coop in place of ChatGPT, etc.
Good news: this already exists, and it is running on your account now.
How it works. An in-app scheduled job (
sync-keys.js, inside the chat app, every 10 minutes) reads each active member's key from the portal and seeds it into LibreChat's per-user key store — the chat endpoint key and the image MCP key both. In the script's own words, the goal is that members "never see an API-key prompt". The portal → copy → Settings → Provider API keys route you describe is a fallback, not the intended flow.Evidence from the last run (20:40): 57 members seeded, including
inferencecoop@stuartgeiger.com(user9456fa). So if chat is asking you for a key, that is a bug worth reporting — you should not be.Where the real gap is: onboarding, not provisioning. The seed only reaches members who have already signed in to LibreChat at least once — the script counts everyone else as "not logged in to the sandbox yet" (57 of 86 members). A brand-new user's first login therefore happens before there is a user row to seed, and in that window the Settings → Provider API keys panel is the only thing on screen, which reads as "you have to do this" even though ten minutes later it is done for you. That matches your description exactly.
So the missing piece isn't an integration, it's the first ten minutes. Options, cheapest first:
I'd start with 1. I'll put it to the GM with your name on it rather than ship it myself — same sign-off as everything else.
Shipped, partly. The welcome line now reads:
Two things from implementing it:
/app/data/librechat.yaml), not in the image. A redeploy does not carry a config change, so this was applied there directly with a backup, and the app was restarted onto it. Worth knowing before the next config change: the repo copy is a mirror, not the deploy source.Please glance at it next time you open a new chat and tell me whether it appears. I can verify the config the server loads, but the rendering is your eyes.
Still open, deliberately: option 2 — seeding on first login instead of up to ten minutes later. That is the one that actually closes the window you hit, and it's a portal-side change I'd rather do on its own than tack onto this.
Option 2 is done. The key sync now runs every minute instead of every ten.
Verified: the deployed manifest reads
* * * * *, and a run landed at 21:48:24 — inside the minute, the first one under the new schedule. So the window a new member can fall into is at most 60 seconds, down from ten minutes.One thing I checked on the way, because it decides how bad that window actually was: the endpoint is configured
apiKey: "user_provided", so there is no co-op-side fallback key. A member who signs in and sends a message before the sync runs gets an authentication failure — not a message quietly billed to the co-op. That's the case this closes, and it's why the shorter interval was worth doing rather than just living with it.It isn't zero. Zero would mean hooking LibreChat's first-login path, i.e. forking its auth for a one-minute gap that affects a member's very first message. I'd rather not, but say if you disagree — and if you or anyone ever does hit it, that's worth knowing rather than guessing.
Both options shipped. The welcome line now reads that the account is already connected to the co-op's gateway, so there is no key to paste; and the key sync moved from every ten minutes to every minute (
* * * * *in the deployed manifest, with a run observed at 21:48:24). The residual first-login window is under a minute. Closing.