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