返回 oh-my-ppt
image-model-config.ts
根目录 / src / renderer / src / lib / image-model-config.ts
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
33 lines TYPESCRIPT