一个基于 Flutter 的本地 AI 模型加载与对话实验项目,目标是把 LLM、Embedding、OCR、STT、TTS 这几类能力统一到同一个 app 壳层里,在移动端和桌面端提供一致的加载、测试和对话体验。
当前仓库根目录为 /Users/sanbo/Desktop/loadmodel,不再使用旧的 model_loader/ 子目录结构。
flutter analyze通过flutter test通过,当前基线453/453flutter build apk --debug通过flutter build ios --release --no-codesign通过- app 端已经补上
AppShell级主链路测试,覆盖“加载 LLM -> 切到对话页 -> 发送消息 -> 收到回复”
更完整的执行基线、真机验证记录和开发黑名单见 CLAUDE.md。
lib/app/: 启动引导、MaterialApp 和导航壳层lib/pages/: 加载页、对话页、测试页、状态页、设置页等 UI 页面lib/runtime/: LLM、ONNX、stub 等运行时封装lib/core/: 配置、任务调度、模型管理、对话控制等核心逻辑lib/models/: 模型定义、推理事件、共享配置目录test/: 单元测试和 Widget 测试integration_test/: 集成测试android/,ios/,macos/: 原生桥接与平台工程
./restore_models.sh
./restore_llama_cpp.sh
flutter pub get
flutter analyze
flutter test -r compact
flutter build apk --debug
flutter build ios --release --no-codesign推荐串行执行 flutter 命令,不要并发跑 analyze、test、build。
- 仓库提交的是
assets/models_archive/下的分片包,不直接提交解压后的assets/models/ - 当前分片规则是
49MB一片,归档名为assets_models.tar.gz - 恢复模型目录:
./restore_models.sh - 重新打包模型目录:
./pack_models.sh assets/models/已加入.gitignore,本地解压后不会被误提交
- 仓库提交的是
third_party/llama_cpp_archive/下的分片包,不直接提交解压后的third_party/llama.cpp/ - 当前分片规则也是
49MB一片,归档名为third_party_llama_cpp.tar.gz - 恢复源码目录:
./restore_llama_cpp.sh - 重新打包源码目录:
./pack_llama_cpp.sh third_party/llama.cpp/已加入.gitignore,本地解压后不会被误提交
如果你是新克隆仓库,先执行 ./restore_models.sh 和 ./restore_llama_cpp.sh,再跑 Flutter 的测试和构建。
- 移动端 LLM 已切换到 MethodChannel + 原生 bridge,不再依赖本地 HTTP 服务
- 桌面端 LLM 默认走
llama.cpp - 设置页支持保存模型、温度、上下文长度和系统提示词
- 对话页支持流式回复、错误展示和清空对话
- app 端测试已覆盖 4 个内置 LLM 选项的加载与对话主流程
- Android / iOS 的 OCR、STT 还没有真正完成生产级推理链路
- TTS 仍未实现
- 覆盖率还没到发布级
- Windows / Linux 的桌面能力还需要继续补齐
assets/models/已改成压缩包分片提交,当前为58个分片文件加一个sha256校验文件third_party/llama.cpp/也应走同样的分片归档提交流程,不要直接提交解压后的源码目录- 如果要推到新的 GitHub 仓库,建议先明确大文件策略:
git-lfs、外部下载脚本,或者恢复为子模块/外部依赖
否则代码本身没问题,远端推送也可能直接失败。