Spaces:
Running
Running
| import { NextResponse } from "next/server"; | |
| import { z } from "zod"; | |
| import { generateLlmText } from "@/lib/llm-client"; | |
| import { isLlmConfigReady, normalizeLlmConfig } from "@/lib/llm-config"; | |
| const RequestSchema = z.object({ | |
| llmConfig: z.object({ | |
| apiKey: z.string().optional(), | |
| baseUrl: z.string().optional(), | |
| model: z.string().optional(), | |
| }), | |
| }); | |
| export async function POST(req: Request) { | |
| const json = await req.json().catch(() => null); | |
| const parsed = RequestSchema.safeParse(json); | |
| if (!parsed.success) { | |
| return NextResponse.json( | |
| { ok: false, status: "error", message: "Bad request." }, | |
| { status: 400 }, | |
| ); | |
| } | |
| if (!isLlmConfigReady(parsed.data.llmConfig)) { | |
| return NextResponse.json({ | |
| ok: false, | |
| status: "idle", | |
| message: "Add API key, base URL, and model to test the connection.", | |
| }); | |
| } | |
| const config = normalizeLlmConfig(parsed.data.llmConfig); | |
| try { | |
| const result = await generateLlmText({ | |
| config, | |
| systemPrompt: | |
| "You are running a connection test. Reply with a short confirmation only.", | |
| userPrompt: | |
| "Connection test. Reply with exactly: Connected to the configured model.", | |
| temperature: 0, | |
| maxTokens: 60, | |
| }); | |
| return NextResponse.json({ | |
| ok: true, | |
| status: "connected", | |
| message: result.text, | |
| model: config.model, | |
| endpoint: result.endpoint, | |
| }); | |
| } catch (error) { | |
| return NextResponse.json({ | |
| ok: false, | |
| status: "error", | |
| message: String(error), | |
| model: config.model, | |
| }); | |
| } | |
| } | |