Go: refactor (#16602)

### Summary

1. update doc
2. refactor route code

---------

Signed-off-by: Jin Hai <haijin.chn@gmail.com>
This commit is contained in:
Jin Hai
2026-07-03 17:00:43 +08:00
committed by GitHub
parent 79518973e5
commit 1880e65e99
169 changed files with 373 additions and 1304 deletions

View File

@@ -27,9 +27,9 @@ docker/oceanbase/
docker/seekdb/
# ── Go and C++ build outputs ────────────────────────────────────────────────
internal/cpp/build/
internal/cpp/cmake-build-release/
internal/cpp/cmake-build-debug/
internal/binding/cpp/build/
internal/binding/cpp/cmake-build-release/
internal/binding/cpp/cmake-build-debug/
target/
# ── ragflow_deps build context (built as a separate image, mounted ──

View File

@@ -350,8 +350,8 @@ jobs:
set -euo pipefail
cmake_args=(
-S internal/cpp
-B internal/cpp/cmake-build-release
-S internal/binding/cpp
-B internal/binding/cpp/cmake-build-release
-DCMAKE_BUILD_TYPE=Release
)
@@ -366,9 +366,9 @@ jobs:
fi
cmake "${cmake_args[@]}"
cmake --build internal/cpp/cmake-build-release --target rag_tokenizer_c_api --parallel
cmake --build internal/binding/cpp/cmake-build-release --target rag_tokenizer_c_api --parallel
test -f internal/cpp/cmake-build-release/librag_tokenizer_c_api.a
test -f internal/binding/cpp/cmake-build-release/librag_tokenizer_c_api.a
- name: Build rag tokenizer native library
if: runner.os == 'Windows'
@@ -390,16 +390,16 @@ jobs:
test -f "${MINGW_PREFIX}/include/simde/x86/sse4.1.h"
cmake -S internal/cpp -B internal/cpp/cmake-build-release -G Ninja \
cmake -S internal/binding/cpp -B internal/binding/cpp/cmake-build-release -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER="$(cygpath -m "${cc_path}")" \
-DCMAKE_CXX_COMPILER="$(cygpath -m "${cxx_path}")" \
-DCMAKE_C_FLAGS="-I${MINGW_PREFIX}/include" \
-DCMAKE_CXX_FLAGS="-I${MINGW_PREFIX}/include"
cmake --build internal/cpp/cmake-build-release --target rag_tokenizer_c_api --parallel
cmake --build internal/binding/cpp/cmake-build-release --target rag_tokenizer_c_api --parallel
test -f internal/cpp/cmake-build-release/librag_tokenizer_c_api.a
test -f internal/binding/cpp/cmake-build-release/librag_tokenizer_c_api.a
- name: Build Go CLI release binaries
if: runner.os != 'Windows'
@@ -492,7 +492,7 @@ jobs:
Write-Error "liboffice_oxide.a does not exist: ${officeOxidePrefix}/lib/liboffice_oxide.a"
exit 1
}
if (-not (Test-Path "internal/cpp/cmake-build-release/librag_tokenizer_c_api.a")) {
if (-not (Test-Path "internal/binding/cpp/cmake-build-release/librag_tokenizer_c_api.a")) {
Write-Error "librag_tokenizer_c_api.a does not exist"
exit 1
}
@@ -501,7 +501,7 @@ jobs:
exit 1
}
$ragTokenizerLib = (Resolve-Path "internal/cpp/cmake-build-release/librag_tokenizer_c_api.a").Path -replace '\\', '/'
$ragTokenizerLib = (Resolve-Path "internal/binding/cpp/cmake-build-release/librag_tokenizer_c_api.a").Path -replace '\\', '/'
$pcre2LibDir = $env:PCRE2_LIBDIR -replace '\\', '/'
$pcre2IncludeDir = $env:PCRE2_INCLUDEDIR -replace '\\', '/'

View File

@@ -259,7 +259,7 @@ jobs:
-e TZ="${TZ}" \
-e UV_INDEX=https://mirrors.aliyun.com/pypi/simple \
-v "${PWD}:/ragflow" \
-v "${PWD}/internal/cpp/resource:/usr/share/infinity/resource" \
-v "${PWD}/internal/binding/cpp/resource:/usr/share/infinity/resource" \
infiniflow/infinity_builder:ubuntu22_clang20
sudo docker exec "${BUILDER_CONTAINER}" bash -c 'git config --global safe.directory "*" && cd /ragflow && ./build.sh --cpp'
./build.sh --go
@@ -716,7 +716,7 @@ jobs:
-e TZ="${TZ}" \
-e UV_INDEX=https://mirrors.aliyun.com/pypi/simple \
-v "${PWD}:/ragflow" \
-v "${PWD}/internal/cpp/resource:/usr/share/infinity/resource" \
-v "${PWD}/internal/binding/cpp/resource:/usr/share/infinity/resource" \
infiniflow/infinity_builder:ubuntu22_clang20
sudo docker exec "${BUILDER_CONTAINER}" bash -c 'git config --global safe.directory "*" && cd /ragflow && ./build.sh --cpp'
./build.sh --go

View File

@@ -178,7 +178,7 @@ jobs:
-e TZ="${TZ}" \
-e UV_INDEX=https://mirrors.aliyun.com/pypi/simple \
-v "${PWD}:/ragflow" \
-v "${PWD}/internal/cpp/resource:/usr/share/infinity/resource" \
-v "${PWD}/internal/binding/cpp/resource:/usr/share/infinity/resource" \
infiniflow/infinity_builder:ubuntu22_clang20
sudo docker exec "${BUILDER_CONTAINER}" bash -c 'git config --global safe.directory "*" && cd /ragflow && ./build.sh --cpp'
./build.sh --go
@@ -622,7 +622,7 @@ jobs:
-e TZ="${TZ}" \
-e UV_INDEX=https://mirrors.aliyun.com/pypi/simple \
-v "${PWD}:/ragflow" \
-v "${PWD}/internal/cpp/resource:/usr/share/infinity/resource" \
-v "${PWD}/internal/binding/cpp/resource:/usr/share/infinity/resource" \
infiniflow/infinity_builder:ubuntu22_clang20
sudo docker exec "${BUILDER_CONTAINER}" bash -c 'git config --global safe.directory "*" && cd /ragflow && ./build.sh --cpp'
./build.sh --go

6
.gitignore vendored
View File

@@ -225,9 +225,9 @@ uv-aarch64-unknown-linux-gnu.tar.gz
docker/launch_backend_service_windows.sh
# C++ build directories
internal/cpp/build/
internal/cpp/cmake-build-release/
internal/cpp/cmake-build-debug/
internal/binding/cpp/build/
internal/binding/cpp/cmake-build-release/
internal/binding/cpp/cmake-build-debug/
# Trae IDE config
.trae/

View File

@@ -72,9 +72,9 @@ docker/seekdb
# Native / compiled build dirs
target/
bin/
internal/cpp/build/
internal/cpp/cmake-build-release/
internal/cpp/cmake-build-debug/
internal/binding/cpp/build/
internal/binding/cpp/cmake-build-release/
internal/binding/cpp/cmake-build-debug/
# Optional: skip tests and docs from indexing
# test/

View File

@@ -12,9 +12,9 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$SCRIPT_DIR"
# Build directories
CPP_DIR="$PROJECT_ROOT/internal/cpp"
CPP_DIR="$PROJECT_ROOT/internal/binding/cpp"
BUILD_DIR="$CPP_DIR/cmake-build-release"
RAGFLOW_MAIN_BINARY="$PROJECT_ROOT/bin/ragflow_main"
RAGFLOW_SERVER_BINARY="$PROJECT_ROOT/bin/ragflow_server"
RAGFLOW_CLI_BINARY="$PROJECT_ROOT/bin/ragflow-cli"
# Strip symbols from Go binaries (set via --strip / -s)
@@ -301,20 +301,20 @@ build_go() {
local strip_flags=()
[ -n "$STRIP_SYMBOLS" ] && strip_flags=(-ldflags="-s -w")
echo "Building RAGFlow binary: $RAGFLOW_MAIN_BINARY, and $RAGFLOW_CLI_BINARY"
echo "Building RAGFlow binary: $RAGFLOW_SERVER_BINARY, and $RAGFLOW_CLI_BINARY"
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} CGO_ENABLED=1 \
CGO_CFLAGS="$CGO_CFLAGS" CGO_LDFLAGS="$CGO_LDFLAGS" \
go build "${strip_flags[@]}" -o "$RAGFLOW_MAIN_BINARY" cmd/ragflow_main.go
go build "${strip_flags[@]}" -o "$RAGFLOW_SERVER_BINARY" cmd/ragflow_server.go
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} CGO_ENABLED=1 \
CGO_CFLAGS="$CGO_CFLAGS" CGO_LDFLAGS="$CGO_LDFLAGS" \
go build "${strip_flags[@]}" -o "$RAGFLOW_CLI_BINARY" cmd/ragflow-cli.go
if [ ! -f "$RAGFLOW_MAIN_BINARY" ]; then
if [ ! -f "$RAGFLOW_SERVER_BINARY" ]; then
echo -e "${RED}Error: Failed to build RAGFlow main binary${NC}"
exit 1
fi
echo -e "${GREEN}✓ Go ragflow_main built successfully: $RAGFLOW_MAIN_BINARY${NC}"
echo -e "${GREEN}✓ Go ragflow_server built successfully: $RAGFLOW_SERVER_BINARY${NC}"
echo -e "${GREEN}✓ Go ragflow-cli built successfully: $RAGFLOW_CLI_BINARY${NC}"
}
@@ -405,7 +405,7 @@ clean() {
print_section "Cleaning build artifacts"
rm -rf "$BUILD_DIR"
rm -f "$RAGFLOW_MAIN_BINARY"
rm -f "$RAGFLOW_SERVER_BINARY"
rm -f "$RAGFLOW_CLI_BINARY"
echo -e "${GREEN}✓ Build artifacts cleaned${NC}"
@@ -413,8 +413,8 @@ clean() {
# Run the server
run() {
if [ ! -f "$RAGFLOW_MAIN_BINARY" ]; then
echo -e "${RED}Error: $RAGFLOW_MAIN_BINARY not found. Build first with --all or --go${NC}"
if [ ! -f "$RAGFLOW_SERVER_BINARY" ]; then
echo -e "${RED}Error: $RAGFLOW_SERVER_BINARY not found. Build first with --all or --go${NC}"
exit 1
fi
@@ -423,7 +423,7 @@ run() {
# admin_server must be running before ragflow_server, otherwise ragflow_server's
# heartbeats to admin will error out (see internal/development.md).
print_section "Starting admin server (background)"
"$RAGFLOW_MAIN_BINARY" --admin &
"$RAGFLOW_SERVER_BINARY" --admin &
ADMIN_PID=$!
trap 'kill "$ADMIN_PID" 2>/dev/null || true' EXIT INT TERM
@@ -432,13 +432,13 @@ run() {
sleep 1
print_section "Starting ingestor (background)"
"$RAGFLOW_MAIN_BINARY" --ingestor &
"$RAGFLOW_SERVER_BINARY" --ingestor &
INGESTOR_PID=$!
trap 'kill "$INGESTOR_PID" 2>/dev/null || true' EXIT INT TERM
sleep 1
print_section "Starting RAGFlow server (foreground)"
"$RAGFLOW_MAIN_BINARY" -- api
"$RAGFLOW_SERVER_BINARY" -- api
}
# Show help
@@ -540,7 +540,7 @@ main() {
build_cpp
build_go
echo -e "\n${GREEN}=== Build completed successfully! ===${NC}"
echo "Binary: $RAGFLOW_MAIN_BINARY, $RAGFLOW_CLI_BINARY"
echo "Binary: $RAGFLOW_SERVER_BINARY, $RAGFLOW_CLI_BINARY"
;;
*)
echo -e "${RED}Unknown option: $1${NC}"

View File

@@ -661,7 +661,6 @@ func startServer(config *server.Config) {
userService := service.NewUserService()
documentService := service.NewDocumentService()
datasetsService := service.NewDatasetService()
datasetService := service.NewKnowledgebaseService()
metadataService := service.NewMetadataService()
chunkService := chunk.NewChunkService()
llmService := service.NewLLMService()
@@ -689,11 +688,10 @@ func startServer(config *server.Config) {
// Initialize handler layer
authHandler := handler.NewAuthHandler()
userHandler := handler.NewUserHandler(userService)
tenantHandler := handler.NewTenantHandler(tenantService, userService, datasetService)
tenantHandler := handler.NewTenantHandler(tenantService, userService, datasetsService)
documentHandler := handler.NewDocumentHandler(documentService, datasetsService)
datasetsHandler := handler.NewDatasetsHandler(datasetsService, metadataService)
systemHandler := handler.NewSystemHandler(systemService)
datasetHandler := handler.NewKnowledgebaseHandler(datasetService, userService, documentService)
chunkHandler := handler.NewChunkHandler(chunkService, userService)
llmHandler := handler.NewLLMHandler(llmService, userService)
chatHandler := handler.NewChatHandler(chatService, userService)
@@ -775,7 +773,7 @@ func startServer(config *server.Config) {
docDAO := documentDAO
retrievalService := nlp.NewRetrievalService(docEngine, docDAO)
difyRetrievalHandler := handler.NewDifyRetrievalHandler(
datasetService,
datasetsService,
modelProviderService,
metadataService,
retrievalService,
@@ -807,7 +805,6 @@ func startServer(config *server.Config) {
documentHandler,
datasetsHandler,
systemHandler,
datasetHandler,
chunkHandler,
llmHandler,
chatHandler,

View File

@@ -278,7 +278,7 @@ if [[ "${ENABLE_ADMIN_SERVER}" -eq 1 ]]; then
if [[ "${API_PROXY_SCHEME}" == "hybrid" ]] || [[ "${API_PROXY_SCHEME}" == "go" ]]; then
while true; do
echo "Starting Admin go server..."
bin/ragflow_main --admin
bin/ragflow_server --admin
echo "Admin go server started."
sleep 1;
done &
@@ -301,7 +301,7 @@ if [[ "${ENABLE_WEBSERVER}" -eq 1 ]]; then
if [[ "${API_PROXY_SCHEME}" == "hybrid" ]] || [[ "${API_PROXY_SCHEME}" == "go" ]]; then
while true; do
echo "Starting RAGFlow go server..."
bin/ragflow_main --api
bin/ragflow_server --api
echo "RAGFlow go server started."
sleep 1;
done &
@@ -335,7 +335,7 @@ if [[ "${ENABLE_TASKEXECUTOR}" -eq 1 ]]; then
if [[ "${API_PROXY_SCHEME}" == "hybrid" ]] || [[ "${API_PROXY_SCHEME}" == "go" ]]; then
while true; do
echo "Starting go ingestor..."
bin/ragflow_main --ingestor
bin/ragflow_server --ingestor
sleep 1;
done &
fi
@@ -353,7 +353,7 @@ if [[ "${ENABLE_TASKEXECUTOR}" -eq 1 ]]; then
if [[ "${API_PROXY_SCHEME}" == "hybrid" ]] || [[ "${API_PROXY_SCHEME}" == "go" ]]; then
while true; do
echo "Starting go ingestor..."
bin/ragflow_main --ingestor
bin/ragflow_server --ingestor
sleep 1;
done &
fi

Some files were not shown because too many files have changed in this diff Show More