16 lines
1.2 KiB
TypeScript
16 lines
1.2 KiB
TypeScript
import { createHash } from 'node:crypto'
|
|
import { listAiModelExecutionContracts } from '@/lib/ai-model-service'
|
|
|
|
/** Public execution contracts only. Credentials never cross the desktop API. */
|
|
export async function desktopExecutionModels() {
|
|
const runtime = await listAiModelExecutionContracts()
|
|
const models = []
|
|
for (const {stage,binding,protocol} of runtime.items) {
|
|
if (binding.baseUrl !== 'https://api.vip98k.com/v1' || stage !== 'image' && !['openai-chat', 'anthropic-messages'].includes(protocol.id) || stage === 'analysis' && !protocol.supportsImageInput || stage === 'image' && (!protocol.supportsImageInput || !['openai-image-edit','openai-image-generate','async-image-task'].includes(protocol.id))) continue
|
|
const contract = { key: binding.modelKey, id: binding.modelId, label: binding.modelId, stage, baseUrl: binding.baseUrl,
|
|
protocol, verificationId: binding.verificationId || null, revision: binding.revision }
|
|
models.push({ ...contract, fingerprint: createHash('sha256').update(JSON.stringify(contract)).digest('hex') })
|
|
}
|
|
return { models, defaults: { analysis: runtime.defaults.analysis, copy: runtime.defaults.copy, image: runtime.defaults.image } }
|
|
}
|