102 lines
3.7 KiB
JavaScript
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");
|
|
}
|
|
}
|
|
}
|
|
|
|
|