Pull Request已成功合入, 合并人@linhan
(感谢 写代码啥时候能换包餐巾纸啊 的贡献)smartserve_api.cpp (line 369) 直接以 std::ios::trunc 打开派生出的 models.json,会跟随符号链接。直到 smartserve_api.cpp (line 383) 才调用新增的符号链接检查
这会造成任意可写目标文件被覆盖,以及“API 返回失败但配置已经生效”的状态不一致。
SMART_SERVE_MODEL_DIR 分支的派生路径同样未做符号链接防护,风险不限于 /tmp 默认路径。


此处将 SMART_SERVE_SOURCE_DIR/config/model_config/models.json 作为唯一默认来源,而该宏由 CMake 固化为构建时源码目录;SDK 安装规则并未安装该配置文件。
后果包括:
- 安装或移动 SDK 后默认配置通常不存在;
- 测试在源码树中运行,因此无法发现打包场景故障;
应改为真实安装/应用资源路径,或者非 OpenHarmony 默认返回空路径并明确要求调用方配置绝对路径。相关文档仍声称会自动发现平台路径和相对默认路径:core.h (line 435)、cross_platform_binary_build_guide.md (line 100),需要同步更新。


changed this line on 7ec8b623 view diff detail
GetModelConfigPathDoesNotDiscoverWorkingDirectoryConfig 修改了进程级当前目录和环境变量。如果中间的文件系统操作抛出异常,恢复代码不会执行,后续同一测试进程中的用例可能级联失败。建议复用 API 测试中的状态守卫模式。


SetEnvModelDir() (line 294) 没有检查绝对路径,因此:
GewuSmartServeSetModelsDirectory("models") // 返回 OK
随后 SetModelsConfigJson() (line 353) 使用模型目录的父目录生成配置路径:
path("models").parent_path() / "models.json"
结果是相对的 models.json,并在 smartserve_api.cpp (line 363) 返回 INVALID_ARGUMENT。
新增测试甚至明确固化了这一行为:gewu_smartserve_api_test.cpp (line 389)
此外,公共 Gewu API 已声明 modelsDir 应是绝对路径:core.h (line 520)。因此更一致的修复是:
SetEnvModelDir()直接拒绝相对路径;- 成功时保存规范化后的绝对路径;
- 补充“相对模型目录被拒绝”的 API 测试。
这样既符合公开接口约定,也不会出现前一个 API 返回成功、后一个关联 API 才失败的延迟错误。


ResolveExplicitModelConfigPath 将以下情况全部压缩成一个 false
- 相对路径;
- 文件不存在;
- 符号链接;
- 非普通文件;
- canonical() 失败。
随后 GetModelConfigPath() 统一返回空串,没有保留失败原因, LoadModels() 只能输出 No trusted model config source is available; keeping the previous model state 无法判断是未配置还是显式配置错误。
建议不要简单地在 GetModelConfigPath() 每次调用时打印日志,容易重复刷屏。更合适的是:
返回结构化结果,例如路径、状态和拒绝原因;或
增加带错误原因的解析接口;
在服务初始化/重载入口记录一次明确错误,如“路径不存在”“不允许相对路径”“拒绝符号链接”。
如果担心泄露部署目录,可以只记录环境变量名称和拒绝原因,或者对路径做脱敏。


changed this line on f7d69b07 view diff detail
已修复
CachedConfigJsonDoesNotReloadRelativePathFromWorkingDirectory 使用 RAII guard(推荐模式),另两个新增测试用手动恢复 env/cwd,异常路径下可能污染全局状态。建议统一为 RAII。


PR 描述缺少非 OpenHarmony 平台下的模型配置迁移说明
本次变更移除了非 OpenHarmony 对源码树和当前工作目录中 models.json 的自动发现。升级后,Linux/macOS 等直接构建的 smartserve_chatbox_cli 和 smartserve_http_server 必须在运行前显式设置 MODEL_CONFIG_PATH,且路径必须是绝对、普通、非符号链接文件;否则程序无法加载任何模型。
SDK 使用者可以改为调用 GewuSmartServeSetModelsConfigPath() 或 GewuSmartServeSetModelsConfigJson(),但直接运行二进制目前没有对应命令行参数,只能通过环境变量配置。OpenHarmony 系统服务仍保留 /data/local/tmp/models.json 默认路径。
这是用户可见的破坏性部署变更,建议在 PR 描述中明确描述变更。


删除工作目录下隐式 models.json 搜索。
显式配置路径必须是绝对路径、普通文件且不能是符号链接。
internal 84/84、API 35/35 通过。