import type { IncomingMessage, ServerResponse } from "node:http"; import type { WebUiContext } from "../types/context.ts"; import { json, readBody } from "../http/request.ts"; export function handleModelsRoute( req: IncomingMessage, res: ServerResponse, ctx: WebUiContext, pathname: string, ): boolean { const { sendCmd } = ctx.rpc; if (req.method === "GET" && pathname === "/api/models") { void sendCmd({ type: "get_available_models" }) .then((r: any) => (r.success ? json(res, r.data) : json(res, { error: r.error }, 500))) .catch((err) => json(res, { error: err.message }, 500)); return true; } if (req.method === "POST" && pathname === "/api/model") { void readBody(req) .then(({ provider, modelId }) => sendCmd({ type: "set_model", provider, modelId }).then((r: any) => r.success ? json(res, { model: r.data }) : json(res, { error: r.error }, 500), ), ) .catch((err) => json(res, { error: err.message }, 500)); return true; } if (req.method === "POST" && pathname === "/api/thinking") { void readBody(req) .then(({ level }) => sendCmd({ type: "set_thinking_level", level }).then((r: any) => r.success ? json(res, { ok: true }) : json(res, { error: r.error }, 500), ), ) .catch((err) => json(res, { error: err.message }, 500)); return true; } return false; }