Skip to content

Commit 27e5168

Browse files
committed
Merge tag 'v0.21.1' into upgrade-0.21.1
2 parents 5a1a6c0 + de24e74 commit 27e5168

File tree

1,614 files changed

+128385
-62061
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,614 files changed

+128385
-62061
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
name: "❤️‍🔥ᴬᴳᴱᴺᵀ Agent scenario request"
2+
description: Propose a agent scenario request for RAGFlow.
3+
title: "[Agent Scenario Request]: "
4+
labels: ["❤️‍🔥ᴬᴳᴱᴺᵀ agent scenario"]
5+
body:
6+
- type: checkboxes
7+
attributes:
8+
label: Self Checks
9+
description: "Please check the following in order to be responded in time :)"
10+
options:
11+
- label: I have searched for existing issues [search for existing issues](https://github.com/infiniflow/ragflow/issues), including closed ones.
12+
required: true
13+
- label: I confirm that I am using English to submit this report ([Language Policy](https://github.com/infiniflow/ragflow/issues/5910)).
14+
required: true
15+
- label: Non-english title submitions will be closed directly ( 非英文标题的提交将会被直接关闭 ) ([Language Policy](https://github.com/infiniflow/ragflow/issues/5910)).
16+
required: true
17+
- label: "Please do not modify this template :) and fill in all the required fields."
18+
required: true
19+
- type: textarea
20+
attributes:
21+
label: Is your feature request related to a scenario?
22+
description: |
23+
A clear and concise description of what the scenario is. Ex. I'm always frustrated when [...]
24+
render: Markdown
25+
validations:
26+
required: false
27+
- type: textarea
28+
attributes:
29+
label: Describe the feature you'd like
30+
description: A clear and concise description of what you want to happen.
31+
validations:
32+
required: true
33+
- type: textarea
34+
attributes:
35+
label: Documentation, adoption, use case
36+
description: If you can, explain some scenarios how users might use this, situations it would be helpful in. Any API designs, mockups, or diagrams are also helpful.
37+
render: Markdown
38+
validations:
39+
required: false
40+
- type: textarea
41+
attributes:
42+
label: Additional information
43+
description: |
44+
Add any other context or screenshots about the feature request here.
45+
validations:
46+
required: false

.github/workflows/release.yml

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
- name: Check out code
2626
uses: actions/checkout@v4
2727
with:
28-
token: ${{ secrets.MY_GITHUB_TOKEN }} # Use the secret as an environment variable
28+
token: ${{ secrets.GITHUB_TOKEN }} # Use the secret as an environment variable
2929
fetch-depth: 0
3030
fetch-tags: true
3131

@@ -69,7 +69,7 @@ jobs:
6969
# https://github.com/actions/upload-release-asset has been replaced by https://github.com/softprops/action-gh-release
7070
uses: softprops/action-gh-release@v2
7171
with:
72-
token: ${{ secrets.MY_GITHUB_TOKEN }} # Use the secret as an environment variable
72+
token: ${{ secrets.GITHUB_TOKEN }} # Use the secret as an environment variable
7373
prerelease: ${{ env.PRERELEASE }}
7474
tag_name: ${{ env.RELEASE_TAG }}
7575
# The body field does not support environment variable substitution directly.
@@ -88,7 +88,9 @@ jobs:
8888
with:
8989
context: .
9090
push: true
91-
tags: infiniflow/ragflow:${{ env.RELEASE_TAG }}
91+
tags: |
92+
infiniflow/ragflow:${{ env.RELEASE_TAG }}
93+
infiniflow/ragflow:latest-full
9294
file: Dockerfile
9395
platforms: linux/amd64
9496

@@ -98,7 +100,9 @@ jobs:
98100
with:
99101
context: .
100102
push: true
101-
tags: infiniflow/ragflow:${{ env.RELEASE_TAG }}-slim
103+
tags: |
104+
infiniflow/ragflow:${{ env.RELEASE_TAG }}-slim
105+
infiniflow/ragflow:latest-slim
102106
file: Dockerfile
103107
build-args: LIGHTEN=1
104108
platforms: linux/amd64
@@ -116,3 +120,17 @@ jobs:
116120
packages-dir: sdk/python/dist/
117121
password: ${{ secrets.PYPI_API_TOKEN }}
118122
verbose: true
123+
124+
- name: Build ragflow-cli
125+
if: startsWith(github.ref, 'refs/tags/v')
126+
run: |
127+
cd admin/client && \
128+
uv build
129+
130+
- name: Publish client package distributions to PyPI
131+
if: startsWith(github.ref, 'refs/tags/v')
132+
uses: pypa/gh-action-pypi-publish@release/v1
133+
with:
134+
packages-dir: admin/client/dist/
135+
password: ${{ secrets.PYPI_API_TOKEN }}
136+
verbose: true

.github/workflows/tests.yml

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,10 @@ jobs:
3434
# https://github.com/hmarr/debug-action
3535
#- uses: hmarr/debug-action@v2
3636

37-
- name: Show who triggered this workflow
37+
- name: Ensure workspace ownership
3838
run: |
3939
echo "Workflow triggered by ${{ github.event_name }}"
40-
41-
- name: Ensure workspace ownership
42-
run: echo "chown -R $USER $GITHUB_WORKSPACE" && sudo chown -R $USER $GITHUB_WORKSPACE
40+
echo "chown -R $USER $GITHUB_WORKSPACE" && sudo chown -R $USER $GITHUB_WORKSPACE
4341
4442
# https://github.com/actions/checkout/issues/1781
4543
- name: Check out code
@@ -48,6 +46,44 @@ jobs:
4846
fetch-depth: 0
4947
fetch-tags: true
5048

49+
- name: Check workflow duplication
50+
if: ${{ !cancelled() && !failure() && (github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'ci')) }}
51+
run: |
52+
if [[ ${{ github.event_name }} != 'pull_request' ]]; then
53+
HEAD=$(git rev-parse HEAD)
54+
# Find a PR that introduced a given commit
55+
gh auth login --with-token <<< "${{ secrets.GITHUB_TOKEN }}"
56+
PR_NUMBER=$(gh pr list --search ${HEAD} --state merged --json number --jq .[0].number)
57+
echo "HEAD=${HEAD}"
58+
echo "PR_NUMBER=${PR_NUMBER}"
59+
if [[ -n ${PR_NUMBER} ]]; then
60+
PR_SHA_FP=${RUNNER_WORKSPACE_PREFIX}/artifacts/${GITHUB_REPOSITORY}/PR_${PR_NUMBER}
61+
if [[ -f ${PR_SHA_FP} ]]; then
62+
read -r PR_SHA PR_RUN_ID < "${PR_SHA_FP}"
63+
# Calculate the hash of the current workspace content
64+
HEAD_SHA=$(git rev-parse HEAD^{tree})
65+
if [[ ${HEAD_SHA} == ${PR_SHA} ]]; then
66+
echo "Cancel myself since the workspace content hash is the same with PR #${PR_NUMBER} merged. See ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${PR_RUN_ID} for details."
67+
gh run cancel ${GITHUB_RUN_ID}
68+
while true; do
69+
status=$(gh run view ${GITHUB_RUN_ID} --json status -q .status)
70+
[ "$status" = "completed" ] && break
71+
sleep 5
72+
done
73+
exit 1
74+
fi
75+
fi
76+
fi
77+
else
78+
PR_NUMBER=${{ github.event.pull_request.number }}
79+
PR_SHA_FP=${RUNNER_WORKSPACE_PREFIX}/artifacts/${GITHUB_REPOSITORY}/PR_${PR_NUMBER}
80+
# Calculate the hash of the current workspace content
81+
PR_SHA=$(git rev-parse HEAD^{tree})
82+
echo "PR #${PR_NUMBER} workspace content hash: ${PR_SHA}"
83+
mkdir -p ${RUNNER_WORKSPACE_PREFIX}/artifacts/${GITHUB_REPOSITORY}
84+
echo "${PR_SHA} ${GITHUB_RUN_ID}" > ${PR_SHA_FP}
85+
fi
86+
5187
# https://github.com/astral-sh/ruff-action
5288
- name: Static check with Ruff
5389
uses: astral-sh/ruff-action@v3
@@ -59,14 +95,15 @@ jobs:
5995
run: |
6096
RUNNER_WORKSPACE_PREFIX=${RUNNER_WORKSPACE_PREFIX:-$HOME}
6197
sudo docker pull ubuntu:22.04
62-
sudo docker build --progress=plain --build-arg LIGHTEN=1 --build-arg NEED_MIRROR=1 -f Dockerfile -t infiniflow/ragflow:nightly-slim .
98+
sudo DOCKER_BUILDKIT=1 docker build --build-arg LIGHTEN=1 --build-arg NEED_MIRROR=1 -f Dockerfile -t infiniflow/ragflow:nightly-slim .
6399
64100
- name: Build ragflow:nightly
65101
run: |
66-
sudo docker build --progress=plain --build-arg NEED_MIRROR=1 -f Dockerfile -t infiniflow/ragflow:nightly .
102+
sudo DOCKER_BUILDKIT=1 docker build --build-arg NEED_MIRROR=1 -f Dockerfile -t infiniflow/ragflow:nightly .
67103
68104
- name: Start ragflow:nightly-slim
69105
run: |
106+
sudo docker compose -f docker/docker-compose.yml down --volumes --remove-orphans
70107
echo -e "\nRAGFLOW_IMAGE=infiniflow/ragflow:nightly-slim" >> docker/.env
71108
sudo docker compose -f docker/docker-compose.yml up -d
72109

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ out
149149
# Nuxt.js build / generate output
150150
.nuxt
151151
dist
152-
152+
ragflow_cli.egg-info
153153
# Gatsby files
154154
.cache/
155155
# Comment in the public line in if your project uses Gatsby and not Next.js
@@ -193,3 +193,5 @@ dist
193193
# SvelteKit build / generate output
194194
.svelte-kit
195195

196+
# Default backup dir
197+
backup

.trivyignore

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
**/*.md
2+
**/*.min.js
3+
**/*.min.css
4+
**/*.svg
5+
**/*.png
6+
**/*.jpg
7+
**/*.jpeg
8+
**/*.gif
9+
**/*.woff
10+
**/*.woff2
11+
**/*.map
12+
**/*.webp
13+
**/*.ico
14+
**/*.ttf
15+
**/*.eot

Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ ENV PATH="${VIRTUAL_ENV}/bin:${PATH}"
191191
ENV PYTHONPATH=/ragflow/
192192

193193
COPY web web
194+
COPY admin admin
194195
COPY api api
195196
COPY conf conf
196197
COPY deepdoc deepdoc

README.md

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<div align="center">
22
<a href="https://demo.ragflow.io/">
3-
<img src="web/src/assets/logo-with-text.png" width="520" alt="ragflow logo">
3+
<img src="web/src/assets/logo-with-text.svg" width="520" alt="ragflow logo">
44
</a>
55
</div>
66

@@ -22,7 +22,7 @@
2222
<img alt="Static Badge" src="https://img.shields.io/badge/Online-Demo-4e6b99">
2323
</a>
2424
<a href="https://hub.docker.com/r/infiniflow/ragflow" target="_blank">
25-
<img src="https://img.shields.io/docker/pulls/infiniflow/ragflow?label=Docker%20Pulls&color=0db7ed&logo=docker&logoColor=white&style=flat-square" alt="docker pull infiniflow/ragflow:v0.19.1">
25+
<img src="https://img.shields.io/docker/pulls/infiniflow/ragflow?label=Docker%20Pulls&color=0db7ed&logo=docker&logoColor=white&style=flat-square" alt="docker pull infiniflow/ragflow:v0.21.1">
2626
</a>
2727
<a href="https://github.com/infiniflow/ragflow/releases/latest">
2828
<img src="https://img.shields.io/github/v/release/infiniflow/ragflow?color=blue&label=Latest%20Release" alt="Latest Release">
@@ -71,22 +71,22 @@
7171

7272
## 💡 What is RAGFlow?
7373

74-
[RAGFlow](https://ragflow.io/) is an open-source RAG (Retrieval-Augmented Generation) engine based on deep document
75-
understanding. It offers a streamlined RAG workflow for businesses of any scale, combining LLM (Large Language Models)
76-
to provide truthful question-answering capabilities, backed by well-founded citations from various complex formatted
77-
data.
74+
[RAGFlow](https://ragflow.io/) is a leading open-source Retrieval-Augmented Generation (RAG) engine that fuses cutting-edge RAG with Agent capabilities to create a superior context layer for LLMs. It offers a streamlined RAG workflow adaptable to enterprises of any scale. Powered by a converged context engine and pre-built agent templates, RAGFlow enables developers to transform complex data into high-fidelity, production-ready AI systems with exceptional efficiency and precision.
7875

7976
## 🎮 Demo
8077

8178
Try our demo at [https://demo.ragflow.io](https://demo.ragflow.io).
8279

8380
<div align="center" style="margin-top:20px;margin-bottom:20px;">
84-
<img src="https://github.com/infiniflow/ragflow/assets/7248/2f6baa3e-1092-4f11-866d-36f6a9d075e5" width="1200"/>
85-
<img src="https://github.com/user-attachments/assets/504bbbf1-c9f7-4d83-8cc5-e9cb63c26db6" width="1200"/>
81+
<img src="https://raw.githubusercontent.com/infiniflow/ragflow-docs/refs/heads/image/image/chunking.gif" width="1200"/>
82+
<img src="https://raw.githubusercontent.com/infiniflow/ragflow-docs/refs/heads/image/image/agentic-dark.gif" width="1200"/>
8683
</div>
8784

8885
## 🔥 Latest Updates
8986

87+
- 2025-10-15 Supports orchestrable ingestion pipeline.
88+
- 2025-08-08 Supports OpenAI's latest GPT-5 series models.
89+
- 2025-08-01 Supports agentic workflow and MCP.
9090
- 2025-05-23 Adds a Python/JavaScript code executor component to Agent.
9191
- 2025-05-05 Supports cross-language query.
9292
- 2025-03-19 Supports using a multi-modal model to make sense of images within PDF or DOCX files.
@@ -135,7 +135,7 @@ releases! 🌟
135135
## 🔎 System Architecture
136136

137137
<div align="center" style="margin-top:20px;margin-bottom:20px;">
138-
<img src="https://github.com/infiniflow/ragflow/assets/12318111/d6ac5664-c237-4200-a7c2-a4a00691b485" width="1000"/>
138+
<img src="https://github.com/user-attachments/assets/31b0dd6f-ca4f-445a-9457-70cb44a381b2" width="1000"/>
139139
</div>
140140

141141
## 🎬 Get Started
@@ -187,7 +187,7 @@ releases! 🌟
187187
> All Docker images are built for x86 platforms. We don't currently offer Docker images for ARM64.
188188
> If you are on an ARM64 platform, follow [this guide](https://ragflow.io/docs/dev/build_docker_image) to build a Docker image compatible with your system.
189189
190-
> The command below downloads the `v0.19.1-slim` edition of the RAGFlow Docker image. See the following table for descriptions of different RAGFlow editions. To download a RAGFlow edition different from `v0.19.1-slim`, update the `RAGFLOW_IMAGE` variable accordingly in **docker/.env** before using `docker compose` to start the server. For example: set `RAGFLOW_IMAGE=infiniflow/ragflow:v0.19.1` for the full edition `v0.19.1`.
190+
> The command below downloads the `v0.21.1-slim` edition of the RAGFlow Docker image. See the following table for descriptions of different RAGFlow editions. To download a RAGFlow edition different from `v0.21.1-slim`, update the `RAGFLOW_IMAGE` variable accordingly in **docker/.env** before using `docker compose` to start the server. For example: set `RAGFLOW_IMAGE=infiniflow/ragflow:v0.21.1` for the full edition `v0.21.1`.
191191
192192
```bash
193193
$ cd ragflow/docker
@@ -200,8 +200,8 @@ releases! 🌟
200200
201201
| RAGFlow image tag | Image size (GB) | Has embedding models? | Stable? |
202202
|-------------------|-----------------|-----------------------|--------------------------|
203-
| v0.19.1 | &approx;9 | :heavy_check_mark: | Stable release |
204-
| v0.19.1-slim | &approx;2 | ❌ | Stable release |
203+
| v0.21.1 | &approx;9 | :heavy_check_mark: | Stable release |
204+
| v0.21.1-slim | &approx;2 | ❌ | Stable release |
205205
| nightly | &approx;9 | :heavy_check_mark: | _Unstable_ nightly build |
206206
| nightly-slim | &approx;2 | ❌ | _Unstable_ nightly build |
207207
@@ -304,7 +304,7 @@ docker build --platform linux/amd64 -f Dockerfile -t infiniflow/ragflow:nightly
304304
305305
## 🔨 Launch service from source for development
306306
307-
1. Install uv, or skip this step if it is already installed:
307+
1. Install `uv` and `pre-commit`, or skip this step if they are already installed:
308308
309309
```bash
310310
pipx install uv pre-commit
@@ -341,12 +341,16 @@ docker build --platform linux/amd64 -f Dockerfile -t infiniflow/ragflow:nightly
341341
5. If your operating system does not have jemalloc, please install it as follows:
342342
343343
```bash
344-
# ubuntu
344+
# Ubuntu
345345
sudo apt-get install libjemalloc-dev
346-
# centos
346+
# CentOS
347347
sudo yum install jemalloc
348+
# OpenSUSE
349+
sudo zypper install jemalloc
350+
# macOS
351+
sudo brew install jemalloc
348352
```
349-
353+
350354
6. Launch backend service:
351355
352356
```bash

0 commit comments

Comments
 (0)