Releases: yinvoke/foxlet-translate
Release list
Foxlet Translate 0.5.0:重写分句器,AAR 缩小 25.75%
Foxlet Translate 0.5.0:重写分句器,AAR 缩小 25.75%
本次升级主要优化多语言分句与 Android 发行体积,并整理开发目录、补充 Maven 发布能力。继续沿用 0.4.0 的 Foxlet 客户端 API,现有接入代码无需因公开接口变化而迁移。
重写分句器,改善多语言和混合文本处理
用自有 C++ UTF-8 分句器替换 ssplit-cpp 与 PCRE2,基于 Unicode 17 句界属性处理文本,将常用缩写规则直接编译进代码,移除随包分发的 Moses 前缀文件。
重点完善以下场景:
- 中文、日文:无空格连续文本、句末标点与引号,以及夹杂英文缩写的混合文本。
- 英文及混合文本:缩写、网址、数字和计量表达,避免把
sq. ft、cu. ft等短语中的句点当成句末。 - 俄文:面积、体积、长度、马力、金额与数量缩写,例如
кв.、куб.、пог.;区分см.的“厘米”和“参见”上下文,并处理缩写本身位于句末的情况。 - 韩文及通用 Unicode 文本:完善语言标点、引述、组合字符与 Unicode 空白处理。仍支持调用方提供自定义 UTF-8 缩写表。
在相同方法的 11 套 UD 测试语料、20,877 句上,句界识别 micro-F1 从 94.67% 提升到 96.08%。例如英文 EWT 为 73.98% → 80.80%、日文 GSD 为 96.17% → 98.29%、俄文 SynTagRus 为 97.83% → 99.46%。这是分句质量指标;韩语两个测试集各增加一个误切边界,完整结果保留在版本报告。
裁剪 Android 依赖,发行 AAR 缩小 25.75%
按两个正式 Release 附件压缩后的实际大小比较:
| 发行 AAR | 大小 |
|---|---|
| v0.4.0 | 3,784,263 字节(3.784 MB) |
| v0.5.0 | 2,809,936 字节(2.810 MB) |
| 减少 | 974,327 字节,约 974.3 KB(25.75%) |
体积缩减主要来自分句器及其依赖替换,以及 Android 端移除 SentencePiece 训练库。词表加载、分词和解码功能保留;仓库中的训练源码与主机工具能力也保留。裁剪前后归档的 10,120 条主机译文输出完全一致。
本版统一为一个 AAR,不再分“默认版”和 no-prefixes 版。AAR 不包含模型权重;首次使用仍需下载对应模型。MB、KB 均按十进制计算。
整理开发目录与验证工具
native/jni/集中 JNI 桥接代码,native/sentence/放置自有分句器。sdk-example/提供消费最终 AAR、启用 R8 的接入示例。benchmark/app/放置基准应用,benchmark/data/统一保存版本基准、历史协议和原始结果。docs/集中接入、API、架构与构建发布文档,新增英文 README。- 新增分句规则测试、语料评分与基准报告生成工具;报告从归档生成,调整展示无需重新跑设备。
Maven 接入与发布状态
新增 Maven 发布配置,坐标为 io.github.yinvoke:foxlet-translate:0.5.0,包含 AAR、POM、Gradle 模块元数据、Kotlin 源码包和 Dokka API 文档包。Maven 元数据声明 Kotlin 与协程依赖,方便通过 Gradle 管理 SDK。
0.5.0 的 GitHub 附件已发布;Maven Central 正在补发,当前尚不可从 Central 解析。 完成账号、命名空间和签名配置后,复用已验收的同一 AAR 上传;可下载后会更新本公告和接入文档。目前可直接使用下方 AAR。
性能与兼容性说明
本次可量化的主要收益是 AAR 体积缩减和分句质量改善。归档中相对 0.3.0 的同协议原生热态速度变化为 −0.2%~+6.6%,多数场景接近;它不是与 0.4.0 的速度对比,也不足以说明整体推理提速。
- 公开 JVM API 签名与 0.4.0 一致;从 0.3.x 升级仍需迁移调用代码。
prefixLanguages表示内置缩写规则覆盖范围,当前为en/de/fr/es/pt/it/ru/tr/zh/ja/ko,不代表翻译模型支持的语向。nonbreakingPrefixes = false关闭缩写规则,仍保留 Unicode 和语言标点处理。分句变化可能改变组批与译文,不保证逐句复现旧版输出。- App 标准基准仅完成 8/18 个进程;补充 AAR 回测有四项波动超限;原生译文哈希变化仍记为检查失败。完整数据和限制见版本归档。
普通 CI 和正式发行流程均已通过;最终 R8 示例 APK 已在 Android 16 ARM64 模拟器完成模型下载、翻译、模型管理和生命周期验收,结果及 APK SHA-256 见 device-result.json。模拟器验收用于功能验证。
下载
- foxlet-v0.5.0.aar:统一 Android SDK,Android 9+、arm64-v8a。
- foxlet-sdk-example-v0.5.0.apk:模型管理与离线翻译示例,使用开发签名。
- SHA256SUMS:附件校验值;许可、源码来源和设备验收记录一并提供。
v0.4.0
0.4.0 统一 Android SDK 的模型管理与翻译 API。应用创建一个 Foxlet 客户端,通过 models 准备、下载、验证和清理模型,通过 translator 翻译并管理内存驻留。
本次发布采用统一后的 API,不保留旧入口。发行附件由同一提交构建;发布流程要求构建与 Android 设备验收通过,设备结果见随包的 device-result.json。
本次 Android 功能验收使用 Android 15 / API 35 的 ARM64 模拟器。该结果不作为真机性能结论;历史设备基准的版本和口径保持原有标注。
破坏性迁移
本版不保留旧接口或兼容别名,宿主必须更新调用代码并重新编译:
FoxletEngine/BergamotEngine、EngineConfig、ModelCatalog、ThreadTuning、NonbreakingPrefixes旧公开入口移除。Foxlet.create(context, config)与等价 DSL 统一配置目录、模型来源、网络参数、线程和驻留策略。prepare、download、findUsable返回同一种InstalledModel,可直接传给翻译、验证和删除。- 关闭统一使用挂起式
shutdown;状态查询和模型卸载也使用 suspend,不再向应用暴露 Closeable/Future 生命周期接口。 - 耗时操作统一使用协程,业务失败使用结构化异常;取消保持
CancellationException。
模型与翻译
prepare优先使用本地最新可用模型,缺少时下载内置版本;LocalOnly明确禁止联网。- 下载、续传、重试和本地复用共享结构化进度;
Ready只在校验与安装完成后发出。 - 更新报告中的
ModelUpdate.target非空,可以直接下载该精确版本。查询更新不会自动下载或删除模型。 - 安装验证区分未检查、已验证、损坏、无法核验;删除与清理报告实际释放字节和部分失败。
- 单字符串、列表和中转翻译共享
LocalModel、TextFormat;空列表不加载模型。 Threading.Fixed/Auto与ModelRetention.Idle/AfterRequest/UntilShutdown代替分散的配置入口和魔法数。- 关闭协调客户端操作,等待不可中断的 native 批次结束;未确认释放的模型仍受磁盘占用保护。
- Demo、基准工具和设备测试已迁移到新 API;保留既有模型身份算法、安装目录与 manifest 格式。
同进程仍只允许一个活动客户端,同一模型目录由单个应用进程管理。索引来源使用 HTTPS、SHA-256 和大小校验,尚未实现 Remote Settings 集合签名验证。翻译文本留在设备上;HTML 处理仍为实验能力。
发行构件
foxlet-v0.4.0.aar:默认 SDK,含 25 种语言的分句前缀表。foxlet-v0.4.0-no-prefixes.aar:不含 LGPL-2.1 分句前缀数据,与默认版二选一。foxlet-demo-v0.4.0.apk:Demo,使用开发签名。SHA256SUMS、许可文本与device-result.json:构件校验、来源和最终 APK 的设备验证记录。
支持 Android 9+、arm64-v8a;AAR 不携带模型权重、FLORES-200 语料或协程的传递依赖。发行门禁包括 JVM 回归、新 API 签名与旧入口移除检查、R8 消费者、产物检查和真实 Android 翻译/模型管理测试。没有新增推理性能结论。
v0.2.0
本次更新集中在移动端芯片适配、推理性能与内存管理。
相比 v0.1.0,小米 10 英→中默认单 worker 实测:首次翻译 7.21 → 4.74 秒(−34%),峰值 RSS 323 → 182 MiB(−44%)。同模型、200 句语料、相同参数,三轮独立进程中位数。
- 计算提速:新增 i8mm SMMLA 内核、复用权重打包缓存,并优化 attention 小矩阵乘;不支持 i8mm 的设备自动回退 ruy。
- 内存降低:embedding 保持 int8,输入按行反量化,输出层复用同一张表。
- 释放修复:模型与线程缓存可真正释放,并修复多 worker 加载时模型字节被提前释放的问题。
- 回归验证:覆盖小米 10 / 12 / 14;基准测试集扩充至 200 句。
完整基准与复现方法。上述数据为原生引擎测试,首次翻译含模型加载,不是 app PSS。
升级注意:releaseAllModels() 现返回 Future<Boolean>,可确认释放是否完成;升级 AAR 后需重新编译调用方,不要在主线程等待结果。
构件:bergamot-v0.2.0.aar(arm64-v8a,Android 9+)。
v0.1.0
Full Changelog: https://github.com/yinvoke/bergamot-android/commits/v0.1.0
