From eaef87fa2684025627e25d649a56f4f2a63417a7 Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Fri, 14 Aug 2026 03:24:59 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20chore:=20Prepare=20v0.8.8-rc1=20?= =?UTF-8?q?(#14394)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🚀 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 --- .env.example | 54 +++++++++++++++++++++++++--- Dockerfile | 2 +- Dockerfile.multi | 2 +- README.md | 23 +++++++++++- api/package.json | 2 +- bun.lock | 12 +++---- client/jest.config.cjs | 2 +- client/package.json | 2 +- e2e/jestSetup.js | 2 +- helm/librechat/Chart.yaml | 4 +-- librechat.example.yaml | 47 +++++++++++++++++++++--- otel/langfuse-fanout/README.md | 44 ++++++++++++++++------- package-lock.json | 16 ++++----- package.json | 2 +- packages/api/package.json | 2 +- packages/client/package.json | 2 +- packages/data-provider/package.json | 2 +- packages/data-provider/src/config.ts | 6 ++-- packages/data-schemas/package.json | 2 +- 19 files changed, 176 insertions(+), 52 deletions(-) diff --git a/.env.example b/.env.example index 9709d53079..07ff7d0a0c 100644 --- a/.env.example +++ b/.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 diff --git a/Dockerfile b/Dockerfile index c135700354..416046bbfb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -# v0.8.7 +# v0.8.8-rc1 # Base node image FROM node:24.16.0-alpine AS node diff --git a/Dockerfile.multi b/Dockerfile.multi index bfa7a22091..e428ae2d27 100644 --- a/Dockerfile.multi +++ b/Dockerfile.multi @@ -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 diff --git a/README.md b/README.md index 5167d22e3f..f60a5e6247 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,25 @@

+## 🚀 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) diff --git a/api/package.json b/api/package.json index 6e1efe18de..232292a21d 100644 --- a/api/package.json +++ b/api/package.json @@ -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'", diff --git a/bun.lock b/bun.lock index 956b990a3a..b6288804f7 100644 --- a/bun.lock +++ b/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", diff --git a/client/jest.config.cjs b/client/jest.config.cjs index c12bcc1cfd..996a9fb7e6 100644 --- a/client/jest.config.cjs +++ b/client/jest.config.cjs @@ -1,4 +1,4 @@ -/** v0.8.7 */ +/** v0.8.8-rc1 */ module.exports = { roots: ['/src'], testEnvironment: 'jsdom', diff --git a/client/package.json b/client/package.json index 0fef2dbad3..48de22cdda 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "@librechat/frontend", - "version": "v0.8.7", + "version": "v0.8.8-rc1", "description": "", "type": "module", "scripts": { diff --git a/e2e/jestSetup.js b/e2e/jestSetup.js index 49d92eb8c8..9e74d00f07 100644 --- a/e2e/jestSetup.js +++ b/e2e/jestSetup.js @@ -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' }); diff --git a/helm/librechat/Chart.yaml b/helm/librechat/Chart.yaml index e45c3d0372..6b5ba207b1 100755 --- a/helm/librechat/Chart.yaml +++ b/helm/librechat/Chart.yaml @@ -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 diff --git a/librechat.example.yaml b/librechat.example.yaml index 310cd8ae43..57ecc4b715 100644 --- a/librechat.example.yaml +++ b/librechat.example.yaml @@ -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: diff --git a/otel/langfuse-fanout/README.md b/otel/langfuse-fanout/README.md index f3670cff0a..3052c72670 100644 --- a/otel/langfuse-fanout/README.md +++ b/otel/langfuse-fanout/README.md @@ -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: . +docker push registry.example.com/librechat-langfuse-fanout: +``` + 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: '' + 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 diff --git a/package-lock.json b/package-lock.json index 2ce52af382..da3279c06e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index ff2d163cc0..69a88e5834 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "LibreChat", - "version": "v0.8.7", + "version": "v0.8.8-rc1", "description": "", "packageManager": "npm@11.13.0", "workspaces": [ diff --git a/packages/api/package.json b/packages/api/package.json index fc1cd6c713..001047c638 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -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", diff --git a/packages/client/package.json b/packages/client/package.json index 13ec70bf6d..68d39a4137 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@librechat/client", - "version": "0.4.63", + "version": "0.4.75", "description": "React components for LibreChat", "repository": { "type": "git", diff --git a/packages/data-provider/package.json b/packages/data-provider/package.json index ddd52b0e9a..c074c16b30 100644 --- a/packages/data-provider/package.json +++ b/packages/data-provider/package.json @@ -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", diff --git a/packages/data-provider/src/config.ts b/packages/data-provider/src/config.ts index 0e71a2062c..03e9c433e8 100644 --- a/packages/data-provider/src/config.ts +++ b/packages/data-provider/src/config.ts @@ -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 */ diff --git a/packages/data-schemas/package.json b/packages/data-schemas/package.json index 30d91bf26e..ca6ee89244 100644 --- a/packages/data-schemas/package.json +++ b/packages/data-schemas/package.json @@ -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",