proxy / api /v1 /models.js
dandi
fix: require paths to api/lib/
f611836
Raw
History Blame Contribute Delete
1.55 kB
const { parseKeys, selectKey, throttleKey } = require("../lib/key-rotation.js");
module.exports = async function handler(req, res) {
try {
if (req.method !== "GET") {
return res.status(405).json({ error: "Method not allowed" });
}
const keysRaw = process.env.KIMCHI_API_KEYS;
const keys = parseKeys(keysRaw);
if (keys.length === 0) {
return res.status(500).json({ error: "No API keys configured. Set KIMCHI_API_KEYS env var." });
}
const keySelection = selectKey({ keys });
const { key, index } = keySelection;
const response = await fetch("https://llm.kimchi.dev/v1/models/metadata?include_in_cli=true", {
method: "GET",
headers: {
Authorization: `Bearer ${key}`,
"User-Agent": "kimchi-proxy/1.0.0",
},
signal: AbortSignal.timeout(20000),
});
if (!response.ok) {
if (response.status === 429) {
throttleKey(key);
}
return res.status(response.status).json({
error: `Metadata fetch failed: ${response.status} ${response.statusText}`,
keyIndex: index,
});
}
const data = await response.json();
res.setHeader("X-Proxy-Key-Index", String(index));
res.setHeader("X-Proxy-Key-Total", String(keys.length));
return res.status(200).json(data);
} catch (error) {
console.error("[models proxy] error:", error);
return res.status(502).json({
error: "Failed to fetch models metadata",
details: error instanceof Error ? error.message : String(error),
});
}
};