You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

98 lines
3.0 KiB

import type { ModelType, ProviderEnvStatus, ProviderSettings, ProviderType, SelectedModel } from "@/types";
import { MODEL_DISPLAY_NAMES } from "@/types";
import { isPopiProviderMode } from "@/lib/providerMode";
const NEWAPIWG_DEFAULT_IMAGE_MODEL_ID = "apiyi_nano_banana_2";
const NEWAPIWG_DEFAULT_IMAGE_FALLBACK_MODEL_ID = "gpt-image-2-all";
const NEWAPIWG_DEFAULT_VIDEO_MODEL_ID = "doubao-seedance-2-0-260128";
const DEFAULT_AUDIO_MODEL_ID = "elevenlabs/turbo-v2.5";
export function createNewApiWGDefaultImageModel(): SelectedModel {
return {
provider: "newapiwg",
modelId: NEWAPIWG_DEFAULT_IMAGE_MODEL_ID,
displayName: NEWAPIWG_DEFAULT_IMAGE_MODEL_ID,
capabilities: ["text-to-image", "image-to-image"],
};
}
export function createNewApiWGDefaultImageFallbackModel(): SelectedModel {
return {
provider: "newapiwg",
modelId: NEWAPIWG_DEFAULT_IMAGE_FALLBACK_MODEL_ID,
displayName: NEWAPIWG_DEFAULT_IMAGE_FALLBACK_MODEL_ID,
capabilities: ["text-to-image", "image-to-image"],
};
}
export function isNewApiWGDefaultImageModel(model: SelectedModel): boolean {
return model.provider === "newapiwg" && model.modelId === NEWAPIWG_DEFAULT_IMAGE_MODEL_ID;
}
export function createNewApiWGDefaultVideoModel(): SelectedModel {
return {
provider: "newapiwg",
modelId: NEWAPIWG_DEFAULT_VIDEO_MODEL_ID,
displayName: NEWAPIWG_DEFAULT_VIDEO_MODEL_ID,
capabilities: ["text-to-video", "image-to-video"],
};
}
export function createDefaultAudioModel(): SelectedModel {
return {
provider: "kie",
modelId: DEFAULT_AUDIO_MODEL_ID,
displayName: "ElevenLabs Turbo v2.5",
capabilities: ["text-to-audio"],
};
}
export function createGeminiLegacyImageModel(model: string): SelectedModel {
return {
provider: "gemini",
modelId: model,
displayName: MODEL_DISPLAY_NAMES[model as ModelType] || model,
};
}
function hasProviderCredential(
providerSettings: ProviderSettings,
provider: ProviderType,
providerEnvStatus?: ProviderEnvStatus | null
): boolean {
if (provider === "newapiwg") {
return isPopiProviderMode();
}
return Boolean(
providerSettings.providers[provider]?.apiKey ||
providerEnvStatus?.[provider]
);
}
export function shouldPreferNewApiWGImageModel(
providerSettings: ProviderSettings,
providerEnvStatus?: ProviderEnvStatus | null
): boolean {
if (isPopiProviderMode()) return true;
return hasProviderCredential(providerSettings, "newapiwg", providerEnvStatus);
}
export function shouldPreferNewApiWGVideoModel(
providerSettings: ProviderSettings,
providerEnvStatus?: ProviderEnvStatus | null
): boolean {
if (isPopiProviderMode()) return true;
return hasProviderCredential(providerSettings, "newapiwg", providerEnvStatus);
}
export function createDefaultImageModel(
legacyModel: string,
providerSettings: ProviderSettings,
providerEnvStatus?: ProviderEnvStatus | null
): SelectedModel {
if (shouldPreferNewApiWGImageModel(providerSettings, providerEnvStatus)) {
return createNewApiWGDefaultImageModel();
}
return createGeminiLegacyImageModel(legacyModel);
}