Files
藍+85CD d9a8b7bba4 chore(deps): bump version, follow upstream changes (#247)
* chore(deps): bump version, follow upstream changes

* chore: lint code

* chore(deps): remove dotenv

* fix: install

* ci: unlock node version
2025-12-29 20:32:24 +08:00

47 lines
2.0 KiB
TypeScript

import type { CodeGenProvider } from './types'
import { camelCase, pascalCase } from 'scule'
const codeGenConstCreate = (provider: CodeGenProvider) => `create${provider.overrides?.create ?? pascalCase(provider.id)}`
const codeGenConstEntry = (provider: CodeGenProvider) => provider.overrides?.id ?? camelCase(provider.id)
/** code gen for '@xsai-ext/providers/create' */
export const codeGenCreate = (provider: CodeGenProvider) => [
'/**',
` * Create a ${provider.name} Provider`,
` * @see {@link ${provider.doc}}`,
' */',
`export const ${codeGenConstCreate(provider)} = (apiKey: string, baseURL = '${provider.baseURL}') => merge(`,
` createChatProvider${provider.models.length > 0 ? `<'${provider.models.join('\' | \'')}'>` : ''}({ apiKey, baseURL }),`,
...(provider.capabilities?.model === false ? [] : [' createModelProvider({ apiKey, baseURL }),']),
...(provider.capabilities?.embed === true ? [' createEmbedProvider({ apiKey, baseURL }),'] : []),
...(provider.capabilities?.image === true ? [' createImageProvider({ apiKey, baseURL }),'] : []),
...(provider.capabilities?.speech === true ? [' createSpeechProvider({ apiKey, baseURL }),'] : []),
...(provider.capabilities?.transcription === true ? [' createTranscriptionProvider({ apiKey, baseURL }),'] : []),
')',
].join('\n')
/** code gen for '@xsai-ext/providers' */
export const codeGenIndex = (provider: CodeGenProvider) => {
const create = codeGenConstCreate(provider)
return {
ex: [
'/**',
` * ${provider.name} Provider`,
` * @see {@link ${provider.doc}}`,
' * @remarks',
` * - baseURL - \`${provider.baseURL}\``,
` * - apiKey - \`${provider.apiKey.join(' or ')}\``,
' */',
`export const ${codeGenConstEntry(provider)} = ${create}(process.env.${provider.apiKey.join(' ?? process.env.')} ?? '')`,
].join('\n'),
im: create,
}
}
/** code gen for internal use */
export const codeGenTypes = (provider: CodeGenProvider) => `export type ${pascalCase(provider.id)}Models = '${provider.models.join('\' | \'')}'`