From c54b1a60821b24190fa7acd36a24946640fc566e Mon Sep 17 00:00:00 2001 From: keligrubb Date: Fri, 16 Jan 2026 22:18:31 -0500 Subject: [PATCH] add capability to use default model if a default is provided via api --- index.js | 5 ++++- ollamaClient.js | 27 ++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 9082d2b..65c7b61 100644 --- a/index.js +++ b/index.js @@ -2,7 +2,7 @@ import "dotenv/config"; import { generateDungeon } from "./dungeonGenerator.js"; import { generateDungeonImages } from "./imageGenerator.js"; import { generatePDF } from "./generatePDF.js"; -import { OLLAMA_MODEL } from "./ollamaClient.js"; +import { OLLAMA_MODEL, initializeModel } from "./ollamaClient.js"; // Utility to create a filesystem-safe filename from the dungeon title function slugify(text) { @@ -18,6 +18,9 @@ function slugify(text) { throw new Error("OLLAMA_API_URL environment variable is required"); } console.log("Using Ollama API URL:", process.env.OLLAMA_API_URL); + + // Initialize model (will fetch default from API or use fallback) + await initializeModel(); console.log("Using Ollama model:", OLLAMA_MODEL); // Generate the dungeon data diff --git a/ollamaClient.js b/ollamaClient.js index 4251956..2273030 100644 --- a/ollamaClient.js +++ b/ollamaClient.js @@ -1,6 +1,31 @@ const OLLAMA_API_URL = process.env.OLLAMA_API_URL; const OLLAMA_API_KEY = process.env.OLLAMA_API_KEY; -export const OLLAMA_MODEL = process.env.OLLAMA_MODEL || "gemma3:latest"; +export let OLLAMA_MODEL = process.env.OLLAMA_MODEL || "gemma3:latest"; + +export async function initializeModel() { + if (process.env.OLLAMA_MODEL) return; + try { + const isOpenWebUI = OLLAMA_API_URL?.includes("/api/chat/completions"); + const baseUrl = OLLAMA_API_URL?.replace(/\/api\/.*$/, ""); + const url = isOpenWebUI ? `${baseUrl}/api/v1/models` : `${baseUrl}/api/tags`; + const headers = isOpenWebUI && OLLAMA_API_KEY + ? { "Authorization": `Bearer ${OLLAMA_API_KEY}` } + : {}; + const res = await fetch(url, { headers }); + if (res.ok) { + const data = await res.json(); + const model = isOpenWebUI + ? data.data?.[0]?.id || data.data?.[0]?.name + : data.models?.[0]?.name; + if (model) { + OLLAMA_MODEL = model; + console.log(`Using default model: ${model}`); + } + } + } catch (err) { + console.warn(`Could not fetch default model, using: ${OLLAMA_MODEL}`); + } +} function cleanText(str) { return str