Repository navigation
dsfree2api v0.6.5
更新内容
工具调用 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.go12 个用例:双全角完整/截断样本、单竖线变体、裸 invoke、散文保留、参数内容不被 JSON 抢、未知工具名拒绝、围栏内不解析、归一化映射、截断判定、续写指令、跨轮拼接(含真实换行不被转义) - gofmt / go vet / go test -count=1 全绿
版本号提升到 0.6.5。
CI 会附上 linux-amd64 与 windows-amd64 二进制及其 sha256。