Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ The project uses **uv** for dependency management.

1. **Setup Environment**:
```bash
uv sync --python 3.12 --all-extras
uv sync --python 3.13 --all-extras
uv run python3 download_deps.py
```

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ docker build --platform linux/amd64 \
```bash
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
uv sync --python 3.12 # install RAGFlow dependent python modules
uv sync --python 3.13 # install RAGFlow dependent python modules
uv run python3 download_deps.py
pre-commit install
```
Expand Down
2 changes: 1 addition & 1 deletion README_ar.md
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ docker build --platform linux/amd64 \
```bash
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
uv sync --python 3.12 # install RAGFlow dependent python modules
uv sync --python 3.13 # install RAGFlow dependent python modules
uv run python3 download_deps.py
pre-commit install
```
Expand Down
2 changes: 1 addition & 1 deletion README_fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@ docker build --platform linux/amd64 \
```bash
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
uv sync --python 3.12 # install RAGFlow dependent python modules
uv sync --python 3.13 # install RAGFlow dependent python modules
uv run python3 download_deps.py
pre-commit install
```
Expand Down
2 changes: 1 addition & 1 deletion README_id.md
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ docker build --platform linux/amd64 \
```bash
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
uv sync --python 3.12 # install RAGFlow dependent python modules
uv sync --python 3.13 # install RAGFlow dependent python modules
uv run python3 download_deps.py
pre-commit install
```
Expand Down
2 changes: 1 addition & 1 deletion README_ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ docker build --platform linux/amd64 \
```bash
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
uv sync --python 3.12 # install RAGFlow dependent python modules
uv sync --python 3.13 # install RAGFlow dependent python modules
uv run python3 download_deps.py
pre-commit install
```
Expand Down
2 changes: 1 addition & 1 deletion README_ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ docker build --platform linux/amd64 \
```bash
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
uv sync --python 3.12 # install RAGFlow dependent python modules
uv sync --python 3.13 # install RAGFlow dependent python modules
uv run python3 download_deps.py
pre-commit install
```
Expand Down
2 changes: 1 addition & 1 deletion README_pt_br.md
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@ docker build --platform linux/amd64 \
```bash
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
uv sync --python 3.12 # instala os módulos Python dependentes do RAGFlow
uv sync --python 3.13 # instala os módulos Python dependentes do RAGFlow
uv run python3 download_deps.py
pre-commit install
```
Expand Down
2 changes: 1 addition & 1 deletion README_tr.md
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ docker build --platform linux/amd64 \
```bash
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
uv sync --python 3.12 # RAGFlow'un bağımlı Python modüllerini yükler
uv sync --python 3.13 # RAGFlow'un bağımlı Python modüllerini yükler
uv run python3 download_deps.py
pre-commit install
```
Expand Down
2 changes: 1 addition & 1 deletion README_tzh.md
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ docker build --platform linux/amd64 \
```bash
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
uv sync --python 3.12 # install RAGFlow dependent python modules
uv sync --python 3.13 # install RAGFlow dependent python modules
uv run python3 download_deps.py
pre-commit install
```
Expand Down
2 changes: 1 addition & 1 deletion README_zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ docker build --platform linux/amd64 \
```bash
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
uv sync --python 3.12 # install RAGFlow dependent python modules
uv sync --python 3.13 # install RAGFlow dependent python modules
uv run python3 download_deps.py
pre-commit install
```
Expand Down
2 changes: 1 addition & 1 deletion admin/client/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def crypt(line):
return base64.b64encode(encrypted_password).decode('utf-8')
except Exception as exc:
raise AuthException(
"Password encryption unavailable; install pycryptodomex (uv sync --python 3.12 --group test)."
"Password encryption unavailable; install pycryptodomex (uv sync --python 3.13 --group test)."
) from exc
return crypt(password_plain)

Expand Down
56 changes: 56 additions & 0 deletions common/asyncio_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#
# Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

import asyncio
import weakref


class LoopLocalSemaphore:
"""
Asyncio synchronization primitives bind to the event loop that waits on them.
Keep one semaphore per running loop for module-level concurrency limiters.
"""

def __init__(self, value: int):
self._value = int(value)
self._semaphores: "weakref.WeakKeyDictionary[asyncio.AbstractEventLoop, asyncio.Semaphore]" = (
weakref.WeakKeyDictionary()
)

def _get(self) -> asyncio.Semaphore:
loop = asyncio.get_running_loop()
for cached_loop in list(self._semaphores):
if cached_loop.is_closed():
self._semaphores.pop(cached_loop, None)
sem = self._semaphores.get(loop)
if sem is None:
sem = asyncio.Semaphore(self._value)
self._semaphores[loop] = sem
return sem

async def acquire(self) -> bool:
return await self._get().acquire()

def release(self) -> None:
self._get().release()

async def __aenter__(self):
await self.acquire()
return self

async def __aexit__(self, exc_type, exc, tb):
self.release()
return False
1 change: 1 addition & 0 deletions conf/models/novita.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"chat": "openai/v1/chat/completions",
"models": "openai/v1/models",
"embedding": "openai/v1/embeddings",
"balance": "openapi/v1/billing/balance/detail",
"rerank": "openai/v1/rerank"
},
"class": "novita",
Expand Down
24 changes: 23 additions & 1 deletion conf/models/togetherai.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
"url_suffix": {
"chat": "chat/completions",
"models": "models",
"embedding": "embeddings"
"embedding": "embeddings",
"rerank": "rerank",
"asr": "audio/transcriptions",
"tts": "audio/speech"
},
"class": "together",
"models": [
Expand Down Expand Up @@ -51,6 +54,25 @@
"model_types": [
"embedding"
]
},
{
"name": "mixedbread-ai/mxbai-rerank-large-v2",
"max_tokens": "16384",
"model_types": [
"rerank"
]
},
{
"name": "openai/whisper-large-v3",
"model_types": [
"asr"
]
},
{
"name": "canopylabs/orpheus-3b-0.1-ft",
"model_types": [
"tts"
]
}
]
}
4 changes: 2 additions & 2 deletions docs/develop/launch_ragflow_from_source.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,14 @@ cd ragflow/
2. Install RAGFlow service's Python dependencies:

```bash
uv sync --python 3.12 --frozen
uv sync --python 3.13 --frozen
```
*A virtual environment named `.venv` is created, and all Python dependencies are installed into the new environment.*

If you need to run tests against the RAGFlow service, install the test dependencies:

```bash
uv sync --python 3.12 --group test --frozen && uv pip install sdk/python --group test
uv sync --python 3.13 --group test --frozen && uv pip install sdk/python --group test
```

### Launch third-party services
Expand Down
2 changes: 1 addition & 1 deletion docs/develop/mcp/launch_mcp_server.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ This section is contributed by our community contributor [yiminghub2024](https:/
iii. Copy [docker/entrypoint.sh](https://github.com/infiniflow/ragflow/blob/main/docker/entrypoint.sh) locally.
iv. Install the required dependencies using `uv`:
- Run `uv add mcp` or
- Copy [pyproject.toml](https://github.com/infiniflow/ragflow/blob/main/pyproject.toml) locally and run `uv sync --python 3.12`.
- Copy [pyproject.toml](https://github.com/infiniflow/ragflow/blob/main/pyproject.toml) locally and run `uv sync --python 3.13`.
2. Edit **docker-compose.yml** to enable MCP (disabled by default).
3. Launch the MCP server:

Expand Down
33 changes: 16 additions & 17 deletions docs/release_notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,32 +15,31 @@ Released on May 20, 2026.

### New features

- Adds local & SSH providers in admin panel. [#15039](https://github.com/infiniflow/ragflow/pull/15039)
- Introduces local and SSH provider options for sandbox environment settings within the admin interface, allowing administrators to configure execution environments without editing environment variables. [#15039](https://github.com/infiniflow/ragflow/pull/15039)

### Improvements

- Accelerated dataset search path, reducing latency by 50–100% by removing expensive vector fetch and rerank similarity computation steps. [#14970](https://github.com/infiniflow/ragflow/pull/14970)
- Pushes metadata filters down to Infinity, significantly speeding up metadata filtering. [#14974](https://github.com/infiniflow/ragflow/pull/14974)
- added Redis caching for TTS. [#14851](https://github.com/infiniflow/ragflow/pull/14851)
- atomic document counter updates [#14867](https://github.com/infiniflow/ragflow/pull/14974)
- Improved server startup speed and memory usage [#14973](https://github.com/infiniflow/ragflow/pull/14973)
- Agent: structured output aggregation [#13384](https://github.com/infiniflow/ragflow/issues/13384) [#14848](https://github.com/infiniflow/ragflow/pull/14848)
- Agent: metadata filter reuse. [#14849](https://github.com/infiniflow/ragflow/pull/14849)
- Optimizes connector dashboard. [#14979](https://github.com/infiniflow/ragflow/pull/14979)
- Data source: GitHub connector now syncs PRs/Issues by default.
- Bump minimum supported Python version to 3.13. [#14767](https://github.com/infiniflow/ragflow/pull/14767)
- Bump nginx to 1.31.0. [#15007](https://github.com/infiniflow/ragflow/pull/15007)
- Elasticsearch: Accelerates the retrieval process by removing unnecessary vector fetches during the main search phase, reducing latency by 50–100%. [#14970](https://github.com/infiniflow/ragflow/pull/14970)
- Pushes metadata filters down to the [Infinity](https://github.com/infiniflow/infinity) document engine, significantly improving retrieval performance. [#14974](https://github.com/infiniflow/ragflow/pull/14974)
- Introduces Redis-based caching for Text-to-Speech model outputs, eliminating redundant API calls for identical text to reduce latency and save provider quota. [#14851](https://github.com/infiniflow/ragflow/pull/14851)
- Reduces server startup time by 5-9 seconds and saves roughly 200MB of memory by replacing heavy module-level imports with lazy runtime loading. [#14973](https://github.com/infiniflow/ragflow/pull/14973)
- Optimizes the connector dashboard. [#14979](https://github.com/infiniflow/ragflow/pull/14979)
- Bumps minimum supported Python version to 3.13. [#14767](https://github.com/infiniflow/ragflow/pull/14767)

### Bug fixes

- Fixed Tongyi-Qianwen embedding API calls [#14784](https://github.com/infiniflow/ragflow/pull/14784)
- Agent: Fixed MCP tool name duplication.
- Atomic database updates: Wraps document and dataset chunk counter updates in atomic database transactions to prevent data drift. [#14866](https://github.com/infiniflow/ragflow/issues/14866)[#14867](https://github.com/infiniflow/ragflow/pull/14867)
- Data source: the GitHub data source connector was failing to sync any content by default. [#13975](https://github.com/infiniflow/ragflow/issues/13975)[#14062](https://github.com/infiniflow/ragflow/pull/14062)
- The Tongyi-Qianwen text embedding models were hitting the wrong API endpoints when configured with international or Chinese regional URLs. [#14784](https://github.com/infiniflow/ragflow/pull/14784)
- Agent: Fully aggregates message content, reference data, and structured outputs across all generated events to fix incomplete responses in the non-streaming `/api/v1/agentbots/<agent_id>/completions` endpoint. [#13384](https://github.com/infiniflow/ragflow/issues/13384)[#14848](https://github.com/infiniflow/ragflow/pull/14848)
- Prevents the **Retrieval** component's manual metadata filters from getting stuck on the first loop's value by making a temporary copy of the filter settings to preserve the original placeholder.[#12582](https://github.com/infiniflow/ragflow/issues/12582)[#14849](https://github.com/infiniflow/ragflow/pull/14849)
- Agent: Fixed MCP tool name duplication.[#14217](https://github.com/infiniflow/ragflow/pull/14217)
- Agent: top_k passing issues [#14760](https://github.com/infiniflow/ragflow/pull/14760)
- Chat file attachment loss.
- Chat file attachment loss. [#13993](https://github.com/infiniflow/ragflow/pull/13993)
- IMAP multi-address parsing [#15006](https://github.com/infiniflow/ragflow/pull/15006)
- Langfuse token usage reporting. [#13294](https://github.com/infiniflow/ragflow/pull/13294)
- Reranking robustness.

- Reranking robustness. [#14264](https://github.com/infiniflow/ragflow/pull/14264)
- Bumps nginx to 1.31.0. [#14928](https://github.com/infiniflow/ragflow/issues/14928)[#15007](https://github.com/infiniflow/ragflow/pull/15007)

## v0.25.4

Expand Down
7 changes: 1 addition & 6 deletions internal/entity/models/fishaudio.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ func (f *FishAudioModel) Rerank(modelName *string, query string, documents []str

// TranscribeAudio transcribe audio
func (f *FishAudioModel) TranscribeAudio(modelName *string, file *string, apiConfig *APIConfig, asrConfig *ASRConfig) (*ASRResponse, error) {

if apiConfig == nil || apiConfig.ApiKey == nil || *apiConfig.ApiKey == "" {
return nil, fmt.Errorf("FishAudio API key is missing")
}
Expand Down Expand Up @@ -151,11 +150,7 @@ func (f *FishAudioModel) TranscribeAudio(modelName *string, file *string, apiCon
}

if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf(
"FishAudio ASR error: %s - %s",
resp.Status,
string(respBody),
)
return nil, fmt.Errorf("FishAudio ASR error: %s - %s", resp.Status, string(respBody))
}

// result
Expand Down
Loading