ai-chatbot/lib/ai/ruxa-image-models.ts

88 lines
2.3 KiB
TypeScript

export interface RuxaImageModelPreset {
modelId: string;
displayName: string;
description: string;
supportsVision: boolean;
supportsImageGen: boolean;
capabilities?: Record<string, any>;
defaultParams?: Record<string, any>;
imageGenConfig?: Record<string, any>;
sortOrder: number;
}
export const RUXA_NANO_BANANA_2_MODEL_ID = "google/nano-banana-2";
export const RUXA_NANO_BANANA_PRO_MODEL_ID = "google/nano-banana-pro";
export const RUXA_NANO_BANANA_2_RUNTIME_MODEL_ID = "gemini-3.1-flash-image-preview";
const RUXA_IMAGE_CONFIG = {
maxImages: 1,
supportsSize: true,
supports1K: true,
supports2K: true,
supports4K: true,
supportsPromptExtend: false,
supportsNegativePrompt: false,
supportsWatermark: false,
supportsSeed: false,
creditCostPerImage: 0,
enableLoadingPlaceholder: true,
loadingColor: "blue",
};
export const RUXA_IMAGE_MODEL_PRESETS: RuxaImageModelPreset[] = [
{
modelId: RUXA_NANO_BANANA_2_MODEL_ID,
displayName: "Nano Banana 2「专线」",
description:
"RUXA 专线 Nano Banana 2。支持文生图和图像编辑输入。",
supportsVision: true,
supportsImageGen: true,
defaultParams: {
provider: "ruxa",
endpoint: RUXA_NANO_BANANA_2_RUNTIME_MODEL_ID,
imageSize: "2K",
aspectRatio: "1:1",
},
imageGenConfig: {
...RUXA_IMAGE_CONFIG,
ruxaTaskInputMode: "resolution-based",
},
sortOrder: 10,
},
{
modelId: RUXA_NANO_BANANA_PRO_MODEL_ID,
displayName: "Nano Banana Pro「专线」",
description: "RUXA 专线 Nano Banana Pro。支持文生图和图像编辑输入。",
supportsVision: true,
supportsImageGen: true,
defaultParams: {
provider: "ruxa",
endpoint: "nano-banana-pro",
imageSize: "2K",
aspectRatio: "1:1",
},
imageGenConfig: {
...RUXA_IMAGE_CONFIG,
ruxaTaskInputMode: "resolution-based",
},
sortOrder: 20,
},
];
export function getRuxaImageModelPresetById(modelId: string) {
return RUXA_IMAGE_MODEL_PRESETS.find(
(preset) => preset.modelId === String(modelId || "").trim()
);
}
export function resolveRuxaImageRuntimeModelId(modelId: string) {
const preset = getRuxaImageModelPresetById(modelId);
const endpoint = preset?.defaultParams?.endpoint;
if (typeof endpoint === "string" && endpoint.trim()) {
return endpoint.trim();
}
return modelId;
}