Compare commits

4 Commits
Author SHA1 Message Date
inference-admin bb276dd7dd Pin manifest to 20261106-c2aec74 2026-11-09 05:00:31 +00:00
inference-bot 0f0875a636 merge: appstore 1.4.8 overlay candidate (c2aec74) 2026-11-09 05:00:25 +00:00
inference-admin 0c8cd05828 chat: mirror live librechat.yaml — STT/TTS endpoints, voxtral models, seeded speechTab, STT language default 'en'
Syncs the repo to the deployed /app/data/librechat.yaml (md5 a856831404d5b522cd2e47a8e63466ad,
verified in-container 2026-11-07): full /v1/audio/* endpoint URLs, tinfoil/voxtral-small-24b
(STT) + tinfoil/voxtral-tts (TTS) with the 20 provider voices, seeded speechTab client
defaults (external engines), and languageSTT 'en' pinned as the transcription-language
default (members' own saved settings always win) after a first-press Spanish misdetect.
This run's TTS latency fix lives in the gateway (code/litellm 5d38403), not here.
2026-11-07 20:29:36 +00:00
inference-admin c2aec749b4 overlay: rebase on appstore package 1.4.8 (candidate for 2026-11-08 window)
- Dockerfile FROM: appstore 1.4.5 image (202610230221180000) -> 1.4.8
  (202611030321030000). Same LibreChat upstream 0.8.8 in both - the package
  delta is tooling only: uv 0.13.5->0.13.7 and Node.js 22.23.4 (security fix,
  1.4.7), base image 6.0.1 (eMudhra cert fix, 1.4.4 - already in 1.4.5).
- All overlay anchors verified against the real 1.4.8 image dist (title tag,
  manifest link crossorigin, viewport meta, theme-color #171717, webmanifest
  name/colors, 'MCP Servers' + 'Every AI for Everyone.' strings, index.*.js,
  sw.js): unchanged, no porting needed.
- release.sh BASE_IMAGE default follows the pin.
2026-11-06 04:05:01 +00:00
4 changed files with 36 additions and 15 deletions

No files matched your search

+2 -2
View File
@@ -1,6 +1,6 @@
{
"id": "ai.librechat.cloudronapp",
"version": "1.4.5",
"version": "1.4.8",
"title": "LibreChat",
"upstreamVersion": "0.8.8",
"author": "Danny Avila",
@@ -55,5 +55,5 @@
"https://screenshots.cloudron.io/ai.librechat.cloudronapp/librechat-01.png"
],
"icon": "file://logo.png",
"dockerImage": "registry.inference.coop/co-op/librechat-custom:20261031-2a98892"
"dockerImage": "registry.inference.coop/co-op/librechat-custom:20261106-c2aec74"
}
+1 -1
View File
@@ -20,7 +20,7 @@
# the manifest's scheduler task). All other behavior lives on the
# persistent volume (/app/data/librechat.yaml, /app/data/env,
# /app/data/mcp/) and survives image updates unchanged.
FROM cloudron/ai.librechat.cloudronapp:202610230221180000
FROM cloudron/ai.librechat.cloudronapp:202611030321030000
# Login-page + header logo (the client bundle references assets/logo.svg)
COPY assets/logo.svg /app/code/librechat/client/dist/assets/logo.svg
+32 -11
View File
@@ -133,27 +133,48 @@ interface:
rgb-border-light: '74 82 64'
# Speech (STT/TTS) via the co-op gateway. Uses a dedicated LiteLLM virtual key
# (alias: librechat-speech, $5/30d budget, restricted to the audio models) so
# speech never runs on the gateway master key. The gateway is a public
# Speech (STT/TTS) via the co-op gateway. LibreChat POSTs to `url` VERBATIM
# (no path is appended), so the FULL endpoint paths are required here.
# Uses a dedicated LiteLLM virtual key (alias: librechat-speech, $5/30d
# budget, restricted to the audio models) injected as STT_API_KEY/TTS_API_KEY
# app env — speech never runs on the master key. The gateway is a public
# endpoint, so no SSRF allowedAddresses exemption is needed.
# STT: tinfoil/voxtral-small-24b — token-priced (~$0.00008/typical dictation
# request on the gateway) vs the flat $0.01/request of
# tinfoil/whisper-large-v3-turbo; same TEE provider, equal quality on short
# clips (verified round-trip 2026-11-07). Whisper stays allowed on the key as
# a one-line fallback swap. TTS: tinfoil/voxtral-tts, $0.002/request at cost;
# voices are the provider's supported speakers (an unknown name 400s).
speech:
tts:
openai:
url: "https://gateway.inference.coop/v1"
apiKey: "${TTS_API_KEY}"
url: "https://gateway.inference.coop/v1/audio/speech"
apiKey: ${TTS_API_KEY}
model: "tinfoil/voxtral-tts"
voices: ["casual_female"]
voices: ["ar_male", "casual_female", "casual_male", "cheerful_female", "de_female", "de_male", "es_female", "es_male", "fr_female", "fr_male", "hi_female", "hi_male", "it_female", "it_male", "neutral_female", "neutral_male", "nl_female", "nl_male", "pt_female", "pt_male"]
stt:
openai:
url: "https://gateway.inference.coop/v1"
apiKey: "${STT_API_KEY}"
model: "tinfoil/whisper-large-v3-turbo"
url: "https://gateway.inference.coop/v1/audio/transcriptions"
apiKey: ${STT_API_KEY}
model: "tinfoil/voxtral-small-24b"
# Seeded client defaults (Settings -> Speech): members who never saved
# their own speech settings get the External engines out of the box;
# a member's own saved settings always win. "Automatic playback" stays
# opt-in per member (set textToSpeech.automaticPlayback: true to change).
speechTab:
conversationMode: false
advancedMode: false
speechToText: true
textToSpeech: true
speechToText:
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:
engineTTS: external
voice: casual_female
# Web search: self-hosted SearXNG (search.inference.coop, keyless JSON API)
# for search, keyless Keenable for page scraping, no reranker. The instance
+1 -1
View File
@@ -28,7 +28,7 @@ set -euo pipefail
APP=${APP:-4023ccbf-d57a-4500-97df-14de9cf3516e}
REGISTRY_REPO=${REGISTRY_REPO:-registry.inference.coop/co-op/librechat-custom}
SERVER=${SERVER:-my.inference.coop}
BASE_IMAGE=${BASE_IMAGE:-cloudron/ai.librechat.cloudronapp:202610150224320000}
BASE_IMAGE=${BASE_IMAGE:-cloudron/ai.librechat.cloudronapp:202611030321030000}
MANIFEST=CloudronManifest.json
die() { printf 'release.sh: %s\n' "$*" >&2; exit 1; }