ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

xberg C FFI:用 xberg_clear_reranker_backend 清空 reranker 后端注册表

xberg C FFI:用 xberg_clear_reranker_backend 清空 reranker 后端注册表 后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载在 xberg一个以 Rust 为核心、提供 15 种语言绑定的多语言文档智能项目中reranking重排序属于查询期操作宿主语言把实现了RerankerBackend的后端注册进全局注册表后xberg 在执行独立 rerank 请求时会回调这些后端而不是走本地 ONNX cross-encoder 或调用 provider API。当宿主进程需要回收、重置或隔离这些运行时注册的后端时C FFI 层提供了xberg_clear_reranker_backend这一入口。读完本篇你将掌握该调用的完整 C 调用示例、返回码与错误字符串契约、底层shutdown_all的尽力best-effort语义以及它在 e2e 测试和插件体系中的定位。场景定位reranker 注册表与其他插件注册表的不同xberg 的提取管线是插件驱动的六类插件DocumentExtractor、OcrBackend、RerankerBackend、PostProcessor、Validator、Renderer各自注册到类型化注册表中见 插件系统设计文档。其中 reranker 注册表有两个显著特点无默认后端与 OCR 注册表不同RerankerBackendRegistry初始化时是空的reranker 后端一律由宿主语言在运行时供给源码注释见 reranker.rs无缓存维度cross-encoder 对每个 (query, document) 对只返回一个标量分数不像 embedding 后端那样有固定长度的向量维度。xberg_clear_reranker_backend的作用就是把这张名字 → 后端的表整体清空——它清空的是注册表里由宿主注册的后端不影响通过配置走本地 ONNX cross-encoder 模型预设或 HTTP LLM 路径的 rerank 流程。完整 C 示例与执行说明仓库中为该场景生成的 C 示例片段clear_reranker_backends.md如下对应操作描述为Clear all reranker backends and verify list is empty清空全部 reranker 后端并验证列表为空#include assert.h #include stdint.h #include stdio.h #include stdlib.h #include string.h #include xberg.h int main(void) { int32_t result xberg_clear_reranker_backend(NULL); assert(result 0 expected call to succeed); return EXIT_SUCCESS; }要点说明xberg_clear_reranker_backend只接受一个参数out_error示例传入NULL表示不需要错误字符串——调用方仅关心返回码返回int32_t0表示清空成功非零实现中为1表示失败该操作是幂等的对空注册表调用 clear 不会出错。底层shutdown_all遍历的是当前注册的后端集合集合为空时直接返回Ok(())因此result 0的断言在从未注册过任何后端和注册过一批后端后再清空两种前提下都成立。对应的测试夹具 clear_reranker_backends.json 将本场景归入reranker_backend_management类别断言类型为not_error只要求调用不产生错误side_effect标记为safe安全、可重复执行。该夹具的元数据中另有一段 C 语言覆盖例外说明由于插件注册表以宿主语言回调为中介C 侧场景在文档覆盖上被标记为精简处理其他语言保留完整示例。FFI 函数契约签名、参数与错误字符串C 头文件 xberg.h 中的声明为int32_t xberg_clear_reranker_backend(char **out_error);out_error参数遵循 xberg C FFI 的通用错误约定由实现注释说明见 lib.rs可为NULL调用方放弃错误文本只看返回码非NULL且调用失败时写入一个堆上分配的 null 结尾 UTF-8 错误字符串调用方一旦取得该字符串即拥有其所有权必须通过xberg_free_string释放。Rust 侧实现lib.rs#[unsafe(no_mangle)] pub unsafe extern C fn xberg_clear_reranker_backend(out_error: *mut *mut std::ffi::c_char) - i32 { catch_ffi_panic(1, || { let registry xberg::plugins::registry::get_reranker_backend_registry(); let mut registry registry.write(); if let Err(e) registry.clear() { unsafe { ffi_set_out_error(out_error, e.to_string()) }; return 1; } 0 }) }调用链可以概括为三步get_reranker_backend_registry()取全局注册表单例——它实现为LazyLockArcRwLockRerankerBackendRegistry见 registry/mod.rs所有 FFI 调用共享同一实例取写锁后调用registry.clear()成功返回0失败时通过ffi_set_out_error填充错误文本并返回1。catch_ffi_panic包裹保证即使内部 panic 也不会跨越 FFI 边界传播而是以非零返回码呈现。底层语义clear() 即 shutdown_all()尽力清理且保证一致性在 reranker.rs 中clear()是shutdown_all()的别名供 alef trait-bridge 代码生成使用其语义值得注意/// Drain the registry. Alias for shutdown_all used by alef trait-bridge codegen. pub fn clear(mut self) - Result() { self.shutdown_all() }shutdown_all的行为契约源码注释与实现每个后端都会被移除无论前面某个后端的shutdown()是否报错注册表最终不会残留半关闭状态的条目保证调用方不会面对不一致的注册表每个后端都会被 shutdown即使某个后端shutdown()失败后续后端的shutdown()仍会被调用错误归并返回第一个遇到的错误后续错误以warn级别日志记录后丢弃。因此从 C 侧看xberg_clear_reranker_backend返回非零只意味着至少一个后端的 shutdown 报错但此时注册表依然已被清空。若调用方需要区分具体原因应传入非NULL的out_error接收首个错误的文本描述。注册端的配套规则也解释了为何清空后重新注册是干净的register()会校验后端名空名或含空白字符返回Validation错误、拒绝重名Plugin错误并在注册时调用后端的initialize()remove(name)按名移除并调用该后端的shutdown()对不存在的名字是空操作见 reranker.rs 的单元测试remove_missing_backend_is_noop。配套 FFI 调用list、register、unregister清空操作通常与确认已清空和重新注册配合使用。同一头文件中相邻的声明包括xberg.hint32_t xberg_register_reranker_backend(...); // 通过 C vtable 桥注册宿主后端 int32_t xberg_unregister_reranker_backend(const char *name, char **out_error); int32_t xberg_clear_reranker_backend(char **out_error); char *xberg_list_reranker_backends(void); // 另有配套 _len 变体 uintptr_t xberg_list_reranker_backends_len(void);典型的 C 侧重置流程调用xberg_clear_reranker_backend返回0后再调用xberg_list_reranker_backends验证列表为空随后按需以 vtable 形式重新注册自定义RerankerBackend其 vtable 含name、version、initialize、shutdown等回调槽位参考 lib.rs 中注册桥的构造逻辑。测试与夹具验证该场景在 Rust e2e 测试中有对应的自动生成用例reranker_backend_management_test.rsuse xberg::{clear_reranker_backends, list_reranker_backends}; #[test] fn test_clear_reranker_backends() { // Clear all reranker backends and verify list is empty clear_reranker_backends().expect(call failed); }Rust 绑定层暴露的clear_reranker_backends()与 C FFI 走同一个注册表入口语义一致。此外注册表自身的单元/集成测试如 reranker.rs 中的shutdown_all_clears_all_backends验证了注册多个后端后shutdown_all确实使list()为空与clear 后列表为空的断言相互印证。适用前提与注意事项该调用只作用于进程内全局 reranker 注册表受RwLock写锁保护对 ONNX cross-encoder 预设模型或配置中的 LLM rerank 路径没有影响返回非零不保证注册表残留——按shutdown_all的契约条目仍会被全部移除失败信息仅描述 shutdown 过程的首个错误非NULL的out_error字符串由调用方负责用xberg_free_string释放防止跨 FFI 边界的内存泄漏由于 C 侧没有与宿主语言回调一一对应的注册对偶完整文档覆盖见夹具元数据说明以 C 作为主要集成语言时建议结合头文件声明与 Rust 侧同名 API 的测试用例一起理解调用契约。小结xberg_clear_reranker_backend是 xberg C FFI 中管理查询期 reranking 能力的总开关一次调用即完成shutdown 全部宿主注册后端 清空注册表且以尽力语义保证部分失败下的一致性。配合xberg_list_reranker_backends验证与xberg_register_reranker_backend重建宿主程序可以安全地在进程生命周期内对 reranker 后端做回收与重置。赞分享后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载相关推荐xberg C FFI 中配置 PaddleOCR 后端language、model_tier 与 model_version 完整实战指南xberg C FFI 中配置 PaddleOCR 后端language、model_tier 与 model_version 完整实战指南 本文围绕 xbe后端AI 应用NLPxberg C FFI 实战用 extract 接口提取 XLSX 电子表格内容xberg C FFI 实战用 extract 接口提取 XLSX 电子表格内容 xberg 以 Rust 为核心实现了多语言文档智能并通过 crates/后端AI 应用NLPxberg C FFI 实战用 force_ocr 强制对每一页 PDF 执行 OCRxberg C FFI 实战用 force_ocr 强制对每一页 PDF 执行 OCR 本篇技术指南基于仓库中的 C 语言示例 ocr_force_all_p后端AI 应用NLP上一篇Fathom Lite数据归档查询工具开发下一篇CANN/Ascend C SIMD API设置Feature map属性创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表