
























@@ -44,6 +44,24 @@ const CACHE_BOUNDARY_PROMPT = `Stable prefix${SYSTEM_PROMPT_CACHE_BOUNDARY}Dynam
44444545type PayloadHook = (payload: unknown, payloadModel: unknown) => Promise<unknown>;
464647+function streamAnthropicCall(streamAnthropicMock: ReturnType<typeof vi.fn>): unknown[] {
48+const call = streamAnthropicMock.mock.calls.at(0);
49+if (!call) {
50+throw new Error("Expected streamAnthropic call");
51+}
52+return call;
53+}
54+55+function streamTransportOptions(
56+streamAnthropicMock: ReturnType<typeof vi.fn>,
57+): Record<string, unknown> {
58+const options = streamAnthropicCall(streamAnthropicMock).at(2);
59+if (!options || typeof options !== "object") {
60+throw new Error("Expected streamAnthropic transport options");
61+}
62+return options as Record<string, unknown>;
63+}
64+4765function captureCacheBoundaryPayloadHook(
4866onPayload: PayloadHook,
4967deps: AnthropicVertexStreamDeps,
@@ -64,11 +82,9 @@ function captureCacheBoundaryPayloadHook(
6482} as never,
6583);
668467-const transportOptions = streamAnthropicMock.mock.calls[0]?.[2] as {
68-onPayload?: PayloadHook;
69-};
85+const transportOptions = streamTransportOptions(streamAnthropicMock);
708671-return { model, onPayload: transportOptions.onPayload };
87+return { model, onPayload: transportOptions.onPayload as PayloadHook | undefined };
7288}
73897490function buildExpectedCacheBoundaryPayload(messageText: string) {
@@ -141,10 +157,7 @@ describe("createAnthropicVertexStreamFn", () => {
141157142158void streamFn(model, { messages: [] }, {});
143159144-const transportOptions = streamAnthropicMock.mock.calls[0]?.[2] as
145-| { maxTokens?: number }
146-| undefined;
147-expect(transportOptions?.maxTokens).toBe(128000);
160+expect(streamTransportOptions(streamAnthropicMock).maxTokens).toBe(128000);
148161});
149162150163it("clamps explicit maxTokens to the selected model limit", () => {
@@ -154,10 +167,7 @@ describe("createAnthropicVertexStreamFn", () => {
154167155168void streamFn(model, { messages: [] }, { maxTokens: 999999 });
156169157-const transportOptions = streamAnthropicMock.mock.calls[0]?.[2] as
158-| { maxTokens?: number }
159-| undefined;
160-expect(transportOptions?.maxTokens).toBe(128000);
170+expect(streamTransportOptions(streamAnthropicMock).maxTokens).toBe(128000);
161171});
162172163173it("maps xhigh reasoning to max effort for adaptive Opus models", () => {
@@ -167,11 +177,9 @@ describe("createAnthropicVertexStreamFn", () => {
167177168178void streamFn(model, { messages: [] }, { reasoning: "xhigh" });
169179170-const transportOptions = streamAnthropicMock.mock.calls[0]?.[2] as
171-| { effort?: string; thinkingEnabled?: boolean }
172-| undefined;
173-expect(transportOptions?.thinkingEnabled).toBe(true);
174-expect(transportOptions?.effort).toBe("max");
180+const transportOptions = streamTransportOptions(streamAnthropicMock);
181+expect(transportOptions.thinkingEnabled).toBe(true);
182+expect(transportOptions.effort).toBe("max");
175183});
176184177185it("maps xhigh reasoning to xhigh effort for Opus 4.7", () => {
@@ -181,11 +189,9 @@ describe("createAnthropicVertexStreamFn", () => {
181189182190void streamFn(model, { messages: [] }, { reasoning: "xhigh" });
183191184-const transportOptions = streamAnthropicMock.mock.calls[0]?.[2] as
185-| { effort?: string; thinkingEnabled?: boolean }
186-| undefined;
187-expect(transportOptions?.thinkingEnabled).toBe(true);
188-expect(transportOptions?.effort).toBe("xhigh");
192+const transportOptions = streamTransportOptions(streamAnthropicMock);
193+expect(transportOptions.thinkingEnabled).toBe(true);
194+expect(transportOptions.effort).toBe("xhigh");
189195});
190196191197it("applies Anthropic cache-boundary shaping before forwarding payload hooks", async () => {
@@ -255,7 +261,7 @@ describe("createAnthropicVertexStreamFn", () => {
255261void streamFn(model, { messages: [] }, { maxTokens: Number.NaN });
256262257263expect(streamAnthropicMock).toHaveBeenCalledTimes(1);
258-const [calledModel, payload, transportOptions] = streamAnthropicMock.mock.calls[0] ?? [];
264+const [calledModel, payload, transportOptions] = streamAnthropicCall(streamAnthropicMock);
259265expect(calledModel).toBe(model);
260266expect(payload).toEqual({ messages: [] });
261267expect(transportOptions).toBeTypeOf("object");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。