| 1 | import type { ImageModelConfig } from '@renderer/lib/ipc' |
| 2 | |
| 3 | const parseModelConfig = (value: string): Record<string, unknown> | null => { |
| 4 | try { |
| 5 | const parsed = JSON.parse(value) |
| 6 | if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return null |
| 7 | return Object.keys(parsed).length > 0 ? (parsed as Record<string, unknown>) : null |
| 8 | } catch { |
| 9 | return null |
| 10 | } |
| 11 | } |
| 12 | |
| 13 | export const isUsableImageModelConfig = (config: ImageModelConfig): boolean => |
| 14 | Boolean(config.name.trim() && config.provider && parseModelConfig(config.modelConfig.trim())) |
| 15 | |
| 16 | export const getUsableImageModelConfigs = ( |
| 17 | configs: ImageModelConfig[] | null | undefined |
| 18 | ): ImageModelConfig[] => (Array.isArray(configs) ? configs : []).filter(isUsableImageModelConfig) |
| 19 | |
| 20 | export const resolveDefaultImageModelConfigId = (configs: ImageModelConfig[]): string => |
| 21 | configs.find((config) => config.active)?.id || configs[0]?.id || '' |
| 22 | |
| 23 | export const getImageModelConfigLabel = (config: ImageModelConfig): string => { |
| 24 | const parsed = parseModelConfig(config.modelConfig.trim()) |
| 25 | const model = |
| 26 | typeof parsed?.model === 'string' |
| 27 | ? parsed.model.trim() |
| 28 | : typeof parsed?.reqKey === 'string' |
| 29 | ? parsed.reqKey.trim() |
| 30 | : '' |
| 31 | return model ? `${config.name} · ${config.provider} · ${model}` : `${config.name} · ${config.provider}` |
| 32 | } |
| 33 |