From 8d780003276c6836ab59b384fd1ca0551cce4f8b Mon Sep 17 00:00:00 2001 From: Ivor Wanders Date: Sat, 14 Feb 2026 20:47:26 -0500 Subject: [PATCH] Restructure, make it work if ollama is down. --- nodes/ollama_generate_string.py | 17 ++++++++----- web/ollama_generate_string.js | 45 +++++++++++++++++++-------------- 2 files changed, 37 insertions(+), 25 deletions(-) diff --git a/nodes/ollama_generate_string.py b/nodes/ollama_generate_string.py index 27267fc..73c56e8 100644 --- a/nodes/ollama_generate_string.py +++ b/nodes/ollama_generate_string.py @@ -8,6 +8,7 @@ import aiohttp OLLAMA_HOST = os.environ.get("OLLAMA_HOST", "127.0.0.1:11434") + class OllamaGenerateString : def __init__(self): pass @@ -42,11 +43,15 @@ class OllamaGenerateString : @PromptServer.instance.routes.get("/iw/api/ollama/models") async def retrieve_models(request): - print("/iw/api/ollama/models") - async with aiohttp.ClientSession() as session: - async with session.get(f'http://{OLLAMA_HOST}/api/tags') as response: - body = await response.json() - model_simple = [v["model"] for v in body["models"]] - return web.json_response({"status": "success", "models": model_simple}, status=200) + print("/iw/api/ollama/models") + try: + async with aiohttp.ClientSession() as session: + async with session.get(f'http://{OLLAMA_HOST}/api/tags') as response: + body = await response.json() + model_simple = [v["model"] for v in body["models"]] + return web.json_response({"status": "success", "models": model_simple}, status=200) + except aiohttp.client_exceptions.ClientConnectorError as e: + return web.json_response({"status": "success", "models": ["ollama is down"]}, status=200) + return web.json_response({"status": "fail"}, status=500) diff --git a/web/ollama_generate_string.js b/web/ollama_generate_string.js index 62ed9ec..1e311a3 100644 --- a/web/ollama_generate_string.js +++ b/web/ollama_generate_string.js @@ -5,45 +5,52 @@ import { ComfyWidgets } from "../../scripts/widgets.js"; app.registerExtension({ name: "iw.ollama.generate", + async setup(app) { + const resp = await api.fetchApi('/iw/api/ollama/models', { }); + + if (resp.status !== 200) { + const err = `Error uploading temp file: ${resp.status} - ${resp.statusText}` + useToastStore().addAlert(err) + throw new Error(err) + } + const result_in_json = await resp.json(); + const model_list = result_in_json.models; + + app._iw_ollama_generate_string = { + "model_list": model_list + }; + + }, + async beforeRegisterNodeDef(nodeType, nodeData, app) { - let find_widget = (node, name) => node.widgets.find((w) => w.name === name); - - + let find_widget = (node, name) => node.widgets.find((w) => w.name === name); + let extension = this; if (nodeData.name === "IW_OllamaGenerateString") { - const resp = await api.fetchApi('/iw/api/ollama/models', { }); - - if (resp.status !== 200) { - const err = `Error uploading temp file: ${resp.status} - ${resp.statusText}` - useToastStore().addAlert(err) - throw new Error(err) - } - const result_in_json = await resp.json(); - const model_list = result_in_json.models; - console.log("model list:", model_list) - console.log("Something ollama thing"); nodeType.prototype.initState = function () { console.log("hello"); }; - nodeType.prototype.initWidgets = function (app) { - this.setupWidgets(model_list); + nodeType.prototype.initWidgets = function (app) { + this.setupWidgets(app._iw_ollama_generate_string.model_list); }; - nodeType.prototype.setupWidgets = function (app, models) { + nodeType.prototype.setupWidgets = function (model_list) { + let default_model = model_list[0]; + this.addWidget( "combo", "model", - model_list[0], + default_model, (value) => { this.tool = value; }, { values: model_list, - default: model_list[0], + default: default_model, } );