Files
platform/src/servers/api/pi-mono/sessions.ts
T
2026-02-20 04:32:50 +00:00

45 lines
1.4 KiB
TypeScript

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([]);
}
});