@@ -17,11 +17,6 @@ import type { EmbeddedRunAttemptResult } from "./run/types.js";
|
17 | 17 | |
18 | 18 | let runEmbeddedPiAgent: typeof import("./run.js").runEmbeddedPiAgent; |
19 | 19 | const DEEPSEEK_ERROR_MESSAGE = "429 deepseek rate limit"; |
20 | | -const DEEPSEEK_ASSISTANT_MATCHER = expect.objectContaining({ |
21 | | -provider: "deepseek", |
22 | | -model: "deepseek-chat", |
23 | | -errorMessage: DEEPSEEK_ERROR_MESSAGE, |
24 | | -}); |
25 | 20 | |
26 | 21 | function isCurrentAttemptAssistant( |
27 | 22 | value: unknown, |
@@ -58,6 +53,15 @@ function captureFormattedAssistant() {
|
58 | 53 | return () => lastFormattedAssistant; |
59 | 54 | } |
60 | 55 | |
| 56 | +function expectDeepseekAssistant(value: unknown) { |
| 57 | +if (!isCurrentAttemptAssistant(value)) { |
| 58 | +throw new Error(`Expected DeepSeek assistant, got ${String(value)}`); |
| 59 | +} |
| 60 | +expect(value.provider).toBe("deepseek"); |
| 61 | +expect(value.model).toBe("deepseek-chat"); |
| 62 | +expect(value.errorMessage).toBe(DEEPSEEK_ERROR_MESSAGE); |
| 63 | +} |
| 64 | + |
61 | 65 | function makeCrossProviderFallbackConfig() { |
62 | 66 | return makeModelFallbackCfg({ |
63 | 67 | agents: { |
@@ -77,8 +81,10 @@ async function expectDeepseekFallbackError(
|
77 | 81 | ) { |
78 | 82 | await expect(promise).rejects.toBeInstanceOf(MockedFailoverError); |
79 | 83 | await expect(promise).rejects.toThrow(`deepseek/deepseek-chat: ${DEEPSEEK_ERROR_MESSAGE}`); |
80 | | -expect(mockedIsRateLimitAssistantError).toHaveBeenCalledWith(DEEPSEEK_ASSISTANT_MATCHER); |
81 | | -expect(getLastFormattedAssistant()).toEqual(DEEPSEEK_ASSISTANT_MATCHER); |
| 84 | +expect(mockedIsRateLimitAssistantError).toHaveBeenCalled(); |
| 85 | +const rateLimitCalls = mockedIsRateLimitAssistantError.mock.calls as unknown[][]; |
| 86 | +expectDeepseekAssistant(rateLimitCalls.at(-1)?.[0]); |
| 87 | +expectDeepseekAssistant(getLastFormattedAssistant()); |
82 | 88 | } |
83 | 89 | |
84 | 90 | describe("runEmbeddedPiAgent cross-provider fallback error handling", () => { |
|