All files / web/src/constants/node models.ts

47.16% Statements 25/53
100% Branches 1/1
0% Functions 0/3
47.16% Lines 25/53

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101                                1x   1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x     1x 1x 1x     1x 1x 1x           1x 1x 1x             1x                   1x                                                             1x          
/**
 * Model Configuration Constants
 * Provides centralized model management with internal IDs and user-friendly display names
 */
 
export interface ModelOption {
  value: string
  label: string
  provider: 'openai' | 'anthropic' | 'deepseek'
}
 
/**
 * Available model options for dropdowns
 * - value: Internal model ID (stored in backend)
 * - label: User-friendly display name (shown in UI)
 */
export const MODEL_OPTIONS: ModelOption[] = [
  // OpenAI Models
  { value: 'gpt-5', label: 'GPT-5', provider: 'openai' },
  { value: 'gpt-4.1', label: 'GPT-4.1', provider: 'openai' },
  { value: 'gpt-4.1-mini', label: 'GPT-4.1 Mini', provider: 'openai' },
  { value: 'gpt-4.1-nano', label: 'GPT-4.1 Nano', provider: 'openai' },
  { value: 'gpt-4o', label: 'GPT-4o', provider: 'openai' },
  { value: 'gpt-4o-mini', label: 'GPT-4o Mini', provider: 'openai' },
  { value: 'gpt-4', label: 'GPT-4', provider: 'openai' },
  { value: 'gpt-4-turbo', label: 'GPT-4 Turbo', provider: 'openai' },
  { value: 'gpt-3.5-turbo', label: 'GPT-3.5 Turbo', provider: 'openai' },
  { value: 'o4-mini', label: 'O4 Mini', provider: 'openai' },
  { value: 'o3', label: 'O3', provider: 'openai' },
  { value: 'o3-mini', label: 'O3 Mini', provider: 'openai' },
 
  // Anthropic Models (rig format: claude-{version}-{model})
  { value: 'claude-4-sonnet', label: 'Claude 4 Sonnet', provider: 'anthropic' },
  { value: 'claude-4-opus', label: 'Claude 4 Opus', provider: 'anthropic' },
  { value: 'claude-3.7-sonnet', label: 'Claude 3.7 Sonnet', provider: 'anthropic' },
 
  // DeepSeek Models
  { value: 'deepseek-chat', label: 'DeepSeek Chat', provider: 'deepseek' },
  { value: 'deepseek-reasoner', label: 'DeepSeek Reasoner', provider: 'deepseek' },
]
 
/**
 * Model display name mapping
 * Maps internal model ID to user-friendly display name
 */
export const MODEL_DISPLAY_NAMES: Record<string, string> = Object.fromEntries(
  MODEL_OPTIONS.map(option => [option.value, option.label])
)
 
/**
 * Get user-friendly display name for a model
 * @param model - Internal model ID
 * @returns User-friendly display name or original model ID if not found
 */
export function getModelDisplayName(model?: string): string {
  if (!model) return 'Unknown Model'
  return MODEL_DISPLAY_NAMES[model] || model
}
 
/**
 * Get tag type (color) for a model based on provider
 * @param model - Internal model ID
 * @returns Element Plus tag type
 */
export function getModelTagType(
  model?: string
): 'success' | 'primary' | 'warning' | 'info' | 'danger' {
  if (!model) return 'info'
 
  const option = MODEL_OPTIONS.find(opt => opt.value === model)
  if (!option) {
    // Fallback to string matching for backward compatibility
    if (model.includes('gpt')) return 'success'
    if (model.includes('claude')) return 'warning'
    if (model.includes('deepseek')) return 'primary'
    return 'info'
  }
 
  switch (option.provider) {
    case 'openai':
      return 'success'
    case 'anthropic':
      return 'warning'
    case 'deepseek':
      return 'primary'
    default:
      return 'info'
  }
}
 
/**
 * Get models by provider
 * @param provider - AI provider name
 * @returns Array of model options for the specified provider
 */
export function getModelsByProvider(
  provider: 'openai' | 'anthropic' | 'deepseek'
): ModelOption[] {
  return MODEL_OPTIONS.filter(opt => opt.provider === provider)
}