refactor(agents): share media background task lifecycle

This commit is contained in:
Vincent Koc
2026-04-08 07:24:18 +01:00
parent 2e1ec9653c
commit 363c2bc171
3 changed files with 124 additions and 128 deletions

View File

@@ -27,6 +27,42 @@ export type MediaGenerationTaskHandle = {
taskLabel: string;
};
type CreateMediaGenerationTaskRunParams = {
sessionKey?: string;
requesterOrigin?: DeliveryContext;
prompt: string;
providerId?: string;
};
type RecordMediaGenerationTaskProgressParams = {
handle: MediaGenerationTaskHandle | null;
progressSummary: string;
eventSummary?: string;
};
type CompleteMediaGenerationTaskRunParams = {
handle: MediaGenerationTaskHandle | null;
provider: string;
model: string;
count: number;
paths: string[];
};
type FailMediaGenerationTaskRunParams = {
handle: MediaGenerationTaskHandle | null;
error: unknown;
};
type WakeMediaGenerationTaskCompletionParams = {
config?: OpenClawConfig;
handle: MediaGenerationTaskHandle | null;
status: "ok" | "error";
statusLabel: string;
result: string;
mediaUrls?: string[];
statsLine?: string;
};
export function createMediaGenerationTaskRun(params: {
sessionKey?: string;
requesterOrigin?: DeliveryContext;
@@ -292,3 +328,55 @@ export async function wakeMediaGenerationTaskCompletion(params: {
});
}
}
export function createMediaGenerationTaskLifecycle(params: {
toolName: string;
taskKind: string;
label: string;
queuedProgressSummary: string;
generatedLabel: string;
failureProgressSummary: string;
eventSource: AgentInternalEvent["source"];
announceType: string;
completionLabel: string;
}) {
return {
createTaskRun(runParams: CreateMediaGenerationTaskRunParams): MediaGenerationTaskHandle | null {
return createMediaGenerationTaskRun({
...runParams,
toolName: params.toolName,
taskKind: params.taskKind,
label: params.label,
queuedProgressSummary: params.queuedProgressSummary,
});
},
recordTaskProgress(progressParams: RecordMediaGenerationTaskProgressParams) {
recordMediaGenerationTaskProgress(progressParams);
},
completeTaskRun(completionParams: CompleteMediaGenerationTaskRunParams) {
completeMediaGenerationTaskRun({
...completionParams,
generatedLabel: params.generatedLabel,
});
},
failTaskRun(failureParams: FailMediaGenerationTaskRunParams) {
failMediaGenerationTaskRun({
...failureParams,
progressSummary: params.failureProgressSummary,
});
},
async wakeTaskCompletion(completionParams: WakeMediaGenerationTaskCompletionParams) {
await wakeMediaGenerationTaskCompletion({
...completionParams,
eventSource: params.eventSource,
announceType: params.announceType,
toolName: params.toolName,
completionLabel: params.completionLabel,
});
},
};
}

View File

@@ -1,65 +1,31 @@
import type { OpenClawConfig } from "../../config/config.js";
import type { DeliveryContext } from "../../utils/delivery-context.js";
import { MUSIC_GENERATION_TASK_KIND } from "../music-generation-task-status.js";
import {
completeMediaGenerationTaskRun,
createMediaGenerationTaskRun,
failMediaGenerationTaskRun,
recordMediaGenerationTaskProgress,
wakeMediaGenerationTaskCompletion,
createMediaGenerationTaskLifecycle,
type MediaGenerationTaskHandle,
} from "./media-generate-background-shared.js";
export type MusicGenerationTaskHandle = MediaGenerationTaskHandle;
export function createMusicGenerationTaskRun(params: {
sessionKey?: string;
requesterOrigin?: DeliveryContext;
prompt: string;
providerId?: string;
}): MusicGenerationTaskHandle | null {
return createMediaGenerationTaskRun({
sessionKey: params.sessionKey,
requesterOrigin: params.requesterOrigin,
prompt: params.prompt,
providerId: params.providerId,
toolName: "music_generate",
taskKind: MUSIC_GENERATION_TASK_KIND,
label: "Music generation",
queuedProgressSummary: "Queued music generation",
});
}
const musicGenerationTaskLifecycle = createMediaGenerationTaskLifecycle({
toolName: "music_generate",
taskKind: MUSIC_GENERATION_TASK_KIND,
label: "Music generation",
queuedProgressSummary: "Queued music generation",
generatedLabel: "track",
failureProgressSummary: "Music generation failed",
eventSource: "music_generation",
announceType: "music generation task",
completionLabel: "music",
});
export function recordMusicGenerationTaskProgress(params: {
handle: MusicGenerationTaskHandle | null;
progressSummary: string;
eventSummary?: string;
}) {
recordMediaGenerationTaskProgress(params);
}
export const createMusicGenerationTaskRun = musicGenerationTaskLifecycle.createTaskRun;
export function completeMusicGenerationTaskRun(params: {
handle: MusicGenerationTaskHandle | null;
provider: string;
model: string;
count: number;
paths: string[];
}) {
completeMediaGenerationTaskRun({
...params,
generatedLabel: "track",
});
}
export const recordMusicGenerationTaskProgress = musicGenerationTaskLifecycle.recordTaskProgress;
export function failMusicGenerationTaskRun(params: {
handle: MusicGenerationTaskHandle | null;
error: unknown;
}) {
failMediaGenerationTaskRun({
...params,
progressSummary: "Music generation failed",
});
}
export const completeMusicGenerationTaskRun = musicGenerationTaskLifecycle.completeTaskRun;
export const failMusicGenerationTaskRun = musicGenerationTaskLifecycle.failTaskRun;
export async function wakeMusicGenerationTaskCompletion(params: {
config?: OpenClawConfig;
@@ -70,17 +36,5 @@ export async function wakeMusicGenerationTaskCompletion(params: {
mediaUrls?: string[];
statsLine?: string;
}) {
await wakeMediaGenerationTaskCompletion({
config: params.config,
handle: params.handle,
status: params.status,
statusLabel: params.statusLabel,
result: params.result,
mediaUrls: params.mediaUrls,
statsLine: params.statsLine,
eventSource: "music_generation",
announceType: "music generation task",
toolName: "music_generate",
completionLabel: "music",
});
await musicGenerationTaskLifecycle.wakeTaskCompletion(params);
}

View File

@@ -1,65 +1,31 @@
import type { OpenClawConfig } from "../../config/config.js";
import type { DeliveryContext } from "../../utils/delivery-context.js";
import { VIDEO_GENERATION_TASK_KIND } from "../video-generation-task-status.js";
import {
completeMediaGenerationTaskRun,
createMediaGenerationTaskRun,
failMediaGenerationTaskRun,
recordMediaGenerationTaskProgress,
wakeMediaGenerationTaskCompletion,
createMediaGenerationTaskLifecycle,
type MediaGenerationTaskHandle,
} from "./media-generate-background-shared.js";
export type VideoGenerationTaskHandle = MediaGenerationTaskHandle;
export function createVideoGenerationTaskRun(params: {
sessionKey?: string;
requesterOrigin?: DeliveryContext;
prompt: string;
providerId?: string;
}): VideoGenerationTaskHandle | null {
return createMediaGenerationTaskRun({
sessionKey: params.sessionKey,
requesterOrigin: params.requesterOrigin,
prompt: params.prompt,
providerId: params.providerId,
toolName: "video_generate",
taskKind: VIDEO_GENERATION_TASK_KIND,
label: "Video generation",
queuedProgressSummary: "Queued video generation",
});
}
const videoGenerationTaskLifecycle = createMediaGenerationTaskLifecycle({
toolName: "video_generate",
taskKind: VIDEO_GENERATION_TASK_KIND,
label: "Video generation",
queuedProgressSummary: "Queued video generation",
generatedLabel: "video",
failureProgressSummary: "Video generation failed",
eventSource: "video_generation",
announceType: "video generation task",
completionLabel: "video",
});
export function recordVideoGenerationTaskProgress(params: {
handle: VideoGenerationTaskHandle | null;
progressSummary: string;
eventSummary?: string;
}) {
recordMediaGenerationTaskProgress(params);
}
export const createVideoGenerationTaskRun = videoGenerationTaskLifecycle.createTaskRun;
export function completeVideoGenerationTaskRun(params: {
handle: VideoGenerationTaskHandle | null;
provider: string;
model: string;
count: number;
paths: string[];
}) {
completeMediaGenerationTaskRun({
...params,
generatedLabel: "video",
});
}
export const recordVideoGenerationTaskProgress = videoGenerationTaskLifecycle.recordTaskProgress;
export function failVideoGenerationTaskRun(params: {
handle: VideoGenerationTaskHandle | null;
error: unknown;
}) {
failMediaGenerationTaskRun({
...params,
progressSummary: "Video generation failed",
});
}
export const completeVideoGenerationTaskRun = videoGenerationTaskLifecycle.completeTaskRun;
export const failVideoGenerationTaskRun = videoGenerationTaskLifecycle.failTaskRun;
export async function wakeVideoGenerationTaskCompletion(params: {
config?: OpenClawConfig;
@@ -70,17 +36,5 @@ export async function wakeVideoGenerationTaskCompletion(params: {
mediaUrls?: string[];
statsLine?: string;
}) {
await wakeMediaGenerationTaskCompletion({
config: params.config,
handle: params.handle,
status: params.status,
statusLabel: params.statusLabel,
result: params.result,
mediaUrls: params.mediaUrls,
statsLine: params.statsLine,
eventSource: "video_generation",
announceType: "video generation task",
toolName: "video_generate",
completionLabel: "video",
});
await videoGenerationTaskLifecycle.wakeTaskCompletion(params);
}