chore(deps): depend on org mirror infiniflow/onnxruntime_go (#19169)

This commit is contained in:
xugangqiang
2026-09-04 15:26:46 +08:00
committed by GitHub
parent 4f7c69c06c
commit 4298700cb2
9 changed files with 47 additions and 31 deletions

View File

@@ -30,6 +30,14 @@ concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}${{ github.event.action == 'labeled' && github.event.label.name != 'ci' && format('-ignore-{0}', github.run_id) || '' }}
cancel-in-progress: true
# infiniflow/onnxruntime_go is a fresh org mirror that is not yet present in the
# public Go checksum database / proxy. Mark it private so Go skips the proxy and
# sumdb for this path and resolves it directly from GitHub (Go's default
# GOPROXY keeps the ",direct" fallback). Required for the in-process DeepDoc
# backend to build against github.com/infiniflow/onnxruntime_go.
env:
GOPRIVATE: github.com/infiniflow/onnxruntime_go
jobs:
ragflow_preflight:
name: ragflow_preflight

View File

@@ -402,12 +402,12 @@ build_go() {
[ -n "$STRIP_SYMBOLS" ] && strip_flags=(-ldflags="-s -w")
echo "Building RAGFlow binary: $RAGFLOW_CLI_BINARY and $RAGFLOW_SERVER_BINARY"
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} \
go build "${strip_flags[@]}" -o "$RAGFLOW_CLI_BINARY" cmd/ragflow-cli.go
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} CGO_ENABLED=1 \
go build -tags cgo,static "${strip_flags[@]}" -o "$RAGFLOW_CLI_BINARY" cmd/ragflow-cli.go
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} CGO_ENABLED=1 \
CGO_CFLAGS="$CGO_CFLAGS" CGO_LDFLAGS="$CGO_LDFLAGS" \
go build -tags cgo "${strip_flags[@]}" -o "$RAGFLOW_SERVER_BINARY" \
go build -tags cgo,static "${strip_flags[@]}" -o "$RAGFLOW_SERVER_BINARY" \
cmd/ragflow_server.go
@@ -513,8 +513,8 @@ setup_cgo_env() {
return 1
;;
esac
# Statically link libonnxruntime*.a into the binary. The forked Go binding
# (onnxruntime_go, github.com/xugangqiang/onnxruntime_go) resolves
# Statically link libonnxruntime*.a into the binary. The org Go binding
# (onnxruntime_go, github.com/infiniflow/onnxruntime_go) resolves
# OrtGetApiBase with dlopen(NULL), so the symbols must (a) be pulled in
# wholesale with --whole-archive (ORT registers its execution providers
# lazily at runtime, beyond what a normal link would keep) and (b) be
@@ -604,7 +604,7 @@ run_go_tests() {
fi
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} CGO_ENABLED=1 \
CGO_CFLAGS="$CGO_CFLAGS" CGO_LDFLAGS="$CGO_LDFLAGS" \
go test -count=1 "$@"
go test -tags cgo,static -count=1 "$@"
run_native_tests
}
@@ -622,7 +622,7 @@ run_native_tests() {
( cd "$PROJECT_ROOT" && \
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} \
CGO_ENABLED=1 \
go test -tags cgo -count=1 ./internal/deepdoc/native/... )
go test -tags cgo,static -count=1 ./internal/deepdoc/native/... )
}
# Run the model-backed integration tests of the native package and the
@@ -651,20 +651,20 @@ run_native_integration_tests() {
( cd "$PROJECT_ROOT" && \
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} \
CGO_ENABLED=1 \
go test -tags "cgo integration fetch_testdata" -count=1 ./internal/deepdoc/native/... )
go test -tags "cgo static integration fetch_testdata" -count=1 ./internal/deepdoc/native/... )
print_section "Running native integration concurrency tests (race detector on)"
( cd "$PROJECT_ROOT" && \
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} \
CGO_ENABLED=1 \
go test -tags "cgo integration fetch_testdata" -race -count=1 \
go test -tags "cgo static integration fetch_testdata" -race -count=1 \
-run 'TestInferenceConcurrency' ./internal/deepdoc/native/... )
print_section "Running native_analyzer race tests (race detector on)"
( cd "$PROJECT_ROOT" && \
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} \
CGO_ENABLED=1 \
go test -tags "cgo integration fetch_testdata" -race -count=1 \
go test -tags "cgo static integration fetch_testdata" -race -count=1 \
./internal/deepdoc/parser/pdf/inference/native_analyzer/... )
}
@@ -683,7 +683,7 @@ run_go_tests_tagged() {
fi
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} CGO_ENABLED=1 \
CGO_CFLAGS="$CGO_CFLAGS" CGO_LDFLAGS="$CGO_LDFLAGS" \
go test -tags "${tags}" -count=1 "$@"
go test -tags "${tags} static" -count=1 "$@"
}
# Clean build artifacts

View File

@@ -1084,7 +1084,8 @@ func configureTTSSynthesizer(modelProviderService *service.ModelProviderService)
// registerNativeDeepDoc wires the in-process (Go) DeepDoc backend as the local
// inference backend. The server is built with -tags cgo and links ONNX Runtime
// statically (libonnxruntime.a, resolved at runtime via dlopen(NULL) from the
// running binary — see the onnxruntime_go fork), so there is no external
// running binary — see github.com/infiniflow/onnxruntime_go, the org mirror of
// yalue/onnxruntime_go), so there is no external
// DeepDoc HTTP service and no dynamic .so deployment.
//
// Fail-fast contract (P0): the in-process backend must be available at startup

14
go.mod
View File

@@ -227,7 +227,7 @@ require (
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
github.com/xuri/efp v0.0.1 // indirect
github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 // indirect
github.com/yalue/onnxruntime_go v1.23.0
github.com/infiniflow/onnxruntime_go v1.23.1
github.com/yargevad/filepathx v1.0.0 // indirect
github.com/yuin/gopher-lua v1.1.1 // indirect
go.mongodb.org/mongo-driver/v2 v2.6.0 // indirect
@@ -259,8 +259,10 @@ replace github.com/infiniflow/infinity-go-sdk => github.com/infiniflow/infinity/
replace github.com/AkmalOt/gomsg => github.com/xugangqiang/gomsg v0.0.0-20260407083308-985c3a1a76b7
// onnxruntime_go is forked to github.com/xugangqiang/onnxruntime_go (static-only:
// resolves OrtGetApiBase via dlopen(NULL), no .so fallback). The fork is published at
// that remote with tag v1.23.0; we pin a remote replace matching the gomsg pattern above
// so the vendored tree no longer needs to live in-tree.
replace github.com/yalue/onnxruntime_go => github.com/xugangqiang/onnxruntime_go v1.23.0
// onnxruntime_go is mirrored to github.com/infiniflow/onnxruntime_go (org-owned
// fork of yalue/onnxruntime_go at v1.23.0) so the in-process DeepDoc backend no
// longer depends on a personal fork or the upstream repo directly. ONNX Runtime is
// linked statically (--whole-archive + --export-dynamic); OrtGetApiBase is then
// resolved at runtime via dlopen(NULL) from the running binary, so no
// libonnxruntime.so is required. The module path matches the import path, so no
// replace directive is needed.

6
go.sum
View File

@@ -343,6 +343,10 @@ github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/infiniflow/infinity/go v0.0.0-20260806040857-d755c5ad25d9 h1:mqPwCOTktwl0V1f3tkfCRFonGQ3XrQ43gvH+TOWec6o=
github.com/infiniflow/infinity/go v0.0.0-20260806040857-d755c5ad25d9/go.mod h1:hw3z5AwNFsGy1cdrE0Mfjot2y9jqVHTxBufUx9VzZ+0=
github.com/infiniflow/onnxruntime_go v1.23.0 h1:cUhSkGOyMAF7v0mOm97/V4hUhIVi5apJMm6WqKrSTwc=
github.com/infiniflow/onnxruntime_go v1.23.0/go.mod h1:dFFL0KdgeeEDXoE9cjrg/ipQg0wEvD0tkGIg2UH0jdE=
github.com/infiniflow/onnxruntime_go v1.23.1 h1:PvhtCkWAmnMwy16QrkohkBKUOH/EOrEZm0LO/QykIo0=
github.com/infiniflow/onnxruntime_go v1.23.1/go.mod h1:dFFL0KdgeeEDXoE9cjrg/ipQg0wEvD0tkGIg2UH0jdE=
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
@@ -574,8 +578,6 @@ github.com/x-cray/logrus-prefixed-formatter v0.5.2 h1:00txxvfBM9muc0jiLIEAkAcIMJ
github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE=
github.com/xugangqiang/gomsg v0.0.0-20260407083308-985c3a1a76b7 h1:iX9RUmlLw+Hoe78WV5vlm+JjIZUCzdRn2y6tWNxZTeY=
github.com/xugangqiang/gomsg v0.0.0-20260407083308-985c3a1a76b7/go.mod h1:TCjWm+lo7de/zYHb8rHfVSaKxOP4tZNrnRUzkqV4r28=
github.com/xugangqiang/onnxruntime_go v1.23.0 h1:Oo//W+NHBkDwjjyOa9US8G9ryae5cVRbAMgXR6wxohw=
github.com/xugangqiang/onnxruntime_go v1.23.0/go.mod h1:b4X26A8pekNb1ACJ58wAXgNKeUCGEAQ9dmACut9Sm/4=
github.com/xuri/efp v0.0.1 h1:fws5Rv3myXyYni8uwj2qKjVaRP30PdjeYe2Y6FDsCL8=
github.com/xuri/efp v0.0.1/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
github.com/xuri/excelize/v2 v2.11.0 h1:HxaEFl6sRN2+8J5a8HaKq+0M4FsjBGMnWWtjOCPSG88=

View File

@@ -259,8 +259,8 @@ func HasModelFiles(dir string) bool {
// ORT_VERSION in ragflow_deps/download_go_deps.py and ragflow_deps/download_deps.py)
// — NOT a single source of truth. The download URL and extracted dir name are
// built from those ORT_VERSION constants, not from this one. The Go binding
// (github.com/yalue/onnxruntime_go, forked to
// github.com/xugangqiang/onnxruntime_go) and the pip onnxruntime== pin must
// (github.com/infiniflow/onnxruntime_go, the org mirror of yalue/onnxruntime_go)
// and the pip onnxruntime== pin must
// track this MINOR version: the binding uses its own release numbering
// (v1.23.0 <-> ORT 1.23.x) but is ABI-compatible with this native release on
// the same minor line. ONNX Runtime is linked statically (libonnxruntime.a),

View File

@@ -18,7 +18,7 @@ import (
"strings"
"sync"
ort "github.com/yalue/onnxruntime_go"
ort "github.com/infiniflow/onnxruntime_go"
)
const (

View File

@@ -19,7 +19,7 @@ import (
"fmt"
"sync"
ort "github.com/yalue/onnxruntime_go"
ort "github.com/infiniflow/onnxruntime_go"
)
var (
@@ -36,15 +36,17 @@ var (
// call multiple times; only the first takes effect. Call it once at process
// start (the CLI does this from main).
//
// This fork links ONNX Runtime statically (libonnxruntime.a is linked into the
// binary with --whole-archive and exported via -Wl,--export-dynamic; see
// build.sh: ONNX_RUNTIME_STATIC_DIR). The forked onnxruntime_go binding
// resolves OrtGetApiBase from the running binary itself via dlopen(NULL) (the
// The in-process DeepDoc backend links ONNX Runtime statically (libonnxruntime.a
// is linked into the binary with --whole-archive and exported via
// -Wl,--export-dynamic; see build.sh: ONNX_RUNTIME_STATIC_DIR). The org
// onnxruntime_go binding (github.com/infiniflow/onnxruntime_go) resolves
// OrtGetApiBase from the running binary itself via dlopen(NULL) (the
// process-global symbol table), so no external libonnxruntime.so is needed and
// there is no dynamic .so deployment. A main executable CANNOT be dlopen'd by
// its own file path (glibc refuses), which is exactly why the binding uses the
// NULL handle instead of a path. InitORT therefore takes no library path; the
// fork's SetSharedLibraryPath is a retained no-op.
// NULL handle instead of a path. InitORT therefore takes no library path;
// ragflow never calls SetSharedLibraryPath, so the binding resolves ORT from the
// running binary via dlopen(NULL).
func InitORT() error {
ortOnce.Do(func() {
ortInitErr = ort.InitializeEnvironment()

View File

@@ -84,7 +84,8 @@ uv run python3 ragflow_deps/download_deps.py
> **ONNX Runtime is mandatory for the production binary.** The in-process (Go)
> DeepDoc backend is statically linked against `libonnxruntime.a` via
> `--whole-archive -Wl,--export-dynamic`, and `OrtGetApiBase` is resolved at
> runtime through `dlopen(NULL)`. The forked `onnxruntime_go` binding only
> runtime through `dlopen(NULL)`. The org `onnxruntime_go` binding
> (github.com/infiniflow/onnxruntime_go, the mirror of yalue/onnxruntime_go) only
> needs `-ldl` to *compile*, so a binary built **without** ORT links
> successfully but dies at startup with:
> `Error looking up OrtGetApiBase in statically-linked ONNX Runtime` → fatal