import { Hono } from 'hono'; import type { HonoVariables } from '@@/create-router'; import { readApiKeys } from '@@/api/server-settings/pi-mono'; export const piMonoModelsRouter = new Hono<{ Variables: HonoVariables }>(); piMonoModelsRouter.get('/pi-mono/models', async (ctx) => { try { const storedKeys = await readApiKeys(); const proc = Bun.spawn(['pi', '--list-models'], { stdout: 'pipe', stderr: 'pipe', env: { ...process.env, ...storedKeys }, }); const output = await new Response(proc.stdout).text(); await proc.exited; if (proc.exitCode !== 0) return ctx.json([]); // Parse the whitespace-separated table output: // provider model context max-out thinking images // anthropic claude-sonnet-4-6 200K 128K yes yes const lines = output.trim().split('\n').filter(Boolean); const models: { id: string; name: string; provider: string; providerId: string }[] = []; // Skip header line (first line) for (let i = 1; i < lines.length; i++) { const cols = lines[i]!.trim().split(/\s+/); if (cols.length < 2) continue; const [provider, model] = cols; models.push({ id: `${provider}/${model}`, name: model!, provider: provider!, providerId: provider!, }); } return ctx.json(models); } catch { return ctx.json([]); } });