Files
griptape-ai-ComfyUI-Griptape/js/ConfigurationNodes.js
2024-08-04 10:56:10 -07:00

102 lines
3.7 KiB
JavaScript

import { getOllamaModels, getLMStudioModels, updatePromptModelList } from "./gtUIUtils.js";
export function setupConfigurationNodes(nodeType, nodeData, app) {
if (nodeData.name.includes("Griptape Agent Config") || (nodeData.name.includes("Griptape Embedding Driver")) || (nodeData.name.includes("Griptape Prompt Driver"))) {
const onNodeCreated = nodeType.prototype.onNodeCreated;
nodeType.prototype.onNodeCreated = async function () {
onNodeCreated?.apply(this, arguments);
let engine = null;
if (nodeData.name.includes("Ollama")) {
engine="ollama"
}
if (nodeData.name.includes("LM Studio")) {
engine="lmstudio"
}
if (engine) {
if (this.widgets) {
const modelWidget = this.widgets.find((w) => w.name === "model" || w.name === "prompt_model");
const baseIpWidget = this.widgets.find((w) => w.name === "base_url");
const portWidget = this.widgets.find((w) => w.name === "port");
const fetchModels = async (engine, baseIp, port) => {
try {
const response = await fetch("/Griptape/get_models", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
engine: engine,
base_ip: baseIp,
port: port,
}),
});
if (response.ok) {
const models = await response.json();
return models;
} else {
console.error(`Failed to fetch models: ${response.status}`);
return [];
}
} catch (error) {
console.error(`Error fetching models for engine ${engine}:`, error);
return [];
}
};
const updateModels = async () => {
let engine = "ollama"
if (nodeData.name.includes("LM Studio")) {
engine="lmstudio"
}
const baseIp = baseIpWidget.value;
const port = portWidget.value;
const models = await fetchModels(engine, baseIp, port);
// Update modelWidget options and value
modelWidget.options.values = models;
if (models.includes(modelWidget.value)) {
modelWidget.value = modelWidget.value;
} else if (models.length > 0) {
modelWidget.value = models[0];
} else {
modelWidget.value = "";
}
this.triggerSlot(0);
};
baseIpWidget.callback = updateModels;
portWidget.callback = updateModels;
// Initial update
await updateModels();
fetchModels(engine, baseIpWidget.value, portWidget.value)
}
}
setFixedRandomization(this);
};
}
}
function setFixedRandomization(node) {
if(node.widgets) {
const controlWidget = node.widgets.find((w) => w.name === "control_after_generate");
if (controlWidget) {
controlWidget.value = "fixed";
} else {
console.warn("Control widget not found for setting fixed randomization");
}
}
}