Commit Graph
19 Commits
Author SHA1 Message Date
inference-admin e8da85f730 chat: fix and complete voice chat (STT/TTS) wiring — full endpoint URLs, live gateway key, engine defaults
The speech section shipped 6 Nov was doubly broken: LibreChat POSTs to
speech.*.openai.url VERBATIM in 0.8.8, so the base '/v1' URL 404'd, and the
STT_API_KEY/TTS_API_KEY env values held a key that no longer exists on the
gateway (401 token_not_found). Also:
- STT: tinfoil/voxtral-small-24b (token-priced; gateway bills ~$0.00008/request,
  125x under the flat $0.01/request whisper; same TEE provider, verified equal
  quality on dictation clips). Whisper remains allowed on the key as fallback.
- TTS voices: full provider speaker list (an unknown voice 400s at the gateway).
- speechTab: object form seeds Settings->Speech defaults (engineSTT/engineTTS
  external, voice casual_female) for members who never saved their own.
- new gateway key: alias librechat-speech, $5/30d, audio models only, injected
  as STT_API_KEY/TTS_API_KEY app env.

Verified on a throwaway librechat-test install then live (chat.inference.coop):
config/get serves the defaults; /api/files/speech/stt returns a correct
transcript; /api/files/speech/tts/manual returns audio. Known gap (gateway-side,
NOT this repo): aspeech rows log $0 spend — voxtral-tts is unmetered on the
gateway's aspeech path while the co-op pays ~$0.002/request.
2026-11-07 18:56:45 +00:00
inference-admin 80db1d235f chat: make the member's web-search toggle authoritative — drop modelSpec webSearch defaults
A modelSpec webSearch:true forces web_search into the ephemeral agent on every
new conversation and re-applies it on context re-keys (the client's spec effect
does not consult per-conversation toggle state for new convos), so the model
could call web_search (SearXNG) with the member's toggle OFF. The toggle state
and the ephemeral agent are the same store, but the spec default kept winning.
Remove the spec-level default so the toggle alone decides; interface.webSearch
permission, defaultPinnedTools badge and the searxng webSearch block stay.
Server-side needs no change: @librechat/api never injects search from specs.
2026-11-06 04:24:59 +00:00
inference-admin 981ef5aac2 chat: shorten the welcome line — 'Your co-op, your choice.' (the long no-API-key explanation outlived its purpose) 2026-11-02 06:57:09 +00:00
inference-bot 2a988920af chat: tell users in the welcome line that their key is already connected (co-op/support#40)
The key is auto-seeded within 10 minutes of first login by sync-keys.js, but a new user's first screen is the API-keys panel, which reads as mandatory. The welcome line is the surface we control; the settings dialog builds its strings from templates in a component chunk with no en locale bundle, so it is not cleanly patchable. Option 1 of three in the issue, approved by the GM.
2026-10-31 21:28:26 +00:00
inference-bot ac8c10c1f0 librechat.yaml: modelSpecs.enforce false — unblock pre-spec conversations
With enforce: true (in place since at least Oct 23), every send whose body
carries no `spec` is rejected by api/server/middleware/buildEndpointOption.js
with "No model spec selected", surfaced to members as "Inference Co-op could
not complete this request."

400 of 547 conversations across 37 users had no `spec` — all created before
the spec system (newest Oct 20). They fail on the members' first send;
new chats were fine because the softDefault spec pre-selects.

enforce: false lets those conversations send with their own stored model
exactly as before Oct 20. prioritize stays true, so the spec picker is still
the primary chooser — it is just no longer mandatory. Verified: the change is
read at boot (no watcher in the image), so the app was restarted; the served
stylesheet md5 is unchanged by the restart; the mirror is byte-identical to
the deployed file (sha256 219dbdf2ca0b64f8…). Backup of the previous config
stays on the volume as /app/data/librechat.yaml.bak-20261027T221149Z.

If enforcement is ever restored, backfill `spec` on those conversations first,
mapping by each conversation's own `model` (only exact matches — a mismatch
triggers "Model spec mismatch" instead).
2026-10-27 22:15:32 +00:00
Nathan Schneider f7a4fdb48d modelSpecs: webSearch default ON for all 8 specs (new conversations start with web search active; per-conversation toggle still wins) 2026-10-23 11:25:22 -06:00
Nathan Schneider 94a0ee9614 defaultPinnedTools: include 'mcp' — omitting it unpins the Tools button itself (client seed sets PIN_MCP_=false) 2026-10-20 12:10:44 -06:00
Nathan Schneider f16ffe1fc4 interface.defaultPinnedTools: [web_search] — pin the Web Search badge next to Tools in the composer 2026-10-20 11:38:23 -06:00
Nathan Schneider a667a54a7b image gen: restore per-member billing (customUserVars + env IC_API_KEY); keep system key as safety-net fallback only 2026-10-19 08:49:01 -06:00
Nathan Schneider c87f938f76 image gen: drop customUserVars gate (blocks unseeded members); bill images to system key so first-timers never error 2026-10-19 08:29:00 -06:00
Nathan Schneider 215400cde7 image gen: inject IC_API_KEY via env mapping; add SYSTEM_IMAGE_KEY fallback (system account) so unseeded members never fail 2026-10-19 08:24:29 -06:00
Nathan Schneider 65c6730463 Per-member key auto-load: seed keys via sync-keys.js (portal feed); restore customUserVars for image billing 2026-10-18 23:28:23 -06:00
Nathan Schneider 91e97b00ea README: document manifest-pinned deploy flow, builder-cache trap, branding overlay, keyless image path; mirror live volume files 2026-10-18 22:52:23 -06:00
Nathan Schneider dab60ec8db Comment out apiKey placeholders to disable key prompts 2026-10-18 22:00:05 -06:00
Nathan Schneider a6c8742be1 Remove IC_API_KEY customUserVars and env – image generation now uses default chat key automatically 2026-10-18 21:47:53 -06:00
Nathan Schneider 5e214e4d7e Add inference-image MCP server (accessible image generation) + proper favicon sizes
- mcp/image_server.py: generate_image tool via the co-op gateway; per-member
  key injected through customUserVars (IC_API_KEY) -> env; verified standalone
  (handshake, tools/list, real 1024x1024 + 1536x1024 images, error paths)
- librechat.yaml: register inference-image with startup:false (per-user
  credentials), 120s timeout
- assets/: real favicon sizes (16/32/192), opaque apple-touch 180, padded
  maskable 512
2026-10-18 20:52:48 -06:00
Nathan Schneider 070dec3d29 Sustainable LibreChat setup: official manifest, config layer, brand overlay
- CloudronManifest.json: byte-identical copy of the OFFICIAL appstore manifest
  (the hand-edited one stripped addons and crash-looped the app on 2026-10-18)
- Dockerfile: pinned base (202610150224320000), brand assets only + title sed
- librechat.yaml: schema 1.3.17; chat models only in picker (qwen-image moved
  to the agent image tool); speech via gateway with capped key refs; SearXNG
  web search; inference-docs MCP server; forward-compatible interface.theme
- mcp/server.py: docs MCP server (stdio, stdlib-only, tool search_docs)
- assets/: co-op logo + favicons/PWA icons
2026-10-18 20:26:40 -06:00
Nathan Schneider 1bc24ca9c9 Bump config version to force client reload 2026-10-18 17:49:43 -06:00
Nathan Schneider b2badebad6 Add image model (regolo-qwen-image) to modelSpecs, enabling UI image‑generation button 2026-10-18 16:51:36 -06:00