prmbr-image-mksaas/src/ai/image/lib/provider-config.ts

107 lines
3.4 KiB
TypeScript

export type ProviderKey = 'replicate' | 'openai' | 'fireworks' | 'fal';
export type ModelMode = 'performance' | 'quality';
export const PROVIDERS: Record<
ProviderKey,
{
displayName: string;
iconPath: string;
color: string;
models: string[];
}
> = {
// https://ai-sdk.dev/providers/ai-sdk-providers/replicate#image-models
// replicate: {
// displayName: 'Replicate',
// iconPath: '/provider-icons/replicate.svg',
// color: 'from-purple-500 to-blue-500',
// models: [
// 'black-forest-labs/flux-1.1-pro',
// 'black-forest-labs/flux-1.1-pro-ultra',
// 'black-forest-labs/flux-dev',
// 'black-forest-labs/flux-pro',
// 'black-forest-labs/flux-schnell',
// 'ideogram-ai/ideogram-v2',
// 'ideogram-ai/ideogram-v2-turbo',
// 'luma/photon',
// 'luma/photon-flash',
// 'recraft-ai/recraft-v3',
// // 'recraft-ai/recraft-v3-svg', // added by Fox
// // 'stability-ai/stable-diffusion-3.5-medium', // added by Fox
// 'stability-ai/stable-diffusion-3.5-large',
// 'stability-ai/stable-diffusion-3.5-large-turbo',
// ],
// },
// https://ai-sdk.dev/providers/ai-sdk-providers/openai#image-models
// openai: {
// displayName: 'OpenAI',
// iconPath: '/provider-icons/openai.svg',
// color: 'from-blue-500 to-cyan-500',
// models: [
// // 'gpt-image-1', // added by Fox
// 'dall-e-2',
// 'dall-e-3',
// ],
// },
// https://ai-sdk.dev/providers/ai-sdk-providers/fireworks#image-models
// fireworks: {
// displayName: 'Fireworks',
// iconPath: '/provider-icons/fireworks.svg',
// color: 'from-orange-500 to-red-500',
// models: [
// 'accounts/fireworks/models/flux-1-dev-fp8',
// 'accounts/fireworks/models/flux-1-schnell-fp8',
// 'accounts/fireworks/models/playground-v2-5-1024px-aesthetic',
// 'accounts/fireworks/models/japanese-stable-diffusion-xl',
// 'accounts/fireworks/models/playground-v2-1024px-aesthetic',
// 'accounts/fireworks/models/SSD-1B',
// 'accounts/fireworks/models/stable-diffusion-xl-1024-v1-0',
// ],
// },
// https://ai-sdk.dev/providers/ai-sdk-providers/fal#image-models
fal: {
displayName: 'Fal',
iconPath: '/provider-icons/fal.svg',
color: 'from-orange-500 to-red-500',
models: [
'fal-ai/flux/dev', // added by Fox
'fal-ai/flux-pro/kontext',
'fal-ai/flux-pro/kontext/max',
'fal-ai/flux-lora',
'fal-ai/fast-sdxl',
'fal-ai/flux-pro/v1.1-ultra',
'fal-ai/ideogram/v2',
'fal-ai/recraft-v3',
'fal-ai/hyper-sdxl',
// 'fal-ai/stable-diffusion-3.5-large',
],
},
};
export const MODEL_CONFIGS: Record<ModelMode, Record<ProviderKey, string>> = {
performance: {
replicate: 'black-forest-labs/flux-1.1-pro',
openai: 'dall-e-3',
fireworks: 'accounts/fireworks/models/flux-1-schnell-fp8',
fal: 'fal-ai/flux/dev',
},
quality: {
replicate: 'stability-ai/stable-diffusion-3.5-large',
openai: 'dall-e-3',
fireworks: 'accounts/fireworks/models/flux-1-dev-fp8',
fal: 'fal-ai/flux-pro/v1.1-ultra',
},
};
export const PROVIDER_ORDER: ProviderKey[] = [
'replicate',
'openai',
'fireworks',
'fal',
];
export const initializeProviderRecord = <T>(defaultValue?: T) =>
Object.fromEntries(
PROVIDER_ORDER.map((key) => [key, defaultValue])
) as Record<ProviderKey, T>;