Files
openclaw/src/image-generation/live-test-helpers.ts
2026-03-17 01:09:58 -07:00

97 lines
2.6 KiB
TypeScript

import type { AuthProfileStore } from "../agents/auth-profiles.js";
import type { OpenClawConfig } from "../config/config.js";
export const DEFAULT_LIVE_IMAGE_MODELS: Record<string, string> = {
google: "google/gemini-3.1-flash-image-preview",
openai: "openai/gpt-image-1",
};
export function parseCaseFilter(raw?: string): Set<string> | null {
const trimmed = raw?.trim();
if (!trimmed || trimmed === "all") {
return null;
}
const values = trimmed
.split(",")
.map((entry) => entry.trim().toLowerCase())
.filter(Boolean);
return values.length > 0 ? new Set(values) : null;
}
export function redactLiveApiKey(value: string | undefined): string {
const trimmed = value?.trim();
if (!trimmed) {
return "none";
}
if (trimmed.length <= 12) {
return trimmed;
}
return `${trimmed.slice(0, 8)}...${trimmed.slice(-4)}`;
}
export function parseCsvFilter(raw?: string): Set<string> | null {
const trimmed = raw?.trim();
if (!trimmed || trimmed === "all") {
return null;
}
const values = trimmed
.split(",")
.map((entry) => entry.trim())
.filter(Boolean);
return values.length > 0 ? new Set(values) : null;
}
export function parseProviderModelMap(raw?: string): Map<string, string> {
const entries = new Map<string, string>();
for (const token of raw?.split(",") ?? []) {
const trimmed = token.trim();
if (!trimmed) {
continue;
}
const slash = trimmed.indexOf("/");
if (slash <= 0 || slash === trimmed.length - 1) {
continue;
}
entries.set(trimmed.slice(0, slash).trim().toLowerCase(), trimmed);
}
return entries;
}
export function resolveConfiguredLiveImageModels(cfg: OpenClawConfig): Map<string, string> {
const resolved = new Map<string, string>();
const configured = cfg.agents?.defaults?.imageGenerationModel;
const add = (value: string | undefined) => {
const trimmed = value?.trim();
if (!trimmed) {
return;
}
const slash = trimmed.indexOf("/");
if (slash <= 0 || slash === trimmed.length - 1) {
return;
}
resolved.set(trimmed.slice(0, slash).trim().toLowerCase(), trimmed);
};
if (typeof configured === "string") {
add(configured);
return resolved;
}
add(configured?.primary);
for (const fallback of configured?.fallbacks ?? []) {
add(fallback);
}
return resolved;
}
export function resolveLiveImageAuthStore(params: {
requireProfileKeys: boolean;
hasLiveKeys: boolean;
}): AuthProfileStore | undefined {
if (params.requireProfileKeys || !params.hasLiveKeys) {
return undefined;
}
return {
version: 1,
profiles: {},
};
}