(port: number)
| 307 | } |
| 308 | |
| 309 | async function cmdModels(port: number): Promise<void> { |
| 310 | try { |
| 311 | const data = (await queryProxy("/v1/models", port)) as { |
| 312 | data: Array<{ id: string; owned_by?: string }>; |
| 313 | }; |
| 314 | console.log(`\nAvailable Models (${data.data.length})\n`); |
| 315 | |
| 316 | // Group by provider |
| 317 | const groups = new Map<string, string[]>(); |
| 318 | for (const m of data.data) { |
| 319 | const provider = m.id.includes("/") ? m.id.split("/")[0] : "blockrun"; |
| 320 | if (!groups.has(provider)) groups.set(provider, []); |
| 321 | groups.get(provider)!.push(m.id); |
| 322 | } |
| 323 | |
| 324 | for (const [provider, models] of groups) { |
| 325 | console.log(` ${provider} (${models.length}):`); |
| 326 | for (const id of models) { |
| 327 | console.log(` ${id}`); |
| 328 | } |
| 329 | console.log(); |
| 330 | } |
| 331 | } catch { |
| 332 | console.error(`✗ Cannot connect to ClawRouter on port ${port}`); |
| 333 | process.exit(1); |
| 334 | } |
| 335 | } |
| 336 | |
| 337 | async function cmdStats(port: number, days: number): Promise<void> { |
| 338 | try { |
no test coverage detected