JianFeeeee
e4111337cd
feat(gateway): /v1/messages 端到端 —— 内核不含任何 Anthropic 出站字段名
Phase 2 收尾。证明「对外协议由适配器决定、内核只调度」不是纸面主张:
Anthropic 客户端打 /v1/messages,拿到的是 Anthropic 形状。
- internal/gateway/messages.go:入向把 Anthropic 请求解析进统一格式
(content blocks 原样保留——只有适配器知道自己的上游接受哪种块类型;
system 支持字符串与 [{type:text,text}] 两种写法)。
调度/配额/AUTO 链/冷却/审计/插件 hook 全部复用 /v1/chat/completions
的同一条路径(serveUnified),差别只有两端线格式。
- internal/lua/adapters/anthropic.lua:新增 serialize_response /
serialize_open_preamble / serialize_chunk / serialize_close,
把统一格式译回 Anthropic Messages 形状(含 content 分块、
stop_reason 反向映射、input/output_tokens 改名)。
- 流式是 message_start → content_block_delta → message_delta →
message_stop;DoneMarker 为空所以内核**不会**擅自加 [DONE]。
内核出向零 Anthropic 字段名:解析是表驱动的,序列化属于适配器。
测试:
- messages_test.go 5 个端到端用例(真实 core+gateway + 只懂 Anthropic 的
假上游):形状/stop_reason/块顺序/usage 命名、流式事件序列、入向校验、
鉴权、以及「未声明钩子时回落 OpenAI 兜底」。
- 修正两个 serializer 测试的前提断言(anthropic 现在确实声明了钩子,
这正是 Phase 2 的意图),并发测试改为按适配器各自校验形状。
golden 字节级未漂移;go test -tags luajit ./... 全绿。
2026-10-11 09:51:27 +08:00
..
2026-10-07 17:37:22 +08:00
2026-10-11 09:51:27 +08:00
2026-09-27 17:12:03 +08:00
2026-10-06 15:02:42 +08:00
2026-10-02 12:55:54 +08:00
2026-10-02 12:55:54 +08:00
2026-08-28 12:02:46 +08:00
2026-10-11 08:17:56 +08:00
2026-10-11 09:35:32 +08:00
2026-09-27 17:12:03 +08:00
2026-10-02 15:44:50 +08:00
2026-10-11 09:51:27 +08:00
2026-10-11 09:51:27 +08:00
2026-10-11 09:51:27 +08:00
2026-10-07 17:37:22 +08:00
2026-10-06 15:02:42 +08:00
2026-10-11 09:51:27 +08:00
2026-10-11 09:51:27 +08:00
2026-09-28 23:42:48 +08:00
2026-10-02 08:47:08 +08:00
2026-10-11 09:51:27 +08:00
2026-09-28 23:42:48 +08:00
2026-09-27 18:44:41 +08:00
2026-09-27 18:44:41 +08:00
2026-09-27 18:44:41 +08:00
2026-09-28 23:42:48 +08:00
2026-10-03 07:45:54 +08:00
2026-08-30 08:04:22 +08:00
2026-10-11 09:51:27 +08:00
2026-10-11 09:51:27 +08:00
2026-09-27 17:12:03 +08:00
2026-10-11 09:51:27 +08:00
2026-10-11 09:51:27 +08:00
2026-10-02 01:03:39 +08:00
2026-10-11 09:51:27 +08:00
2026-10-05 08:17:57 +08:00
2026-10-11 09:51:27 +08:00
2026-10-11 08:57:51 +08:00
2026-10-11 09:51:27 +08:00
2026-10-01 20:36:48 +08:00
2026-10-01 18:15:29 +08:00
2026-10-01 23:37:17 +08:00
2026-10-11 09:51:27 +08:00
2026-10-04 14:50:46 +08:00
2026-10-07 17:37:22 +08:00
2026-08-30 09:29:42 +08:00
2026-10-11 09:51:27 +08:00
2026-10-11 09:51:27 +08:00
2026-10-11 09:35:32 +08:00
2026-09-28 22:19:12 +08:00
2026-10-01 20:36:48 +08:00
2026-10-11 09:51:27 +08:00
2026-10-11 09:51:27 +08:00
2026-10-11 09:51:27 +08:00
2026-10-11 09:51:27 +08:00
2026-09-27 19:02:13 +08:00