import express from "express"; import Database from "better-sqlite3"; import { join } from "path"; import fs from "fs"; const router = express.Router(); // Helper to get database connection const getDb = () => { const dbPath = process.env.SUBSTRATE_INDEX_DB || join(process.cwd(), "data", "substrate_index.db"); // Ensure directory exists const dbDir = join(dbPath, ".."); if (!fs.existsSync(dbDir)) { fs.mkdirSync(dbDir, { recursive: true }); } const db = new Database(dbPath); // Initialize table if it doesn't exist db.prepare(` CREATE TABLE IF NOT EXISTS ollama_models ( model_id TEXT PRIMARY KEY, model_name TEXT NOT NULL, endpoint TEXT NOT NULL, provider TEXT DEFAULT 'Ollama Cloud', tag TEXT, description TEXT, created_at TEXT NOT NULL, is_active BOOLEAN DEFAULT TRUE ) `).run(); return db; }; // GET /workspace/models/create router.get("/models/create", (req, res) => { res.send(` Create Model | Research Stack

Create Model

Provision a new Ollama Cloud model instance.

`); }); // POST /workspace/models/test router.post("/models/test", async (req, res) => { try { const { endpoint } = req.body; const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), 5000); const response = await fetch(`${endpoint}/api/tags`, { signal: controller.signal }); clearTimeout(timeout); if (response.ok) { res.json({ ok: true, message: "Ollama service reached." }); } else { res.json({ ok: false, error: `HTTP ${response.status}` }); } } catch (error) { res.json({ ok: false, error: error.message }); } }); // POST /workspace/models/create router.post("/models/create", async (req, res) => { try { const { modelName, endpoint, tag, description } = req.body; if (!modelName || !endpoint) { return res.status(400).json({ ok: false, error: "Model name and endpoint are required." }); } const db = getDb(); const modelId = `ollama_${Math.random().toString(36).substring(2, 10)}`; const createdAt = new Date().toISOString(); const insert = db.prepare(` INSERT INTO ollama_models (model_id, model_name, endpoint, tag, description, created_at) VALUES (?, ?, ?, ?, ?, ?) `); insert.run(modelId, modelName, endpoint, tag || null, description || null, createdAt); db.close(); console.log(`[WORKSPACE] Model created: ${modelName} @ ${endpoint}`); res.json({ ok: true, modelId }); } catch (error) { console.error("[WORKSPACE] Error creating model:", error.message); res.status(500).json({ ok: false, error: error.message }); } }); export default router;