#!/usr/bin/env bash set -euo pipefail echo "[1/10] Creating AI Models Workspace..." mkdir -p services/models mkdir -p hooks mkdir -p components/models echo "[2/10] Installing..." npm install cat > services/models/client.js <<'EOC' import api from "../api"; const models={ list:()=>api.get("/api/models"), running:()=>api.get("/api/models/running"), download:(id)=>api.post(`/api/models/${id}/download`), load:(id)=>api.post(`/api/models/${id}/load`), unload:(id)=>api.post(`/api/models/${id}/unload`), remove:(id)=>api.delete(`/api/models/${id}`), chat:(payload)=>api.post("/api/models/chat",payload), embeddings:(payload)=>api.post("/api/models/embeddings",payload), health:()=>api.get("/api/models/health") }; export default models; EOC cat > hooks/useModels.js <<'EOC' "use client"; import {useState} from "react"; import models from "../services/models/client"; export default function useModels(){ const [loading,setLoading]=useState(false); async function exec(fn,...args){ setLoading(true); try{ const {data}=await fn(...args); return data; }finally{ setLoading(false); } } return{ loading, list:(...a)=>exec(models.list,...a), running:(...a)=>exec(models.running,...a), download:(...a)=>exec(models.download,...a), load:(...a)=>exec(models.load,...a), unload:(...a)=>exec(models.unload,...a), remove:(...a)=>exec(models.remove,...a), chat:(...a)=>exec(models.chat,...a), embeddings:(...a)=>exec(models.embeddings,...a), health:(...a)=>exec(models.health,...a) }; } EOC cat > components/models/ProductionModelsWorkspace.jsx <<'EOC' "use client"; import useModels from "../../hooks/useModels"; export default function ProductionModelsWorkspace(){ const {loading}=useModels(); return(