File size: 4,933 Bytes
0efb0d1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/**
 * Priority Models List (TypeScript version)
 * Basic model records for direct Prisma ingestion
 */

export interface PriorityModel {
  model_id: string
  provider: string
  family: string | null
  release_date: string | null
  tier: string | null
}

function extractFamily(modelId: string, provider: string): string {
  // GPT family
  if (modelId.includes('GPT')) {
    if (modelId.includes('GPT-4')) return 'GPT-4'
    if (modelId.includes('GPT-3')) return 'GPT-3'
    return 'GPT'
  }
  
  // Claude family
  if (modelId.includes('Claude')) {
    if (modelId.includes('3.5')) return 'Claude 3.5'
    if (modelId.includes('3')) return 'Claude 3'
    if (modelId.includes('2')) return 'Claude 2'
    return 'Claude'
  }
  
  // Gemini family
  if (modelId.includes('Gemini')) {
    if (modelId.includes('2.0') || modelId.includes('Next')) return 'Gemini 2.0'
    if (modelId.includes('1.5')) return 'Gemini 1.5'
    return 'Gemini 1.0'
  }
  
  // Llama family (check more specific first)
  if (modelId.includes('Llama')) {
    if (modelId.includes('3.1')) return 'LLaMA 3.1'
    if (modelId.includes('3-') || modelId.includes('3 ')) return 'LLaMA 3' // Must have dash or space to avoid matching "13B"
    if (modelId.includes('2-') || modelId.includes('2 ')) return 'LLaMA 2' // Must have dash or space to avoid matching "12B", "13B"
    if (modelId.includes('1-') || modelId.includes('1 ')) return 'LLaMA 1' // Must have dash or space
    // Fallback: check for version numbers in different formats
    if (modelId.match(/Llama[-\s]?3/)) return 'LLaMA 3'
    if (modelId.match(/Llama[-\s]?2/)) return 'LLaMA 2'
    if (modelId.match(/Llama[-\s]?1/)) return 'LLaMA 1'
    return 'LLaMA'
  }
  
  // Qwen family
  if (modelId.includes('Qwen')) {
    if (modelId.includes('2.5')) return 'Qwen 2.5'
    if (modelId.includes('2')) return 'Qwen 2'
    if (modelId.includes('1.5')) return 'Qwen 1.5'
    return 'Qwen 1'
  }
  
  // Mistral/Mixtral
  if (modelId.includes('Mixtral')) return 'Mixtral'
  if (modelId.includes('Mistral')) return 'Mistral'
  
  // Grok
  if (modelId.includes('Grok')) return 'Grok'
  
  // DeepSeek
  if (modelId.includes('DeepSeek')) return 'DeepSeek'
  
  // ERNIE
  if (modelId.includes('ERNIE')) return 'ERNIE'
  
  // Falcon
  if (modelId.includes('Falcon')) return 'Falcon'
  
  // Default: use provider as family
  return provider
}

export function getAllPriorityModels(): PriorityModel[] {
  const models: PriorityModel[] = []
  
  // Tier 1: Frontier Closed Models
  const frontierClosed: Record<string, string[]> = {
    'OpenAI': ['GPT-3', 'GPT-3.5', 'GPT-4', 'GPT-4 Turbo', 'GPT-4o', 'GPT-4.1', 'GPT-4.1 Preview', 'GPT-4.1 Mini', 'o1', 'o3'],
    'Anthropic': ['Claude 1', 'Claude 2', 'Claude 2.1', 'Claude 3 Haiku', 'Claude 3 Sonnet', 'Claude 3 Opus', 'Claude 3.5 Haiku', 'Claude 3.5 Sonnet', 'Claude 3.5 Opus'],
    'Google DeepMind': ['PaLM', 'PaLM-2', 'Gemini 1.0 Nano', 'Gemini 1.0 Pro', 'Gemini 1.0 Ultra', 'Gemini 1.5 Flash', 'Gemini 1.5 Pro', 'Gemini 1.5 Ultra', 'Gemini 2.0', 'Gemini Next'],
  }
  
  // Tier 1B: Major Open-Weight Models
  const openWeight: Record<string, string[]> = {
    'Meta': ['Llama-1-7B', 'Llama-1-13B', 'Llama-1-30B', 'Llama-1-65B', 'Llama-2-7B', 'Llama-2-13B', 'Llama-2-70B', 'Llama-3-8B', 'Llama-3-70B', 'Llama-3.1-8B', 'Llama-3.1-70B', 'Llama-3.1-405B'],
    'Mistral AI': ['Mistral-7B', 'Mixtral-8x7B', 'Mixtral-8x22B', 'Mistral Nemo', 'Mistral Small', 'Mistral Medium', 'Mistral Large'],
    'xAI': ['Grok-1', 'Grok-1.5', 'Grok-1.5 Vision', 'Grok-2'],
  }
  
  // Add frontier closed models
  for (const [provider, modelList] of Object.entries(frontierClosed)) {
    for (const modelId of modelList) {
      models.push({
        model_id: modelId,
        provider,
        family: extractFamily(modelId, provider),
        release_date: null, // Will be enriched by Python pipeline
        tier: 'Tier 1: Frontier Closed',
      })
    }
  }
  
  // Add open weight models
  for (const [provider, modelList] of Object.entries(openWeight)) {
    for (const modelId of modelList) {
      models.push({
        model_id: modelId,
        provider,
        family: extractFamily(modelId, provider),
        release_date: null,
        tier: 'Tier 1B: Open Weight',
      })
    }
  }
  
  // Add a few more key models
  models.push(
    { model_id: 'command', provider: 'Cohere', family: 'Command', release_date: '2023-03-15', tier: 'Tier 2' },
    { model_id: 'command-r', provider: 'Cohere', family: 'Command', release_date: '2024-03-11', tier: 'Tier 1' },
    { model_id: 'command-r-plus', provider: 'Cohere', family: 'Command', release_date: '2024-03-11', tier: 'Tier 1' },
    { model_id: 'jurassic-2-ultra', provider: 'AI21 Labs', family: 'Jurassic', release_date: '2023-03-01', tier: 'Tier 1' },
    { model_id: 'jurassic-2-mid', provider: 'AI21 Labs', family: 'Jurassic', release_date: '2023-03-01', tier: 'Tier 2' },
  )
  
  return models
}