





















@@ -3,6 +3,7 @@ import type { OpenClawConfig } from "../../config/config.js";
33import * as mediaStore from "../../media/store.js";
44import * as webMedia from "../../media/web-media.js";
55import * as musicGenerationRuntime from "../../music-generation/runtime.js";
6+import * as fetchTimeout from "../../utils/fetch-timeout.js";
67import * as musicGenerateBackground from "./music-generate-background.js";
78import { createMusicGenerateTool } from "./music-generate-tool.js";
89@@ -103,6 +104,15 @@ vi.mock("../../media/web-media.js", async () => {
103104};
104105});
105106vi.mock("../../music-generation/runtime.js", () => musicGenerationRuntimeMocks);
107+vi.mock("../../utils/fetch-timeout.js", async () => {
108+const actual = await vi.importActual<typeof import("../../utils/fetch-timeout.js")>(
109+"../../utils/fetch-timeout.js",
110+);
111+return {
112+ ...actual,
113+buildTimeoutAbortSignal: vi.fn(actual.buildTimeoutAbortSignal),
114+};
115+});
106116vi.mock("./music-generate-background.js", () => musicGenerateBackgroundMocks);
107117vi.mock("../../tasks/runtime-internal.js", () => taskRuntimeInternalMocks);
108118vi.mock("../../tasks/detached-task-runtime.js", () => taskExecutorMocks);
@@ -128,6 +138,7 @@ function resetMusicGenerateMocks() {
128138mediaStoreMocks.saveMediaBuffer.mockReset();
129139taskRuntimeInternalMocks.listTasksForOwnerKey.mockReset();
130140taskRuntimeInternalMocks.listTasksForOwnerKey.mockReturnValue([]);
141+vi.mocked(fetchTimeout.buildTimeoutAbortSignal).mockClear();
131142taskExecutorMocks.createRunningTaskRun.mockReset();
132143taskExecutorMocks.completeTaskRunByRunId.mockReset();
133144taskExecutorMocks.failTaskRunByRunId.mockReset();
@@ -778,7 +789,7 @@ describe("createMusicGenerateTool", () => {
778789config: asConfig({
779790agents: {
780791defaults: {
781-musicGenerationModel: { primary: "minimax/music-2.6" },
792+musicGenerationModel: { primary: "minimax/music-2.6", timeoutMs: 180_000 },
782793},
783794},
784795tools: { web: { fetch: { ssrfPolicy: { allowRfc2544BenchmarkRange: true } } } },
@@ -802,5 +813,12 @@ describe("createMusicGenerateTool", () => {
802813};
803814expect(loadOptions.requestInit?.signal).toBeInstanceOf(AbortSignal);
804815expect(loadOptions.ssrfPolicy).toEqual({ allowRfc2544BenchmarkRange: true });
816+expect(generateMusicOptions().timeoutMs).toBe(180_000);
817+expect(fetchTimeout.buildTimeoutAbortSignal).toHaveBeenCalledTimes(1);
818+expect(vi.mocked(fetchTimeout.buildTimeoutAbortSignal).mock.calls[0]?.[0]).toMatchObject({
819+operation: "music-generate.reference-fetch",
820+timeoutMs: 30_000,
821+url: "http://198.18.0.153/reference.png",
822+});
805823});
806824});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。