65 lines
2.1 KiB
JavaScript
65 lines
2.1 KiB
JavaScript
import { app } from "/scripts/app.js";
|
|
import { api } from "/scripts/api.js";
|
|
|
|
app.registerExtension({
|
|
name: "comfyui-llama-cpp",
|
|
async nodeCreated(node) {
|
|
if (node.comfyClass === "LlamaCppServerNode") {
|
|
// Check if Reconnect button already exists
|
|
const hasBtn = node.widgets && node.widgets.some(w => w.name === "reconnect" || w.label === "Reconnect");
|
|
if (!hasBtn) {
|
|
node.addWidget("button", "Reconnect", "reconnect", () => {
|
|
reconnectServer(node);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
async function reconnectServer(node) {
|
|
const urlWidget = node.widgets.find(w => w.name === "url");
|
|
const modelWidget = node.widgets.find(w => w.name === "model");
|
|
if (!urlWidget || !modelWidget) return;
|
|
|
|
const url = urlWidget.value;
|
|
try {
|
|
modelWidget.options.values = ["Connecting..."];
|
|
modelWidget.value = "Connecting...";
|
|
node.setSize(node.size);
|
|
app.canvas.draw(true, true);
|
|
|
|
const response = await api.fetchApi("/llama-cpp/models", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
body: JSON.stringify({ url })
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error("Failed to connect to llama.cpp server");
|
|
}
|
|
|
|
const data = await response.json();
|
|
if (data.error) {
|
|
throw new Error(data.error);
|
|
}
|
|
|
|
const models = data.models || [];
|
|
const options = ["Auto (Detect Active Model)", ...models.filter(m => m !== "Auto (Detect Active Model)")];
|
|
|
|
modelWidget.options.values = options;
|
|
const activeModel = data.active_model;
|
|
if (activeModel && options.includes(activeModel)) {
|
|
modelWidget.value = activeModel;
|
|
} else {
|
|
modelWidget.value = "Auto (Detect Active Model)";
|
|
}
|
|
} catch (err) {
|
|
console.error(err);
|
|
modelWidget.options.values = [`Error: ${err.message}`];
|
|
modelWidget.value = `Error: ${err.message}`;
|
|
}
|
|
app.canvas.draw(true, true);
|
|
}
|