()
| 81 | } |
| 82 | |
| 83 | async function main() { |
| 84 | console.log(`Fetching models from ${API_URL}...`) |
| 85 | const response = await fetch(API_URL, { |
| 86 | signal: AbortSignal.timeout(30_000), |
| 87 | }) |
| 88 | |
| 89 | if (!response.ok) { |
| 90 | throw new Error( |
| 91 | `Failed to fetch models: ${response.status} ${response.statusText}`, |
| 92 | ) |
| 93 | } |
| 94 | |
| 95 | const json = (await response.json()) as { data: Array<ApiModel> } |
| 96 | const allModels = json.data |
| 97 | |
| 98 | const validModels = allModels.filter(isValidModel) |
| 99 | const skipped = allModels.length - validModels.length |
| 100 | if (skipped > 0) { |
| 101 | console.log( |
| 102 | `Skipped ${skipped} models missing required fields (id, name, context_length, architecture, pricing, top_provider)`, |
| 103 | ) |
| 104 | } |
| 105 | |
| 106 | validModels.sort((a, b) => a.id.localeCompare(b.id)) |
| 107 | |
| 108 | await writeFile( |
| 109 | OUTPUT_PATH, |
| 110 | JSON.stringify(validModels, null, 2) + '\n', |
| 111 | 'utf-8', |
| 112 | ) |
| 113 | console.log(`Fetched ${validModels.length} models`) |
| 114 | console.log(`Written to ${OUTPUT_PATH}`) |
| 115 | } |
| 116 | |
| 117 | main().catch((error) => { |
| 118 | console.error(error) |
no test coverage detected