mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-08-27 04:07:05 +00:00
🚀 chore: Prepare v0.8.8-rc1 (#14394)
* 🚀 chore: Prepare v0.8.8-rc1 release * 📚 docs: Complete v0.8.8-rc1 operator references * 📚 docs: Mark stateful sessions experimental * 📚 docs: Clarify background code capability * 📚 docs: Refresh v0.8.8-rc1 operator guidance * 📚 docs: Highlight v0.8.8-rc1 features in README * 📦 chore: Bump publishable packages again * 📚 docs: Add streaming question progress * 📦 chore: Bump publishable packages again * 📚 docs: Refresh v0.8.8-rc1 release highlights * 📦 chore: Bump publishable packages again * 📚 docs: Refresh v0.8.8-rc1 release guidance * 📦 chore: Bump publishable packages again * 📚 docs: Highlight batched Agent questions * 📦 chore: Bump publishable packages again * 📦 chore: Bump publishable packages again * 📦 chore: Bump publishable packages again * 📦 chore: Refresh v0.8.8-rc1 package versions * 📦 chore: Refresh v0.8.8-rc1 package versions * 📦 chore: Refresh v0.8.8-rc1 package versions * 📄 docs: Note PowerPoint template support * 📦 chore: Refresh v0.8.8-rc1 package versions * 📄 docs: Note latest provider and file support
This commit is contained in:
parent
d4c64d485f
commit
eaef87fa26
19 changed files with 176 additions and 52 deletions
54
.env.example
54
.env.example
|
|
@ -171,15 +171,17 @@ NODE_MAX_OLD_SPACE_SIZE=6144
|
|||
# Optional Langfuse fanout for tenant-scoped Langfuse projects.
|
||||
# The fanout gateway is opt-in: add docker-compose.langfuse-fanout.yml,
|
||||
# deploy-compose.langfuse-fanout.yml, or enable helm langfuseFanout.
|
||||
# Tenant public/secret keys and a destination key are read from LibreChat tenant
|
||||
# app configuration. Destination keys resolve against known startup URLs. Tenant
|
||||
# API keys can be added or changed at runtime through tenant app configuration.
|
||||
# Tenant public/secret keys and a destination key are managed through
|
||||
# Settings > Langfuse. Destination keys resolve against known startup URLs;
|
||||
# credentials can be added or changed at runtime without restarting the gateway.
|
||||
# See otel/langfuse-fanout/README.md.
|
||||
# LANGFUSE_FANOUT_ENABLED=false
|
||||
# LANGFUSE_FANOUT_COLLECTOR_URL=http://langfuse-fanout-collector:4318
|
||||
# App-side switch: set true to tell the Langfuse SDK not to create media uploads
|
||||
# for central/fallback collector traces. Tenant-routed media uploads are unchanged.
|
||||
# LANGFUSE_FANOUT_CENTRAL_MEDIA_UPLOAD_DISABLED=false
|
||||
# Gateway HTTP listen address (default: :4318).
|
||||
# LANGFUSE_FANOUT_LISTEN_ADDR=:4318
|
||||
# Emergency switch: unset/false defaults enabled; set true to keep central fanout export but skip tenant trace/score export.
|
||||
# LANGFUSE_FANOUT_TENANT_EXPORT_DISABLED=false
|
||||
# Langfuse Cloud base URL options: https://cloud.langfuse.com (EU),
|
||||
|
|
@ -478,7 +480,7 @@ GOOGLE_KEY=user_provided
|
|||
#============#
|
||||
|
||||
OPENAI_API_KEY=user_provided
|
||||
# OPENAI_MODELS=gpt-5,gpt-5-codex,gpt-5-mini,gpt-5-nano,o3-pro,o3,o4-mini,gpt-4.1,gpt-4.1-mini,gpt-4.1-nano,o3-mini,o1-pro,o1,gpt-4o,gpt-4o-mini
|
||||
# OPENAI_MODELS=gpt-5.6,gpt-5.6-terra,gpt-5.6-luna,gpt-5.5,gpt-5.5-pro,chat-latest,gpt-5.4,gpt-5.4-pro,gpt-5.4-mini,gpt-5.4-nano,gpt-5.3-codex,gpt-5.2,gpt-5,gpt-5-codex,gpt-5-mini,gpt-5-nano,o3-pro,o3,o4-mini,gpt-4.1,gpt-4.1-mini,gpt-4.1-nano,o3-mini,o1-pro,o1,gpt-4o,gpt-4o-mini
|
||||
|
||||
DEBUG_OPENAI=false
|
||||
|
||||
|
|
@ -613,6 +615,19 @@ MEILI_MASTER_KEY=
|
|||
STT_API_KEY=
|
||||
TTS_API_KEY=
|
||||
|
||||
#==================================================#
|
||||
# Code Interpreter #
|
||||
#==================================================#
|
||||
|
||||
# LIBRECHAT_CODE_API_KEY=
|
||||
# LIBRECHAT_CODE_BASEURL=
|
||||
# Prewarm stateful per-conversation sandboxes in parallel with model generation (default: true).
|
||||
# CODE_SANDBOX_PREWARM=true
|
||||
# Time in milliseconds before LibreChat treats a tracked sandbox as cold (default: 2100000 / 35 minutes).
|
||||
# CODE_SANDBOX_COLD_AFTER_MS=2100000
|
||||
# Bytes read per sandbox image chunk; lower this if the runner has a small stdout limit (default: 32768).
|
||||
# LIBRECHAT_CODE_IMAGE_CHUNK_BYTES=32768
|
||||
|
||||
#==================================================#
|
||||
# RAG #
|
||||
#==================================================#
|
||||
|
|
@ -627,11 +642,18 @@ TTS_API_KEY=
|
|||
|
||||
# Stream upload responses with heartbeats during long-running file processing.
|
||||
# FILE_UPLOAD_SSE_ENABLED=false
|
||||
# Timeout in milliseconds for server-side remote file downloads (default: 15000).
|
||||
# REMOTE_FILE_FETCH_TIMEOUT_MS=15000
|
||||
# Maximum size in bytes for server-side remote file downloads (default: 536870912 / 512 MiB).
|
||||
# REMOTE_FILE_FETCH_MAX_BYTES=536870912
|
||||
|
||||
#===================================================#
|
||||
# User System #
|
||||
#===================================================#
|
||||
|
||||
# Maximum characters in one mid-run Agent steering message (default: 16000).
|
||||
# STEER_MAX_LENGTH=16000
|
||||
|
||||
#========================#
|
||||
# Moderation #
|
||||
#========================#
|
||||
|
|
@ -654,12 +676,32 @@ STT_VIOLATION_SCORE=0
|
|||
FORK_VIOLATION_SCORE=0
|
||||
IMPORT_VIOLATION_SCORE=0
|
||||
FILE_UPLOAD_VIOLATION_SCORE=0
|
||||
# Per-user limiter for metadata-only /files/usage requests that renew the TTL
|
||||
# of attachments waiting in queued Agent messages (default: 120 per 15 minutes).
|
||||
# FILE_USAGE_USER_MAX=120
|
||||
# FILE_USAGE_USER_WINDOW=15
|
||||
# Password-reset and verification request/submission scores default to 1 when unset.
|
||||
# RESET_PASSWORD_VIOLATION_SCORE=1
|
||||
# VERIFY_EMAIL_VIOLATION_SCORE=1
|
||||
# RESET_PASSWORD_SUBMISSION_VIOLATION_SCORE=1
|
||||
# VERIFY_EMAIL_SUBMISSION_VIOLATION_SCORE=1
|
||||
|
||||
LOGIN_MAX=7
|
||||
LOGIN_WINDOW=5
|
||||
REGISTER_MAX=5
|
||||
REGISTER_WINDOW=60
|
||||
|
||||
# Password-reset email requests and token submissions are limited separately.
|
||||
# Submission values inherit the matching request value when omitted; all default to 2.
|
||||
# RESET_PASSWORD_MAX=2
|
||||
# RESET_PASSWORD_WINDOW=2
|
||||
# RESET_PASSWORD_SUBMISSION_MAX=2
|
||||
# RESET_PASSWORD_SUBMISSION_WINDOW=2
|
||||
# VERIFY_EMAIL_MAX=2
|
||||
# VERIFY_EMAIL_WINDOW=2
|
||||
# VERIFY_EMAIL_SUBMISSION_MAX=2
|
||||
# VERIFY_EMAIL_SUBMISSION_WINDOW=2
|
||||
|
||||
LIMIT_CONCURRENT_MESSAGES=true
|
||||
CONCURRENT_MESSAGE_MAX=2
|
||||
|
||||
|
|
@ -1072,6 +1114,10 @@ HELP_AND_FAQ_URL=https://librechat.ai
|
|||
# Set to empty string to force all namespaces through Redis: FORCED_IN_MEMORY_CACHE_NAMESPACES=
|
||||
# FORCED_IN_MEMORY_CACHE_NAMESPACES=CONFIG_STORE,APP_CONFIG
|
||||
|
||||
# Opt-in cache for authenticated user documents during request bursts. Requires Redis and
|
||||
# the AUTH_USER_DOC namespace to remain Redis-backed (default: off; set exactly to "on").
|
||||
# AUTH_USER_CACHE_MODE=off
|
||||
|
||||
# TTL in milliseconds for cached group memberships used in ACL permission checks (default: 300000 / 5 minutes; 0 disables)
|
||||
# Membership changes invalidate affected entries immediately; the TTL bounds staleness from cross-process races.
|
||||
# USER_PRINCIPALS_CACHE_TTL_MS=300000
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# v0.8.7
|
||||
# v0.8.8-rc1
|
||||
|
||||
# Base node image
|
||||
FROM node:24.16.0-alpine AS node
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Dockerfile.multi
|
||||
# v0.8.7
|
||||
# v0.8.8-rc1
|
||||
|
||||
# Set configurable max-old-space-size with default
|
||||
ARG NODE_MAX_OLD_SPACE_SIZE=6144
|
||||
|
|
|
|||
23
README.md
23
README.md
|
|
@ -51,6 +51,25 @@
|
|||
</a>
|
||||
</p>
|
||||
|
||||
## 🚀 What's New in v0.8.8-rc1
|
||||
|
||||
- **Agent run control:** Interrupt or steer an Agent mid-run, queue follow-up messages, and reclaim, edit, or escalate pending steers.
|
||||
- **Human-in-the-loop Agents:** Agents stream question progress, ask up to four related questions in one form, pause for input or tool approval, and resume.
|
||||
- **Unified Agent Builder:** A redesigned Tools marketplace brings together Skills, MCP, Code Interpreter, orchestration, Programmatic Tool Calling, model-spec controls, and per-tool background and intent settings.
|
||||
- **Readable Agent activity:** Generated activity-group headers, parent phase summaries, and live tool intent labels make long reasoning and tool runs easier to scan.
|
||||
- **Code Interpreter workflows:** Code and shell tools can run in the background, sandbox images return as viewable artifacts, and highly experimental stateful sessions can reuse prewarmed conversation workspaces.
|
||||
- **Agent extensibility:** Experimental Agent Plugins can bundle deployment Skills, MCP servers, and opt-in command hooks, while explicit subagents initialize only when selected.
|
||||
- **Memory, context, and identity:** Agents can manage memory with optional per-agent isolation, expose support contacts safely, and show a more faithful Context Usage gauge.
|
||||
- **Sharing and files:** Shared conversations show a badge and update at a stable URL, while signed-in viewers can continue them as personal copies.
|
||||
- **Artifact workflows:** Open previews fullscreen, work with PowerPoint `.potx` templates across upload, search, and code execution, upload shell scripts across common MIME variants, export Mermaid diagrams as SVG or PNG, and download original Office files from the artifact panel.
|
||||
- **Models and reasoning:** Added GPT-5.6 with Responses API reasoning controls, Claude Opus 5 and Sonnet 5, Gemini 3.7 and 3.6 Flash, and Gemini 3.5 Flash-Lite.
|
||||
- **Langfuse observability:** Configure encrypted Langfuse connections in-app, let authorized admins open sampled sessions directly, optionally fan out traces by tenant, and suppress central export per run.
|
||||
- **Administration and security:** Delegate config sections, encrypt registered secrets, enforce SSRF checks for speech, OCR, and web tools, and generate unique temporary credentials when secrets are blank.
|
||||
- **Messages and navigation:** Right-aligned user turns, unified multi-part editing, full-message copy, a dock-style message rail, virtualized search, smooth streaming, and faster Agent startup.
|
||||
- **Streaming and tool reliability:** Adaptive provider smoothing, Redis delta batching, dynamic MCP tool refresh, parsed MCP response media types, runtime OAuth recovery, and Agent stream circuit breakers improve long-running workflows.
|
||||
- **Deployment and reliability:** Added configurable HTTP timeouts, Amazon DocumentDB 5.0+ support, low-noise Redis and browser observability, and a rolling-upgrade-safe generation protocol.
|
||||
|
||||
Read the [full v0.8.8-rc1 changelog](https://www.librechat.ai/changelog/v0.8.8-rc1).
|
||||
|
||||
# ✨ Features
|
||||
|
||||
|
|
@ -76,6 +95,7 @@
|
|||
- Collaborative Sharing: Share agents with specific users and groups
|
||||
- Flexible & Extensible: Use MCP Servers, tools, file search, code execution, and more
|
||||
- [Skills](https://www.librechat.ai/docs/features/skills): Create reusable `SKILL.md` instruction bundles for manual, automatic, or always-on agent workflows
|
||||
- [Agent Plugins](https://www.librechat.ai/docs/features/agent_plugins): Experimentally bundle deployment Skills and MCP servers into startup-loaded packages
|
||||
- [Subagents](https://www.librechat.ai/docs/features/subagents): Delegate focused work to isolated child agent runs with their own context windows
|
||||
- Compatible with Custom Endpoints, OpenAI, Azure, Anthropic, AWS Bedrock, Google, Vertex AI, Responses API, and more
|
||||
- [Model Context Protocol (MCP) Support](https://modelcontextprotocol.io/clients#librechat) for Tools
|
||||
|
|
@ -87,7 +107,8 @@
|
|||
- **[Learn More →](https://www.librechat.ai/docs/features/web_search)**
|
||||
|
||||
- 🪄 **Generative UI with Code Artifacts**:
|
||||
- [Code Artifacts](https://youtu.be/GfTj7O4gmd0?si=WJbdnemZpJzBrJo3) allow creation of React, HTML, and Mermaid diagrams directly in chat
|
||||
- [Code Artifacts](https://youtu.be/GfTj7O4gmd0?si=WJbdnemZpJzBrJo3) create React, HTML, and Mermaid content directly in chat
|
||||
- Open previews fullscreen and export Mermaid diagrams as SVG or PNG
|
||||
|
||||
- 🎨 **Image Generation & Editing**
|
||||
- Text-to-image and image-to-image with [GPT-Image-1](https://www.librechat.ai/docs/features/image_gen#1--openai-image-tools-recommended)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@librechat/backend",
|
||||
"version": "v0.8.7",
|
||||
"version": "v0.8.8-rc1",
|
||||
"description": "",
|
||||
"scripts": {
|
||||
"start": "echo 'please run this from the root directory'",
|
||||
|
|
|
|||
12
bun.lock
12
bun.lock
|
|
@ -37,7 +37,7 @@
|
|||
},
|
||||
"api": {
|
||||
"name": "@librechat/backend",
|
||||
"version": "0.8.7",
|
||||
"version": "0.8.8-rc1",
|
||||
"dependencies": {
|
||||
"@anthropic-ai/vertex-sdk": "^0.16.0",
|
||||
"@aws-sdk/client-bedrock-runtime": "^3.1013.0",
|
||||
|
|
@ -148,7 +148,7 @@
|
|||
},
|
||||
"client": {
|
||||
"name": "@librechat/frontend",
|
||||
"version": "0.8.7",
|
||||
"version": "0.8.8-rc1",
|
||||
"dependencies": {
|
||||
"@ariakit/react": "^0.4.29",
|
||||
"@ariakit/react-components": "^0.1.2",
|
||||
|
|
@ -292,7 +292,7 @@
|
|||
},
|
||||
"packages/api": {
|
||||
"name": "@librechat/api",
|
||||
"version": "1.7.34",
|
||||
"version": "1.7.46",
|
||||
"dependencies": {
|
||||
"@langchain/langgraph-checkpoint": "^1.1.2",
|
||||
"@langchain/langgraph-checkpoint-mongodb": "^1.4.0",
|
||||
|
|
@ -403,7 +403,7 @@
|
|||
},
|
||||
"packages/client": {
|
||||
"name": "@librechat/client",
|
||||
"version": "0.4.63",
|
||||
"version": "0.4.75",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.28.5",
|
||||
"@babel/preset-env": "^7.29.5",
|
||||
|
|
@ -486,7 +486,7 @@
|
|||
},
|
||||
"packages/data-provider": {
|
||||
"name": "librechat-data-provider",
|
||||
"version": "0.8.509",
|
||||
"version": "0.8.521",
|
||||
"dependencies": {
|
||||
"axios": "^1.16.0",
|
||||
"dayjs": "^1.11.13",
|
||||
|
|
@ -521,7 +521,7 @@
|
|||
},
|
||||
"packages/data-schemas": {
|
||||
"name": "@librechat/data-schemas",
|
||||
"version": "0.0.56",
|
||||
"version": "0.0.68",
|
||||
"devDependencies": {
|
||||
"@types/express": "^5.0.0",
|
||||
"@types/jest": "^29.5.2",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/** v0.8.7 */
|
||||
/** v0.8.8-rc1 */
|
||||
module.exports = {
|
||||
roots: ['<rootDir>/src'],
|
||||
testEnvironment: 'jsdom',
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@librechat/frontend",
|
||||
"version": "v0.8.7",
|
||||
"version": "v0.8.8-rc1",
|
||||
"description": "",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
// v0.8.7
|
||||
// v0.8.8-rc1
|
||||
// See .env.test.example for an example of the '.env.test' file.
|
||||
require('dotenv').config({ path: './e2e/.env.test' });
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ type: application
|
|||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||
version: 2.0.7
|
||||
version: 2.0.8
|
||||
|
||||
# This is the version number of the application being deployed. This version number should be
|
||||
# incremented each time you make changes to the application. Versions are not expected to
|
||||
|
|
@ -23,7 +23,7 @@ version: 2.0.7
|
|||
# It is recommended to use it with quotes.
|
||||
|
||||
# renovate: image=registry.librechat.ai/danny-avila/librechat
|
||||
appVersion: "v0.8.7"
|
||||
appVersion: "v0.8.8-rc1"
|
||||
|
||||
home: https://www.librechat.ai
|
||||
|
||||
|
|
|
|||
|
|
@ -2,11 +2,16 @@
|
|||
# https://www.librechat.ai/docs/configuration/librechat_yaml
|
||||
|
||||
# Configuration version (required)
|
||||
version: 1.3.13
|
||||
version: 1.3.14
|
||||
|
||||
# Cache settings: Set to true to enable caching
|
||||
cache: true
|
||||
|
||||
# Langfuse connections are managed through Settings > Langfuse when available.
|
||||
# That flow verifies the credentials and stores the secret key encrypted; do not
|
||||
# place a plaintext langfuse.secretKey in this file. Environment-managed central
|
||||
# credentials and optional fanout routing are documented in .env.example.
|
||||
|
||||
# File storage configuration
|
||||
# Single strategy for all file types (legacy format, still supported)
|
||||
# fileStrategy: "s3"
|
||||
|
|
@ -459,6 +464,14 @@ endpoints:
|
|||
# # final: defer generation until the full response completes (legacy behavior).
|
||||
# # Set under `endpoints.all` instead to apply as the global default for all endpoints.
|
||||
# titleTiming: immediate
|
||||
# # (optional) Generate one-line headers for blocks of Agent reasoning and tool calls.
|
||||
# # Header generation is a separate model call whose usage and cost are recorded.
|
||||
# activityLabel: true
|
||||
# activityEndpoint: openAI
|
||||
# activityModel: gpt-4.1-nano
|
||||
# # activityPrompt: 'Write a short activity label...'
|
||||
# # activityMaxPerRun: 20
|
||||
# # activityCharLimit: 600
|
||||
# # (optional) Maximum total citations to include in agent responses, defaults to 30
|
||||
# maxCitations: 30
|
||||
# # (optional) Maximum citations per file to include in agent responses, defaults to 7
|
||||
|
|
@ -471,10 +484,24 @@ endpoints:
|
|||
# skills:
|
||||
# maxCatalogSkills: 20
|
||||
# # (optional) Agent Capabilities available to all users. Omit the ones you wish to exclude. Defaults to list below.
|
||||
# capabilities: ["deferred_tools", "execute_code", "file_search", "actions", "tools"]
|
||||
# # Off-by-default capabilities you can add to the list above:
|
||||
# # - "run_in_background": opted-in tools gain a `run_in_background` param so the model can dispatch them detached and poll via `check_background_task`.
|
||||
# # - "tool_intents": opted-in tools (native tools by default) gain an `intent` param — one model-written sentence per call, streamed into the tool-call arguments. Backend groundwork today: the chat UI renders it as each call's live status label in an upcoming release; opt tools in per agent via `tool_options[tool].describe_intent`.
|
||||
# capabilities: ["deferred_tools", "execute_code", "file_search", "web_search", "artifacts", "subagents", "actions", "context", "skills", "memory", "ask_user_question", "tools", "chain", "ocr"]
|
||||
# # The following capabilities are opt-in and must be added explicitly:
|
||||
# # "programmatic_tools", "stateful_code_sessions", "run_in_background", "tool_intents"
|
||||
# # "stateful_code_sessions" is highly experimental and may change substantially.
|
||||
# # "run_in_background" makes Code Interpreter tools eligible by default and enables per-tool MCP opt-in.
|
||||
# # "tool_intents" enables live model-written labels for native tools and opted-in MCP tools.
|
||||
# # (optional) Require user approval before matching tool calls. Disabled by default.
|
||||
# toolApproval:
|
||||
# enabled: true
|
||||
# mode: default # default, dontAsk, or bypass
|
||||
# allow: ["mcp:trusted-server:read_*"]
|
||||
# deny: ["mcp:*:delete_*"] # Deny rules always take precedence
|
||||
# ask: ["mcp:*:*"]
|
||||
# reason: "Review {tool} before it runs."
|
||||
# # (optional) Persist Agent runs paused for approval or Ask User. MongoDB is the durable default.
|
||||
# checkpointer:
|
||||
# type: mongo # mongo (default) or memory (single-process development only)
|
||||
# ttl: 86400 # Approval window in seconds; defaults to 24 hours
|
||||
|
||||
# (optional) Custom request headers for the built-in OpenAI / Google endpoints.
|
||||
# Forwarded on every request to the provider (or an AI gateway / reverse proxy
|
||||
|
|
@ -766,6 +793,7 @@ endpoints:
|
|||
# description: "Most capable GPT-4 model with multimodal support"
|
||||
# # default: true # Hard admin default; takes precedence over prior user choices
|
||||
# # softDefault: true # First-time default only; skipped after a user selects a model/spec/agent
|
||||
# # showInMenu: false # Hide from the model selector while keeping explicit `spec` access
|
||||
# group: "openAI" # String value matching the endpoint name
|
||||
# preset:
|
||||
# endpoint: "openAI"
|
||||
|
|
@ -831,6 +859,15 @@ endpoints:
|
|||
# endpoint: "openAI"
|
||||
# model: "gpt-4o-mini"
|
||||
|
||||
# Automatic conversation summarization (optional)
|
||||
# summarization:
|
||||
# enabled: true
|
||||
# provider: "openAI"
|
||||
# model: "gpt-4o-mini"
|
||||
# retainRecent:
|
||||
# turns: 2 # Keep the newest complete user/assistant turns outside the summary
|
||||
# tokens: 2000 # Also preserve up to this many recent tokens
|
||||
|
||||
# fileConfig:
|
||||
# endpoints:
|
||||
# assistants:
|
||||
|
|
|
|||
|
|
@ -45,17 +45,19 @@ The deployment is a hybrid:
|
|||
trace suppression uses a destination-scoped gateway path that also skips
|
||||
central media export for that run.
|
||||
- Tenant export is conditional. LibreChat uses a destination-scoped gateway URL
|
||||
only when tenant keys are configured, the tenant base URL matches a configured
|
||||
startup destination, and `LANGFUSE_FANOUT_TENANT_EXPORT_DISABLED` is not true.
|
||||
only when the saved connection is enabled with tenant keys, its destination
|
||||
key matches a configured startup destination, and
|
||||
`LANGFUSE_FANOUT_TENANT_EXPORT_DISABLED` is not true.
|
||||
Other traces are still exported to central through the gateway without tenant
|
||||
auth.
|
||||
- User feedback scores use Langfuse's direct REST API from the LibreChat API
|
||||
process. Central scores use LibreChat's normal central Langfuse env config;
|
||||
tenant scores use tenant app configuration when tenant fanout is enabled.
|
||||
|
||||
Tenant Langfuse keys are expected to come from LibreChat app configuration, for
|
||||
example from an admin panel or another configuration data source. They are not
|
||||
defined in this gateway config.
|
||||
Tenant Langfuse keys are expected to come from LibreChat app configuration.
|
||||
When available, an authorized administrator can configure and verify the
|
||||
connection under **Settings > Langfuse**; LibreChat encrypts the secret key at
|
||||
rest. The keys are not defined in this gateway config.
|
||||
|
||||
## Limitations
|
||||
|
||||
|
|
@ -65,9 +67,9 @@ defined in this gateway config.
|
|||
destination.
|
||||
- Tenant Langfuse API keys can be added, changed, or disabled in tenant app
|
||||
configuration at runtime without restarting LibreChat or the gateway.
|
||||
- Tenant app configuration must set a Langfuse base URL matching one of the
|
||||
startup destinations before tenant trace/score export is enabled; keys alone
|
||||
are treated as central-only.
|
||||
- Tenant app configuration must select a destination key from
|
||||
`LANGFUSE_FANOUT_TENANT_DESTINATIONS` before tenant trace/score export is
|
||||
enabled; keys alone do not enable tenant export.
|
||||
- `LANGFUSE_FANOUT_TENANT_EXPORT_DISABLED=true` can be set on LibreChat as an
|
||||
emergency switch to stop tenant trace and score export while keeping central
|
||||
gateway export active. When omitted, false, or blank, tenant export remains
|
||||
|
|
@ -129,6 +131,7 @@ LANGFUSE_FANOUT_TENANT_EU_BASE_URL=https://cloud.langfuse.com
|
|||
LANGFUSE_FANOUT_TENANT_US_BASE_URL=https://us.cloud.langfuse.com
|
||||
LANGFUSE_FANOUT_TENANT_JP_BASE_URL=https://jp.cloud.langfuse.com
|
||||
LANGFUSE_FANOUT_TENANT_EXPORT_DISABLED=false
|
||||
LANGFUSE_FANOUT_LISTEN_ADDR=:4318
|
||||
LANGFUSE_FANOUT_UPSTREAM_TIMEOUT=30s
|
||||
LANGFUSE_FANOUT_PUBLIC_URL=http://langfuse-fanout-collector:4318
|
||||
LANGFUSE_FANOUT_REDIS_URI=redis://langfuse-fanout-redis:6379
|
||||
|
|
@ -170,6 +173,17 @@ The override builds the fanout gateway image, sets `LANGFUSE_FANOUT_ENABLED=true
|
|||
|
||||
## Helm
|
||||
|
||||
The Compose overrides build the gateway image locally. For Kubernetes, build
|
||||
the same image from the repository root, push it to a registry available to
|
||||
the cluster, and set `langfuseFanout.image.repository` and `.tag` to match:
|
||||
|
||||
```sh
|
||||
docker build \
|
||||
-f otel/langfuse-fanout/Dockerfile \
|
||||
-t registry.example.com/librechat-langfuse-fanout:<tag> .
|
||||
docker push registry.example.com/librechat-langfuse-fanout:<tag>
|
||||
```
|
||||
|
||||
Create a secret containing the central Langfuse Basic auth header:
|
||||
|
||||
```sh
|
||||
|
|
@ -186,6 +200,10 @@ redis:
|
|||
|
||||
langfuseFanout:
|
||||
enabled: true
|
||||
image:
|
||||
repository: registry.example.com/librechat-langfuse-fanout
|
||||
tag: '<tag>'
|
||||
pullPolicy: IfNotPresent
|
||||
central:
|
||||
baseUrl: https://cloud.langfuse.com
|
||||
authHeaderSecret:
|
||||
|
|
@ -204,14 +222,14 @@ langfuseFanout:
|
|||
jp:
|
||||
baseUrl: https://jp.cloud.langfuse.com
|
||||
upstreamTimeout: 30s
|
||||
publicUrl: ""
|
||||
publicUrl: ''
|
||||
otelCollector:
|
||||
receiverEndpoint: 127.0.0.1:4319
|
||||
redis:
|
||||
uri: ""
|
||||
username: ""
|
||||
uri: ''
|
||||
username: ''
|
||||
passwordSecret:
|
||||
name: ""
|
||||
name: ''
|
||||
key: REDIS_PASSWORD
|
||||
keyPrefix: langfuse-fanout
|
||||
memoryLimitMiB: 256
|
||||
|
|
@ -268,6 +286,8 @@ already uploaded.
|
|||
- Tenant destinations default to the three configured Langfuse Cloud regions. Add or
|
||||
override `langfuseFanout.tenant.destinations` in Helm for self-hosted or
|
||||
custom destinations.
|
||||
- `LANGFUSE_FANOUT_LISTEN_ADDR` controls the gateway HTTP bind address and
|
||||
defaults to `:4318`.
|
||||
- `LANGFUSE_FANOUT_UPSTREAM_TIMEOUT` tunes the timeout for gateway calls to
|
||||
Langfuse APIs and presigned media upload URLs.
|
||||
- `LANGFUSE_FANOUT_PUBLIC_URL` pins the base URL returned for the SDK's
|
||||
|
|
|
|||
16
package-lock.json
generated
16
package-lock.json
generated
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "LibreChat",
|
||||
"version": "v0.8.7",
|
||||
"version": "v0.8.8-rc1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "LibreChat",
|
||||
"version": "v0.8.7",
|
||||
"version": "v0.8.8-rc1",
|
||||
"license": "ISC",
|
||||
"workspaces": [
|
||||
"api",
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
},
|
||||
"api": {
|
||||
"name": "@librechat/backend",
|
||||
"version": "v0.8.7",
|
||||
"version": "v0.8.8-rc1",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@anthropic-ai/vertex-sdk": "^0.16.0",
|
||||
|
|
@ -920,7 +920,7 @@
|
|||
},
|
||||
"client": {
|
||||
"name": "@librechat/frontend",
|
||||
"version": "v0.8.7",
|
||||
"version": "v0.8.8-rc1",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@ariakit/react": "^0.4.29",
|
||||
|
|
@ -42790,7 +42790,7 @@
|
|||
},
|
||||
"packages/api": {
|
||||
"name": "@librechat/api",
|
||||
"version": "1.7.34",
|
||||
"version": "1.7.46",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@langchain/langgraph-checkpoint": "^1.1.2",
|
||||
|
|
@ -43494,7 +43494,7 @@
|
|||
},
|
||||
"packages/client": {
|
||||
"name": "@librechat/client",
|
||||
"version": "0.4.63",
|
||||
"version": "0.4.75",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.28.5",
|
||||
"@babel/preset-env": "^7.29.5",
|
||||
|
|
@ -44628,7 +44628,7 @@
|
|||
},
|
||||
"packages/data-provider": {
|
||||
"name": "librechat-data-provider",
|
||||
"version": "0.8.509",
|
||||
"version": "0.8.521",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"axios": "^1.16.0",
|
||||
|
|
@ -45236,7 +45236,7 @@
|
|||
},
|
||||
"packages/data-schemas": {
|
||||
"name": "@librechat/data-schemas",
|
||||
"version": "0.0.56",
|
||||
"version": "0.0.68",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@types/express": "^5.0.0",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "LibreChat",
|
||||
"version": "v0.8.7",
|
||||
"version": "v0.8.8-rc1",
|
||||
"description": "",
|
||||
"packageManager": "npm@11.13.0",
|
||||
"workspaces": [
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@librechat/api",
|
||||
"version": "1.7.34",
|
||||
"version": "1.7.46",
|
||||
"type": "commonjs",
|
||||
"description": "MCP services for LibreChat",
|
||||
"main": "dist/index.cjs",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@librechat/client",
|
||||
"version": "0.4.63",
|
||||
"version": "0.4.75",
|
||||
"description": "React components for LibreChat",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "librechat-data-provider",
|
||||
"version": "0.8.509",
|
||||
"version": "0.8.521",
|
||||
"description": "data services for librechat apps",
|
||||
"main": "dist/index.js",
|
||||
"module": "dist/index.mjs",
|
||||
|
|
|
|||
|
|
@ -990,8 +990,8 @@ export const agentsEndpointSchema = baseEndpointSchema
|
|||
remoteApi: remoteApiSchema.optional(),
|
||||
/** Human-in-the-loop tool approval policy. Off by default. */
|
||||
toolApproval: toolApprovalPolicySchema,
|
||||
/** Durable checkpointer backing HITL resume. Defaults to the app's MongoDB
|
||||
* when `toolApproval.enabled` is set; ignored otherwise. */
|
||||
/** Durable checkpointer backing tool-approval and Ask User resume.
|
||||
* Defaults to the app's MongoDB when either flow needs it. */
|
||||
checkpointer: checkpointerSchema,
|
||||
}),
|
||||
)
|
||||
|
|
@ -2862,7 +2862,7 @@ export enum Constants {
|
|||
*/
|
||||
VERSION = '__LIBRECHAT_VERSION__',
|
||||
/** Key for the Custom Config's version (librechat.yaml). */
|
||||
CONFIG_VERSION = '1.3.13',
|
||||
CONFIG_VERSION = '1.3.14',
|
||||
/** Standard value for the first message's `parentMessageId` value, to indicate no parent exists. */
|
||||
NO_PARENT = '00000000-0000-0000-0000-000000000000',
|
||||
/** Standard value to use whatever the submission prelim. `responseMessageId` is */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@librechat/data-schemas",
|
||||
"version": "0.0.56",
|
||||
"version": "0.0.68",
|
||||
"description": "Mongoose schemas and models for LibreChat",
|
||||
"type": "module",
|
||||
"main": "dist/index.cjs",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue