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); }