import { execSync } from "node:child_process"; import { log } from "../log.js"; import { runPassthrough } from "../util.js"; import { getActiveChatModel, getActiveAutocompleteModel } from "../runtime-config.js"; import type { ModelDef } from "../registry/models.js"; function isPulled(ollamaTag: string): boolean { try { const output = execSync("ollama list", { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }); return output.includes(ollamaTag); } catch { return false; } } function pullModel(model: ModelDef): void { if (isPulled(model.ollamaTag)) { log(`Model already pulled: ${model.ollamaTag}`); return; } log(`Pulling ${model.name} (${model.ollamaTag})...`); runPassthrough(`ollama pull ${model.ollamaTag}`); } export function downloadModels(): void { pullModel(getActiveChatModel()); pullModel(getActiveAutocompleteModel()); }