





























@@ -276,6 +276,12 @@ function resolveGatewayLiveAgentWaitTimeoutMs(
276276return Math.max(1_000, Math.min(modelTimeoutMs, Math.floor(agentRunTimeoutMs + waitGraceMs)));
277277}
278278279+function resolveGatewayLiveProviderTimeoutSeconds(
280+modelTimeoutMs = GATEWAY_LIVE_MODEL_TIMEOUT_MS,
281+): number {
282+return Math.max(1, Math.ceil(modelTimeoutMs / 1_000));
283+}
284+279285function isGatewayLiveProbeTimeout(error: string): boolean {
280286return /probe timeout after \d+ms/i.test(error);
281287}
@@ -752,6 +758,12 @@ describe("resolveGatewayLiveAgentWaitTimeoutMs", () => {
752758});
753759});
754760761+describe("resolveGatewayLiveProviderTimeoutSeconds", () => {
762+it("matches provider timeout config to the harness model budget", () => {
763+expect(resolveGatewayLiveProviderTimeoutSeconds(180_001)).toBe(181);
764+});
765+});
766+755767describe("formatGatewayLiveAgentWaitFailure", () => {
756768it("includes terminal attribution fields without requiring transcript text", () => {
757769expect(
@@ -1161,6 +1173,28 @@ describe("buildLiveGatewayConfig", () => {
1161117311621174expect(cfg.models?.providers?.google?.models?.[0]?.contextWindow).toBe(128_000);
11631175});
1176+1177+it("keeps live provider request timeout aligned with the harness model budget", () => {
1178+const cfg = buildLiveGatewayConfig({
1179+cfg: {
1180+models: {
1181+providers: {
1182+google: {
1183+api: "google-generative-ai",
1184+baseUrl: "https://generativelanguage.googleapis.com",
1185+models: [],
1186+timeoutSeconds: 30,
1187+},
1188+},
1189+},
1190+},
1191+candidates: [createGatewayLiveTestModel("google", "gemini-3.1-pro-preview")],
1192+});
1193+1194+expect(cfg.models?.providers?.google?.timeoutSeconds).toBeGreaterThanOrEqual(
1195+Math.ceil(GATEWAY_LIVE_MODEL_TIMEOUT_MS / 1_000),
1196+);
1197+});
11641198});
1165119911661200describe("enterProductionEnvForLiveRun", () => {
@@ -2104,6 +2138,10 @@ function mergeLiveProviderConfig(params: {
21042138 ...params.base,
21052139api: params.base?.api ?? params.discovered.api,
21062140baseUrl: params.base?.baseUrl ?? params.discovered.baseUrl,
2141+timeoutSeconds: Math.max(
2142+params.base?.timeoutSeconds ?? 0,
2143+params.discovered.timeoutSeconds ?? 0,
2144+),
21072145models: [...mergedModels.values()],
21082146};
21092147}
@@ -2120,6 +2158,7 @@ function buildLiveProviderConfigs(candidates: Array<Model>): Record<string, Mode
21202158providers[model.provider] = {
21212159api: model.api as ModelProviderConfig["api"],
21222160baseUrl: model.baseUrl,
2161+timeoutSeconds: resolveGatewayLiveProviderTimeoutSeconds(),
21232162models: [toLiveModelConfig(model)],
21242163};
21252164}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。