File size: 2,078 Bytes
4c2a557
a572854
4c2a557
 
a572854
 
 
 
 
4c2a557
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import { NextResponse } from "next/server";
import { verifyApiToken } from "@/lib/auth";

export async function POST(req: Request) {
  const authError = verifyApiToken(req);
  if (authError) {
    return authError;
  }

  try {
    const { modelId } = await req.json();

    if (!modelId) {
      return NextResponse.json({
        success: false,
        message: "Model ID cannot be empty",
      });
    }

    const domain = process.env.OPENWEBUI_DOMAIN;
    const apiKey = process.env.OPENWEBUI_API_KEY;

    if (!domain || !apiKey) {
      return NextResponse.json({
        success: false,
        message: "Environment variables not configured correctly",
      });
    }

    const apiUrl = domain.replace(/\/+$/, "") + "/api/chat/completions";

    const response = await fetch(apiUrl, {
      method: "POST",
      headers: {
        Authorization: `Bearer ${apiKey}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        model: modelId,
        messages: [
          {
            role: "user",
            content: "test, just say hi",
          },
        ],
      }),
    });

    const responseText = await response.text();
    let data;

    try {
      data = JSON.parse(responseText);
    } catch (e) {
      return NextResponse.json({
        success: false,
        message: `Fail to resolve response: ${responseText}`,
      });
    }

    if (!response.ok) {
      return NextResponse.json({
        success: false,
        message:
          data.error ||
          `API request failed: ${response.status} ${response.statusText}`,
      });
    }

    if (!data.choices?.[0]?.message?.content) {
      return NextResponse.json({
        success: false,
        message: "Invalid response format",
      });
    }

    return NextResponse.json({
      success: true,
      message: "Test successful",
      response: data.choices[0].message.content,
    });
  } catch (error) {
    return NextResponse.json({
      success: false,
      message: error instanceof Error ? error.message : "Unknown error",
    });
  }
}