


























@@ -5,6 +5,7 @@ import {
55createAnthropicBetaHeadersWrapper,
66createAnthropicFastModeWrapper,
77createAnthropicServiceTierWrapper,
8+createAnthropicThinkingPrefillWrapper,
89wrapAnthropicProviderStream,
910} from "./stream-wrappers.js";
1011@@ -115,6 +116,55 @@ describe("anthropic stream wrappers", () => {
115116});
116117});
117118119+describe("createAnthropicThinkingPrefillWrapper", () => {
120+function runThinkingPrefillWrapper(payload: Record<string, unknown>): Record<string, unknown> {
121+const wrapper = createAnthropicThinkingPrefillWrapper(((_model, _context, options) => {
122+options?.onPayload?.(payload as never, {} as never);
123+return {} as never;
124+}) as StreamFn);
125+void wrapper({ provider: "anthropic", api: "anthropic-messages" } as never, {} as never, {});
126+return payload;
127+}
128+129+it("removes trailing assistant prefill when extended thinking is enabled", () => {
130+const warn = vi.spyOn(__testing.log, "warn").mockImplementation(() => undefined);
131+const payload = runThinkingPrefillWrapper({
132+thinking: { type: "enabled", budget_tokens: 1024 },
133+messages: [
134+{ role: "user", content: "Return JSON." },
135+{ role: "assistant", content: "{" },
136+],
137+});
138+139+expect(payload.messages).toEqual([{ role: "user", content: "Return JSON." }]);
140+expect(warn).toHaveBeenCalledOnce();
141+});
142+143+it("keeps assistant prefill when thinking is disabled", () => {
144+const payload = runThinkingPrefillWrapper({
145+thinking: { type: "disabled" },
146+messages: [
147+{ role: "user", content: "Return JSON." },
148+{ role: "assistant", content: "{" },
149+],
150+});
151+152+expect(payload.messages).toHaveLength(2);
153+});
154+155+it("keeps trailing assistant tool use turns", () => {
156+const payload = runThinkingPrefillWrapper({
157+thinking: { type: "adaptive" },
158+messages: [
159+{ role: "user", content: "Read a file." },
160+{ role: "assistant", content: [{ type: "tool_use", id: "toolu_1", name: "Read" }] },
161+],
162+});
163+164+expect(payload.messages).toHaveLength(2);
165+});
166+});
167+118168describe("createAnthropicFastModeWrapper", () => {
119169function runFastModeWrapper(params: {
120170apiKey?: string;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。