





















@@ -817,6 +817,75 @@ describe("runEmbeddedPiAgent incomplete-turn safety", () => {
817817expectWarnMessageWith("empty response detected");
818818});
819819820+it("retries empty Anthropic-compatible stop turns even when the provider is not Kimi", async () => {
821+mockedClassifyFailoverReason.mockReturnValue(null);
822+mockedResolveModelAsync.mockResolvedValue({
823+model: {
824+id: "claude-opus-4-7",
825+provider: "sub2api",
826+contextWindow: 200000,
827+api: "anthropic-messages",
828+},
829+error: null,
830+authStorage: {
831+setRuntimeApiKey: vi.fn(),
832+},
833+modelRegistry: {},
834+});
835+mockedRunEmbeddedAttempt.mockResolvedValueOnce(
836+makeAttemptResult({
837+assistantTexts: [],
838+lastAssistant: {
839+role: "assistant",
840+api: "anthropic-messages",
841+stopReason: "stop",
842+provider: "sub2api",
843+model: "claude-opus-4-7",
844+content: [],
845+usage: {
846+input: 2048,
847+output: 3100,
848+cacheRead: 0,
849+cacheWrite: 0,
850+totalTokens: 5148,
851+},
852+} as unknown as EmbeddedRunAttemptResult["lastAssistant"],
853+}),
854+);
855+mockedRunEmbeddedAttempt.mockResolvedValueOnce(
856+makeAttemptResult({
857+assistantTexts: ["Visible Anthropic-compatible answer."],
858+lastAssistant: {
859+role: "assistant",
860+api: "anthropic-messages",
861+stopReason: "stop",
862+provider: "sub2api",
863+model: "claude-opus-4-7",
864+content: [{ type: "text", text: "Visible Anthropic-compatible answer." }],
865+usage: {
866+input: 2300,
867+output: 8,
868+cacheRead: 0,
869+cacheWrite: 0,
870+totalTokens: 2308,
871+},
872+} as unknown as EmbeddedRunAttemptResult["lastAssistant"],
873+}),
874+);
875+876+await runEmbeddedPiAgent({
877+ ...overflowBaseRunParams,
878+provider: "sub2api",
879+model: "claude-opus-4-7",
880+runId: "run-empty-anthropic-compatible-stop-continuation",
881+});
882+883+expect(mockedRunEmbeddedAttempt).toHaveBeenCalledTimes(2);
884+const secondCall = runAttemptCall(1);
885+expect(secondCall.prompt).toContain(EMPTY_RESPONSE_RETRY_INSTRUCTION);
886+expectWarnMessageWith("empty response detected");
887+});
888+820889it("surfaces an error after exhausting empty-response retries", async () => {
821890mockedClassifyFailoverReason.mockReturnValue(null);
822891mockedRunEmbeddedAttempt.mockResolvedValue(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。