* feat(providers): auto generate from models.dev * chore(providers): update code-gen impl, sync * refactor(providers): split manual provider types * feat(providers): openrouter provider * feat(providers): anthropic, google provider * feat(providers): cerebras provider * feat(providers): groq, deepinfra provider * [autofix.ci] apply automated fixes * refactor(providers): move deepinfra to generated * feat(providers): mistral provider * refactor(providers): move cerebras to auto provider * refactor(providers): improve structure * feat(providers): azure provider * [autofix.ci] apply automated fixes * feat(providers): minimax provider * feat(providers): novita provider * refactor(providers): improve structure * feat(providers): silicon-flow, stepfun provider * feat(providers): tencent-hunyuan provider * feat(providers): qwen provider (deprecated) * feat(providers): perplexity, together-ai provider * feat(providers): workers-ai provider * feat(providers): xai provider * chore(providers): remove metadata * chore(providers): xai fallback * refactor(providers): override deepseek * refactor(providers): move google to generated * refactor(providers): empty string fallback * refactor(providers): move force provider to overrides * feat(providers): featherless provider * fix(ci): try set concurrency * fix(ci): update test snapshot * chore(providers): update test * fix(ci): try fix build * chore: lint code * chore: remove concurrency * chore: update type-fest import
46 lines
1.9 KiB
TypeScript
46 lines
1.9 KiB
TypeScript
import { camelCase, pascalCase } from 'scule'
|
|
|
|
import type { CodeGenProvider } from './types'
|
|
|
|
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(`,
|
|
// eslint-disable-next-line sonarjs/no-nested-template-literals
|
|
` 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?.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}\``,
|
|
' */',
|
|
`export const ${codeGenConstEntry(provider)} = ${create}(process.env.${provider.apiKey} ?? '')`,
|
|
].join('\n'),
|
|
im: create,
|
|
}
|
|
}
|
|
|
|
/** code gen for internal use */
|
|
export const codeGenTypes = (provider: CodeGenProvider) => `export type ${pascalCase(provider.id)}Models = '${provider.models.join('\' | \'')}'`
|