Spaces:
Running
Running
| import { NextResponse } from "next/server"; | |
| import * as fs from "fs"; | |
| import * as path from "path"; | |
| /** | |
| * API route to read/update the current provider. | |
| * GET: reads from .env (initial value) | |
| * POST: writes to .provider file for hot-swap (no restart needed) | |
| */ | |
| const ENV_PATH = path.join(process.cwd(), "..", ".env"); | |
| const PROVIDER_FILE = path.join(process.cwd(), "..", ".provider"); | |
| export async function GET() { | |
| try { | |
| // First check .provider file (hot-swap state) | |
| if (fs.existsSync(PROVIDER_FILE)) { | |
| const provider = fs.readFileSync(PROVIDER_FILE, "utf-8").trim().toLowerCase(); | |
| if (provider === "openai" || provider === "gemini") { | |
| return NextResponse.json({ provider, available: ["openai", "gemini"] }); | |
| } | |
| } | |
| // Fallback to .env file | |
| if (!fs.existsSync(ENV_PATH)) { | |
| return NextResponse.json({ provider: "openai", available: ["openai", "gemini"] }); | |
| } | |
| const envContent = fs.readFileSync(ENV_PATH, "utf-8"); | |
| const lines = envContent.split("\n"); | |
| // Find REALTIME_PROVIDER line (not commented) | |
| for (const line of lines) { | |
| const trimmed = line.trim(); | |
| if (trimmed.startsWith("#")) continue; | |
| if (trimmed.startsWith("REALTIME_PROVIDER=")) { | |
| const provider = trimmed.split("=")[1]?.trim().toLowerCase() || "openai"; | |
| return NextResponse.json({ | |
| provider, | |
| available: ["openai", "gemini"] | |
| }); | |
| } | |
| } | |
| // Default to openai if not found | |
| return NextResponse.json({ provider: "openai", available: ["openai", "gemini"] }); | |
| } catch (error) { | |
| console.error("Error reading provider:", error); | |
| return NextResponse.json({ provider: "openai", available: ["openai", "gemini"] }); | |
| } | |
| } | |
| export async function POST(request: Request) { | |
| try { | |
| const body = await request.json(); | |
| const newProvider = body.provider?.toLowerCase(); | |
| if (newProvider !== "openai" && newProvider !== "gemini") { | |
| return NextResponse.json({ ok: false, error: "Invalid provider" }, { status: 400 }); | |
| } | |
| // Write to .provider file for hot-swap (backend polls this) | |
| fs.writeFileSync(PROVIDER_FILE, newProvider); | |
| return NextResponse.json({ | |
| ok: true, | |
| provider: newProvider, | |
| message: "Provider switching... (hot-swap in progress)" | |
| }); | |
| } catch (error) { | |
| console.error("Error updating provider:", error); | |
| return NextResponse.json({ ok: false, error: "Failed to update provider" }, { status: 500 }); | |
| } | |
| } | |