9 Commits
Author SHA1 Message Date
nyoung 7f7ab190aa fix(openai): 解析/截断/续写兼容 DeepSeek DSML 工具调用方言;bump 0.6.5 2026-10-09 09:45:30 +08:00
nyoungo 86492460b0 feat: 工具调用解析、Responses 状态缓存、幂等重放与模型别名
- 重写工具调用解析:XML、DSML 未加引号键、fence 内跳过、参数外溢等形状,并按请求携带的 tools 过滤工具名
- 新增 GET /v1/responses/{id} 与 previous_response_id 有界状态缓存(进程内、TTL、store=false 不写入)
- /v1/chat/completions 支持 Idempotency-Key 幂等回放(1 MiB 上限、24h TTL、并发去重)
- 模型别名与 default_model 降级;错误体统一输出 param/code
- 补 e2e 修复场景与 docs/compat-audit.md 兼容性审计
2026-10-09 00:50:01 +08:00
nyoung 8ecece1572 fix(prompt): 工具指令显式禁止 DSML 标记输出
模型会退回 DeepSeek 原生 DSML 方言(<|DSML|> calls> / invoke /
parameter)代替 JSON 输出工具调用,而网关的流式(extractableToolJSON)、
解析(TryParseToolCalls)、续写(ToolCallTruncated)三层都只认 JSON:
DSML 回复既不会被转成 tool_calls,也不会触发续写,整段标记连同被截断
的正文一起当普通文本透传给客户端。

按既定决策不做 DSML 解析兼容,改为在注入的 TOOL INSTRUCTIONS 中显式
禁止该方言、声明只接受 JSON 格式。三接口共用 BuildPrompt 注入点,
一处改动同时生效。

新增红绿回归测试 TestToolsPromptForbidsDSML(先复现红,加文案后转绿)。
2026-10-08 17:41:28 +08:00
nyoung ed51efd8bc fix: 网关与控制台代码审查修复批次(含回归测试)
- Chat 接口拒绝 n>1(此前静默丢弃多余 choice),返回 400 结构化错误
- Responses 接口透传 text.format(json_schema / json_object),三种接口协议对齐
- TLS 指纹统一升级到 Chrome_150(internal/httpx.DefaultProfile),与 UA 匹配
- metrics 落盘失败不再静默:Save() 返回错误并打日志,临时文件失败会清理
- GET /api/config 脱敏 admin.password 与 turnstile.api_key(控制台从不展示,
  不应随 5s 轮询下发);PUT 改走 ReplaceJSON,先校验后替换、失败回滚
- set_limits / set_turnstile 改指针部分更新:缺字段保持现状,不会把并发、
  限流或求解开关按零值清掉
- 读请求体统一 64MB 上限;配置写盘原子替换 + 0600 权限
- main.go 改为 run() 返回退出码:日志落盘、指标落盘、xray 子进程回收全部
  挂 defer,任何退出路径(含启动失败)都会执行,杜绝孤儿 xray
- proxypool / turnstile / upstream / openai / config / httpx / logbuf 等
  逐项补红绿回归测试,新增 14 个测试文件,race 下全绿
2026-10-08 15:13:23 +08:00
nyoungo 18bf4ee723 feat: stream tool-call arguments progressively instead of buffering 2026-10-08 01:07:10 +08:00
nyoungo a9821d120e fix: accept prose-prefixed tool JSON and heal invalid escape sequences 2026-10-08 01:07:04 +08:00
nyoungo 975882292c feat: force-close truncated tool-call JSON into partial tool calls 2026-10-07 22:41:18 +08:00
nyoungo 413be4ba9e feat: stitch truncated tool-call JSON via multi-round continuation 2026-10-07 20:37:27 +08:00
nyoungo 18b2c04006 initial import
- Go service bridging deepseek.de/es/fr V4 models behind an OpenAI-compatible API
- /v1/chat/completions, /v1/responses, /v1/messages (Anthropic) with tool calling
- web admin console: dashboard, models/sites, keys, proxies, Turnstile, playground, live logs
- Turnstile solvers: solver API / local browser via CDP / manual cookie import
- MIT license, README with screenshots, Dockerfile and Makefile
2026-10-07 15:46:45 +08:00