Boopster's picture
initial commit
af9cde9
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 });
}
}