| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- import { type TFunction } from 'i18next'
- import type { TokenUnit } from './types'
- // ----------------------------------------------------------------------------
- // Pricing Constants
- // ----------------------------------------------------------------------------
- /** Sort options for pricing models */
- export const SORT_OPTIONS = {
- NAME: 'name',
- PRICE_LOW: 'price-low',
- PRICE_HIGH: 'price-high',
- } as const
- export type SortOption = (typeof SORT_OPTIONS)[keyof typeof SORT_OPTIONS]
- export function getSortLabels(t: TFunction): Record<SortOption, string> {
- return {
- [SORT_OPTIONS.NAME]: t('Name'),
- [SORT_OPTIONS.PRICE_LOW]: t('Price: Low to High'),
- [SORT_OPTIONS.PRICE_HIGH]: t('Price: High to Low'),
- }
- }
- /** Filter values */
- export const FILTER_ALL = 'all'
- /** Quota type options */
- export const QUOTA_TYPES = {
- ALL: 'all',
- TOKEN: 'token',
- REQUEST: 'request',
- } as const
- export type QuotaTypeOption = (typeof QUOTA_TYPES)[keyof typeof QUOTA_TYPES]
- /** Quota type labels */
- export function getQuotaTypeLabels(
- t: TFunction
- ): Record<QuotaTypeOption, string> {
- return {
- [QUOTA_TYPES.ALL]: t('All Models'),
- [QUOTA_TYPES.TOKEN]: t('Token-based'),
- [QUOTA_TYPES.REQUEST]: t('Per Request'),
- }
- }
- /** Endpoint type options */
- export const ENDPOINT_TYPES = {
- ALL: 'all',
- OPENAI: 'openai',
- OPENAI_RESPONSE: 'openai-response',
- ANTHROPIC: 'anthropic',
- GEMINI: 'gemini',
- JINA_RERANK: 'jina-rerank',
- IMAGE_GENERATION: 'image-generation',
- EMBEDDINGS: 'embeddings',
- OPENAI_VIDEO: 'openai-video',
- } as const
- export type EndpointTypeOption =
- (typeof ENDPOINT_TYPES)[keyof typeof ENDPOINT_TYPES]
- /** Endpoint type labels */
- export function getEndpointTypeLabels(
- t: TFunction
- ): Record<EndpointTypeOption, string> {
- return {
- [ENDPOINT_TYPES.ALL]: t('All Types'),
- [ENDPOINT_TYPES.OPENAI]: 'Chat',
- [ENDPOINT_TYPES.OPENAI_RESPONSE]: 'Response',
- [ENDPOINT_TYPES.ANTHROPIC]: 'Anthropic',
- [ENDPOINT_TYPES.GEMINI]: 'Gemini',
- [ENDPOINT_TYPES.JINA_RERANK]: 'Rerank',
- [ENDPOINT_TYPES.IMAGE_GENERATION]: t('Image'),
- [ENDPOINT_TYPES.EMBEDDINGS]: t('Embeddings'),
- [ENDPOINT_TYPES.OPENAI_VIDEO]: t('Video'),
- }
- }
- /** Filter section keys */
- export const FILTER_SECTIONS = {
- PRICING_TYPE: 'pricingType',
- ENDPOINT_TYPE: 'endpointType',
- VENDOR: 'vendor',
- GROUP: 'group',
- TAG: 'tag',
- } as const
- /** Maximum number of tags to display in model row */
- export const MAX_TAGS_DISPLAY = 5
- /** Maximum number of filter items to display before showing "More..." */
- export const MAX_FILTER_ITEMS = 5
- /** Sidebar width */
- export const SIDEBAR_WIDTH = 'w-64'
- /** Excluded groups */
- export const EXCLUDED_GROUPS = ['', 'auto']
- /** Quota type values */
- export const QUOTA_TYPE_VALUES = {
- TOKEN: 0,
- REQUEST: 1,
- } as const
- /** Token unit divisors */
- export const TOKEN_UNIT_DIVISORS = {
- M: 1,
- K: 1000,
- } as const
- /** Default token unit for pricing display */
- export const DEFAULT_TOKEN_UNIT: TokenUnit = 'M'
- /** View mode options */
- export const VIEW_MODES = {
- LIST: 'list',
- TABLE: 'table',
- } as const
- export type ViewMode = (typeof VIEW_MODES)[keyof typeof VIEW_MODES]
- /** Default page size for pricing table */
- export const DEFAULT_PRICING_PAGE_SIZE = 20
|