mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-04 09:39:32 +08:00
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:
@@ -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 ──
|
||||
|
||||
18
.github/workflows/release.yml
vendored
18
.github/workflows/release.yml
vendored
@@ -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 '\\', '/'
|
||||
|
||||
|
||||
4
.github/workflows/sep-tests.yml
vendored
4
.github/workflows/sep-tests.yml
vendored
@@ -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
|
||||
|
||||
4
.github/workflows/tests.yml
vendored
4
.github/workflows/tests.yml
vendored
@@ -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
6
.gitignore
vendored
@@ -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/
|
||||
|
||||
@@ -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/
|
||||
|
||||
26
build.sh
26
build.sh
@@ -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}"
|
||||
|
||||
@@ -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,
|
||||
@@ -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
Reference in New Issue
Block a user