/* 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 . 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 { 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 { 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 }