import { Database } from "@/supabase/types" import { ChatSettings } from "@/types" import { createClient } from "@supabase/supabase-js" import { OpenAIStream, StreamingTextResponse } from "ai" import { ServerRuntime } from "next" import OpenAI from "openai" import { ChatCompletionCreateParamsBase } from "openai/resources/chat/completions.mjs" //import { getRuntimeEnv } from "@/lib/ipconfig" // 新增引入 import { getRuntimeEnv } from "@/lib/runtime-env" //export const runtime: ServerRuntime = "edge" export const runtime = "nodejs" export async function POST(request: Request) { const json = await request.json() const { chatSettings, messages, customModelId } = json as { chatSettings: ChatSettings messages: any[] customModelId: string } try { // const supabaseAdmin = createClient( // getRuntimeEnv("SUPABASE_URL") ?? "http://localhost:8000", // process.env.SUPABASE_SERVICE_ROLE_KEY! // ) const supabaseAdmin = createClient( "http://67.223.119.33:8000", // ⬅️ 硬编码 IP 地址 process.env.SUPABASE_SERVICE_ROLE_KEY! ) const { data: customModel, error } = await supabaseAdmin .from("models") .select("*") .eq("id", customModelId) .single() console.log("⛳ ChatSettings:", chatSettings) console.log("⛳ Messages:", messages) console.log("⛳ Custom Model ID:", customModelId) console.log("⛳ Supabase URL:", getRuntimeEnv("SUPABASE_URL")) if (!customModel) { console.error("❌ No custom model found:", error) throw new Error(error.message) } console.log("🎯 Using model:", customModel.base_url) const custom = new OpenAI({ apiKey: customModel.api_key || "", baseURL: customModel.base_url }) const response = await custom.chat.completions.create({ model: chatSettings.model as ChatCompletionCreateParamsBase["model"], messages: messages as ChatCompletionCreateParamsBase["messages"], temperature: chatSettings.temperature, stream: true }) const stream = OpenAIStream(response) return new StreamingTextResponse(stream) } catch (error: any) { let errorMessage = error.message || "An unexpected error occurred" const errorCode = error.status || 500 if (errorMessage.toLowerCase().includes("api key not found")) { errorMessage = "Custom API Key not found. Please set it in your profile settings." } else if (errorMessage.toLowerCase().includes("incorrect api key")) { errorMessage = "Custom API Key is incorrect. Please fix it in your profile settings." } return new Response(JSON.stringify({ message: errorMessage }), { status: errorCode }) } }