Compare commits

1 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
4 changed files with 57 additions and 63 deletions

No files matched your search

+55 -55
View File
@@ -1,59 +1,59 @@
{ {
"id": "ai.librechat.cloudronapp", "id": "ai.librechat.cloudronapp",
"version": "1.4.8", "version": "1.4.5",
"title": "LibreChat", "title": "LibreChat",
"upstreamVersion": "0.8.8", "upstreamVersion": "0.8.8",
"author": "Danny Avila", "author": "Danny Avila",
"description": "LibreChat is an open-source chatbot client that supports multiple AI providers and models including:\n\n- OpenAI GPT Models\n- Anthropic Claude Models\n- Google PaLM Models\n- Various open-source local models\n\nFeatures:\n- Switch between various AI models\n- Conversation history\n- Plugins support\n- File upload and processing\n- Custom instructions\n- Multiple conversation modes\n\n", "description": "LibreChat is an open-source chatbot client that supports multiple AI providers and models including:\n\n- OpenAI GPT Models\n- Anthropic Claude Models\n- Google PaLM Models\n- Various open-source local models\n\nFeatures:\n- Switch between various AI models\n- Conversation history\n- Plugins support\n- File upload and processing\n- Custom instructions\n- Multiple conversation modes\n\n",
"changelog": "* Update uv to 0.13.5\n", "changelog": "* Update uv to 0.13.5\n",
"tagline": "ChatGPT-like interface with model switching", "tagline": "ChatGPT-like interface with model switching",
"website": "https://github.com/danny-avila/LibreChat", "website": "https://github.com/danny-avila/LibreChat",
"documentationUrl": "https://docs.cloudron.io/packages/librechat/", "documentationUrl": "https://docs.cloudron.io/packages/librechat/",
"forumUrl": "https://forum.cloudron.io/category/210/librechat", "forumUrl": "https://forum.cloudron.io/category/210/librechat",
"contactEmail": "support@cloudron.io", "contactEmail": "support@cloudron.io",
"healthCheckPath": "/health", "healthCheckPath": "/health",
"httpPort": 3080, "httpPort": 3080,
"addons": { "addons": {
"postgresql": {}, "postgresql": {},
"mongodb": {}, "mongodb": {},
"localstorage": {}, "localstorage": {},
"oidc": { "oidc": {
"loginRedirectUri": "/oauth/openid/callback" "loginRedirectUri": "/oauth/openid/callback"
},
"sendmail": {
"supportsDisplayName": true
},
"scheduler": {
"librechat_key_sync": {
"schedule": "* * * * *",
"command": "cd /app/code/librechat/api && node /app/code/sync-keys.js"
}
}
}, },
"checklist": { "sendmail": {
"register-admin": { "supportsDisplayName": true
"message": "On the first visit, register yourself as an admin user"
},
"disable-registration": {
"message": "Disable registration, if required, to prevent misuse"
},
"set-api-keys": {
"message": "Set API keys in /app/data/env file and restart the app"
}
}, },
"optionalSso": true, "scheduler": {
"manifestVersion": 2, "librechat_key_sync": {
"memoryLimit": 1073741824, "schedule": "* * * * *",
"minBoxVersion": "8.1.0", "command": "cd /app/code/librechat/api && node /app/code/sync-keys.js"
"tags": [ }
"ai", }
"chat", },
"gpt" "checklist": {
], "register-admin": {
"mediaLinks": [ "message": "On the first visit, register yourself as an admin user"
"https://screenshots.cloudron.io/ai.librechat.cloudronapp/librechat-00.png", },
"https://screenshots.cloudron.io/ai.librechat.cloudronapp/librechat-01.png" "disable-registration": {
], "message": "Disable registration, if required, to prevent misuse"
"icon": "file://logo.png", },
"dockerImage": "registry.inference.coop/co-op/librechat-custom:20261106-c2aec74" "set-api-keys": {
"message": "Set API keys in /app/data/env file and restart the app"
}
},
"optionalSso": true,
"manifestVersion": 2,
"memoryLimit": 1073741824,
"minBoxVersion": "8.1.0",
"tags": [
"ai",
"chat",
"gpt"
],
"mediaLinks": [
"https://screenshots.cloudron.io/ai.librechat.cloudronapp/librechat-00.png",
"https://screenshots.cloudron.io/ai.librechat.cloudronapp/librechat-01.png"
],
"icon": "file://logo.png",
"dockerImage": "registry.inference.coop/co-op/librechat-custom:20261031-2a98892"
} }
+1 -1
View File
@@ -20,7 +20,7 @@
# the manifest's scheduler task). All other behavior lives on the # the manifest's scheduler task). All other behavior lives on the
# persistent volume (/app/data/librechat.yaml, /app/data/env, # persistent volume (/app/data/librechat.yaml, /app/data/env,
# /app/data/mcp/) and survives image updates unchanged. # /app/data/mcp/) and survives image updates unchanged.
FROM cloudron/ai.librechat.cloudronapp:202611030321030000 FROM cloudron/ai.librechat.cloudronapp:202610230221180000
# Login-page + header logo (the client bundle references assets/logo.svg) # Login-page + header logo (the client bundle references assets/logo.svg)
COPY assets/logo.svg /app/code/librechat/client/dist/assets/logo.svg COPY assets/logo.svg /app/code/librechat/client/dist/assets/logo.svg
-6
View File
@@ -166,12 +166,6 @@ speech:
advancedMode: false advancedMode: false
speechToText: speechToText:
engineSTT: external engineSTT: external
# Pin the transcription LANGUAGE default to English. Without it the
# client sends no language param and voxtral-small-24b auto-detects —
# which misfired once as Spanish on a short first mic press (reported
# 2026-11-07). Members who save their own language in Settings -> Speech
# always override this default.
languageSTT: "en"
textToSpeech: textToSpeech:
engineTTS: external engineTTS: external
voice: casual_female voice: casual_female
+1 -1
View File
@@ -28,7 +28,7 @@ set -euo pipefail
APP=${APP:-4023ccbf-d57a-4500-97df-14de9cf3516e} APP=${APP:-4023ccbf-d57a-4500-97df-14de9cf3516e}
REGISTRY_REPO=${REGISTRY_REPO:-registry.inference.coop/co-op/librechat-custom} REGISTRY_REPO=${REGISTRY_REPO:-registry.inference.coop/co-op/librechat-custom}
SERVER=${SERVER:-my.inference.coop} SERVER=${SERVER:-my.inference.coop}
BASE_IMAGE=${BASE_IMAGE:-cloudron/ai.librechat.cloudronapp:202611030321030000} BASE_IMAGE=${BASE_IMAGE:-cloudron/ai.librechat.cloudronapp:202610150224320000}
MANIFEST=CloudronManifest.json MANIFEST=CloudronManifest.json
die() { printf 'release.sh: %s\n' "$*" >&2; exit 1; } die() { printf 'release.sh: %s\n' "$*" >&2; exit 1; }