gongxiangp2/lib/ai-model-types.ts

52 lines
1.8 KiB
TypeScript

export const AI_MODEL_STAGES = ['analysis', 'copy', 'image'] as const
export type AiModelStage = typeof AI_MODEL_STAGES[number]
export type AiModelDefaults = Record<AiModelStage, string | null>
export interface AiModelCapabilities {
kind: 'text' | 'vision' | 'image' | 'other' | 'unknown'
allowedStages: AiModelStage[]
source: 'upstream' | 'verified' | 'unknown'
reason: string
}
export interface AiModelCatalogEntry {
key: string
id: string
enabled: boolean
stages: AiModelStage[]
present: boolean
compatibility: 'confirmed' | 'unconfirmed'
capabilities: AiModelCapabilities
}
export interface AiModelProvider {
id: string
name: string
baseUrl: string
enabled: boolean
credentialSource: 'encrypted' | 'environment'
hasApiKey: boolean
revision: number
syncedAt: string | null
models: AiModelCatalogEntry[]
}
export interface AiModelAdminState {
providers: AiModelProvider[]
defaults: AiModelDefaults
revision: number
encryptionConfigured: boolean
legacyAvailable: boolean
}
export interface AiModelConfigurationInput {
revision: number
defaults: AiModelDefaults
providers: Array<{ id: string; revision: number; models: Array<{ key: string; enabled: boolean; stages: AiModelStage[]; compatibility: 'confirmed' | 'unconfirmed' }> }>
}
export interface AiModelChoice { value: string; label: string; providerName: string }
export interface AiModelRuntimeState {
configured: boolean
models: Record<AiModelStage, string[]>
defaults: Record<AiModelStage, string>
modelOptions: Record<AiModelStage, AiModelChoice[]>
legacyModels: Record<AiModelStage, string[]>
}
export interface AiModelBinding { providerId: string; modelKey: string; modelId: string; providerName: string; baseUrl: string; revision: number }
export type AiModelBindings = Record<AiModelStage, AiModelBinding>