Skip to content

dsfree2api v0.6.5

Choose a tag to compare

@nyoungo nyoungo released this 09 Oct 01:48

更新内容

工具调用 DSML 方言兼容(解析 / 截断 / 续写)

模型退回 DeepSeek 原生 DSML 标记(<||DSML|| calls> / invoke / parameter)输出工具调用时,解析层此前完全认不出,整段标记连同被截断的正文当普通文本透传,客户端收不到 tool_calls:

  • 新增 internal/openai/dsml.go:正则归一化 1-4 个全/半角竖线的 DSML 标签(calls 转 tool_calls),复用既有 tagged 解析路径;<|DSML|> 半角单竖线变体同样识别
  • DSML 解析优先于 JSON 候选路径,参数内容里形如 [{"name": ...}] 的片段(正被写入的文件数据)不会被抢成假调用;调用名不在请求 tools 清单内时按普通文本返回,避免散文引用被误判
  • 截断兜底:DSML 输出常缺全部闭合标签,invoke 缺闭标签时 body 取到末尾,parameter 缺闭标签时值取到下一个同名开标签或末尾
  • 续写兼容:ToolCallTruncated 识别被截断的 DSML 标记并触发续写;续写指令按 DSML 特化(按原格式补齐闭合标签,参数内容换行按原样输出、不套 JSON 转义)
  • 流式路径不变:DSML 不走增量下发,收尾 Finalize 整体重发(与既有散文路径一致)
  • prompt 指令层保留 JSON 禁令:JSON 仍是保证完整送达的主路径

测试

  • 新增 dsml_test.go 12 个用例:双全角完整/截断样本、单竖线变体、裸 invoke、散文保留、参数内容不被 JSON 抢、未知工具名拒绝、围栏内不解析、归一化映射、截断判定、续写指令、跨轮拼接(含真实换行不被转义)
  • gofmt / go vet / go test -count=1 全绿

版本号提升到 0.6.5。

CI 会附上 linux-amd64 与 windows-amd64 二进制及其 sha256。