()
| 122 | } |
| 123 | |
| 124 | async function fetchOpenRouterModels(): Promise<FetchedModel[]> { |
| 125 | try { |
| 126 | const response = await fetch("https://openrouter.ai/api/v1/models"); |
| 127 | if (!response.ok) { |
| 128 | throw new Error(`Failed to fetch OpenRouter models: ${response.status}`); |
| 129 | } |
| 130 | |
| 131 | const data = await response.json(); |
| 132 | if (!data.data || !Array.isArray(data.data)) { |
| 133 | return []; |
| 134 | } |
| 135 | |
| 136 | return data.data |
| 137 | .filter((m: any) => m.id && m.name) |
| 138 | .map((m: any) => ({ |
| 139 | name: m.name, |
| 140 | modelId: m.id, |
| 141 | icon: "openrouter.png", |
| 142 | contextLength: m.context_length, |
| 143 | maxTokens: m.top_provider?.max_completion_tokens, |
| 144 | supportsTools: (m.supported_parameters ?? []).includes("tools"), |
| 145 | })); |
| 146 | } catch (error) { |
| 147 | console.error("Error fetching OpenRouter models:", error); |
| 148 | return []; |
| 149 | } |
| 150 | } |
| 151 | |
| 152 | async function fetchAnthropicModels(apiKey?: string): Promise<FetchedModel[]> { |
| 153 | const response = await fetch( |
no test coverage detected