import express from "express";
import Database from "./sqlite.js";
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;