diff --git a/dev/agents b/dev/agents index af51162..e6ba3bc 160000 --- a/dev/agents +++ b/dev/agents @@ -1 +1 @@ -Subproject commit af51162e892d6f31971d5dcab3275229edc72e6a +Subproject commit e6ba3bc5feb19fc4eed2282c8b68d2b64096f7a7 diff --git a/dev/checkbot-rag b/dev/checkbot-rag index 281f3ce..b0bd874 160000 --- a/dev/checkbot-rag +++ b/dev/checkbot-rag @@ -1 +1 @@ -Subproject commit 281f3ce20f38368f944ab8b549e069fb7823e322 +Subproject commit b0bd8749557a4878665b46f8aecc19953669b50d diff --git a/dev/firecrawl b/dev/firecrawl index b058b9c..8458217 160000 --- a/dev/firecrawl +++ b/dev/firecrawl @@ -1 +1 @@ -Subproject commit b058b9cbab9814ef0b865a3a0ef2238e41239348 +Subproject commit 8458217b8257aa3a5999baff6fc5b6f7fb4e7c2e diff --git a/dev/librechat b/dev/librechat index 5a23019..eb5d58c 160000 --- a/dev/librechat +++ b/dev/librechat @@ -1 +1 @@ -Subproject commit 5a23019c545b342c943fad90e5ab3ee4d6d83dc4 +Subproject commit eb5d58c2e6729960af8e0bd8a133465ad1a7673a diff --git a/dev/librechat-doc b/dev/librechat-doc index 8742a19..f8360a7 160000 --- a/dev/librechat-doc +++ b/dev/librechat-doc @@ -1 +1 @@ -Subproject commit 8742a19a9cdce415c45eb9b039a1dfa855b5be19 +Subproject commit f8360a7147e33acdca694de35998379f4ef1368b diff --git a/dev/n8n b/dev/n8n index b134e10..34af844 160000 --- a/dev/n8n +++ b/dev/n8n @@ -1 +1 @@ -Subproject commit b134e10325058536e8014f3d7bed7752112ae980 +Subproject commit 34af844c95f84179e66dacb205e15c9e8d0f7986 diff --git a/dev/searxng b/dev/searxng index 25e457c..0716de6 160000 --- a/dev/searxng +++ b/dev/searxng @@ -1 +1 @@ -Subproject commit 25e457c8d56d08abdae9c6aa03034703388d0aee +Subproject commit 0716de6bc89748d1823fc61460d85cf4ba7393a9 diff --git a/docker-compose.librechat.yml b/docker-compose.librechat.yml index 6d1426f..09f2e9f 100644 --- a/docker-compose.librechat.yml +++ b/docker-compose.librechat.yml @@ -108,8 +108,9 @@ services: SCALEWAY_APP_NAME: ${SCALEWAY_APP_NAME:-LibreChat} LIBRECHAT_SEARXNG_URL: ${LIBRECHAT_SEARXNG_URL:-http://${STACK_NAME:-prod}-searxng:8080} LIBRECHAT_SEARXNG_API_KEY: ${LIBRECHAT_SEARXNG_API_KEY:-} - LIBRECHAT_JINA_API_KEY: ${LIBRECHAT_JINA_API_KEY:-} - LIBRECHAT_JINA_API_URL: ${LIBRECHAT_JINA_API_URL:-https://api.jina.ai/v1/rerank} + LIBRECHAT_CUSTOM_RERANKER_API_URL: ${LIBRECHAT_CUSTOM_RERANKER_API_URL:-} + LIBRECHAT_CUSTOM_RERANKER_API_KEY: ${LIBRECHAT_CUSTOM_RERANKER_API_KEY:-} + LIBRECHAT_CUSTOM_RERANKER_MODEL: ${LIBRECHAT_CUSTOM_RERANKER_MODEL:-} FIRECRAWL_API_KEY: ${FIRECRAWL_API_KEY:-local-selfhost} FIRECRAWL_API_URL: ${FIRECRAWL_API_URL:-http://${STACK_NAME:-prod}-firecrawl-api:3002} FIRECRAWL_VERSION: ${FIRECRAWL_VERSION:-v2} diff --git a/docs/TODO.md b/docs/TODO.md index 4bf5bc5..a5ca63b 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -131,6 +131,7 @@ | Open | `fix/mcp-parser` | [#12103](https://github.com/danny-avila/LibreChat/pull/12103) | Auto-detect OpenAI-compatible custom endpoints in formatToolContent | | Open | `feat/stt` | [#11528](https://github.com/danny-avila/LibreChat/pull/11528) | Prefer ogg/wav in external STT recording for backend compatibility | | Waiting | — | depends on [#10574](https://github.com/danny-avila/LibreChat/pull/10574) | Replace Jina reranker with RAG API reranker (`rerankerType: "simple"`) | +| Open | `feat/custom-reranker-provider` | [#12121](https://github.com/danny-avila/LibreChat/pull/12121) | Add custom reranker provider support (configurable URL + model, e.g. Scaleway) — depends on [agents#66](https://github.com/danny-avila/agents/pull/66) | ### danny-avila/agents @@ -139,6 +140,7 @@ | Draft | — | [#48](https://github.com/danny-avila/agents/pull/48) | Filter base64 image artifacts based on agent vision capability | | Open | `fix/user-after-tool` | [#59](https://github.com/danny-avila/agents/pull/59) | Fix "400 Unexpected role 'user' after role 'tool'" (bridge AIMessage in `formatAgentMessages`) | | Open | `fix/wrong-agent-id` | [#61](https://github.com/danny-avila/agents/pull/61) | Fix handoff: return wrong-tool correction to LLM instead of silent execute | +| Open | `feat/custom-reranker-provider` | [#66](https://github.com/danny-avila/agents/pull/66) | Add custom reranker provider with configurable URL and model name | ### arabold/docs-mcp-server diff --git a/env.local.example b/env.local.example index 8acfbef..5ef531f 100644 --- a/env.local.example +++ b/env.local.example @@ -138,9 +138,11 @@ FIRECRAWL_VERSION=v2 FIRECRAWL_NUM_WORKERS=8 FIRECRAWL_BULL_AUTH_KEY=my-secret-key FIRECRAWL_LLM_MODEL=gpt-4o -# Jina Reranker (for LibreChat WebSearch) -LIBRECHAT_JINA_API_KEY= -LIBRECHAT_JINA_API_URL=https://api.jina.ai/v1/rerank + +# Custom Reranker (for LibreChat WebSearch, using Scaleway Generative APIs) +LIBRECHAT_CUSTOM_RERANKER_API_URL=${SCALEWAY_BASE_URL}/rerank +LIBRECHAT_CUSTOM_RERANKER_API_KEY=${SCALEWAY_API_KEY} +LIBRECHAT_CUSTOM_RERANKER_MODEL=qwen3-embedding-8b # SearXNG - Springer Nature API (optional, for scientific literature search) # Get your API key from: https://dev.springernature.com/ diff --git a/packages/librechat-init/config/librechat.yaml b/packages/librechat-init/config/librechat.yaml index f7bba12..5622769 100644 --- a/packages/librechat-init/config/librechat.yaml +++ b/packages/librechat-init/config/librechat.yaml @@ -809,9 +809,10 @@ webSearch: firecrawlApiKey: "$${FIRECRAWL_API_KEY}" firecrawlApiUrl: "$${FIRECRAWL_API_URL}" firecrawlVersion: "$${FIRECRAWL_VERSION}" - jinaApiKey: "$${LIBRECHAT_JINA_API_KEY}" - jinaApiUrl: "$${LIBRECHAT_JINA_API_URL}" - rerankerType: "jina" + customRerankerApiUrl: "$${LIBRECHAT_CUSTOM_RERANKER_API_URL}" + customRerankerApiKey: "$${LIBRECHAT_CUSTOM_RERANKER_API_KEY}" + customRerankerModel: "$${LIBRECHAT_CUSTOM_RERANKER_MODEL}" + rerankerType: "custom" scraperTimeout: 7500 safeSearch: 1 diff --git a/scripts/setup-env.ts b/scripts/setup-env.ts index e4db2b9..c6bf27a 100755 --- a/scripts/setup-env.ts +++ b/scripts/setup-env.ts @@ -201,7 +201,6 @@ const PROMPTS: Record = { 'GID': { message: 'Docker Host Group ID (GID):', type: 'input', defaultGen: () => '1000' }, 'DOMAIN': { message: 'Domain or IP (e.g. localhost or ai.faktenforum.org):', type: 'input' }, 'OPENROUTER_KEY': { message: 'OpenRouter API Key:', type: 'password' }, - 'LIBRECHAT_JINA_API_KEY': { message: 'Jina API Key (optional, press enter to skip):', type: 'input' }, 'LIBRECHAT_OCR_API_KEY': { message: 'Mistral OCR API Key (optional, press enter to skip):', type: 'password' }, // DB Timetable MCP Server @@ -260,6 +259,8 @@ const MIGRATIONS: Record = { 'SEARXNG_API_KEY': 'LIBRECHAT_SEARXNG_API_KEY', 'JINA_API_KEY': 'LIBRECHAT_JINA_API_KEY', 'JINA_API_URL': 'LIBRECHAT_JINA_API_URL', + 'LIBRECHAT_JINA_API_KEY': 'LIBRECHAT_CUSTOM_RERANKER_API_KEY', + 'LIBRECHAT_JINA_API_URL': 'LIBRECHAT_CUSTOM_RERANKER_API_URL', 'USE_DB_AUTHENTICATION': 'FIRECRAWL_USE_DB_AUTHENTICATION', 'PLAYWRIGHT_MICROSERVICE_URL': 'FIRECRAWL_PLAYWRIGHT_MICROSERVICE_URL', 'WEBHOOK_URL': 'N8N_WEBHOOK_URL',