feat(stage-ui): with sorted for providers

This commit is contained in:
Neko Ayaka
2026-01-04 01:07:19 +08:00
parent d1a1ef73c6
commit 52d42ce349
9 changed files with 12 additions and 3 deletions
@@ -17,6 +17,7 @@ type AI302Config = z.input<typeof ai302ConfigSchema>
export const provider302AI = defineProvider<AI302Config>({
id: '302-ai',
order: 7,
name: '302.AI',
nameLocalize: ({ t }) => t('settings.pages.providers.provider.302-ai.title'),
description: '302.ai',
@@ -38,6 +38,7 @@ function createAnthropic(apiKey: string, baseURL: string = 'https://api.anthropi
export const providerAnthropic = defineProvider<AnthropicConfig>({
id: 'anthropic',
order: 5,
name: 'Anthropic',
nameLocalize: ({ t }) => t('settings.pages.providers.provider.anthropic.title'),
description: 'anthropic.com',
@@ -17,6 +17,7 @@ type DeepSeekConfig = z.input<typeof deepSeekConfigSchema>
export const providerDeepSeek = defineProvider<DeepSeekConfig>({
id: 'deepseek',
order: 4,
name: 'DeepSeek',
nameLocalize: ({ t }) => t('settings.pages.providers.provider.deepseek.title'),
description: 'deepseek.com',
@@ -17,6 +17,7 @@ type GoogleGenerativeConfig = z.input<typeof googleGenerativeConfigSchema>
export const providerGoogleGenerativeAI = defineProvider<GoogleGenerativeConfig>({
id: 'google-generative-ai',
order: 6,
name: 'Google Gemini',
nameLocalize: ({ t }) => t('settings.pages.providers.provider.google-generative-ai.title'),
description: 'ai.google.dev',
@@ -6,6 +6,7 @@ import { defineProvider } from '../registry'
export const providerOllama = defineProvider({
id: 'ollama',
order: 2,
name: 'Ollama',
nameLocalize: ({ t }) => t('settings.pages.providers.provider.ollama.title'),
description: 'Local Ollama server for fast model iteration.',
@@ -18,6 +18,7 @@ type OpenAICompatibleConfig = z.input<typeof openAICompatibleConfigSchema>
export const providerOpenAICompatible = defineProvider<OpenAICompatibleConfig>({
id: 'openai-compatible',
order: 3,
name: 'OpenAI Compatible',
nameLocalize: ({ t }) => t('settings.pages.providers.provider.openai-compatible.title'),
description: 'OpenAI-compatible chat APIs with API key authentication.',
@@ -17,6 +17,7 @@ type OpenAICompatibleConfig = z.input<typeof openAICompatibleConfigSchema>
export const providerOpenAI = defineProvider<OpenAICompatibleConfig>({
id: 'openai',
order: 1,
name: 'OpenAI',
nameLocalize: ({ t }) => t('settings.pages.providers.provider.openai.title'),
description: 'OpenAI',
@@ -17,6 +17,7 @@ type OpenRouterConfig = z.input<typeof openRouterConfigSchema>
export const providerOpenRouterAI = defineProvider<OpenRouterConfig>({
id: 'openrouter-ai',
order: 0,
name: 'OpenRouter',
nameLocalize: ({ t }) => t('settings.pages.providers.provider.openrouter.title'),
description: 'openrouter.ai',
@@ -3,13 +3,14 @@ import type { $ZodType } from 'zod/v4/core'
import type { ProviderDefinition } from '../types'
import { sortBy } from 'es-toolkit'
import { orderBy } from 'es-toolkit'
const providerRegistry = new Map<string, ProviderDefinition>()
export function listProviders(): ProviderDefinition[] {
const providerDefs = Array.from(providerRegistry.values())
return sortBy(providerDefs, [p => p.order, p => p.name.toLowerCase()])
const providerDefs = Array.from(providerRegistry.values()).map(def => ({ order: 99999, ...def }))
const sorted = orderBy(providerDefs, [p => p.order, 'name'], ['asc', 'asc'])
return sorted
}
export function getDefinedProvider(id: string): ProviderDefinition | undefined {