mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-17 20:21:13 +00:00
refactor: dedupe media generation action helpers
This commit is contained in:
59
src/agents/tools/media-generate-tool-actions-shared.ts
Normal file
59
src/agents/tools/media-generate-tool-actions-shared.ts
Normal file
@@ -0,0 +1,59 @@
|
||||
type MediaGenerateActionResult = {
|
||||
content: Array<{ type: "text"; text: string }>;
|
||||
details: Record<string, unknown>;
|
||||
};
|
||||
|
||||
type TaskStatusTextBuilder<Task> = (task: Task, params?: { duplicateGuard?: boolean }) => string;
|
||||
|
||||
export type { MediaGenerateActionResult };
|
||||
|
||||
export function createMediaGenerateStatusActionResult<Task>(params: {
|
||||
sessionKey?: string;
|
||||
inactiveText: string;
|
||||
findActiveTask: (sessionKey?: string) => Task | undefined;
|
||||
buildStatusText: TaskStatusTextBuilder<Task>;
|
||||
buildStatusDetails: (task: Task) => Record<string, unknown>;
|
||||
}): MediaGenerateActionResult {
|
||||
const activeTask = params.findActiveTask(params.sessionKey);
|
||||
if (!activeTask) {
|
||||
return {
|
||||
content: [{ type: "text", text: params.inactiveText }],
|
||||
details: {
|
||||
action: "status",
|
||||
active: false,
|
||||
},
|
||||
};
|
||||
}
|
||||
return {
|
||||
content: [{ type: "text", text: params.buildStatusText(activeTask) }],
|
||||
details: {
|
||||
action: "status",
|
||||
...params.buildStatusDetails(activeTask),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function createMediaGenerateDuplicateGuardResult<Task>(params: {
|
||||
sessionKey?: string;
|
||||
findActiveTask: (sessionKey?: string) => Task | undefined;
|
||||
buildStatusText: TaskStatusTextBuilder<Task>;
|
||||
buildStatusDetails: (task: Task) => Record<string, unknown>;
|
||||
}): MediaGenerateActionResult | null {
|
||||
const activeTask = params.findActiveTask(params.sessionKey);
|
||||
if (!activeTask) {
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: params.buildStatusText(activeTask, { duplicateGuard: true }),
|
||||
},
|
||||
],
|
||||
details: {
|
||||
action: "status",
|
||||
duplicateGuard: true,
|
||||
...params.buildStatusDetails(activeTask),
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -7,15 +7,13 @@ import {
|
||||
buildMusicGenerationTaskStatusText,
|
||||
findActiveMusicGenerationTaskForSession,
|
||||
} from "../music-generation-task-status.js";
|
||||
import {
|
||||
createMediaGenerateDuplicateGuardResult,
|
||||
createMediaGenerateStatusActionResult,
|
||||
type MediaGenerateActionResult,
|
||||
} from "./media-generate-tool-actions-shared.js";
|
||||
|
||||
type MusicGenerateActionResult = {
|
||||
content: Array<{ type: "text"; text: string }>;
|
||||
details: Record<string, unknown>;
|
||||
};
|
||||
|
||||
function getMusicGenerationProviderAuthEnvVars(providerId: string): string[] {
|
||||
return getProviderEnvVars(providerId);
|
||||
}
|
||||
type MusicGenerateActionResult = MediaGenerateActionResult;
|
||||
|
||||
function summarizeMusicGenerationCapabilities(
|
||||
provider: ReturnType<typeof listRuntimeMusicGenerationProviders>[number],
|
||||
@@ -57,7 +55,7 @@ export function createMusicGenerateListActionResult(
|
||||
};
|
||||
}
|
||||
const lines = providers.map((provider) => {
|
||||
const authHints = getMusicGenerationProviderAuthEnvVars(provider.id);
|
||||
const authHints = getProviderEnvVars(provider.id);
|
||||
const capabilities = summarizeMusicGenerationCapabilities(provider);
|
||||
return [
|
||||
`${provider.id}: default=${provider.defaultModel ?? "none"}`,
|
||||
@@ -76,7 +74,7 @@ export function createMusicGenerateListActionResult(
|
||||
defaultModel: provider.defaultModel,
|
||||
models: provider.models ?? [],
|
||||
modes: listSupportedMusicGenerationModes(provider),
|
||||
authEnvVars: getMusicGenerationProviderAuthEnvVars(provider.id),
|
||||
authEnvVars: getProviderEnvVars(provider.id),
|
||||
capabilities: provider.capabilities,
|
||||
})),
|
||||
},
|
||||
@@ -86,53 +84,22 @@ export function createMusicGenerateListActionResult(
|
||||
export function createMusicGenerateStatusActionResult(
|
||||
sessionKey?: string,
|
||||
): MusicGenerateActionResult {
|
||||
const activeTask = findActiveMusicGenerationTaskForSession(sessionKey);
|
||||
if (!activeTask) {
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: "No active music generation task is currently running for this session.",
|
||||
},
|
||||
],
|
||||
details: {
|
||||
action: "status",
|
||||
active: false,
|
||||
},
|
||||
};
|
||||
}
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: buildMusicGenerationTaskStatusText(activeTask),
|
||||
},
|
||||
],
|
||||
details: {
|
||||
action: "status",
|
||||
...buildMusicGenerationTaskStatusDetails(activeTask),
|
||||
},
|
||||
};
|
||||
return createMediaGenerateStatusActionResult({
|
||||
sessionKey,
|
||||
inactiveText: "No active music generation task is currently running for this session.",
|
||||
findActiveTask: findActiveMusicGenerationTaskForSession,
|
||||
buildStatusText: buildMusicGenerationTaskStatusText,
|
||||
buildStatusDetails: buildMusicGenerationTaskStatusDetails,
|
||||
});
|
||||
}
|
||||
|
||||
export function createMusicGenerateDuplicateGuardResult(
|
||||
sessionKey?: string,
|
||||
): MusicGenerateActionResult | null {
|
||||
const activeTask = findActiveMusicGenerationTaskForSession(sessionKey);
|
||||
if (!activeTask) {
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: buildMusicGenerationTaskStatusText(activeTask, { duplicateGuard: true }),
|
||||
},
|
||||
],
|
||||
details: {
|
||||
action: "status",
|
||||
duplicateGuard: true,
|
||||
...buildMusicGenerationTaskStatusDetails(activeTask),
|
||||
},
|
||||
};
|
||||
return createMediaGenerateDuplicateGuardResult({
|
||||
sessionKey,
|
||||
findActiveTask: findActiveMusicGenerationTaskForSession,
|
||||
buildStatusText: buildMusicGenerationTaskStatusText,
|
||||
buildStatusDetails: buildMusicGenerationTaskStatusDetails,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -7,15 +7,13 @@ import {
|
||||
buildVideoGenerationTaskStatusText,
|
||||
findActiveVideoGenerationTaskForSession,
|
||||
} from "../video-generation-task-status.js";
|
||||
import {
|
||||
createMediaGenerateDuplicateGuardResult,
|
||||
createMediaGenerateStatusActionResult,
|
||||
type MediaGenerateActionResult,
|
||||
} from "./media-generate-tool-actions-shared.js";
|
||||
|
||||
type VideoGenerateActionResult = {
|
||||
content: Array<{ type: "text"; text: string }>;
|
||||
details: Record<string, unknown>;
|
||||
};
|
||||
|
||||
function getVideoGenerationProviderAuthEnvVars(providerId: string): string[] {
|
||||
return getProviderEnvVars(providerId);
|
||||
}
|
||||
type VideoGenerateActionResult = MediaGenerateActionResult;
|
||||
|
||||
function summarizeVideoGenerationCapabilities(
|
||||
provider: ReturnType<typeof listRuntimeVideoGenerationProviders>[number],
|
||||
@@ -61,7 +59,7 @@ export function createVideoGenerateListActionResult(
|
||||
};
|
||||
}
|
||||
const lines = providers.map((provider) => {
|
||||
const authHints = getVideoGenerationProviderAuthEnvVars(provider.id);
|
||||
const authHints = getProviderEnvVars(provider.id);
|
||||
const capabilities = summarizeVideoGenerationCapabilities(provider);
|
||||
return [
|
||||
`${provider.id}: default=${provider.defaultModel ?? "none"}`,
|
||||
@@ -80,7 +78,7 @@ export function createVideoGenerateListActionResult(
|
||||
defaultModel: provider.defaultModel,
|
||||
models: provider.models ?? [],
|
||||
modes: listSupportedVideoGenerationModes(provider),
|
||||
authEnvVars: getVideoGenerationProviderAuthEnvVars(provider.id),
|
||||
authEnvVars: getProviderEnvVars(provider.id),
|
||||
capabilities: provider.capabilities,
|
||||
})),
|
||||
},
|
||||
@@ -90,53 +88,22 @@ export function createVideoGenerateListActionResult(
|
||||
export function createVideoGenerateStatusActionResult(
|
||||
sessionKey?: string,
|
||||
): VideoGenerateActionResult {
|
||||
const activeTask = findActiveVideoGenerationTaskForSession(sessionKey);
|
||||
if (!activeTask) {
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: "No active video generation task is currently running for this session.",
|
||||
},
|
||||
],
|
||||
details: {
|
||||
action: "status",
|
||||
active: false,
|
||||
},
|
||||
};
|
||||
}
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: buildVideoGenerationTaskStatusText(activeTask),
|
||||
},
|
||||
],
|
||||
details: {
|
||||
action: "status",
|
||||
...buildVideoGenerationTaskStatusDetails(activeTask),
|
||||
},
|
||||
};
|
||||
return createMediaGenerateStatusActionResult({
|
||||
sessionKey,
|
||||
inactiveText: "No active video generation task is currently running for this session.",
|
||||
findActiveTask: findActiveVideoGenerationTaskForSession,
|
||||
buildStatusText: buildVideoGenerationTaskStatusText,
|
||||
buildStatusDetails: buildVideoGenerationTaskStatusDetails,
|
||||
});
|
||||
}
|
||||
|
||||
export function createVideoGenerateDuplicateGuardResult(
|
||||
sessionKey?: string,
|
||||
): VideoGenerateActionResult | null {
|
||||
const activeTask = findActiveVideoGenerationTaskForSession(sessionKey);
|
||||
if (!activeTask) {
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: buildVideoGenerationTaskStatusText(activeTask, { duplicateGuard: true }),
|
||||
},
|
||||
],
|
||||
details: {
|
||||
action: "status",
|
||||
duplicateGuard: true,
|
||||
...buildVideoGenerationTaskStatusDetails(activeTask),
|
||||
},
|
||||
};
|
||||
return createMediaGenerateDuplicateGuardResult({
|
||||
sessionKey,
|
||||
findActiveTask: findActiveVideoGenerationTaskForSession,
|
||||
buildStatusText: buildVideoGenerationTaskStatusText,
|
||||
buildStatusDetails: buildVideoGenerationTaskStatusDetails,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user