Files
chaos-api/web/default/src/features/models/constants.ts
T
t0ng7u d146e45e2f ⚖️ chore(web/default): add reusable copyright header tooling
Add a Bun script to apply and normalize AGPL copyright headers across the default frontend source files.

The script keeps headers idempotent, upgrades existing headers to the 2023-2026 QuantumNous range, and is exposed through `bun run copyright` for future maintenance.
2026-05-09 11:35:07 +08:00

205 lines
6.5 KiB
TypeScript
Vendored

/*
Copyright (C) 2023-2026 QuantumNous
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
For commercial licensing, please contact support@quantumnous.com
*/
import { type TFunction } from 'i18next'
import type { NameRule, ModelStatus, SyncSource } from './types'
// ============================================================================
// Pagination
// ============================================================================
export const DEFAULT_PAGE_SIZE = 20
// ============================================================================
// Name Rule Options
// ============================================================================
export function getNameRuleOptions(t: TFunction) {
return [
{ label: t('Exact Match'), value: 0 as NameRule },
{ label: t('Prefix Match'), value: 1 as NameRule },
{ label: t('Contains Match'), value: 2 as NameRule },
{ label: t('Suffix Match'), value: 3 as NameRule },
] as const
}
export function getNameRuleConfig(
t: TFunction
): Record<NameRule, { label: string; color: string; description: string }> {
return {
0: {
label: t('Exact'),
color: 'green',
description: t('Match model name exactly'),
},
1: {
label: t('Prefix'),
color: 'blue',
description: t('Match models starting with this name'),
},
2: {
label: t('Contains'),
color: 'orange',
description: t('Match models containing this name'),
},
3: {
label: t('Suffix'),
color: 'purple',
description: t('Match models ending with this name'),
},
}
}
// ============================================================================
// Model Status
// ============================================================================
export function getModelStatusOptions(t: TFunction) {
return [
{ label: t('All Status'), value: 'all' },
{ label: t('Enabled'), value: 'enabled' },
{ label: t('Disabled'), value: 'disabled' },
] as const
}
export function getModelStatusConfig(
t: TFunction
): Record<
ModelStatus,
{ label: string; variant: 'success' | 'neutral'; showDot?: boolean }
> {
return {
1: { label: t('Enabled'), variant: 'success', showDot: true },
0: { label: t('Disabled'), variant: 'neutral' },
}
}
// ============================================================================
// Sync Status Options
// ============================================================================
export function getSyncStatusOptions(t: TFunction) {
return [
{ label: t('All Sync Status'), value: 'all' },
{ label: t('Official Sync'), value: 'yes' },
{ label: t('No Sync'), value: 'no' },
] as const
}
// ============================================================================
// Deployment Status
// ============================================================================
export function getDeploymentStatusOptions(t: TFunction) {
return [
{ label: t('All Status'), value: 'all' },
{ label: t('Running'), value: 'running' },
{ label: t('Completed'), value: 'completed' },
{ label: t('Failed'), value: 'failed' },
{ label: t('Deployment requested'), value: 'deployment requested' },
{ label: t('Termination requested'), value: 'termination requested' },
{ label: t('Destroyed'), value: 'destroyed' },
] as const
}
export function getDeploymentStatusConfig(t: TFunction): Record<
string,
{
label: string
variant: 'success' | 'neutral' | 'warning' | 'danger'
showDot?: boolean
}
> {
return {
running: { label: t('Running'), variant: 'success', showDot: true },
completed: { label: t('Completed'), variant: 'success' },
failed: { label: t('Failed'), variant: 'danger' },
error: { label: t('Failed'), variant: 'danger' },
destroyed: { label: t('Destroyed'), variant: 'danger' },
'deployment requested': {
label: t('Deployment requested'),
variant: 'warning',
showDot: true,
},
'termination requested': {
label: t('Termination requested'),
variant: 'warning',
showDot: true,
},
}
}
// ============================================================================
// Quota Type
// ============================================================================
export function getQuotaTypeConfig(
t: TFunction
): Record<number, { label: string; color: string }> {
return {
0: { label: t('Usage-based'), color: 'violet' },
1: { label: t('Per-call'), color: 'teal' },
}
}
// ============================================================================
// Endpoint Templates
// ============================================================================
export const ENDPOINT_TEMPLATES: Record<
string,
{ path: string; method: string }
> = {
openai: { path: '/v1/chat/completions', method: 'POST' },
'openai-response': { path: '/v1/responses', method: 'POST' },
anthropic: { path: '/v1/messages', method: 'POST' },
gemini: { path: '/v1beta/models/{model}:generateContent', method: 'POST' },
'jina-rerank': { path: '/rerank', method: 'POST' },
'image-generation': { path: '/v1/images/generations', method: 'POST' },
embeddings: { path: '/v1/embeddings', method: 'POST' },
}
// ============================================================================
// Sync Locale Options
// ============================================================================
export function getSyncLocaleOptions(t: TFunction) {
return [
{ label: t('Chinese'), value: 'zh' },
{ label: t('English'), value: 'en' },
{ label: t('Japanese'), value: 'ja' },
] as const
}
export function getSyncSourceOptions(t: TFunction) {
return [
{
label: t('Official Repository'),
value: 'official' as SyncSource,
description: t('Sync from the public upstream metadata repository.'),
disabled: false,
},
{
label: t('Configuration File'),
value: 'config' as SyncSource,
description: t('Upload or reference a local configuration file.'),
disabled: true,
},
] as const
}