@barivia/barsom-mcp 0.3.7 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{McpServer as e}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as t}from"@modelcontextprotocol/sdk/server/stdio.js";import{z as o}from"zod";import{registerAppResource as a,registerAppTool as r,RESOURCE_MIME_TYPE as n}from"@modelcontextprotocol/ext-apps/server";import i from"node:fs/promises";import s from"node:path";const l=process.env.BARIVIA_API_URL??process.env.BARSOM_API_URL??"https://api.barivia.se",u=process.env.BARIVIA_API_KEY??process.env.BARSOM_API_KEY??"";u||(console.error("Error: BARIVIA_API_KEY not set. Set it in your MCP client config."),process.exit(1));const d=parseInt(process.env.BARIVIA_FETCH_TIMEOUT_MS??"30000",10),c=new Set([502,503,504]);function p(e,t){return!(void 0===t||!c.has(t))||(e instanceof DOMException&&"AbortError"===e.name||e instanceof TypeError)}async function m(e,t,o=d){const a=new AbortController,r=setTimeout(()=>a.abort(),o);try{return await fetch(e,{...t,signal:a.signal})}finally{clearTimeout(r)}}async function g(e,t,o,a){const r=`${l}${t}`,n=a?.["Content-Type"]??"application/json",i=Math.random().toString(36).slice(2,10),s={Authorization:`Bearer ${u}`,"Content-Type":n,"X-Request-ID":i,...a};let d,c;void 0!==o&&(d="application/json"===n?JSON.stringify(o):String(o));for(let t=0;t<=2;t++)try{const o=await m(r,{method:e,headers:s,body:d}),a=await o.text();if(!o.ok){if(t<2&&p(null,o.status)){await new Promise(e=>setTimeout(e,1e3*2**t));continue}const e=(()=>{try{return JSON.parse(a)}catch{return null}})(),r=e?.error??a,n=400===o.status?" Check parameter types and required fields.":404===o.status?" The resource may not exist or may have been deleted.":409===o.status?" The job may not be in the expected state.":429===o.status?" Rate limit exceeded — wait a moment and retry.":"";throw new Error(`${r}${n}`)}return JSON.parse(a)}catch(e){if(c=e,t<2&&p(e)){await new Promise(e=>setTimeout(e,1e3*2**t));continue}throw e}throw c}async function h(e){const t=`${l}${e}`;let o;for(let a=0;a<=2;a++)try{const o=await m(t,{method:"GET",headers:{Authorization:`Bearer ${u}`}});if(!o.ok){if(a<2&&p(null,o.status)){await new Promise(e=>setTimeout(e,1e3*2**a));continue}throw new Error(`API GET ${e} returned ${o.status}`)}const r=await o.arrayBuffer();return{data:Buffer.from(r),contentType:o.headers.get("content-type")??"application/octet-stream"}}catch(e){if(o=e,a<2&&p(e)){await new Promise(e=>setTimeout(e,1e3*2**a));continue}throw e}throw o}function f(e){return{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}async function b(e,t=3e4,o=1e3){const a=Date.now();for(;Date.now()-a<t;){const t=await g("GET",`/v1/jobs/${e}`),a=t.status;if("completed"===a||"failed"===a||"cancelled"===a)return{status:a,result_ref:t.result_ref,error:t.error};await new Promise(e=>setTimeout(e,o))}return{status:"timeout"}}const _=new e({name:"analytics-engine",version:"0.4.0"}),y=import.meta.dirname??s.dirname(new URL(import.meta.url).pathname);async function w(e){const t=[s.join(y,"views","src","views",e,"index.html"),s.join(y,"views",e,"index.html"),s.join(y,"..","dist","views","src","views",e,"index.html")];for(const e of t)try{return await i.readFile(e,"utf-8")}catch{continue}return null}const v="ui://barsom/som-explorer",$="ui://barsom/data-preview",x="ui://barsom/training-monitor";function j(e,t,o,a){const r=t.output_format??"pdf";if("transition_flow"===e){return[`transition_flow_lag${t.lag??1}.${r}`]}if("project_variable"===e){const e=t.variable_name??"variable";return[`projected_${String(e).replace(/[^a-zA-Z0-9_]/g,"_")}.${r}`]}if("derive_variable"===e){const e=t.variable_name??"variable";return[`projected_${String(e).replace(/[^a-zA-Z0-9_]/g,"_")}.${r}`]}const n=t.features??[],i=`combined.${r}`,s=`umatrix.${r}`,l=`hit_histogram.${r}`,u=`correlation.${r}`,d=n.map((e,t)=>`component_${t+1}_${e.replace(/[^a-zA-Z0-9_]/g,"_")}.${r}`),c=[i,s,l,u,...d];if(void 0===o||"default"===o)return a?c:[i];if("combined_only"===o)return[i];if("all"===o)return c;if(Array.isArray(o)){const e={combined:i,umatrix:s,hit_histogram:l,correlation:u};return n.forEach((t,o)=>{e[`component_${o+1}`]=d[o]}),o.map(t=>{const o=t.trim().toLowerCase();return e[o]?e[o]:t.includes(".")?t:null}).filter(e=>null!=e)}return[i]}function S(e){return e.endsWith(".pdf")?"application/pdf":e.endsWith(".svg")?"image/svg+xml":"image/png"}async function T(e,t,o){try{const{data:a}=await h(`/v1/results/${t}/image/${o}`);e.push({type:"image",data:a.toString("base64"),mimeType:S(o),annotations:{audience:["user"],priority:.8}})}catch{e.push({type:"text",text:`(${o} not available for inline display)`})}}a(_,v,v,{mimeType:n},async()=>{const e=await w("som-explorer");return{contents:[{uri:v,mimeType:n,text:e??"<html><body>SOM Explorer view not built yet. Run: npm run build:views</body></html>"}]}}),a(_,$,$,{mimeType:n},async()=>{const e=await w("data-preview");return{contents:[{uri:$,mimeType:n,text:e??"<html><body>Data Preview view not built yet.</body></html>"}]}}),a(_,x,x,{mimeType:n},async()=>{const e=await w("training-monitor");return{contents:[{uri:x,mimeType:n,text:e??"<html><body>Training Monitor view not built yet.</body></html>"}]}}),r(_,"explore_som",{title:"Explore SOM",description:"Interactive SOM explorer dashboard. Opens an inline visualization where you can toggle features, click nodes, and export figures. Use this after get_results for a richer, interactive exploration experience. Falls back to text+image on hosts that don't support MCP Apps.",inputSchema:{job_id:o.string().describe("Job ID of a completed SOM training job")},_meta:{ui:{resourceUri:v}}},async({job_id:e})=>{const t=await g("GET",`/v1/results/${e}`),o=t.summary??{},a=[];a.push({type:"text",text:JSON.stringify({job_id:e,summary:o,download_urls:t.download_urls})});const r=o.output_format??"pdf";return await T(a,e,`combined.${r}`),{content:a}}),_.tool("guide_barsom_workflow","Retrieve the Standard Operating Procedure (SOP) for the barSOM analysis pipeline.\nALWAYS call this tool first if you are unsure of the steps to execute a complete Self-Organizing Map analysis.\nThe workflow explains the exact sequence of tool calls needed: Upload → Preprocess → Train → Wait → Analyze.",{},async()=>({content:[{type:"text",text:"barSOM Standard Operating Procedure (SOP)\n\nStep 1: Upload Data\n- Use `datasets(action=upload)` with a local `file_path` to your CSV.\n- BEFORE UPLOADING: Clean the dataset to remove NaNs or malformed data.\n- Capture the `dataset_id` returned.\n\nStep 2: Preview & Preprocess\n- Use `datasets(action=preview)` to inspect columns, ranges, and types.\n- Check for skewed columns requiring 'log' or 'sqrt' transforms.\n- Check for cyclical or temporal features (hours, days) requiring `cyclic_features` or `temporal_features` during training.\n\nStep 3: Train the SOM\n- Call `train_som` with the `dataset_id`.\n- Carefully select columns to include (start with 5-10).\n- Assign `feature_weights` (especially for categorical data with natural hierarchies).\n- Wait for the returned `job_id`.\n\nStep 4: Wait for Completion (ASYNC POLLING)\n- Use `get_job_status` every 10-15 seconds.\n- Wait until status is \"completed\". DO NOT assume failure before 3 minutes (or longer for large grids).\n- If it fails, read the error message and adjust parameters (e.g., reduce grid size, fix column names).\n\nStep 5: Analyze and Export\n- Once completed, use `analyze(type=component_planes)` or `analyze(type=clusters)` to interpret the results.\n- Call `get_results` to get the final metrics (Quantization Error, Topographic Error)."}]})),_.tool("datasets",'Manage datasets: upload, preview, subset, or delete.\n\naction=upload: Upload a CSV for SOM analysis. Prefer file_path over csv_data so the MCP reads the file directly. Returns dataset ID and metadata. Then use datasets(action=preview) before train_som.\nBEFORE UPLOADING: Ensure data has no NaNs, missing values, or formats that can\'t be handled. The user/LLM is responsible for cleaning the dataset before upload. Categorical features should be weighted if there is a natural hierarchy.\naction=preview: Show columns, stats, sample rows, cyclic/datetime detections. ALWAYS preview before train_som on an unfamiliar dataset.\naction=subset: Create a new dataset from a subset of an existing one. Requires name and at least one of row_range or filters.\n - row_range: [start, end] 1-based inclusive (e.g. [1, 2000] for first 2000 rows)\n - filters: array of conditions, ALL must match (AND logic). Each: { column, op, value }.\n Operators:\n eq — exact match (string or number): { column: "region", op: "eq", value: "Europe" }\n ne — not equal: { column: "status", op: "ne", value: "error" }\n in — value in set: { column: "grade", op: "in", value: ["A", "B"] }\n gt/lt — above/below threshold: { column: "temp", op: "gt", value: 20 }\n gte/lte — at or above/below: { column: "price", op: "gte", value: 100 }\n between — closed interval [lo, hi]: { column: "age", op: "between", value: [18, 65] }\n - Combine row_range + filters to slice both rows and values.\n - Single filter object is also accepted (auto-wrapped).\naction=delete: Remove a dataset and free the slot.\n\nBEST FOR: Tabular numeric data. CSV with header required. Use list(type=datasets) to see existing datasets.',{action:o.enum(["upload","preview","subset","delete"]).describe("upload: add a CSV; preview: inspect before training; subset: create subset dataset; delete: remove dataset"),name:o.string().optional().describe("Dataset name (required for action=upload and subset)"),file_path:o.string().optional().describe("Path to local CSV (for upload; prefer over csv_data)"),csv_data:o.string().optional().describe("Inline CSV string (for upload; use for small data)"),dataset_id:o.string().optional().describe("Dataset ID (required for preview, subset, and delete)"),n_rows:o.number().int().optional().default(5).describe("Sample rows to return (preview only)"),row_range:o.tuple([o.number().int(),o.number().int()]).optional().describe("For subset: [start, end] 1-based inclusive row range (e.g. [1, 2000])"),filters:o.preprocess(e=>null==e||Array.isArray(e)?e:"object"==typeof e&&null!==e&&"column"in e?[e]:e,o.array(o.object({column:o.string(),op:o.enum(["eq","ne","in","gt","lt","gte","lte","between"]),value:o.union([o.string(),o.number(),o.array(o.union([o.string(),o.number()]))])})).optional().describe("For subset: filter conditions (AND logic). Single object or array. ops: eq, ne, in, gt, lt, gte, lte, between. Examples: { column: 'temp', op: 'between', value: [15, 30] }, { column: 'region', op: 'eq', value: 'Europe' }")),filter:o.object({column:o.string(),op:o.enum(["eq","ne","in","gt","lt","gte","lte","between"]),value:o.union([o.string(),o.number(),o.array(o.union([o.string(),o.number()]))])}).optional().describe("Deprecated — use filters instead. Single filter condition.")},async({action:e,name:t,file_path:o,csv_data:a,dataset_id:r,n_rows:n,row_range:l,filters:u,filter:d})=>{if("upload"===e){if(!t)throw new Error("datasets(upload) requires name");let e;if(o){const t=s.resolve(o);try{e=await i.readFile(t,"utf-8")}catch(e){const o=e instanceof Error?e.message:String(e);throw new Error(`Cannot read file "${t}": ${o}`)}}else{if(!(a&&a.length>0))throw new Error("datasets(upload) requires file_path or csv_data");e=a}return f(await g("POST","/v1/datasets",e,{"X-Dataset-Name":t,"Content-Type":"text/csv"}))}if("preview"===e){if(!r)throw new Error("datasets(preview) requires dataset_id");const e=await g("GET",`/v1/datasets/${r}/preview?n_rows=${n??5}`),t=e.columns??[],o=e.column_stats??[],a=e.cyclic_hints??[],i=e.sample_rows??[],s=e.datetime_columns??[],l=e.temporal_suggestions??[],u=e=>null==e?"—":Number(e).toFixed(3),d=[`Dataset: ${e.name} (${e.dataset_id})`,`${e.total_rows} rows × ${e.total_cols} columns`,"","Column Statistics:","| Column | Min | Max | Mean | Std | Nulls | Numeric |","|--------|-----|-----|------|-----|-------|---------|"];for(const e of o)d.push(`| ${e.column} | ${u(e.min)} | ${u(e.max)} | ${u(e.mean)} | ${u(e.std)} | ${e.null_count??0} | ${!1!==e.is_numeric?"yes":"no"} |`);if(a.length>0){d.push("","Detected Cyclic Feature Hints:");for(const e of a)d.push(` • ${e.column} — period=${e.period} (${e.reason})`)}if(s.length>0){d.push("","Detected Datetime Columns:");for(const e of s){const t=(e.detected_formats??[]).map(e=>`${e.format} — ${e.description} (${(100*e.match_rate).toFixed(0)}% match)`).join("; ");d.push(` • ${e.column}: sample="${e.sample}" → ${t}`)}}if(l.length>0){d.push("","Temporal Feature Suggestions (require user approval):");for(const e of l)d.push(` • Columns: ${e.columns.join(" + ")} → format: "${e.format}"`),d.push(` Available components: ${e.available_components.join(", ")}`)}if(i.length>0){d.push("",`Sample Rows (first ${i.length}):`),d.push(`| ${t.join(" | ")} |`),d.push(`| ${t.map(()=>"---").join(" | ")} |`);for(const e of i)d.push(`| ${t.map(t=>String(e[t]??"")).join(" | ")} |`)}return{content:[{type:"text",text:d.join("\n")}]}}if("subset"===e){if(!r)throw new Error("datasets(subset) requires dataset_id");if(!t)throw new Error("datasets(subset) requires name");const e=u??(d?[d]:void 0);if(void 0===l&&void 0===e)throw new Error("datasets(subset) requires at least one of row_range or filters");const o={name:t};void 0!==l&&(o.row_range=l),void 0!==e&&(o.filters=e);return f(await g("POST",`/v1/datasets/${r}/subset`,JSON.stringify(o),{"Content-Type":"application/json"}))}if("delete"===e){if(!r)throw new Error("datasets(delete) requires dataset_id");return f(await g("DELETE",`/v1/datasets/${r}`))}throw new Error("Invalid action")}),_.tool("train_som","Train a Self-Organizing Map on the dataset. Returns a job_id for polling.\n\nBEST FOR: Exploratory analysis of multivariate numeric data — clustering, regime\ndetection, process monitoring, anomaly visualization, dimensionality reduction.\nNOT FOR: Time-series forecasting, classification, or text/image data.\n\nASYNC POLLING PROTOCOL:\n- This tool returns a job_id. You MUST poll get_job_status to check completion.\n- Poll every 10-15 seconds.\n- Wait for status \"completed\" before calling analyze() or get_results().\n\nBEFORE calling, ask the user:\n1. Which columns to include? (use 'columns' to restrict)\n2. Any cyclic features?\n3. Any skewed columns? (suggest transforms)\n4. Feature weights?\n5. Quick exploration or refined map?\n\nESCALATION LADDER (If this tool fails):\n- Error mentions temporal validation: The dataset likely has datetime formatting issues. Use datasets(action=preview).\n- Error mentions column not found: Use datasets(action=preview) to verify exact column names (case-sensitive).\n- Error mentions NaNs or missing data: The user must clean the dataset.\n\nSee docs/SOM_PROCESS_AND_BEST_PRACTICES.md for detailed processual knowledge.",{dataset_id:o.string().describe("Dataset ID from datasets(action=upload) or list(type=datasets)"),preset:o.enum(["quick","standard","refined","high_res"]).optional().describe("Training preset — sets sensible defaults for grid, epochs, and batch_size. Explicit params override preset values. quick: 15×15, [15,5], batch=48. standard: 25×25, [30,15], batch=48, best with GPU. refined: 40×40, [50,25], batch=32, best with GPU. high_res: 60×60, [60,40], batch=32, best with GPU."),grid_x:o.number().int().optional().describe("Grid width (omit for auto from data size)"),grid_y:o.number().int().optional().describe("Grid height (omit for auto from data size)"),epochs:o.preprocess(e=>{if(null==e)return e;if("string"==typeof e){const t=parseInt(e,10);if(!Number.isNaN(t))return t;const o=e.match(/^\[\s*(\d+)\s*,\s*(\d+)\s*\]$/);if(o)return[parseInt(o[1],10),parseInt(o[2],10)]}return e},o.union([o.number().int(),o.array(o.number().int()).length(2)]).optional().describe("epochs: integer or [ordering, convergence] array, not a string. Example: 40 or [40, 20]. Set convergence=0 to skip phase 2 (e.g. [15, 0]).")),model:o.enum(["SOM","RSOM","SOM-SOFT","RSOM-SOFT"]).optional().default("SOM").describe("SOM model type. SOM=standard, SOM-SOFT=GTM-style soft responsibilities, RSOM=recurrent (time-series), RSOM-SOFT=recurrent+soft."),periodic:o.boolean().optional().default(!0).describe("Use periodic (toroidal) boundaries"),columns:o.array(o.string()).optional().describe("Subset of CSV column names to train on. Omit to use all columns. Useful to exclude irrelevant features."),cyclic_features:o.array(o.object({feature:o.string().describe("Column name (e.g., 'weekday')"),period:o.number().describe("Period (e.g., 7 for weekday, 24 for hour, 360 for angle)")})).optional().describe("Features to encode as cyclic (cos, sin) pairs"),temporal_features:o.array(o.object({columns:o.array(o.string()).describe("Column name(s) containing datetime strings, combined in order (e.g. ['Date', 'Time'])"),format:o.string().describe("Julia Dates format string from the whitelist (e.g. 'dd.mm.yyyy HH:MM'). Must match the combined column values."),extract:o.array(o.enum(["hour_of_day","day_of_year","month","day_of_week","minute_of_hour"])).describe("Which temporal components to extract"),cyclic:o.boolean().default(!0).describe("Encode extracted components as cyclic sin/cos pairs (default true)"),separator:o.string().optional().describe("Separator when combining multiple columns (default ' '). Use 'T' for ISO 8601.")})).optional().describe("Temporal feature extraction from datetime columns. Parses dates/times and extracts components. NEVER add this without user approval."),feature_weights:o.record(o.number()).optional().describe("Per-feature importance weights as {column_name: weight}. Applied after normalization (column *= sqrt(weight)). weight=0 disables, >1 emphasizes, <1 de-emphasizes. Cyclic shorthand: {'day_of_year': 2.0} auto-expands to both _cos and _sin. Categorical features should be weighted by the LLM if there is any natural hierarchy applicable that could be constructive."),transforms:o.record(o.enum(["log","log1p","log10","sqrt","square","abs","invert","rank","none"])).optional().describe("Per-column preprocessing applied BEFORE normalization. Example: {revenue: 'log', pressure: 'sqrt'}. 'log' = natural log (fails on <=0), 'log1p' = log(1+x) (safe for zeros), 'sqrt' = square root, 'rank' = replace with rank order, 'invert' = 1/x. Suggest log/log1p for right-skewed distributions (prices, volumes, counts)."),normalize:o.union([o.enum(["all","auto"]),o.array(o.string())]).optional().default("auto").describe("Normalization mode. 'auto' skips already-cyclic features."),sigma_f:o.preprocess(e=>{if(null==e)return e;if("string"==typeof e){const t=parseFloat(e);if(!Number.isNaN(t))return t}return e},o.number().optional().describe("Final neighborhood radius at end of ordering phase (default 1.0). Lower values (0.5–0.7) produce sharper cluster boundaries.")),learning_rate:o.preprocess(e=>{if(null==e)return e;if("string"==typeof e){const t=parseFloat(e);if(!Number.isNaN(t))return t}return e},o.union([o.number(),o.object({ordering:o.tuple([o.number(),o.number()]),convergence:o.tuple([o.number(),o.number()])})]).optional().describe("Learning rate control. Number = sets ordering final rate (e.g. 0.05). Object = full control: {ordering: [eta_0, eta_f], convergence: [eta_0, eta_f]}. Default: ordering 0.1→0.01, convergence 0.01→0.001.")),batch_size:o.number().int().optional().describe("Training batch size (default: auto ≈ n_samples/10, max 256). Smaller batches (e.g. 32–64) often sharpen features and can improve map quality (QE, explained variance) at the cost of more steps per epoch. Larger batches = faster epochs but coarser updates; try 64–256 for large datasets (>10k samples)."),backend:o.enum(["auto","cpu","cuda","cuda_graphs"]).optional().default("auto").describe("Compute backend. 'auto' uses CUDA if GPU is available (recommended). 'cpu' forces CPU. 'cuda_graphs' uses CUDA graph capture for maximum GPU throughput."),output_format:o.enum(["png","pdf","svg"]).optional().default("png").describe("Image output format. PNG (default) for inline viewing in chat/console, PDF for publication-quality vector graphics and downloads, SVG for web embedding."),output_dpi:o.enum(["standard","retina","print"]).optional().default("retina").describe("Resolution for PNG output: standard (1x), retina (2x, default), print (4x). Ignored for PDF/SVG."),colormap:o.string().optional().describe("Override default colormap (coolwarm) for component planes and hit histogram. Examples: viridis, plasma, inferno, magma, cividis, turbo, thermal, hot, coolwarm, balance, RdBu, Spectral. U-matrix always uses grays, cyclic features use twilight."),row_range:o.tuple([o.number().int().min(1),o.number().int().min(1)]).optional().describe("Train on a subset of rows only: [start, end] 1-based inclusive. Alternative to creating a subset dataset with datasets(action=subset).")},async({dataset_id:e,preset:t,grid_x:o,grid_y:a,epochs:r,model:n,periodic:i,columns:s,transforms:l,cyclic_features:u,temporal_features:d,feature_weights:c,normalize:p,sigma_f:m,learning_rate:h,batch_size:b,backend:_,output_format:y,output_dpi:w,colormap:v,row_range:$})=>{let x={};try{const e=await g("GET","/v1/training/config");x=e?.presets||{}}catch(e){if(t&&!o&&!r)throw new Error("Could not fetch training config from server, and missing explicit grid/epochs.")}const j=t?x[t]:void 0,S={model:n,periodic:i,normalize:p};void 0!==o&&void 0!==a?S.grid=[o,a]:j&&(S.grid=j.grid),void 0!==r?S.epochs=r:j&&(S.epochs=j.epochs),u&&u.length>0&&(S.cyclic_features=u),s&&s.length>0&&(S.columns=s),l&&Object.keys(l).length>0&&(S.transforms=l),d&&d.length>0&&(S.temporal_features=d),c&&Object.keys(c).length>0&&(S.feature_weights=c),void 0!==m&&(S.sigma_f=m),void 0!==h&&(S.learning_rate=h),void 0!==b?S.batch_size=b:j&&(S.batch_size=j.batch_size),void 0!==_&&"auto"!==_?S.backend=_:j?.backend&&(S.backend=j.backend),S.output_format=y??"png";const T={standard:1,retina:2,print:4};w&&"retina"!==w&&(S.output_dpi=T[w]??2),v&&(S.colormap=v),$&&$.length>=2&&$[0]<=$[1]&&(S.row_range=$);const E=await g("POST","/v1/jobs",{dataset_id:e,params:S});try{const e=await g("GET","/v1/system/info"),t=Number(e.status?.pending_jobs??e.pending_jobs??0),o=Number(e.training_time_estimates_seconds?.total??(e.gpu_available?45:120)),a=Math.round(t*o/60);a>1?(E.estimated_wait_minutes=a,E.message=`Job submitted. You are #${t+1} in queue. Estimated wait before start: ~${a} min.`):E.message="Job submitted. Should start momentarily."}catch(e){}return f(E)}),_.tool("get_job_status","Check status and progress of a training or analysis job.\n\nASYNC POLLING PROTOCOL:\n- Poll every 10-15 seconds. Do NOT poll faster as it wastes context.\n- For large grids (40x40+), do not assume failure before 3 minutes on CPU.\n- Wait for status \"completed\" before calling analyze() or get_results().\n\nESCALATION LADDER:\n- When status is 'completed', call get_results() to retrieve the map and metrics.\n- When status is 'failed', the worker hit an error. Extract the error message.\n - If the error is about memory/allocation, reduce batch_size or grid_x/grid_y and run train_som again.\n - If the error is about column missing, verify columns with datasets(action=preview).\n - If the error is about NaNs, the user MUST clean the dataset.\n\nTIMING:\nTypical completion times (CPU, 8700 samples):\n 10x10, 10 epochs: ~30s | 20x20, 30 epochs: ~3–5 min | 40x40, 60 epochs: ~15–30 min",{job_id:o.string().describe("Job ID from train_som")},async({job_id:e})=>{const t=await g("GET",`/v1/jobs/${e}`),o=t.status,a=100*(t.progress??0),r=null!=t.label&&""!==t.label?String(t.label):null;let n=`${r?`Job ${r} (id: ${e})`:`Job ${e}`}: ${o} (${a.toFixed(1)}%)`;return"completed"===o?n+=` | Results ready. Use get_results(job_id="${e}") to retrieve.`:"failed"===o&&(n+=` | Error: ${t.error??"unknown"}`),{content:[{type:"text",text:n}]}}),_.tool("get_results",'Retrieve results of a completed SOM training, projection, or derived variable job.\n\nWHEN TO USE: \n- Getting the first look at a trained SOM — combined visualization + quality metrics.\n- ONLY call this after get_job_status returns "completed".\n\nESCALATION LADDER:\n- If this returns an error that the job is not found, verify the job_id.\n- If it returns "job not complete", you polled too early. Call get_job_status and WAIT.\n\nTIMING: Near-instant (reads pre-computed results from S3).\n\nReturns: text summary with metrics and inline images (combined view and all plots shown directly in chat).\n\nDOWNLOAD LINKS: Links to API-domain or presigned URLs may not work when clicked (MCP holds the API key, not the browser). Images are inlined. For weights use get_job_export(export="weights"); for node stats use get_job_export(export="nodes"). If the user wants to save a file, offer to fetch via the appropriate tool.\n\nOPTIONS:\n- figures: request specific plots only. Omit for default (combined only; or all if include_individual=true).\n - "combined_only": only the combined view.\n - "all": combined + umatrix + hit_histogram + all component planes.\n - Array of logical names: e.g. figures: ["umatrix"] for just the U-matrix, or figures: ["combined","hit_histogram","correlation"] or ["combined","umatrix","component_1","component_2"]. Logical names: combined, umatrix, hit_histogram, correlation, component_1, component_2, ... (component_N = Nth feature). Pass an array to fetch/save only those figures.\n- include_individual=true: when figures is omitted, shows each component plane, U-matrix, and hit histogram\n as separate inline images. Ignored when figures is set.\n\nAFTER showing results, guide the user:\n1. "The U-matrix shows [N] distinct regions. Does this match expected groupings?"\n2. "QE=X, TE=Y — [assessment]. Would you like to retrain with different params?"\n3. "Which features show interesting patterns in the component planes?"\n4. If QE > 2: suggest more epochs or larger grid\n5. If TE > 0.15: suggest larger grid\n6. If explained variance < 0.7: suggest transforms, feature selection, or more training\n\nWORKFLOW: get_results → analyze(clusters) → component_planes → feature_correlation.\nRequest specific figures with get_results(job_id, figures=[...]) (e.g. figures: ["umatrix"] or figures: ["combined","hit_histogram"]) or run analyze(job_id, analysis_type) for a single view.\nUse get_job_export(export="training_log") for the learning curve (QE vs epoch — healthy=steady decline then plateau).\nUse analyze(job_id, "quality_report") for extended metrics (trustworthiness, neighborhood preservation).\n\nMETRIC INTERPRETATION:\n- QE < 1.5: good fit. QE > 2: consider more epochs, larger grid, or batch_size=32.\n- TE < 0.05: good topology. TE > 0.15: grid too small.\n- Explained variance > 0.8: good. < 0.7: try transforms, fewer features, or more training.\nAfter any group of actions or downloading of results, you SHOULD prepare some feedback based on the user\'s experience so far, show it to the user, and ask for permission to send it via send_feedback (max 190 words).',{job_id:o.string().describe("Job ID of a completed job"),figures:o.union([o.enum(["default","combined_only","all"]),o.array(o.string())]).optional().describe("Which figures to return. Omit or 'default' for combined only (or all if include_individual=true). 'combined_only': just combined view. 'all': combined + umatrix + hit_histogram + correlation + all component planes. Or array of logical names to fetch only those: combined, umatrix, hit_histogram, correlation, component_1, component_2, ..."),include_individual:o.boolean().optional().default(!1).describe("If true and figures is omitted, inline each individual plot (component planes, u-matrix, hit histogram). Ignored when figures is set.")},async({job_id:e,figures:t,include_individual:o})=>{const a=await g("GET",`/v1/results/${e}`),r=a.summary??{},n=(a.download_urls,null!=a.label&&""!==a.label?String(a.label):null),i=n?`Results for ${n} (job_id: ${e})`:`Results for job_id: ${e}`,s=[],l=new Set,u=r.job_type??"train_som";r.output_format;if("transition_flow"===u){const a=r.lag??1,n=r.flow_stats??{};s.push({type:"text",text:[`Transition Flow ${i}`,`Parent SOM: ${r.parent_job_id??"N/A"} | Lag: ${a} | Samples: ${r.n_samples??0}`,"","Flow Statistics:",` Mean flow magnitude: ${void 0!==n.mean_magnitude?Number(n.mean_magnitude).toFixed(4):"N/A"}`,` Max flow magnitude: ${void 0!==n.max_magnitude?Number(n.max_magnitude).toFixed(4):"N/A"}`,` Nodes with flow: ${n.n_nodes_with_flow??"N/A"}`,"","Arrows show net directional drift between consecutive BMU assignments.","Long/bright arrows = frequent state transitions. Short arrows = stable states.","Background = U-matrix (cluster boundaries). Arrows in dark regions = intra-cluster.","","Use transition_flow(lag=N) with larger N to reveal longer-term temporal structure."].join("\n")});for(const a of j(u,r,t,o))await T(s,e,a),l.add(a)}else if("project_variable"===u){const a=r.variable_name??"variable",n=r.aggregation??"mean",d=r.variable_stats??{};s.push({type:"text",text:[`Projected Variable: ${a} (${n}) — ${i}`,`Parent SOM: ${r.parent_job_id??"N/A"} | Samples: ${r.n_samples??0}`,"",`Variable Statistics (per-node ${n}):`,` Min: ${void 0!==d.min?Number(d.min).toFixed(3):"N/A"}`,` Max: ${void 0!==d.max?Number(d.max).toFixed(3):"N/A"}`,` Mean: ${void 0!==d.mean?Number(d.mean).toFixed(3):"N/A"}`,` Nodes with data: ${d.n_nodes_with_data??"N/A"} / ${Number(d.n_nodes_with_data??0)+Number(d.n_nodes_empty??0)}`,"","Non-random spatial patterns indicate the variable correlates with the SOM's","learned feature space, even if it wasn't used in training."].join("\n")});for(const a of j(u,r,t,o))await T(s,e,a),l.add(a)}else{const a=r.grid??[0,0],n=r.features??[],d=r.epochs,c=Array.isArray(d)?0===d[1]?`${d[0]} ordering only`:`${d[0]} ordering + ${d[1]} convergence`:String(d??"N/A"),p=e=>null!=e?Number(e).toFixed(4):"N/A",m=r.training_duration_seconds,g=r.ordering_errors,h=[`SOM Training ${i}`,`Grid: ${a[0]}×${a[1]} | Features: ${r.n_features??0} | Samples: ${r.n_samples??0}`,`Model: ${r.model??"SOM"} | Epochs: ${c}`,`Periodic: ${r.periodic??!0} | Normalize: ${r.normalize??"auto"}`,void 0!==r.sigma_f?`Sigma_f: ${r.sigma_f}`:"",void 0!==m?`Training duration: ${m}s`:"","","Quality Metrics:",` Quantization Error: ${p(r.quantization_error)} (lower is better)`,` Topographic Error: ${p(r.topographic_error)} (lower is better, <0.1 is good)`,` Explained Variance: ${p(r.explained_variance)} (higher is better, >0.7 is good)`,` Silhouette Score: ${p(r.silhouette)} (higher is better, [-1, 1])`,` Davies-Bouldin: ${p(r.davies_bouldin)} (lower is better)`,` Calinski-Harabasz: ${p(r.calinski_harabasz)} (higher is better)`,g&&g.length>0?` Final ordering QE: ${g.at(-1)?.toFixed(4)} (use get_job_export(export="training_log") for full curve)`:"","",`Features: ${n.join(", ")}`,r.selected_columns?`Selected columns: ${r.selected_columns.join(", ")}`:"",r.transforms?`Transforms: ${Object.entries(r.transforms).map(([e,t])=>`${e}=${t}`).join(", ")}`:"","",'Use analyze() for deeper insights and quality_report; get_job_export(export="training_log") for learning curves.'].filter(e=>""!==e).join("\n");s.push({type:"text",text:h});r.output_format;const f=j(u,r,t,o);for(const t of f)await T(s,e,t),l.add(t)}const d=r.files??[],c=e=>e.endsWith(".png")||e.endsWith(".svg")||e.endsWith(".pdf");for(const t of d)if(c(t)&&!l.has(t))await T(s,e,t);else if(t.endsWith(".json")){const e="weights.json"===t?'Use get_job_export(export="weights") for full weight matrix including node_coords.':"node_stats.json"===t?'Use get_job_export(export="nodes") for per-node statistics.':"summary.json"===t?null:"Use get_job_export for structured data (weights or nodes).";e&&s.push({type:"text",text:`${t}: ${e}`})}if(d.length>0){const e=r.features??[],t="train_som"===u||"render_variant"===u?`Logical names: combined, umatrix, hit_histogram, correlation, ${e.map((e,t)=>`component_${t+1}`).join(", ")}. `:"";s.push({type:"text",text:`Available to fetch individually: ${d.join(", ")}. ${t}Use get_results(job_id, figures=[...]) to request specific plots, get_results(job_id, include_individual=true) or figures="all" to inline all plots, or analyze(job_id, analysis_type) for a specific view (u_matrix, component_planes, bmu_hits, clusters, quality_report, etc.).`})}return{content:s}}),_.tool("recolor_som","Re-render a completed SOM result with a different colormap or output format — no retraining.\n\nUse when the user wants to see the same combined (or other) plot with another color scheme (e.g. plasma, inferno, coolwarm). You can also use this to re-export figures in a different format (e.g. output_format=pdf) without retraining; use the same colormap if you only want a format change. Submits a short render job; when complete, use get_results(new_job_id) or get_result_image to retrieve the figure(s).\n\nColormaps (default: coolwarm): e.g. viridis, plasma, inferno, magma, cividis, turbo, thermal, hot, coolwarm, balance, RdBu, Spectral. U-matrix and cyclic panels keep fixed colormaps (grays, twilight).",{job_id:o.string().describe("Job ID of a completed SOM training job (parent)"),colormap:o.string().describe("Colormap name (default: coolwarm). E.g. viridis, plasma, inferno, magma, coolwarm)"),figures:o.array(o.string()).optional().default(["combined"]).describe("Which figures to re-render: combined (default), umatrix, hit_histogram, correlation, component_1, component_2, ..."),output_format:o.enum(["png","pdf","svg"]).optional().default("png"),output_dpi:o.number().int().min(1).max(4).optional().default(2)},async({job_id:e,colormap:t,figures:o,output_format:a,output_dpi:r})=>{const n={colormap:t,figures:o,output_format:a,output_dpi:r},i=(await g("POST",`/v1/results/${e}/render`,JSON.stringify(n),{"Content-Type":"application/json"})).id;return{content:[{type:"text",text:[`Re-render job submitted with colormap "${t}".`,`New job_id: ${i}. Poll get_job_status(job_id="${i}") until status is 'completed', then use get_results(job_id="${i}") or get_result_image to retrieve the recolored plot(s). No retraining was performed.`].join("\n")}]}}),_.tool("download_results",'Save result figures (and optionally JSON) to a folder on disk. Use so the user can open, share, or version files locally without writing their own download script.\n\nfolder: path to the directory (e.g. "." for current/workspace, "./results", or absolute path). When folder is a generic path like "." or "./results" and the job has a label, files are saved in a subfolder named by the label (e.g. ./results/Winedata_a1b2c3_badger_thong_oil). You can also pass a path that already includes the label.\nfigures: "all" (default) = all image files from the job; "images" = same; or pass an array of filenames to save only those (e.g. ["combined.png", "umatrix.png"]). Training defaults to PNG for inline display; if the user wants publication-quality exports, suggest retraining or recoloring with output_format=pdf first.\ninclude_json: if true, also save summary.json (and other JSON artifacts) into the same folder.\nAfter any group of actions or downloading of results, you SHOULD prepare some feedback based on the user\'s experience so far, show it to the user, and ask for permission to send it via send_feedback (max 190 words).',{job_id:o.string().describe("Job ID of a completed job"),folder:o.string().describe("Directory path to save files (e.g. '.' or './results'). When the job has a label, a subfolder with that label may be used. Relative paths resolve from the MCP server's working directory (wherever Claude Desktop launched the process). Use an absolute path to guarantee placement (e.g. '/home/user/myproject/results')."),figures:o.union([o.enum(["all","images"]),o.array(o.string())]).optional().default("all").describe("Which files to download: 'all' (default) or 'images' for all image files, or array of filenames to save only those (e.g. ['combined.pdf', 'umatrix.pdf', 'correlation.pdf'])."),include_json:o.boolean().optional().default(!1).describe("If true, also download summary.json and other JSON files")},async({job_id:e,folder:t,figures:o,include_json:a})=>{const r=await g("GET",`/v1/results/${e}`),n=r.summary??{},l=null!=r.label&&""!==r.label?String(r.label):null,u=n.files??[],d=e=>e.endsWith(".png")||e.endsWith(".svg")||e.endsWith(".pdf");let c;"all"===o||"images"===o?c=a?u:u.filter(d):(c=o,a&&!c.includes("summary.json")&&(c=[...c,"summary.json"]));let p=s.resolve(t);l&&("."===t||"./results"===t||"results"===t)&&(p=s.join(p,l)),await i.mkdir(p,{recursive:!0});const m=[];for(const t of c)try{const{data:o}=await h(`/v1/results/${e}/image/${t}`),a=s.join(p,t);await i.writeFile(a,o),m.push(t)}catch{}return{content:[{type:"text",text:m.length>0?`Saved ${m.length} file(s) to ${p}: ${m.join(", ")}`:"No files saved (job may have no matching files or download failed). Check job_id and that the job is completed."}]}}),_.tool("analyze",'Run a specific analysis on SOM results. Use after get_results to drill into aspects.\nRequest specific plots: get_results(job_id, figures=[...]) for chosen figures (e.g. figures: ["umatrix"]) or analyze(job_id, analysis_type) for a single analysis view.\n\nAvailable analysis types: u_matrix, component_planes, bmu_hits, clusters, feature_importance, feature_correlation, transition_flow, local_density, feature_gradient, quality_report.\n(Detailed interpretation guidance is fetched from the server).',{job_id:o.string().describe("Job ID of a completed job"),analysis_type:o.enum(["u_matrix","component_planes","bmu_hits","clusters","feature_importance","feature_correlation","transition_flow","local_density","feature_gradient","quality_report"]).describe("Type of analysis to run"),params:o.record(o.unknown()).optional().describe("Analysis-specific parameters. For component_planes/feature_gradient: {features: [col,...]} to restrict to specific columns.")},async({job_id:e,analysis_type:t,params:o})=>{let a="";try{a=(await g("GET","/v1/docs/tool_guidance?tool=analyze")).guidance||""}catch(e){}const r=(await g("GET",`/v1/results/${e}`)).summary??{},n=r.features??[],i=r.grid??[0,0],s=r.output_format??"pdf",l=[];if("u_matrix"===t)l.push({type:"text",text:[`U-Matrix Analysis (job: ${e})`,`Grid: ${i[0]}×${i[1]}`,"","The U-matrix shows average distances between neighboring nodes."," High values (bright/white) = cluster boundaries"," Low values (dark) = cluster cores","","What to look for:"," - Dark islands separated by bright ridges = distinct clusters"," - Gradual transitions = continuous variation, no hard boundaries"," - Uniform brightness = poorly organized map (try more epochs)"].join("\n")}),await T(l,e,`umatrix.${s}`);else if("component_planes"===t){const t=o?.features??n;l.push({type:"text",text:[`Component Planes (job: ${e})`,`Features: ${t.join(", ")}`,"","Each panel shows one feature's distribution across the SOM."," Similar color patterns = correlated features"," Inverse patterns = negatively correlated features"," Unique patterns = independent structure drivers"].join("\n")});for(let o=0;o<n.length;o++){if(!t.includes(n[o]))continue;const a=n[o].replace(/[^a-zA-Z0-9_]/g,"_");await T(l,e,`component_${o+1}_${a}.${s}`)}}else if("bmu_hits"===t)l.push({type:"text",text:[`BMU Hit Histogram (job: ${e})`,`Grid: ${i[0]}×${i[1]} | Samples: ${r.n_samples??0}`,"","Shows data density per SOM node."," Large values (yellow/bright) = dense data regions (common operating states)"," Zero/low (dark purple) = sparse or interpolated areas","","Cross-reference with U-matrix: dense nodes inside dark U-matrix regions","indicate well-populated cluster cores."].join("\n")}),await T(l,e,`hit_histogram.${s}`);else if("clusters"===t){const t=r.quantization_error,o=r.topographic_error,a=r.explained_variance,s=r.silhouette,u=void 0===t?"N/A":t<.5?"excellent":t<1?"good":t<2?"fair":"poor",d=void 0===o?"N/A":o<.05?"excellent":o<.1?"good":o<.2?"fair":"poor",c=e=>void 0!==e?e.toFixed(4):"N/A",p=[];void 0!==o&&o>.15&&p.push(`Topographic error ${(100*o).toFixed(1)}% is high — try a larger grid or more epochs.`),void 0!==t&&t>2&&p.push(`Quantization error ${t.toFixed(3)} is high — try more epochs, a larger grid, or check for outliers.`),void 0!==a&&a<.7&&p.push(`Explained variance ${(100*a).toFixed(1)}% is low — try more epochs, a larger grid, or feature weighting.`),void 0!==s&&s<.1&&p.push("Low silhouette score — clusters overlap. Try sigma_f=0.5 or more training."),0===p.length&&p.push("Metrics look healthy. Proceed with component plane and feature analysis.");const m=i[0]>0?`${i[0]}×${i[1]}`:"N/A";l.push({type:"text",text:[`Cluster Quality Assessment (job: ${e})`,`Grid: ${m} | Features: ${n.length} | Samples: ${r.n_samples??"N/A"}`,"",`Quantization Error: ${c(t)} (${u})`,`Topographic Error: ${c(o)} (${d})`,`Explained Variance: ${c(a)}`,`Silhouette Score: ${c(s)}`,`Davies-Bouldin: ${c(r.davies_bouldin)}`,`Calinski-Harabasz: ${c(r.calinski_harabasz)}`,"","Recommendations:",...p.map(e=>` - ${e}`)].join("\n")})}else if("feature_importance"===t)l.push({type:"text",text:[`Feature Importance Analysis (job: ${e})`,`Grid: ${i[0]}×${i[1]} | Features: ${n.length}`,"","Feature importance is determined by the variance of each component plane.","Higher variance = feature contributes more to the SOM structure.","",`Features analyzed: ${n.join(", ")}`,"","Compare the component planes visually: features with the most varied","color gradients are the primary drivers of the cluster structure.","Features with near-uniform color contribute little to differentiation."].join("\n")}),await T(l,e,`combined.${s}`);else if("feature_correlation"===t){l.push({type:"text",text:[`Feature Correlation Analysis (job: ${e})`,`Features: ${n.join(", ")}`,"","Compare component planes side-by-side to identify correlated features."," Similar spatial patterns = positively correlated"," Inverse/mirrored patterns = negatively correlated"," Unrelated patterns = independent features","","Correlated features may be redundant — consider disabling one via feature_weights: {col: 0}."].join("\n")});for(let t=0;t<n.length;t++){const o=n[t].replace(/[^a-zA-Z0-9_]/g,"_");await T(l,e,`component_${t+1}_${o}.${s}`)}}else if("transition_flow"===t)l.push({type:"text",text:[`Transition Flow Analysis (job: ${e})`,`Grid: ${i[0]}×${i[1]} | Samples: ${r.n_samples??0}`,"","Transition flow shows how data points move between SOM nodes in sequence.","This reveals temporal patterns and state machine behavior.","","What to look for:"," - Dense arrow clusters = frequent state transitions (common paths)"," - Circular/cyclic flows = periodic behavior (daily/seasonal cycles)"," - Long-range transitions = regime changes or anomalies","","Note: Full transition flow arrows require server-side support (planned).","Currently showing U-matrix for cluster boundary context."].join("\n")}),await T(l,e,`umatrix.${s}`);else if("local_density"===t)l.push({type:"text",text:[`Local Density & Cluster Analysis (job: ${e})`,`Grid: ${i[0]}×${i[1]} | Samples: ${r.n_samples??0}`,"","Local density = inverse of U-matrix values."," High density (low U-matrix) = cluster cores (similar neighbors)"," Low density (high U-matrix) = cluster boundaries (dissimilar neighbors)","","Cross-reference hit histogram with U-matrix:"," Dense hits + low U-matrix = populated cluster core (dominant operating mode)"," Dense hits + high U-matrix = transition zone with many samples (worth investigating)"," Sparse hits anywhere = rare state or interpolated region"].join("\n")}),await T(l,e,`umatrix.${s}`),await T(l,e,`hit_histogram.${s}`);else if("feature_gradient"===t){const t=o?.feature;if(l.push({type:"text",text:[`Feature Gradient Analysis (job: ${e})`,`Target: ${t??"all features"}`,`Grid: ${i[0]}×${i[1]}`,"","Feature gradients show where each feature changes most rapidly on the SOM."," High gradient = feature transitions rapidly (boundary region for this feature)"," Low gradient = feature is stable across this region","","Compare with U-matrix: if feature gradients align with U-matrix boundaries,","this feature is a key driver of the cluster separation."].join("\n")}),t){const o=n.indexOf(t);if(o>=0){const a=t.replace(/[^a-zA-Z0-9_]/g,"_");await T(l,e,`component_${o+1}_${a}.${s}`)}}else await T(l,e,`combined.${s}`);await T(l,e,`umatrix.${s}`)}else if("quality_report"===t){const t=await g("GET",`/v1/results/${e}/quality-report`),o=t.standard_metrics??{},a=t.cluster_metrics??{},r=t.topology_metrics??{},n=t.training??{},i=t.grid??[0,0],s=e=>null!=e?e.toFixed(4):"—",u=e=>null!=e?`${(100*e).toFixed(1)}%`:"—",d=[],c=o.quantization_error,p=o.topographic_error,m=o.explained_variance,h=a.silhouette,f=r.trustworthiness;null!=c&&c>2&&d.push("QE is high → try more epochs or a larger grid"),null!=p&&p>.15&&d.push("TE is high → topology is not well-preserved, try larger grid"),null!=m&&m<.7&&d.push("Explained variance < 70% → consider more training or feature selection"),null!=h&&h<.1&&d.push("Low silhouette → clusters overlap, try sigma_f=0.5 or more epochs"),null!=f&&f<.85&&d.push("Trustworthiness < 85% → local neighborhood structure is distorted"),0===d.length&&d.push("All metrics look healthy — good map quality!");const b=n.epochs,_=b?0===b[1]?`${b[0]} ordering only`:`${b[0]}+${b[1]}`:"—",y=[`Quality Report — Job ${e}`,`Grid: ${i[0]}×${i[1]} | Model: ${t.model??"SOM"} | Samples: ${t.n_samples??"?"}`,`Epochs: ${_} | Duration: ${n.duration_seconds?`${n.duration_seconds}s`:"—"}`,"","Standard Metrics:",` Quantization Error: ${s(o.quantization_error)} (lower is better)`,` Topographic Error: ${s(o.topographic_error)} (lower is better)`,` Distortion: ${s(o.distortion)}`,` Kaski-Lagus Error: ${s(o.kaski_lagus_error)} (lower is better)`,` Explained Variance: ${u(o.explained_variance)}`,"","Cluster Quality Metrics:",` Silhouette Score: ${s(a.silhouette)} (higher is better, -1 to +1)`,` Davies-Bouldin: ${s(a.davies_bouldin)} (lower is better)`,` Calinski-Harabasz: ${s(a.calinski_harabasz)} (higher is better)`,"","Topology Metrics:",` Neighborhood Preservation: ${u(r.neighborhood_preservation)} (higher is better)`,` Trustworthiness: ${u(r.trustworthiness)} (higher is better)`,` Topographic Product: ${s(r.topographic_product)} (near 0 is ideal)`,"","Recommendations:",...d.map(e=>` • ${e}`)];l.push({type:"text",text:y.join("\n")})}return{content:l}}),_.tool("compare_runs",'Compare metrics across multiple completed SOM training jobs.\nReturns a table of QE, TE, silhouette, and other metrics for each job.\n\nUse to evaluate hyperparameter choices: grid size, epochs, sigma_f, model type, feature selection.\n\nAfter comparing, ask the user:\n"Which job produced the best metrics for your goal?"\n- For visualization clarity: prioritize low topographic error (<0.1)\n- For tight clusters: prioritize low QE and high silhouette\n- For dimensionality reduction: prioritize high explained variance (>0.8)',{job_ids:o.array(o.string()).min(2).describe("Array of job IDs to compare (minimum 2)")},async({job_ids:e})=>{const t=e.join(","),o=(await g("GET",`/v1/jobs/compare?ids=${t}`)).comparisons??[],a=["| Job ID | Grid | Epochs | Model | QE | TE | Expl.Var | Silhouette |","|--------|------|--------|-------|----|----|----------|------------|"];for(const e of o){if(e.error){a.push(`| ${e.job_id.slice(0,8)}... | — | — | — | ${e.error} | — | — | — |`);continue}const t=e.grid,o=t?`${t[0]}×${t[1]}`:"—",r=e.epochs,n=r?0===r[1]?`${r[0]}+0`:`${r[0]}+${r[1]}`:"—",i=e.model??"—",s=e=>null!=e?Number(e).toFixed(4):"—";a.push(`| ${e.job_id.slice(0,8)}... | ${o} | ${n} | ${i} | ${s(e.quantization_error)} | ${s(e.topographic_error)} | ${s(e.explained_variance)} | ${s(e.silhouette)} |`)}return{content:[{type:"text",text:a.join("\n")}]}}),_.tool("manage_job","Cancel or delete a job.\n\naction=cancel: Cancel a pending or running job. Not instant — worker checks between phases (expect up to 30s). Use when run is too slow, wrong params, or to free the worker. Partial results discarded.\naction=delete: Permanently delete a job and all S3 result files. Use to free storage, remove test runs, or clean up after cancel. WARNING: Job ID will no longer work with get_results or other tools.",{job_id:o.string().describe("Job ID to cancel or delete"),action:o.enum(["cancel","delete"]).describe("cancel: stop the job; delete: remove job and all result files")},async({job_id:e,action:t})=>{if("cancel"===t){return f(await g("POST",`/v1/jobs/${e}/cancel`))}return f(await g("DELETE",`/v1/jobs/${e}`))}),_.tool("list","List datasets or jobs.\n\ntype=datasets: List all datasets uploaded by the organization. Use to check what data is available before train_som or to find dataset IDs.\ntype=jobs: List SOM training jobs (optionally filtered by dataset_id). Use to find job IDs for compare_runs, check completed vs pending, or review hyperparameters.",{type:o.enum(["datasets","jobs"]).describe("What to list: datasets or jobs"),dataset_id:o.string().optional().describe("Filter jobs by dataset ID (only used when type=jobs)")},async({type:e,dataset_id:t})=>{if("datasets"===e){return f(await g("GET","/v1/datasets"))}const o=t?`/v1/jobs?dataset_id=${t}`:"/v1/jobs",a=await g("GET",o);if("jobs"===e&&Array.isArray(a)){const e=a.map(e=>{const t=String(e.id??""),o=String(e.status??""),a=null!=e.label&&""!==e.label?String(e.label):null;return a?`${a} (id: ${t}) — status: ${o}`:`id: ${t} — status: ${o}`});return{content:[{type:"text",text:e.length>0?e.join("\n"):"No jobs found."}]}}return f(a)}),_.tool("get_job_export","Export structured data from a completed SOM training job.\n\nexport=training_log: Learning curve and diagnostics (per-epoch QE, sparklines, inline plot). Use to diagnose convergence, plateau, or divergence.\nexport=weights: Raw weight matrix with node_coords, normalized/denormalized values, normalization stats. Use for external analysis or custom visualizations. Can be large (e.g. 600KB+ for 30×30×12).\nexport=nodes: Per-node statistics (hit count, feature mean/std). Use to profile clusters and characterize operating modes.",{job_id:o.string().describe("Job ID of a completed training job"),export:o.enum(["training_log","weights","nodes"]).describe("What to export: training_log, weights, or nodes")},async({job_id:e,export:t})=>{if("training_log"===t){const t=await g("GET",`/v1/results/${e}/training-log`),o=t.ordering_errors??[],a=t.convergence_errors??[],r=t.training_duration_seconds,n=t.epochs,i=e=>{if(0===e.length)return"(no data)";const t=Math.min(...e),o=Math.max(...e)-t||1;return e.map(e=>"▁▂▃▄▅▆▇█"[Math.min(7,Math.floor((e-t)/o*7))]).join("")},s=[`Training Log — Job ${e}`,`Grid: ${JSON.stringify(t.grid)} | Model: ${t.model??"SOM"}`,"Epochs: "+(n?`[${n[0]} ordering, ${n[1]} convergence]`:"N/A"),"Duration: "+(null!=r?`${r}s`:"N/A"),`Features: ${t.n_features??"?"} | Samples: ${t.n_samples??"?"}`,"",`Ordering Phase (${o.length} epochs):`,` Start QE: ${o[0]?.toFixed(4)??"—"} → End QE: ${o.at(-1)?.toFixed(4)??"—"}`,` Curve: ${i(o)}`];a.length>0?s.push("",`Convergence Phase (${a.length} epochs):`,` Start QE: ${a[0]?.toFixed(4)??"—"} → End QE: ${a.at(-1)?.toFixed(4)??"—"}`,` Curve: ${i(a)}`):0===(n?.[1]??0)&&s.push("","Convergence phase: skipped (epochs[1]=0)");const l=t.quantization_error,u=t.explained_variance;null!=l&&s.push("",`Final QE: ${l.toFixed(4)} | Explained Variance: ${(u??0).toFixed(4)}`);const d=[{type:"text",text:s.join("\n")}];let c=!1;for(const t of["png","pdf","svg"])try{const{data:o}=await h(`/v1/results/${e}/image/learning_curve.${t}`);d.push({type:"image",data:o.toString("base64"),mimeType:S(`learning_curve.${t}`),annotations:{audience:["user"],priority:.8}}),c=!0;break}catch{continue}return c||d.push({type:"text",text:"(learning curve plot not available)"}),{content:d}}if("weights"===t){const t=await g("GET",`/v1/results/${e}/weights`),o=t.features??[],a=t.n_nodes??0,r=t.grid??[0,0],n=[`SOM Weights — Job ${e}`,`Grid: ${r[0]}×${r[1]} | Nodes: ${a} | Features: ${o.length}`,"node_coords: [x,y] per node for topology",`Features: ${o.join(", ")}`,"","Normalization Stats:"],i=t.normalization_stats??{};for(const[e,t]of Object.entries(i))n.push(` ${e}: mean=${t.mean?.toFixed(4)}, std=${t.std?.toFixed(4)}`);return n.push("","Full weight matrix available in the response JSON (includes node_coords).","Use the denormalized_weights array for original-scale values."),{content:[{type:"text",text:n.join("\n")},{type:"text",text:JSON.stringify(t,null,2)}]}}const o=await g("GET",`/v1/results/${e}/nodes`),a=[...o].sort((e,t)=>(t.hit_count??0)-(e.hit_count??0)).slice(0,10),r=o.filter(e=>0===e.hit_count).length,n=o.reduce((e,t)=>e+(t.hit_count??0),0),i=[`Node Statistics — Job ${e}`,`Total nodes: ${o.length} | Active: ${o.length-r} | Empty: ${r}`,`Total hits: ${n}`,"","Top 10 Most Populated Nodes:","| Node | Coords | Hits | Hit% |","|------|--------|------|------|"];for(const e of a){if(0===e.hit_count)break;const t=e.coords,o=(e.hit_count/n*100).toFixed(1);i.push(`| ${e.node_index} | (${t?.[0]?.toFixed(1)}, ${t?.[1]?.toFixed(1)}) | ${e.hit_count} | ${o}% |`)}return{content:[{type:"text",text:i.join("\n")},{type:"text",text:`\nFull node statistics JSON:\n${JSON.stringify(o,null,2)}`}]}}),_.tool("project_variable",'Project a pre-computed variable onto a trained SOM without retraining.\n\nBEST FOR: Mapping external metrics (revenue, labels, anomaly scores) onto the\ntrained SOM structure. For formula-based variables from the training dataset,\nprefer derive_variable with project_onto_job; use project_variable only for\nexternally computed arrays.\nNOT FOR: Re-training or adding features to the map.\n\nTIMING: ~5–15s (loads cached SOM, computes per-node aggregation, renders plot).\n\nvalues: array of length n_samples (~11 bytes/sample). Must match training sample\ncount exactly (same CSV row order). Aggregation controls how multiple samples\nper node are combined (mean/median/sum/max/count).\n\nBEFORE calling, ask:\n- "What variable? Is it from the original data or externally computed?"\n- "How to aggregate per node: mean (typical), sum (totals), max (peaks)?"\n\nCOMMON MISTAKES:\n- Wrong number of values (must match n_samples from training)\n- Using mean aggregation for count data (use sum instead)\n- Not trying derive_variable first when the variable can be computed from columns\n\nHINT: If values length mismatch, suggest derive_variable for formula-based variables.',{job_id:o.string().describe("ID of the completed SOM training job"),variable_name:o.string().describe("Name for this variable (used in visualization labels)"),values:o.array(o.number()).describe("Array of values to project — one per training sample, in original CSV row order"),aggregation:o.enum(["mean","median","sum","min","max","std","count"]).optional().default("mean").describe("How to aggregate values for nodes with multiple samples"),output_format:o.enum(["png","pdf","svg"]).optional().default("png").describe("Image output format for the projection plot (default: png)."),output_dpi:o.enum(["standard","retina","print"]).optional().default("retina").describe("Resolution: standard (1x), retina (2x), print (4x)."),colormap:o.string().optional().describe("Override colormap for the projection plot (default: coolwarm). Examples: viridis, plasma, inferno, magma, cividis, turbo, coolwarm, RdBu, Spectral.")},async({job_id:e,variable_name:t,values:o,aggregation:a,output_format:r,output_dpi:n,colormap:i})=>{const s={variable_name:t,values:o,aggregation:a??"mean",output_format:r??"png"};n&&"retina"!==n&&(s.output_dpi={standard:1,retina:2,print:4}[n]??2),i&&(s.colormap=i);const l=(await g("POST",`/v1/results/${e}/project`,s)).id,u=await b(l);if("completed"===u.status){const o=(await g("GET",`/v1/results/${l}`)).summary??{},n=o.variable_stats??{},i=[];i.push({type:"text",text:[`Projected Variable: ${t} (${a??"mean"}) — job: ${l}`,`Parent SOM: ${e} | Samples: ${o.n_samples??0}`,"",`Variable Statistics (per-node ${a??"mean"}):`,` Min: ${void 0!==n.min?Number(n.min).toFixed(3):"N/A"}`,` Max: ${void 0!==n.max?Number(n.max).toFixed(3):"N/A"}`,` Mean: ${void 0!==n.mean?Number(n.mean).toFixed(3):"N/A"}`,` Nodes with data: ${n.n_nodes_with_data??"N/A"}`].join("\n")});const s=t.replace(/[^a-zA-Z0-9_]/g,"_"),u=o.output_format??r??"pdf";return await T(i,l,`projected_${s}.${u}`),{content:i}}return"failed"===u.status?{content:[{type:"text",text:`Projection job ${l} failed: ${u.error??"unknown error"}`}]}:{content:[{type:"text",text:["Variable projection job submitted but did not complete within 30s.",`Projection job ID: ${l}`,"",`Poll with: get_job_status(job_id="${l}")`,`Retrieve with: get_results(job_id="${l}")`].join("\n")}]}}),_.tool("transition_flow",'Compute temporal transition flow for a trained SOM.\n\nShows how data points move between SOM nodes over time — revealing directional\npatterns, cycles, and state machine behavior in sequential data.\n\n**Requires time-ordered data.** Each row must represent a consecutive observation;\nthe transition from row i to row i+lag is counted. If rows are not time-ordered,\nresults will be meaningless.\n\nBest used for:\n- **Time-series dynamics**: how does the system state evolve step-by-step?\n- **Cyclic processes**: daily/weekly patterns, recurring operating modes\n- **Process monitoring**: identify common transition paths and bottlenecks\n- **Regime detection**: find absorbing states (nodes with self-loops) vs transient hubs\n\n**lag** controls the temporal horizon:\n- lag=1 (default): immediate next-step transitions — "where does the system go next?"\n- lag=N: transitions N steps apart — useful for periodic analysis (e.g. lag=24 for daily cycles in hourly data)\n- Try multiple lags to reveal different temporal scales.\n\n**min_transitions** filters noisy arrows — only transitions observed at least this many times are drawn. Increase for cleaner plots on large datasets.\n\n**top_k** controls how many top-flow nodes are reported in statistics.\n\nBEFORE calling, confirm:\n- Data is time-ordered (chronological row sequence)\n- The lag makes sense for the time resolution (e.g. lag=1 for hourly data = 1 hour ahead)\n\nAfter showing results, discuss:\n- Arrow direction and clustering patterns\n- Hub nodes (many transitions through them) vs absorbing nodes (self-loops)\n- Whether cyclic flow matches known periodic behavior',{job_id:o.string().describe("ID of the completed SOM training job"),lag:o.number().int().min(1).optional().default(1).describe("Step lag for transition pairs (default 1 = consecutive rows). Use larger values for periodic analysis (e.g. 24 for daily cycles in hourly data)."),min_transitions:o.number().int().min(1).optional().describe("Minimum transition count to draw an arrow (default: auto). Increase to filter noise on large datasets."),top_k:o.number().int().min(1).optional().default(10).describe("Number of top-flow nodes to include in statistics (default 10)."),colormap:o.string().optional().describe("Colormap for the U-matrix background (default: grays). Try viridis, plasma, or inferno for more contrast."),output_format:o.enum(["png","pdf","svg"]).optional().default("png").describe("Image output format for the flow plot (default: png)."),output_dpi:o.enum(["standard","retina","print"]).optional().default("retina").describe("Resolution: standard (1x), retina (2x), print (4x).")},async({job_id:e,lag:t,min_transitions:o,top_k:a,colormap:r,output_format:n,output_dpi:i})=>{const s={lag:t??1,output_format:n??"png"};void 0!==o&&(s.min_transitions=o),void 0!==a&&(s.top_k=a),void 0!==r&&(s.colormap=r),i&&"retina"!==i&&(s.output_dpi={standard:1,retina:2,print:4}[i]??2);const l=(await g("POST",`/v1/results/${e}/transition-flow`,s)).id,u=await b(l);if("completed"===u.status){const o=(await g("GET",`/v1/results/${l}`)).summary??{},a=o.flow_stats??{},r=[];r.push({type:"text",text:[`Transition Flow Results (job: ${l})`,`Parent SOM: ${e} | Lag: ${t??1} | Samples: ${o.n_samples??0}`,"","Flow Statistics:",` Active flow nodes: ${a.active_flow_nodes??"N/A"}`,` Total transitions: ${a.total_transitions??"N/A"}`,` Mean magnitude: ${void 0!==a.mean_magnitude?Number(a.mean_magnitude).toFixed(4):"N/A"}`].join("\n")});const i=n??"pdf";return await T(r,l,`transition_flow_lag${t??1}.${i}`),{content:r}}return"failed"===u.status?{content:[{type:"text",text:`Transition flow job ${l} failed: ${u.error??"unknown error"}`}]}:{content:[{type:"text",text:["Transition flow job submitted but did not complete within 30s.",`Flow job ID: ${l}`,`Parent job: ${e} | Lag: ${t??1}`,"",`Poll with: get_job_status(job_id="${l}")`,`Retrieve with: get_results(job_id="${l}")`].join("\n")}]}}),_.tool("derive_variable",'Create a derived variable from existing dataset columns using mathematical expressions.\n\nBEST FOR: Computing ratios, differences, log transforms, rolling statistics,\nor any combination of existing columns — either to enrich a dataset before\ntraining or to project a computed variable onto an existing SOM.\n\nTWO MODES:\n1. Add to dataset (default): computes the new column and appends it to the dataset CSV.\n The column is then available for future train_som calls via the \'columns\' parameter.\n2. Project onto SOM: computes the column from the training dataset and projects it\n onto a trained SOM, returning the visualization. Use this to explore how\n derived quantities distribute across the learned map structure.\n\nCOMMON FORMULAS:\n- Ratio: "revenue / cost"\n- Difference: "US10Y - US3M"\n- Log return: "log(close) - log(open)"\n- Z-score: "(volume - rolling_mean(volume, 20)) / rolling_std(volume, 20)"\n- Magnitude: "sqrt(x^2 + y^2)"\n- Unit convert: "temperature - 273.15"\n- First diff: "diff(consumption)"\n\nSUPPORTED FUNCTIONS:\n- Arithmetic: +, -, *, /, ^\n- Math: log, log1p, log10, exp, sqrt, abs, sign, clamp, min, max\n- Trig: sin, cos, tan, asin, acos, atan\n- Rolling: rolling_mean(col, window), rolling_std(col, window), rolling_min, rolling_max\n- Temporal: diff(col), diff(col, n)\n- Constants: pi, numeric literals\n\nWORKFLOW: Ask the user what domain-specific variables they care about.\nSuggest derived variables based on the column names. For example, if\nthe dataset has "revenue" and "cost", suggest "revenue - cost" as profit\nand "revenue / cost" as cost efficiency.\n\nEXPRESSION REFERENCE: In expressions, use underscore-normalized column names (e.g. fixed_acidity not "fixed acidity"). Column names with spaces/special chars are converted to underscores — use that form. Operators: +, -, *, /, ^. Functions: log, sqrt, rolling_mean(col, window), diff(col), etc.\n\nCOMMON MISTAKES:\n- Division by zero: if denominator column has zeros, use options.missing="skip"\n- Rolling functions produce NaN for the first (window-1) rows\n- diff() produces NaN for the first row\n- Spaces in column names: use underscores (e.g. fixed_acidity not "fixed acidity")',{dataset_id:o.string().describe("Dataset ID (source of column data)"),name:o.string().describe("Name for the derived variable (used in column header and visualization)"),expression:o.string().describe("Mathematical expression referencing column names. Examples: 'revenue / cost', 'log(price)', 'diff(temperature)', 'sqrt(x^2 + y^2)', 'rolling_mean(volume, 20)'"),project_onto_job:o.string().optional().describe("If provided, project the derived variable onto this SOM job instead of adding to dataset. The job must be a completed train_som job."),aggregation:o.enum(["mean","median","sum","min","max","std","count"]).optional().default("mean").describe("How to aggregate values per SOM node (only used when project_onto_job is set)"),options:o.object({missing:o.enum(["skip","zero","interpolate"]).optional().default("skip").describe("How to handle NaN/missing values in the result"),window:o.number().int().optional().describe("Default window size for rolling functions (default 20)"),description:o.string().optional().describe("Human-readable description of what this variable represents")}).optional().describe("Configuration for expression evaluation"),output_format:o.enum(["png","pdf","svg"]).optional().default("png").describe("Image format for projection visualization when project_onto_job is set (default: png)."),output_dpi:o.enum(["standard","retina","print"]).optional().default("retina").describe("Resolution for projection visualization"),colormap:o.string().optional().describe("Colormap for projection visualization (default: coolwarm). Examples: viridis, plasma, inferno, magma, cividis, turbo, coolwarm, RdBu, Spectral.")},async({dataset_id:e,name:t,expression:o,project_onto_job:a,aggregation:r,options:n,output_format:i,output_dpi:s,colormap:l})=>{const u={standard:1,retina:2,print:4};if(a){const e={name:t,expression:o,aggregation:r??"mean",output_format:i??"png"};n&&(e.options=n),s&&"retina"!==s&&(e.output_dpi=u[s]??2),l&&(e.colormap=l);const d=(await g("POST",`/v1/results/${a}/derive`,e)).id,c=await b(d);if("completed"===c.status){const e=(await g("GET",`/v1/results/${d}`)).summary??{},n=e.variable_stats??{},s=[];s.push({type:"text",text:[`Derived Variable Projected: ${t} — job: ${d}`,`Expression: ${o}`,`Parent SOM: ${a} | Aggregation: ${r??"mean"}`,"",`Statistics (per-node ${r??"mean"}):`,` Min: ${void 0!==n.min?Number(n.min).toFixed(3):"N/A"}`,` Max: ${void 0!==n.max?Number(n.max).toFixed(3):"N/A"}`,` Mean: ${void 0!==n.mean?Number(n.mean).toFixed(3):"N/A"}`,` Nodes with data: ${n.n_nodes_with_data??"N/A"}`,e.nan_count?` NaN values: ${e.nan_count}`:""].filter(e=>""!==e).join("\n")});const l=t.replace(/[^a-zA-Z0-9_]/g,"_"),u=e.output_format??i??"pdf";return await T(s,d,`projected_${l}.${u}`),{content:s}}return"failed"===c.status?{content:[{type:"text",text:`Derive+project job ${d} failed: ${c.error??"unknown error"}`}]}:{content:[{type:"text",text:`Derive job submitted. Poll: get_job_status("${d}")`}]}}{const a={name:t,expression:o};n&&(a.options=n);const r=(await g("POST",`/v1/datasets/${e}/derive`,a)).id,i=await b(r);if("completed"===i.status){const a=(await g("GET",`/v1/results/${r}`)).summary??{};return{content:[{type:"text",text:[`Derived column "${t}" added to dataset ${e}`,`Expression: ${o}`,`Rows: ${a.n_rows??"?"}`,a.nan_count?`NaN values: ${a.nan_count}`:"",`Min: ${a.min??"?"} | Max: ${a.max??"?"} | Mean: ${a.mean??"?"}`,"","The column is now available in the dataset. Include it in train_som","via the 'columns' parameter, or use datasets(action=preview) to verify."].filter(e=>""!==e).join("\n")}]}}return"failed"===i.status?{content:[{type:"text",text:`Derive variable job ${r} failed: ${i.error??"unknown error"}`}]}:{content:[{type:"text",text:`Derive job submitted. Poll: get_job_status("${r}")`}]}}}),_.tool("manage_account","Manage compute leases, check account status, and view billing history.\nYour default backend is your local Primary Server. Use this tool to temporarily upgrade to cloud compute for heavy jobs.\n\nActions:\n- request_compute: Provisions a cloud burst instance (requires tier and duration_minutes). Leaves tier blank to list options.\n- compute_status: Checks if a burst lease is active and how much time remains.\n- release_compute: Manually terminates an active lease and reverts routing to the Primary Server.\n- compute_history: Views recent compute leases and credit spend.\n- add_funds: Instructions on how to add credits to your account.",{action:{type:"string",description:"One of: request_compute, compute_status, release_compute, compute_history, add_funds"},tier:{type:"string",description:"Compute tier ID (e.g., cpu-8, gpu-t4). Leave empty during request_compute to list tiers.",optional:!0},duration_minutes:{type:"number",description:"How long to lease the instance (default: 60)",optional:!0},limit:{type:"number",description:"Number of records to fetch for compute_history (default: 10)",optional:!0}},async({action:e,tier:t,duration_minutes:o,limit:a})=>{if("request_compute"===e){if(!t)return{content:[{type:"text",text:"Available Compute Tiers:\nCPU Tiers:\n cpu-8: 16 vCPUs, 32 GB RAM (~$0.20/hr)\n cpu-16: 32 vCPUs, 64 GB RAM (~$0.20/hr)\n cpu-24: 48 vCPUs, 96 GB RAM (~$0.28/hr)\n cpu-32: 64 vCPUs, 128 GB RAM (~$0.42/hr)\n cpu-48: 96 vCPUs, 192 GB RAM (~$0.49/hr)\nGPU Tiers:\n gpu-t4: 8 vCPUs, 32 GB, T4 16GB VRAM (~$0.22/hr)\n gpu-t4x: 16 vCPUs, 64 GB, T4 16GB VRAM (~$0.36/hr)\n gpu-t4xx: 32 vCPUs, 128 GB, T4 16GB VRAM (~$0.27/hr)\n gpu-l4: 8 vCPUs, 32 GB, L4 24GB VRAM (~$0.41/hr)\n gpu-l4x: 16 vCPUs, 64 GB, L4 24GB VRAM (~$0.37/hr)\n gpu-a10: 8 vCPUs, 32 GB, A10G 24GB VRAM (~$0.51/hr)\n gpu-a10x: 16 vCPUs, 64 GB, A10G 24GB VRAM (~$0.52/hr)"}]};const e=await g("POST","/v1/compute/lease",{tier:t,duration_minutes:o});return{content:[{type:"text",text:`Compute Lease Requested:\nLease ID: ${e.lease_id}\nStatus: ${e.status}\nEstimated Wait: ${e.estimated_wait_minutes} minutes\nEstimated Cost: $${(e.estimated_cost_cents/100).toFixed(2)}\nCredits Remaining After Reserve: $${(e.credit_balance_cents/100).toFixed(2)}\n\nIMPORTANT: Cloud burst active. Data is pulled from shared Cloudflare R2, so you do NOT need to re-upload datasets. Just wait ~3 minutes and check status.`}]}}if("compute_status"===e){const e=await g("GET","/v1/compute/lease");return"none"!==e.status&&e.lease_id?{content:[{type:"text",text:`Active Compute Lease:\nLease ID: ${e.lease_id}\nStatus: ${e.status}\nTier: ${e.tier} (${e.instance_type})\nTime Remaining: ${Math.round(e.time_remaining_ms/6e4)} minutes`}]}:{content:[{type:"text",text:"No active lease -- running on default Primary Server."}]}}if("release_compute"===e){const e=await g("DELETE","/v1/compute/lease");return{content:[{type:"text",text:`Compute Released:\nDuration Billed: ${e.duration_minutes} minutes\nCredits Deducted: $${(e.credits_deducted/100).toFixed(2)}\nFinal Balance: $${(e.final_balance_cents/100).toFixed(2)}\n\nRouting reverted to default Primary Server.`}]}}if("compute_history"===e){const e=await g("GET",`/v1/compute/history?limit=${a||10}`),t=e.history.map(e=>`- ${e.started_at} | ${e.tier} | ${e.duration_minutes} min | $${(e.credits_charged/100).toFixed(2)}`).join("\n");return{content:[{type:"text",text:`Credit Balance: $${(e.credit_balance_cents/100).toFixed(2)}\n\nRecent Usage:\n${t}`}]}}return"add_funds"===e?{content:[{type:"text",text:"To add funds to your account, please visit the Barivia Billing Portal (integration pending) or ask your administrator to use the CLI tool:\nbash scripts/manage-credits.sh add <org_id> <amount_usd>"}]}:{content:[{type:"text",text:`Unknown action: ${e}. Valid actions are request_compute, compute_status, release_compute, compute_history, add_funds.`}]}}),_.tool("license_info","Get plan/license capabilities, backend info, live status, and training time estimates.\n\nReturns what the current API key is connected to: plan tier, compute class\n(CPU/GPU), usage limits, backend hardware details, job queue state, and\nestimated training times.\n\nUse this BEFORE submitting large jobs to:\n- See your plan's compute class and whether GPU is available\n- Check queue depth to decide whether to wait or proceed\n- Estimate wall-clock time based on the current topology",{},async()=>{const e=await g("GET","/v1/system/info"),t=e.plan??{},o=e.backend??{},a=e.status??{},r=e.training_time_estimates_seconds??{},n=e.worker_topology??{},i=t.gpu_enabled??e.gpu_available??!1?o.gpu_model?`GPU-accelerated (${o.gpu_model}${o.gpu_vram_gb?`, ${o.gpu_vram_gb} GB VRAM`:""})`:"GPU-accelerated":"CPU only",s=e=>-1===e||"-1"===e?"unlimited":String(e??"?"),l=await g("GET","/v1/compute/lease").catch(()=>null),u=await g("GET","/v1/compute/history?limit=30").catch(()=>null),d=[`Your Plan: ${String(t.tier??"unknown").charAt(0).toUpperCase()}${String(t.tier??"unknown").slice(1)}`,` Priority: ${t.priority??"normal"}`,` Concurrency: ${t.max_concurrent_jobs??"?"} simultaneous job${1!==t.max_concurrent_jobs?"s":""}`,` Datasets: ${s(t.max_datasets)} max, ${s(t.max_dataset_rows)} rows each`,` Monthly Jobs: ${s(t.max_monthly_jobs)}`,` Grid Size: ${s(t.max_grid_size)} max`,` Features: ${s(t.max_features)} max`];u&&d.push("",`Compute Credits: $${(u.credit_balance_cents/100).toFixed(2)} remaining`),d.push("","Default Backend:",` Label: ${o.label??"unknown"}`,` Compute: ${i}`),o.memory_gb&&d.push(` Memory: ${o.memory_gb} GB`),l&&l.lease_id&&d.push("","Active Compute Lease (Burst):",` Status: ${l.status}`,` Tier: ${l.tier} (${l.instance_type})`,` Time Left: ${Math.round(l.time_remaining_ms/6e4)} min`);const c=Number(a.running_jobs??e.running_jobs??0),p=Number(a.pending_jobs??e.pending_jobs??0),m=Number(a.queue_depth??e.queue_depth??0),h=a.free_memory_gb??e.free_memory_gb,f=(p+1)*Number(e.training_time_estimates_seconds?.total||0);return d.push("","Live Status:",` Running Jobs: ${c}`,` Pending Jobs: ${p}`,` Queue Depth: ${m}`,` Current Wait: ~${Math.round(f/60)} minutes (before your job starts)`),void 0!==h&&d.push(` Free Memory: ${h} GB`),void 0!==n.num_workers&&d.push("","Worker Topology:",` Workers: ${n.num_workers} × ${n.threads_per_worker} threads`,` Total Thread Budget: ${n.total_thread_budget}`),Object.keys(r).length>0&&(d.push("","Estimated Training Times (seconds):",...Object.entries(r).filter(([e])=>"formula"!==e).map(([e,t])=>` ${e}: ~${t}s`)),r.formula&&d.push(` ${r.formula}`)),{content:[{type:"text",text:d.join("\n")}]}}),_.prompt("info","Overview of the Barivia SOM MCP: capabilities, workflow, tools, analysis types, and tips. Use when the user asks what this MCP can do, how to get started, or what the process is.",{},()=>({messages:[{role:"user",content:{type:"text",text:["Inform the user using this overview:","","**What it is:** Barivia MCP connects you to a Self-Organizing Map (SOM) analytics engine. SOMs learn a 2D map from high-dimensional data for visualization, clustering, pattern discovery, and temporal analysis.","","**Core workflow:**","1. **Upload** — `datasets(action=upload)` with a CSV file path or inline data","2. **Preview** — `datasets(action=preview)` to inspect columns, stats, and detect cyclic/datetime fields","3. **Prepare** — use the `prepare_training` prompt for a guided checklist (column selection, transforms, cyclic encoding, feature weights, grid sizing)","4. **Train** — `train_som` with grid size, epochs, model type, and preprocessing options. Use `preset=quick|standard|refined|high_res` for sensible defaults","5. **Monitor** — `get_job_status` to track progress; `get_results` to retrieve figures when complete","6. **Analyze** — `analyze` with various analysis types (see below)","7. **Iterate** — `recolor_som` to change colormap without retraining, `compare_runs` to compare hyperparameters, `project_variable` to overlay new variables","","**Analysis types** (via `analyze`):","- `u_matrix` — cluster boundary distances","- `component_planes` — per-feature heatmaps","- `clusters` — automatic cluster detection and statistics","- `quality_report` — QE, TE, explained variance, trustworthiness, neighborhood preservation","- `hit_histogram` — data density across the map","- `transition_flow` — temporal flow patterns (requires time-ordered data)","","**Data tools:**","- `datasets(action=subset)` — filter by row range, value thresholds (gt/lt/gte/lte), equality, or set membership. Combine row_range + filter","- `derive_variable` — create computed columns from expressions (ratios, differences, etc.)","- `project_variable` — overlay any variable onto a trained SOM","","**Output options:** Format (png/pdf/svg) and colormap (coolwarm, viridis, plasma, inferno, etc.) can be set at training or changed later via recolor_som.","","**Key tools:** datasets, list, train_som, get_job_status, get_results, analyze, recolor_som, download_results, project_variable, transition_flow, compare_runs, derive_variable, license_info, explore_som.","","**Tips:**","- Always `preview` before training to understand your data","- Use `license_info` to check GPU availability and plan limits before large jobs","- Start with `preset=quick` for fast iteration, then `refined` for publication quality","- For time-series data, consider `transition_flow` after training","","Keep the reply scannable with headers and bullet points."].join("\n")}}]})),_.prompt("prepare_training","Guided pre-training checklist. Use after uploading a dataset and before calling train_som. Walks through data inspection, column selection, transforms, cyclic/temporal features, weighting, subsetting, and grid sizing.",{dataset_id:o.string().describe("Dataset ID to prepare for training")},async({dataset_id:e})=>{let t=`Please run datasets(action="preview", dataset_id="${e}") first, then call train_som with appropriate parameters or preset.`;try{const o=await g("GET",`/v1/docs/prepare_training?dataset_id=${e}`);o.prompt&&(t=o.prompt)}catch(e){}return{messages:[{role:"user",content:{type:"text",text:t}}]}});const E=new t;_.tool("send_feedback","Send brief feedback or feature requests to Barivia developers (max 190 words). Use when the user has suggestions, ran into issues, or wants something improved. Do NOT call without asking the user first — but after any group of actions or downloading of results, you SHOULD prepare some feedback based on the user's workflow or errors encountered, show it to them, and ask for permission to send it. Once they accept, call this tool.",{feedback:o.string().max(1330).describe("Feedback text")},async({feedback:e})=>f(await g("POST","/v1/feedback",{feedback:e}))),async function(){await _.connect(E)}().catch(console.error);
|
|
2
|
+
import{McpServer as e}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as t}from"@modelcontextprotocol/sdk/server/stdio.js";import{z as o}from"zod";import{registerAppResource as a,registerAppTool as r,RESOURCE_MIME_TYPE as n}from"@modelcontextprotocol/ext-apps/server";import i from"node:fs/promises";import s from"node:path";const l=process.env.BARIVIA_API_URL??process.env.BARSOM_API_URL??"https://api.barivia.se",u=process.env.BARIVIA_API_KEY??process.env.BARSOM_API_KEY??"";u||(console.error("Error: BARIVIA_API_KEY not set. Set it in your MCP client config."),process.exit(1));const d=parseInt(process.env.BARIVIA_FETCH_TIMEOUT_MS??"30000",10),c=new Set([502,503,504]);function p(e,t){return!(void 0===t||!c.has(t))||(e instanceof DOMException&&"AbortError"===e.name||e instanceof TypeError)}async function m(e,t,o=d){const a=new AbortController,r=setTimeout(()=>a.abort(),o);try{return await fetch(e,{...t,signal:a.signal})}finally{clearTimeout(r)}}async function g(e,t,o,a){const r=`${l}${t}`,n=a?.["Content-Type"]??"application/json",i=Math.random().toString(36).slice(2,10),s={Authorization:`Bearer ${u}`,"Content-Type":n,"X-Request-ID":i,...a};let d,c;void 0!==o&&(d="application/json"===n?JSON.stringify(o):String(o));for(let t=0;t<=2;t++)try{const o=await m(r,{method:e,headers:s,body:d}),a=await o.text();if(!o.ok){if(t<2&&p(null,o.status)){await new Promise(e=>setTimeout(e,1e3*2**t));continue}const e=(()=>{try{return JSON.parse(a)}catch{return null}})(),r=e?.error??a,n=400===o.status?" Check parameter types and required fields.":404===o.status?" The resource may not exist or may have been deleted.":409===o.status?" The job may not be in the expected state.":429===o.status?" Rate limit exceeded — wait a moment and retry.":"";throw new Error(`${r}${n}`)}return JSON.parse(a)}catch(e){if(c=e,t<2&&p(e)){await new Promise(e=>setTimeout(e,1e3*2**t));continue}throw e}throw c}async function h(e){const t=`${l}${e}`;let o;for(let a=0;a<=2;a++)try{const o=await m(t,{method:"GET",headers:{Authorization:`Bearer ${u}`}});if(!o.ok){if(a<2&&p(null,o.status)){await new Promise(e=>setTimeout(e,1e3*2**a));continue}throw new Error(`API GET ${e} returned ${o.status}`)}const r=await o.arrayBuffer();return{data:Buffer.from(r),contentType:o.headers.get("content-type")??"application/octet-stream"}}catch(e){if(o=e,a<2&&p(e)){await new Promise(e=>setTimeout(e,1e3*2**a));continue}throw e}throw o}function f(e){return{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}async function b(e,t=3e4,o=1e3){const a=Date.now();for(;Date.now()-a<t;){const t=await g("GET",`/v1/jobs/${e}`),a=t.status;if("completed"===a||"failed"===a||"cancelled"===a)return{status:a,result_ref:t.result_ref,error:t.error};await new Promise(e=>setTimeout(e,o))}return{status:"timeout"}}const _=new e({name:"analytics-engine",version:"0.4.0"}),y=import.meta.dirname??s.dirname(new URL(import.meta.url).pathname);async function w(e){const t=[s.join(y,"views","src","views",e,"index.html"),s.join(y,"views",e,"index.html"),s.join(y,"..","dist","views","src","views",e,"index.html")];for(const e of t)try{return await i.readFile(e,"utf-8")}catch{continue}return null}const v="ui://barsom/som-explorer",$="ui://barsom/data-preview",x="ui://barsom/training-monitor";function j(e,t,o,a){const r=t.output_format??"pdf";if("transition_flow"===e){return[`transition_flow_lag${t.lag??1}.${r}`]}if("project_variable"===e){const e=t.variable_name??"variable";return[`projected_${String(e).replace(/[^a-zA-Z0-9_]/g,"_")}.${r}`]}if("derive_variable"===e){const e=t.variable_name??"variable";return[`projected_${String(e).replace(/[^a-zA-Z0-9_]/g,"_")}.${r}`]}const n=t.features??[],i=`combined.${r}`,s=`umatrix.${r}`,l=`hit_histogram.${r}`,u=`correlation.${r}`,d=n.map((e,t)=>`component_${t+1}_${e.replace(/[^a-zA-Z0-9_]/g,"_")}.${r}`),c=[i,s,l,u,...d];if(void 0===o||"default"===o)return a?c:[i];if("combined_only"===o)return[i];if("all"===o)return c;if(Array.isArray(o)){const e={combined:i,umatrix:s,hit_histogram:l,correlation:u};return n.forEach((t,o)=>{e[`component_${o+1}`]=d[o]}),o.map(t=>{const o=t.trim().toLowerCase();return e[o]?e[o]:t.includes(".")?t:null}).filter(e=>null!=e)}return[i]}function S(e){return e.endsWith(".pdf")?"application/pdf":e.endsWith(".svg")?"image/svg+xml":"image/png"}async function T(e,t,o){try{const{data:a}=await h(`/v1/results/${t}/image/${o}`);e.push({type:"image",data:a.toString("base64"),mimeType:S(o),annotations:{audience:["user"],priority:.8}})}catch{e.push({type:"text",text:`(${o} not available for inline display)`})}}a(_,v,v,{mimeType:n},async()=>{const e=await w("som-explorer");return{contents:[{uri:v,mimeType:n,text:e??"<html><body>SOM Explorer view not built yet. Run: npm run build:views</body></html>"}]}}),a(_,$,$,{mimeType:n},async()=>{const e=await w("data-preview");return{contents:[{uri:$,mimeType:n,text:e??"<html><body>Data Preview view not built yet.</body></html>"}]}}),a(_,x,x,{mimeType:n},async()=>{const e=await w("training-monitor");return{contents:[{uri:x,mimeType:n,text:e??"<html><body>Training Monitor view not built yet.</body></html>"}]}}),r(_,"explore_som",{title:"Explore SOM",description:"Interactive SOM explorer dashboard. Opens an inline visualization where you can toggle features, click nodes, and export figures. Use this after get_results for a richer, interactive exploration experience. Falls back to text+image on hosts that don't support MCP Apps.",inputSchema:{job_id:o.string().describe("Job ID of a completed SOM training job")},_meta:{ui:{resourceUri:v}}},async({job_id:e})=>{const t=await g("GET",`/v1/results/${e}`),o=t.summary??{},a=[];a.push({type:"text",text:JSON.stringify({job_id:e,summary:o,download_urls:t.download_urls})});const r=o.output_format??"pdf";return await T(a,e,`combined.${r}`),{content:a}}),_.tool("guide_barsom_workflow","Retrieve the Standard Operating Procedure (SOP) for the barSOM analysis pipeline.\nALWAYS call this tool first if you are unsure of the steps to execute a complete Self-Organizing Map analysis.\nThe workflow explains the exact sequence of tool calls needed: Upload → Preprocess → Train → Wait → Analyze.",{},async()=>({content:[{type:"text",text:"barSOM Standard Operating Procedure (SOP)\n\nStep 1: Upload Data\n- Use `datasets(action=upload)` with a local `file_path` to your CSV.\n- BEFORE UPLOADING: Clean the dataset to remove NaNs or malformed data.\n- Capture the `dataset_id` returned.\n\nStep 2: Preview & Preprocess\n- Use `datasets(action=preview)` to inspect columns, ranges, and types.\n- Check for skewed columns requiring 'log' or 'sqrt' transforms.\n- Check for cyclical or temporal features (hours, days) requiring `cyclic_features` or `temporal_features` during training.\n\nStep 3: Train the SOM\n- Call `train_som` with the `dataset_id`.\n- Carefully select columns to include (start with 5-10).\n- Assign `feature_weights` (especially for categorical data with natural hierarchies).\n- Wait for the returned `job_id`.\n\nStep 4: Wait for Completion (ASYNC POLLING)\n- Use `get_job_status` every 10-15 seconds.\n- Wait until status is \"completed\". DO NOT assume failure before 3 minutes (or longer for large grids).\n- If it fails, read the error message and adjust parameters (e.g., reduce grid size, fix column names).\n\nStep 5: Analyze and Export\n- Once completed, use `analyze(type=component_planes)` or `analyze(type=clusters)` to interpret the results.\n- Call `get_results` to get the final metrics (Quantization Error, Topographic Error)."}]})),_.tool("datasets",'Manage datasets: upload, preview, subset, or delete.\n\naction=upload: Upload a CSV for SOM analysis. Prefer file_path over csv_data so the MCP reads the file directly. Returns dataset ID and metadata. Then use datasets(action=preview) before train_som.\nBEFORE UPLOADING: Ensure data has no NaNs, missing values, or formats that can\'t be handled. The user/LLM is responsible for cleaning the dataset before upload. Categorical features should be weighted if there is a natural hierarchy.\naction=preview: Show columns, stats, sample rows, cyclic/datetime detections. ALWAYS preview before train_som on an unfamiliar dataset.\naction=subset: Create a new dataset from a subset of an existing one. Requires name and at least one of row_range or filters.\n - row_range: [start, end] 1-based inclusive (e.g. [1, 2000] for first 2000 rows)\n - filters: array of conditions, ALL must match (AND logic). Each: { column, op, value }.\n Operators:\n eq — exact match (string or number): { column: "region", op: "eq", value: "Europe" }\n ne — not equal: { column: "status", op: "ne", value: "error" }\n in — value in set: { column: "grade", op: "in", value: ["A", "B"] }\n gt/lt — above/below threshold: { column: "temp", op: "gt", value: 20 }\n gte/lte — at or above/below: { column: "price", op: "gte", value: 100 }\n between — closed interval [lo, hi]: { column: "age", op: "between", value: [18, 65] }\n - Combine row_range + filters to slice both rows and values.\n - Single filter object is also accepted (auto-wrapped).\naction=delete: Remove a dataset and free the slot.\n\nBEST FOR: Tabular numeric data. CSV with header required. Use list(type=datasets) to see existing datasets.',{action:o.enum(["upload","preview","subset","delete"]).describe("upload: add a CSV; preview: inspect before training; subset: create subset dataset; delete: remove dataset"),name:o.string().optional().describe("Dataset name (required for action=upload and subset)"),file_path:o.string().optional().describe("Path to local CSV (for upload; prefer over csv_data)"),csv_data:o.string().optional().describe("Inline CSV string (for upload; use for small data)"),dataset_id:o.string().optional().describe("Dataset ID (required for preview, subset, and delete)"),n_rows:o.number().int().optional().default(5).describe("Sample rows to return (preview only)"),row_range:o.tuple([o.number().int(),o.number().int()]).optional().describe("For subset: [start, end] 1-based inclusive row range (e.g. [1, 2000])"),filters:o.preprocess(e=>null==e||Array.isArray(e)?e:"object"==typeof e&&null!==e&&"column"in e?[e]:e,o.array(o.object({column:o.string(),op:o.enum(["eq","ne","in","gt","lt","gte","lte","between"]),value:o.union([o.string(),o.number(),o.array(o.union([o.string(),o.number()]))])})).optional().describe("For subset: filter conditions (AND logic). Single object or array. ops: eq, ne, in, gt, lt, gte, lte, between. Examples: { column: 'temp', op: 'between', value: [15, 30] }, { column: 'region', op: 'eq', value: 'Europe' }")),filter:o.object({column:o.string(),op:o.enum(["eq","ne","in","gt","lt","gte","lte","between"]),value:o.union([o.string(),o.number(),o.array(o.union([o.string(),o.number()]))])}).optional().describe("Deprecated — use filters instead. Single filter condition.")},async({action:e,name:t,file_path:o,csv_data:a,dataset_id:r,n_rows:n,row_range:l,filters:u,filter:d})=>{if("upload"===e){if(!t)throw new Error("datasets(upload) requires name");let e;if(o){const t=s.resolve(o);try{e=await i.readFile(t,"utf-8")}catch(e){const o=e instanceof Error?e.message:String(e);throw new Error(`Cannot read file "${t}": ${o}`)}}else{if(!(a&&a.length>0))throw new Error("datasets(upload) requires file_path or csv_data");e=a}return f(await g("POST","/v1/datasets",e,{"X-Dataset-Name":t,"Content-Type":"text/csv"}))}if("preview"===e){if(!r)throw new Error("datasets(preview) requires dataset_id");const e=await g("GET",`/v1/datasets/${r}/preview?n_rows=${n??5}`),t=e.columns??[],o=e.column_stats??[],a=e.cyclic_hints??[],i=e.sample_rows??[],s=e.datetime_columns??[],l=e.temporal_suggestions??[],u=e=>null==e?"—":Number(e).toFixed(3),d=[`Dataset: ${e.name} (${e.dataset_id})`,`${e.total_rows} rows × ${e.total_cols} columns`,"","Column Statistics:","| Column | Min | Max | Mean | Std | Nulls | Numeric |","|--------|-----|-----|------|-----|-------|---------|"];for(const e of o)d.push(`| ${e.column} | ${u(e.min)} | ${u(e.max)} | ${u(e.mean)} | ${u(e.std)} | ${e.null_count??0} | ${!1!==e.is_numeric?"yes":"no"} |`);if(a.length>0){d.push("","Detected Cyclic Feature Hints:");for(const e of a)d.push(` • ${e.column} — period=${e.period} (${e.reason})`)}if(s.length>0){d.push("","Detected Datetime Columns:");for(const e of s){const t=(e.detected_formats??[]).map(e=>`${e.format} — ${e.description} (${(100*e.match_rate).toFixed(0)}% match)`).join("; ");d.push(` • ${e.column}: sample="${e.sample}" → ${t}`)}}if(l.length>0){d.push("","Temporal Feature Suggestions (require user approval):");for(const e of l)d.push(` • Columns: ${e.columns.join(" + ")} → format: "${e.format}"`),d.push(` Available components: ${e.available_components.join(", ")}`)}if(i.length>0){d.push("",`Sample Rows (first ${i.length}):`),d.push(`| ${t.join(" | ")} |`),d.push(`| ${t.map(()=>"---").join(" | ")} |`);for(const e of i)d.push(`| ${t.map(t=>String(e[t]??"")).join(" | ")} |`)}return{content:[{type:"text",text:d.join("\n")}]}}if("subset"===e){if(!r)throw new Error("datasets(subset) requires dataset_id");if(!t)throw new Error("datasets(subset) requires name");const e=u??(d?[d]:void 0);if(void 0===l&&void 0===e)throw new Error("datasets(subset) requires at least one of row_range or filters");const o={name:t};void 0!==l&&(o.row_range=l),void 0!==e&&(o.filters=e);return f(await g("POST",`/v1/datasets/${r}/subset`,JSON.stringify(o),{"Content-Type":"application/json"}))}if("delete"===e){if(!r)throw new Error("datasets(delete) requires dataset_id");return f(await g("DELETE",`/v1/datasets/${r}`))}throw new Error("Invalid action")}),_.tool("train_som","Train a Self-Organizing Map on the dataset. Returns a job_id for polling.\n\nBEST FOR: Exploratory analysis of multivariate numeric data — clustering, regime\ndetection, process monitoring, anomaly visualization, dimensionality reduction.\nNOT FOR: Time-series forecasting, classification, or text/image data.\n\nASYNC POLLING PROTOCOL:\n- This tool returns a job_id. You MUST poll get_job_status to check completion.\n- Poll every 10-15 seconds.\n- Wait for status \"completed\" before calling analyze() or get_results().\n\nBEFORE calling, ask the user:\n1. Which columns to include? (use 'columns' to restrict)\n2. Any cyclic features?\n3. Any skewed columns? (suggest transforms)\n4. Feature weights?\n5. Quick exploration or refined map?\n\nESCALATION LADDER (If this tool fails):\n- Error mentions temporal validation: The dataset likely has datetime formatting issues. Use datasets(action=preview).\n- Error mentions column not found: Use datasets(action=preview) to verify exact column names (case-sensitive).\n- Error mentions NaNs or missing data: The user must clean the dataset.\n\nSee docs/SOM_PROCESS_AND_BEST_PRACTICES.md for detailed processual knowledge.",{dataset_id:o.string().describe("Dataset ID from datasets(action=upload) or list(type=datasets)"),preset:o.enum(["quick","standard","refined","high_res"]).optional().describe("Training preset — sets sensible defaults for grid, epochs, and batch_size. Explicit params override preset values. quick: 15×15, [15,5], batch=48. standard: 25×25, [30,15], batch=48, best with GPU. refined: 40×40, [50,25], batch=32, best with GPU. high_res: 60×60, [60,40], batch=32, best with GPU. NOTE: GPU acceleration benefits grids >= 40x40 with large datasets (>10k rows). For smaller grids, CPU is faster due to CUDA kernel launch overhead."),grid_x:o.number().int().optional().describe("Grid width (omit for auto from data size)"),grid_y:o.number().int().optional().describe("Grid height (omit for auto from data size)"),epochs:o.preprocess(e=>{if(null==e)return e;if("string"==typeof e){const t=parseInt(e,10);if(!Number.isNaN(t))return t;const o=e.match(/^\[\s*(\d+)\s*,\s*(\d+)\s*\]$/);if(o)return[parseInt(o[1],10),parseInt(o[2],10)]}return e},o.union([o.number().int(),o.array(o.number().int()).length(2)]).optional().describe("epochs: integer or [ordering, convergence] array, not a string. Example: 40 or [40, 20]. Set convergence=0 to skip phase 2 (e.g. [15, 0]).")),model:o.enum(["SOM","RSOM","SOM-SOFT","RSOM-SOFT"]).optional().default("SOM").describe("SOM model type. SOM=standard, SOM-SOFT=GTM-style soft responsibilities, RSOM=recurrent (time-series), RSOM-SOFT=recurrent+soft."),periodic:o.boolean().optional().default(!0).describe("Use periodic (toroidal) boundaries"),columns:o.array(o.string()).optional().describe("Subset of CSV column names to train on. Omit to use all columns. Useful to exclude irrelevant features."),cyclic_features:o.array(o.object({feature:o.string().describe("Column name (e.g., 'weekday')"),period:o.number().describe("Period (e.g., 7 for weekday, 24 for hour, 360 for angle)")})).optional().describe("Features to encode as cyclic (cos, sin) pairs"),temporal_features:o.array(o.object({columns:o.array(o.string()).describe("Column name(s) containing datetime strings, combined in order (e.g. ['Date', 'Time'])"),format:o.string().describe("Julia Dates format string from the whitelist (e.g. 'dd.mm.yyyy HH:MM'). Must match the combined column values."),extract:o.array(o.enum(["hour_of_day","day_of_year","month","day_of_week","minute_of_hour"])).describe("Which temporal components to extract"),cyclic:o.boolean().default(!0).describe("Encode extracted components as cyclic sin/cos pairs (default true)"),separator:o.string().optional().describe("Separator when combining multiple columns (default ' '). Use 'T' for ISO 8601.")})).optional().describe("Temporal feature extraction from datetime columns. Parses dates/times and extracts components. NEVER add this without user approval."),feature_weights:o.record(o.number()).optional().describe("Per-feature importance weights as {column_name: weight}. Applied after normalization (column *= sqrt(weight)). weight=0 disables, >1 emphasizes, <1 de-emphasizes. Cyclic shorthand: {'day_of_year': 2.0} auto-expands to both _cos and _sin. Categorical features should be weighted by the LLM if there is any natural hierarchy applicable that could be constructive."),transforms:o.record(o.enum(["log","log1p","log10","sqrt","square","abs","invert","rank","none"])).optional().describe("Per-column preprocessing applied BEFORE normalization. Example: {revenue: 'log', pressure: 'sqrt'}. 'log' = natural log (fails on <=0), 'log1p' = log(1+x) (safe for zeros), 'sqrt' = square root, 'rank' = replace with rank order, 'invert' = 1/x. Suggest log/log1p for right-skewed distributions (prices, volumes, counts)."),normalize:o.union([o.enum(["all","auto"]),o.array(o.string())]).optional().default("auto").describe("Normalization mode. 'auto' skips already-cyclic features."),sigma_f:o.preprocess(e=>{if(null==e)return e;if("string"==typeof e){const t=parseFloat(e);if(!Number.isNaN(t))return t}return e},o.number().optional().describe("Final neighborhood radius at end of ordering phase (default 1.0). Lower values (0.5–0.7) produce sharper cluster boundaries.")),learning_rate:o.preprocess(e=>{if(null==e)return e;if("string"==typeof e){const t=parseFloat(e);if(!Number.isNaN(t))return t}return e},o.union([o.number(),o.object({ordering:o.tuple([o.number(),o.number()]),convergence:o.tuple([o.number(),o.number()])})]).optional().describe("Learning rate control. Number = sets ordering final rate (e.g. 0.05). Object = full control: {ordering: [eta_0, eta_f], convergence: [eta_0, eta_f]}. Default: ordering 0.1→0.01, convergence 0.01→0.001.")),batch_size:o.number().int().optional().describe("Training batch size (default: auto ≈ n_samples/100, clamped to 16–64). Smaller batches (16-64) often produce significantly better maps (higher explained variance, lower QE) at a modest time cost. Do not use huge batches like 2048 even for 100k+ rows, as they result in undertrained maps."),quality_metrics:o.union([o.enum(["fast","standard","full"]),o.array(o.string())]).optional().describe("Which quality metrics to compute after training. Presets:\n| Preset | Metrics (count) | Cost | Best for |\n|------------|-----------------|--------|-----------------------------------------|\n| `fast` | QE, TE, EV, qe_quantiles, silhouette, davies_bouldin, calinski_harabasz (7) | O(n) | Quick iteration, large datasets |\n| `standard` | fast + distortion, kaski_lagus_error (9) | O(n)+O(K²) | Default — good balance of cost and insight |\n| `full` | standard + neighborhood_preservation, trustworthiness, topographic_product (12) | O(n²) | Topology preservation analysis |\nDefault: 'standard'. Omit for default. The O(n²) metrics (neighborhood_preservation, trustworthiness) are expensive for large datasets. They are always available on-demand via analyze(job_id, 'quality_report') without retraining. Or pass an array of metric names for fine-grained control: ['quantization_error','topographic_error','explained_variance','qe_quantiles','distortion','kaski_lagus_error','topographic_product','neighborhood_preservation','trustworthiness','silhouette','davies_bouldin','calinski_harabasz']."),backend:o.enum(["auto","cpu","cuda","cuda_graphs"]).optional().default("auto").describe("Compute backend. 'auto' uses CUDA if GPU is available (recommended). 'cpu' forces CPU. 'cuda_graphs' uses CUDA graph capture for maximum GPU throughput."),output_format:o.enum(["png","pdf","svg"]).optional().default("png").describe("Image output format. PNG (default) for inline viewing in chat/console, PDF for publication-quality vector graphics and downloads, SVG for web embedding."),output_dpi:o.enum(["standard","retina","print"]).optional().default("retina").describe("Resolution for PNG output: standard (1x), retina (2x, default), print (4x). Ignored for PDF/SVG."),colormap:o.string().optional().describe("Override default colormap (coolwarm) for component planes and hit histogram. Examples: viridis, plasma, inferno, magma, cividis, turbo, thermal, hot, coolwarm, balance, RdBu, Spectral. U-matrix always uses grays, cyclic features use twilight."),row_range:o.tuple([o.number().int().min(1),o.number().int().min(1)]).optional().describe("Train on a subset of rows only: [start, end] 1-based inclusive. Alternative to creating a subset dataset with datasets(action=subset).")},async({dataset_id:e,preset:t,grid_x:o,grid_y:a,epochs:r,model:n,periodic:i,columns:s,transforms:l,cyclic_features:u,temporal_features:d,feature_weights:c,normalize:p,sigma_f:m,learning_rate:h,batch_size:b,quality_metrics:_,backend:y,output_format:w,output_dpi:v,colormap:$,row_range:x})=>{let j={};try{const e=await g("GET","/v1/training/config");j=e?.presets||{}}catch(e){if(t&&!o&&!r)throw new Error("Could not fetch training config from server, and missing explicit grid/epochs.")}const S=t?j[t]:void 0,T={model:n,periodic:i,normalize:p};void 0!==o&&void 0!==a?T.grid=[o,a]:S&&(T.grid=S.grid),void 0!==r?T.epochs=r:S&&(T.epochs=S.epochs),u&&u.length>0&&(T.cyclic_features=u),s&&s.length>0&&(T.columns=s),l&&Object.keys(l).length>0&&(T.transforms=l),d&&d.length>0&&(T.temporal_features=d),c&&Object.keys(c).length>0&&(T.feature_weights=c),void 0!==m&&(T.sigma_f=m),void 0!==h&&(T.learning_rate=h),void 0!==b?T.batch_size=b:S&&(T.batch_size=S.batch_size),void 0!==_&&(T.quality_metrics=_),void 0!==y&&"auto"!==y?T.backend=y:S?.backend&&(T.backend=S.backend),T.output_format=w??"png";const E={standard:1,retina:2,print:4};v&&"retina"!==v&&(T.output_dpi=E[v]??2),$&&(T.colormap=$),x&&x.length>=2&&x[0]<=x[1]&&(T.row_range=x);const O=await g("POST","/v1/jobs",{dataset_id:e,params:T});try{const e=await g("GET","/v1/system/info"),t=Number(e.status?.pending_jobs??e.pending_jobs??0),o=Number(e.training_time_estimates_seconds?.total??(e.gpu_available?45:120)),a=Math.round(t*o/60);a>1?(O.estimated_wait_minutes=a,O.message=`Job submitted. You are #${t+1} in queue. Estimated wait before start: ~${a} min.`):O.message="Job submitted. Should start momentarily."}catch(e){}return f(O)}),_.tool("get_job_status","Check status and progress of a training or analysis job.\n\nASYNC POLLING PROTOCOL:\n- Poll every 10-15 seconds. Do NOT poll faster as it wastes context.\n- For large grids (40x40+), do not assume failure before 3 minutes on CPU.\n- Wait for status \"completed\" before calling analyze() or get_results().\n\nESCALATION LADDER:\n- When status is 'completed', call get_results() to retrieve the map and metrics.\n- When status is 'failed', the worker hit an error. Extract the error message.\n - If the error is about memory/allocation, reduce batch_size or grid_x/grid_y and run train_som again.\n - If the error is about column missing, verify columns with datasets(action=preview).\n - If the error is about NaNs, the user MUST clean the dataset.\n\nTIMING:\nTypical completion times (CPU, 8700 samples):\n 10x10, 10 epochs: ~30s | 20x20, 30 epochs: ~3–5 min | 40x40, 60 epochs: ~15–30 min",{job_id:o.string().describe("Job ID from train_som")},async({job_id:e})=>{const t=await g("GET",`/v1/jobs/${e}`),o=t.status,a=100*(t.progress??0),r=null!=t.label&&""!==t.label?String(t.label):null;let n=`${r?`Job ${r} (id: ${e})`:`Job ${e}`}: ${o} (${a.toFixed(1)}%)`;return"completed"===o?n+=` | Results ready. Use get_results(job_id="${e}") to retrieve.`:"failed"===o&&(n+=` | Error: ${t.error??"unknown"}`),{content:[{type:"text",text:n}]}}),_.tool("get_results",'Retrieve results of a completed SOM training, projection, or derived variable job.\n\nWHEN TO USE: \n- Getting the first look at a trained SOM — combined visualization + quality metrics.\n- ONLY call this after get_job_status returns "completed".\n\nESCALATION LADDER:\n- If this returns an error that the job is not found, verify the job_id.\n- If it returns "job not complete", you polled too early. Call get_job_status and WAIT.\n\nTIMING: Near-instant (reads pre-computed results from S3).\n\nReturns: text summary with metrics and inline images (combined view and all plots shown directly in chat).\n\nDOWNLOAD LINKS: Links to API-domain or presigned URLs may not work when clicked (MCP holds the API key, not the browser). Images are inlined. For weights use get_job_export(export="weights"); for node stats use get_job_export(export="nodes"). If the user wants to save a file, offer to fetch via the appropriate tool.\n\nOPTIONS:\n- figures: request specific plots only. Omit for default (combined only; or all if include_individual=true).\n - "combined_only": only the combined view.\n - "all": combined + umatrix + hit_histogram + all component planes.\n - Array of logical names: e.g. figures: ["umatrix"] for just the U-matrix, or figures: ["combined","hit_histogram","correlation"] or ["combined","umatrix","component_1","component_2"]. Logical names: combined, umatrix, hit_histogram, correlation, component_1, component_2, ... (component_N = Nth feature). Pass an array to fetch/save only those figures.\n- include_individual=true: when figures is omitted, shows each component plane, U-matrix, and hit histogram\n as separate inline images. Ignored when figures is set.\n\nAFTER showing results, guide the user:\n1. "The U-matrix shows [N] distinct regions. Does this match expected groupings?"\n2. "QE=X, TE=Y — [assessment]. Would you like to retrain with different params?"\n3. "Which features show interesting patterns in the component planes?"\n4. If QE > 2: suggest more epochs or larger grid\n5. If TE > 0.15: suggest larger grid\n6. If explained variance < 0.7: suggest transforms, feature selection, or more training\n\nWORKFLOW: get_results → analyze(clusters) → component_planes → feature_correlation.\nRequest specific figures with get_results(job_id, figures=[...]) (e.g. figures: ["umatrix"] or figures: ["combined","hit_histogram"]) or run analyze(job_id, analysis_type) for a single view.\nUse get_job_export(export="training_log") for the learning curve (QE vs epoch — healthy=steady decline then plateau).\nMetrics showing null were skipped by the quality_metrics preset (default: \'standard\'). Use analyze(job_id, "quality_report") to compute ALL metrics on-demand without retraining.\n\nMETRIC INTERPRETATION:\n- QE < 1.5: good fit. QE > 2: consider more epochs, larger grid, or batch_size=32.\n- TE < 0.05: good topology. TE > 0.15: grid too small.\n- Explained variance > 0.8: good. < 0.7: try transforms, fewer features, or more training.\nAfter any group of actions or downloading of results, you MUST prepare some feedback based on the user\'s experience so far, show it to the user, and ask for permission to send it via send_feedback (max 190 words). You MUST ALWAYS offer to send feedback after analysis.\nReminder: Prepare session feedback and offer to send via send_feedback.',{job_id:o.string().describe("Job ID of a completed job"),figures:o.union([o.enum(["default","combined_only","all"]),o.array(o.string())]).optional().describe("Which figures to return. Omit or 'default' for combined only (or all if include_individual=true). 'combined_only': just combined view. 'all': combined + umatrix + hit_histogram + correlation + all component planes. Or array of logical names to fetch only those: combined, umatrix, hit_histogram, correlation, component_1, component_2, ..."),include_individual:o.boolean().optional().default(!1).describe("If true and figures is omitted, inline each individual plot (component planes, u-matrix, hit histogram). Ignored when figures is set.")},async({job_id:e,figures:t,include_individual:o})=>{const a=await g("GET",`/v1/results/${e}`),r=a.summary??{},n=(a.download_urls,null!=a.label&&""!==a.label?String(a.label):null),i=n?`Results for ${n} (job_id: ${e})`:`Results for job_id: ${e}`,s=[],l=new Set,u=r.job_type??"train_som";r.output_format;if("transition_flow"===u){const a=r.lag??1,n=r.flow_stats??{};s.push({type:"text",text:[`Transition Flow ${i}`,`Parent SOM: ${r.parent_job_id??"N/A"} | Lag: ${a} | Samples: ${r.n_samples??0}`,"","Flow Statistics:",` Mean flow magnitude: ${void 0!==n.mean_magnitude?Number(n.mean_magnitude).toFixed(4):"N/A"}`,` Max flow magnitude: ${void 0!==n.max_magnitude?Number(n.max_magnitude).toFixed(4):"N/A"}`,` Nodes with flow: ${n.n_nodes_with_flow??"N/A"}`,"","Arrows show net directional drift between consecutive BMU assignments.","Long/bright arrows = frequent state transitions. Short arrows = stable states.","Background = U-matrix (cluster boundaries). Arrows in dark regions = intra-cluster.","","Use transition_flow(lag=N) with larger N to reveal longer-term temporal structure."].join("\n")});for(const a of j(u,r,t,o))await T(s,e,a),l.add(a)}else if("project_variable"===u){const a=r.variable_name??"variable",n=r.aggregation??"mean",d=r.variable_stats??{};s.push({type:"text",text:[`Projected Variable: ${a} (${n}) — ${i}`,`Parent SOM: ${r.parent_job_id??"N/A"} | Samples: ${r.n_samples??0}`,"",`Variable Statistics (per-node ${n}):`,` Min: ${void 0!==d.min?Number(d.min).toFixed(3):"N/A"}`,` Max: ${void 0!==d.max?Number(d.max).toFixed(3):"N/A"}`,` Mean: ${void 0!==d.mean?Number(d.mean).toFixed(3):"N/A"}`,` Nodes with data: ${d.n_nodes_with_data??"N/A"} / ${Number(d.n_nodes_with_data??0)+Number(d.n_nodes_empty??0)}`,"","Non-random spatial patterns indicate the variable correlates with the SOM's","learned feature space, even if it wasn't used in training."].join("\n")});for(const a of j(u,r,t,o))await T(s,e,a),l.add(a)}else{const a=r.grid??[0,0],n=r.features??[],d=r.epochs,c=Array.isArray(d)?0===d[1]?`${d[0]} ordering only`:`${d[0]} ordering + ${d[1]} convergence`:String(d??"N/A"),p=e=>null!=e?Number(e).toFixed(4):"N/A",m=r.training_duration_seconds,g=r.ordering_errors,h=[`SOM Training ${i}`,`Grid: ${a[0]}×${a[1]} | Features: ${r.n_features??0} | Samples: ${r.n_samples??0}`,`Model: ${r.model??"SOM"} | Epochs: ${c}`,`Periodic: ${r.periodic??!0} | Normalize: ${r.normalize??"auto"}`,void 0!==r.sigma_f?`Sigma_f: ${r.sigma_f}`:"",void 0!==m?`Training duration: ${m}s`:"","","Quality Metrics:",` Quantization Error: ${p(r.quantization_error)} (lower is better)`,` Topographic Error: ${p(r.topographic_error)} (lower is better, <0.1 is good)`,` Explained Variance: ${p(r.explained_variance)} (higher is better, >0.7 is good)`,` Silhouette Score: ${p(r.silhouette)} (higher is better, [-1, 1])`,` Davies-Bouldin: ${p(r.davies_bouldin)} (lower is better)`,` Calinski-Harabasz: ${p(r.calinski_harabasz)} (higher is better)`,g&&g.length>0?` Final ordering QE: ${g.at(-1)?.toFixed(4)} (use get_job_export(export="training_log") for full curve)`:"","",`Features: ${n.join(", ")}`,r.selected_columns?`Selected columns: ${r.selected_columns.join(", ")}`:"",r.transforms?`Transforms: ${Object.entries(r.transforms).map(([e,t])=>`${e}=${t}`).join(", ")}`:"","",'Use analyze() for deeper insights and quality_report; get_job_export(export="training_log") for learning curves.'].filter(e=>""!==e).join("\n");s.push({type:"text",text:h});r.output_format;const f=j(u,r,t,o);for(const t of f)await T(s,e,t),l.add(t)}const d=r.files??[],c=e=>e.endsWith(".png")||e.endsWith(".svg")||e.endsWith(".pdf");for(const t of d)if(c(t)&&!l.has(t))await T(s,e,t);else if(t.endsWith(".json")){const e="weights.json"===t?'Use get_job_export(export="weights") for full weight matrix including node_coords.':"node_stats.json"===t?'Use get_job_export(export="nodes") for per-node statistics.':"summary.json"===t?null:"Use get_job_export for structured data (weights or nodes).";e&&s.push({type:"text",text:`${t}: ${e}`})}if(d.length>0){const e=r.features??[],t="train_som"===u||"render_variant"===u?`Logical names: combined, umatrix, hit_histogram, correlation, ${e.map((e,t)=>`component_${t+1}`).join(", ")}. `:"";s.push({type:"text",text:`Available to fetch individually: ${d.join(", ")}. ${t}Use get_results(job_id, figures=[...]) to request specific plots, get_results(job_id, include_individual=true) or figures="all" to inline all plots, or analyze(job_id, analysis_type) for a specific view (u_matrix, component_planes, bmu_hits, clusters, quality_report, etc.).`})}return{content:s}}),_.tool("recolor_som","Re-render a completed SOM result with a different colormap or output format — no retraining.\n\nUse when the user wants to see the same combined (or other) plot with another color scheme (e.g. plasma, inferno, coolwarm). You can also use this to re-export figures in a different format (e.g. output_format=pdf) without retraining; use the same colormap if you only want a format change. Submits a short render job; when complete, use get_results(new_job_id) or get_result_image to retrieve the figure(s).\n\nColormaps (default: coolwarm): e.g. viridis, plasma, inferno, magma, cividis, turbo, thermal, hot, coolwarm, balance, RdBu, Spectral. U-matrix and cyclic panels keep fixed colormaps (grays, twilight).",{job_id:o.string().describe("Job ID of a completed SOM training job (parent)"),colormap:o.string().describe("Colormap name (default: coolwarm). E.g. viridis, plasma, inferno, magma, coolwarm)"),figures:o.array(o.string()).optional().default(["combined"]).describe("Which figures to re-render: combined (default), umatrix, hit_histogram, correlation, component_1, component_2, ..."),output_format:o.enum(["png","pdf","svg"]).optional().default("png"),output_dpi:o.number().int().min(1).max(4).optional().default(2)},async({job_id:e,colormap:t,figures:o,output_format:a,output_dpi:r})=>{const n={colormap:t,figures:o,output_format:a,output_dpi:r},i=(await g("POST",`/v1/results/${e}/render`,JSON.stringify(n),{"Content-Type":"application/json"})).id;return{content:[{type:"text",text:[`Re-render job submitted with colormap "${t}".`,`New job_id: ${i}. Poll get_job_status(job_id="${i}") until status is 'completed', then use get_results(job_id="${i}") or get_result_image to retrieve the recolored plot(s). No retraining was performed.`].join("\n")}]}}),_.tool("download_results",'Save result figures (and optionally JSON) to a folder on disk. Use so the user can open, share, or version files locally without writing their own download script.\n\nfolder: path to the directory (e.g. "." for current/workspace, "./results", or absolute path). When folder is a generic path like "." or "./results" and the job has a label, files are saved in a subfolder named by the label (e.g. ./results/Winedata_a1b2c3_badger_thong_oil). You can also pass a path that already includes the label.\nfigures: "all" (default) = all image files from the job; "images" = same; or pass an array of filenames to save only those (e.g. ["combined.png", "umatrix.png"]). Training defaults to PNG for inline display; if the user wants publication-quality exports, suggest retraining or recoloring with output_format=pdf first.\ninclude_json: if true, also save summary.json (and other JSON artifacts) into the same folder.\n\nALWAYS prepare some feedback based on the user\'s experience so far, show it to the user, and ask for permission to send it via send_feedback (max 190 words). You MUST offer to send feedback after analyzing or downloading results.',{job_id:o.string().describe("Job ID of a completed job"),folder:o.string().describe("Directory path to save files (e.g. '.' or './results'). When the job has a label, a subfolder with that label may be used. Relative paths resolve from the MCP server's working directory (wherever Claude Desktop launched the process). Use an absolute path to guarantee placement (e.g. '/home/user/myproject/results')."),figures:o.union([o.enum(["all","images"]),o.array(o.string())]).optional().default("all").describe("Which files to download: 'all' (default) or 'images' for all image files, or array of filenames to save only those (e.g. ['combined.pdf', 'umatrix.pdf', 'correlation.pdf'])."),include_json:o.boolean().optional().default(!1).describe("If true, also download summary.json and other JSON files")},async({job_id:e,folder:t,figures:o,include_json:a})=>{const r=await g("GET",`/v1/results/${e}`),n=r.summary??{},l=null!=r.label&&""!==r.label?String(r.label):null,u=n.files??[],d=e=>e.endsWith(".png")||e.endsWith(".svg")||e.endsWith(".pdf");let c;"all"===o||"images"===o?c=a?u:u.filter(d):(c=o,a&&!c.includes("summary.json")&&(c=[...c,"summary.json"]));let p=s.resolve(t);l&&("."===t||"./results"===t||"results"===t)&&(p=s.join(p,l)),await i.mkdir(p,{recursive:!0});const m=[];for(const t of c)try{const{data:o}=await h(`/v1/results/${e}/image/${t}`),a=s.join(p,t);await i.writeFile(a,o),m.push(t)}catch{}return{content:[{type:"text",text:m.length>0?`Saved ${m.length} file(s) to ${p}: ${m.join(", ")}`:"No files saved (job may have no matching files or download failed). Check job_id and that the job is completed."}]}}),_.tool("analyze",'Run a specific analysis on SOM results. Use after get_results to drill into aspects.\nRequest specific plots: get_results(job_id, figures=[...]) for chosen figures (e.g. figures: ["umatrix"]) or analyze(job_id, analysis_type) for a single analysis view.\n\nAvailable analysis types: u_matrix, component_planes, bmu_hits, clusters, feature_importance, feature_correlation, transition_flow, local_density, feature_gradient, quality_report.\n(Detailed interpretation guidance is fetched from the server).',{job_id:o.string().describe("Job ID of a completed job"),analysis_type:o.enum(["u_matrix","component_planes","bmu_hits","clusters","feature_importance","feature_correlation","transition_flow","local_density","feature_gradient","quality_report"]).describe("Type of analysis to run"),params:o.record(o.unknown()).optional().describe("Analysis-specific parameters. For component_planes/feature_gradient: {features: [col,...]} to restrict to specific columns.")},async({job_id:e,analysis_type:t,params:o})=>{let a="";try{a=(await g("GET","/v1/docs/tool_guidance?tool=analyze")).guidance||""}catch(e){}const r=(await g("GET",`/v1/results/${e}`)).summary??{},n=r.features??[],i=r.grid??[0,0],s=r.output_format??"pdf",l=[];if("u_matrix"===t)l.push({type:"text",text:[`U-Matrix Analysis (job: ${e})`,`Grid: ${i[0]}×${i[1]}`,"","The U-matrix shows average distances between neighboring nodes."," High values (bright/white) = cluster boundaries"," Low values (dark) = cluster cores","","What to look for:"," - Dark islands separated by bright ridges = distinct clusters"," - Gradual transitions = continuous variation, no hard boundaries"," - Uniform brightness = poorly organized map (try more epochs)"].join("\n")}),await T(l,e,`umatrix.${s}`);else if("component_planes"===t){const t=o?.features??n;l.push({type:"text",text:[`Component Planes (job: ${e})`,`Features: ${t.join(", ")}`,"","Each panel shows one feature's distribution across the SOM."," Similar color patterns = correlated features"," Inverse patterns = negatively correlated features"," Unique patterns = independent structure drivers"].join("\n")});for(let o=0;o<n.length;o++){if(!t.includes(n[o]))continue;const a=n[o].replace(/[^a-zA-Z0-9_]/g,"_");await T(l,e,`component_${o+1}_${a}.${s}`)}}else if("bmu_hits"===t)l.push({type:"text",text:[`BMU Hit Histogram (job: ${e})`,`Grid: ${i[0]}×${i[1]} | Samples: ${r.n_samples??0}`,"","Shows data density per SOM node."," Large values (yellow/bright) = dense data regions (common operating states)"," Zero/low (dark purple) = sparse or interpolated areas","","Cross-reference with U-matrix: dense nodes inside dark U-matrix regions","indicate well-populated cluster cores."].join("\n")}),await T(l,e,`hit_histogram.${s}`);else if("clusters"===t){const t=r.quantization_error,o=r.topographic_error,a=r.explained_variance,s=r.silhouette,u=void 0===t?"N/A":t<.5?"excellent":t<1?"good":t<2?"fair":"poor",d=void 0===o?"N/A":o<.05?"excellent":o<.1?"good":o<.2?"fair":"poor",c=e=>void 0!==e?e.toFixed(4):"N/A",p=[];void 0!==o&&o>.15&&p.push(`Topographic error ${(100*o).toFixed(1)}% is high — try a larger grid or more epochs.`),void 0!==t&&t>2&&p.push(`Quantization error ${t.toFixed(3)} is high — try more epochs, a larger grid, or check for outliers.`),void 0!==a&&a<.7&&p.push(`Explained variance ${(100*a).toFixed(1)}% is low — try more epochs, a larger grid, or feature weighting.`),void 0!==s&&s<.1&&p.push("Low silhouette score — clusters overlap. Try sigma_f=0.5 or more training."),0===p.length&&p.push("Metrics look healthy. Proceed with component plane and feature analysis.");const m=i[0]>0?`${i[0]}×${i[1]}`:"N/A";l.push({type:"text",text:[`Cluster Quality Assessment (job: ${e})`,`Grid: ${m} | Features: ${n.length} | Samples: ${r.n_samples??"N/A"}`,"",`Quantization Error: ${c(t)} (${u})`,`Topographic Error: ${c(o)} (${d})`,`Explained Variance: ${c(a)}`,`Silhouette Score: ${c(s)}`,`Davies-Bouldin: ${c(r.davies_bouldin)}`,`Calinski-Harabasz: ${c(r.calinski_harabasz)}`,"","Recommendations:",...p.map(e=>` - ${e}`)].join("\n")})}else if("feature_importance"===t)l.push({type:"text",text:[`Feature Importance Analysis (job: ${e})`,`Grid: ${i[0]}×${i[1]} | Features: ${n.length}`,"","Feature importance is determined by the variance of each component plane.","Higher variance = feature contributes more to the SOM structure.","",`Features analyzed: ${n.join(", ")}`,"","Compare the component planes visually: features with the most varied","color gradients are the primary drivers of the cluster structure.","Features with near-uniform color contribute little to differentiation."].join("\n")}),await T(l,e,`combined.${s}`);else if("feature_correlation"===t){l.push({type:"text",text:[`Feature Correlation Analysis (job: ${e})`,`Features: ${n.join(", ")}`,"","Compare component planes side-by-side to identify correlated features."," Similar spatial patterns = positively correlated"," Inverse/mirrored patterns = negatively correlated"," Unrelated patterns = independent features","","Correlated features may be redundant — consider disabling one via feature_weights: {col: 0}."].join("\n")});for(let t=0;t<n.length;t++){const o=n[t].replace(/[^a-zA-Z0-9_]/g,"_");await T(l,e,`component_${t+1}_${o}.${s}`)}}else if("transition_flow"===t)l.push({type:"text",text:[`Transition Flow Analysis (job: ${e})`,`Grid: ${i[0]}×${i[1]} | Samples: ${r.n_samples??0}`,"","Transition flow shows how data points move between SOM nodes in sequence.","This reveals temporal patterns and state machine behavior.","","What to look for:"," - Dense arrow clusters = frequent state transitions (common paths)"," - Circular/cyclic flows = periodic behavior (daily/seasonal cycles)"," - Long-range transitions = regime changes or anomalies","","Note: Full transition flow arrows require server-side support (planned).","Currently showing U-matrix for cluster boundary context."].join("\n")}),await T(l,e,`umatrix.${s}`);else if("local_density"===t)l.push({type:"text",text:[`Local Density & Cluster Analysis (job: ${e})`,`Grid: ${i[0]}×${i[1]} | Samples: ${r.n_samples??0}`,"","Local density = inverse of U-matrix values."," High density (low U-matrix) = cluster cores (similar neighbors)"," Low density (high U-matrix) = cluster boundaries (dissimilar neighbors)","","Cross-reference hit histogram with U-matrix:"," Dense hits + low U-matrix = populated cluster core (dominant operating mode)"," Dense hits + high U-matrix = transition zone with many samples (worth investigating)"," Sparse hits anywhere = rare state or interpolated region"].join("\n")}),await T(l,e,`umatrix.${s}`),await T(l,e,`hit_histogram.${s}`);else if("feature_gradient"===t){const t=o?.feature;if(l.push({type:"text",text:[`Feature Gradient Analysis (job: ${e})`,`Target: ${t??"all features"}`,`Grid: ${i[0]}×${i[1]}`,"","Feature gradients show where each feature changes most rapidly on the SOM."," High gradient = feature transitions rapidly (boundary region for this feature)"," Low gradient = feature is stable across this region","","Compare with U-matrix: if feature gradients align with U-matrix boundaries,","this feature is a key driver of the cluster separation."].join("\n")}),t){const o=n.indexOf(t);if(o>=0){const a=t.replace(/[^a-zA-Z0-9_]/g,"_");await T(l,e,`component_${o+1}_${a}.${s}`)}}else await T(l,e,`combined.${s}`);await T(l,e,`umatrix.${s}`)}else if("quality_report"===t){const t=await g("GET",`/v1/results/${e}/quality-report`),o=t.standard_metrics??{},a=t.cluster_metrics??{},r=t.topology_metrics??{},n=t.training??{},i=t.grid??[0,0],s=e=>null!=e?e.toFixed(4):"—",u=e=>null!=e?`${(100*e).toFixed(1)}%`:"—",d=[],c=o.quantization_error,p=o.topographic_error,m=o.explained_variance,h=a.silhouette,f=r.trustworthiness;null!=c&&c>2&&d.push("QE is high → try more epochs or a larger grid"),null!=p&&p>.15&&d.push("TE is high → topology is not well-preserved, try larger grid"),null!=m&&m<.7&&d.push("Explained variance < 70% → consider more training or feature selection"),null!=h&&h<.1&&d.push("Low silhouette → clusters overlap, try sigma_f=0.5 or more epochs"),null!=f&&f<.85&&d.push("Trustworthiness < 85% → local neighborhood structure is distorted"),0===d.length&&d.push("All metrics look healthy — good map quality!");const b=n.epochs,_=b?0===b[1]?`${b[0]} ordering only`:`${b[0]}+${b[1]}`:"—",y=[`Quality Report — Job ${e}`,`Grid: ${i[0]}×${i[1]} | Model: ${t.model??"SOM"} | Samples: ${t.n_samples??"?"}`,`Epochs: ${_} | Duration: ${n.duration_seconds?`${n.duration_seconds}s`:"—"}`,"","Standard Metrics:",` Quantization Error: ${s(o.quantization_error)} (lower is better)`,` Topographic Error: ${s(o.topographic_error)} (lower is better)`,` Distortion: ${s(o.distortion)}`,` Kaski-Lagus Error: ${s(o.kaski_lagus_error)} (lower is better)`,` Explained Variance: ${u(o.explained_variance)}`,"","Cluster Quality Metrics:",` Silhouette Score: ${s(a.silhouette)} (higher is better, -1 to +1)`,` Davies-Bouldin: ${s(a.davies_bouldin)} (lower is better)`,` Calinski-Harabasz: ${s(a.calinski_harabasz)} (higher is better)`,"","Topology Metrics:",` Neighborhood Preservation: ${u(r.neighborhood_preservation)} (higher is better)`,` Trustworthiness: ${u(r.trustworthiness)} (higher is better)`,` Topographic Product: ${s(r.topographic_product)} (near 0 is ideal)`,"","Recommendations:",...d.map(e=>` • ${e}`)];l.push({type:"text",text:y.join("\n")})}return{content:l}}),_.tool("compare_runs",'Compare metrics across multiple completed SOM training jobs.\nReturns a table of QE, TE, silhouette, and other metrics for each job.\n\nUse to evaluate hyperparameter choices: grid size, epochs, sigma_f, model type, feature selection.\n\nAfter comparing, ask the user:\n"Which job produced the best metrics for your goal?"\n- For visualization clarity: prioritize low topographic error (<0.1)\n- For tight clusters: prioritize low QE and high silhouette\n- For dimensionality reduction: prioritize high explained variance (>0.8)',{job_ids:o.array(o.string()).min(2).describe("Array of job IDs to compare (minimum 2)")},async({job_ids:e})=>{const t=e.join(","),o=(await g("GET",`/v1/jobs/compare?ids=${t}`)).comparisons??[],a=["| Job ID | Grid | Epochs | Model | QE | TE | Expl.Var | Silhouette |","|--------|------|--------|-------|----|----|----------|------------|"];for(const e of o){if(e.error){a.push(`| ${e.job_id.slice(0,8)}... | — | — | — | ${e.error} | — | — | — |`);continue}const t=e.grid,o=t?`${t[0]}×${t[1]}`:"—",r=e.epochs,n=r?0===r[1]?`${r[0]}+0`:`${r[0]}+${r[1]}`:"—",i=e.model??"—",s=e=>null!=e?Number(e).toFixed(4):"—";a.push(`| ${e.job_id.slice(0,8)}... | ${o} | ${n} | ${i} | ${s(e.quantization_error)} | ${s(e.topographic_error)} | ${s(e.explained_variance)} | ${s(e.silhouette)} |`)}return{content:[{type:"text",text:a.join("\n")}]}}),_.tool("manage_job","Cancel or delete a job.\n\naction=cancel: Cancel a pending or running job. Not instant — worker checks between phases (expect up to 30s). Use when run is too slow, wrong params, or to free the worker. Partial results discarded.\naction=delete: Permanently delete a job and all S3 result files. Use to free storage, remove test runs, or clean up after cancel. WARNING: Job ID will no longer work with get_results or other tools.",{job_id:o.string().describe("Job ID to cancel or delete"),action:o.enum(["cancel","delete"]).describe("cancel: stop the job; delete: remove job and all result files")},async({job_id:e,action:t})=>{if("cancel"===t){return f(await g("POST",`/v1/jobs/${e}/cancel`))}return f(await g("DELETE",`/v1/jobs/${e}`))}),_.tool("list","List datasets or jobs.\n\ntype=datasets: List all datasets uploaded by the organization. Use to check what data is available before train_som or to find dataset IDs.\ntype=jobs: List SOM training jobs (optionally filtered by dataset_id). Use to find job IDs for compare_runs, check completed vs pending, or review hyperparameters.",{type:o.enum(["datasets","jobs"]).describe("What to list: datasets or jobs"),dataset_id:o.string().optional().describe("Filter jobs by dataset ID (only used when type=jobs)")},async({type:e,dataset_id:t})=>{if("datasets"===e){return f(await g("GET","/v1/datasets"))}const o=t?`/v1/jobs?dataset_id=${t}`:"/v1/jobs",a=await g("GET",o);if("jobs"===e&&Array.isArray(a)){const e=a.map(e=>{const t=String(e.id??""),o=String(e.status??""),a=null!=e.label&&""!==e.label?String(e.label):null;return a?`${a} (id: ${t}) — status: ${o}`:`id: ${t} — status: ${o}`});return{content:[{type:"text",text:e.length>0?e.join("\n"):"No jobs found."}]}}return f(a)}),_.tool("get_job_export","Export structured data from a completed SOM training job.\n\nexport=training_log: Learning curve and diagnostics (per-epoch QE, sparklines, inline plot). Use to diagnose convergence, plateau, or divergence.\nexport=weights: Raw weight matrix with node_coords, normalized/denormalized values, normalization stats. Use for external analysis or custom visualizations. Can be large (e.g. 600KB+ for 30×30×12).\nexport=nodes: Per-node statistics (hit count, feature mean/std). Use to profile clusters and characterize operating modes.",{job_id:o.string().describe("Job ID of a completed training job"),export:o.enum(["training_log","weights","nodes"]).describe("What to export: training_log, weights, or nodes")},async({job_id:e,export:t})=>{if("training_log"===t){const t=await g("GET",`/v1/results/${e}/training-log`),o=t.ordering_errors??[],a=t.convergence_errors??[],r=t.training_duration_seconds,n=t.epochs,i=e=>{if(0===e.length)return"(no data)";const t=Math.min(...e),o=Math.max(...e)-t||1;return e.map(e=>"▁▂▃▄▅▆▇█"[Math.min(7,Math.floor((e-t)/o*7))]).join("")},s=[`Training Log — Job ${e}`,`Grid: ${JSON.stringify(t.grid)} | Model: ${t.model??"SOM"}`,"Epochs: "+(n?`[${n[0]} ordering, ${n[1]} convergence]`:"N/A"),"Duration: "+(null!=r?`${r}s`:"N/A"),`Features: ${t.n_features??"?"} | Samples: ${t.n_samples??"?"}`,"",`Ordering Phase (${o.length} epochs):`,` Start QE: ${o[0]?.toFixed(4)??"—"} → End QE: ${o.at(-1)?.toFixed(4)??"—"}`,` Curve: ${i(o)}`];a.length>0?s.push("",`Convergence Phase (${a.length} epochs):`,` Start QE: ${a[0]?.toFixed(4)??"—"} → End QE: ${a.at(-1)?.toFixed(4)??"—"}`,` Curve: ${i(a)}`):0===(n?.[1]??0)&&s.push("","Convergence phase: skipped (epochs[1]=0)");const l=t.quantization_error,u=t.explained_variance;null!=l&&s.push("",`Final QE: ${l.toFixed(4)} | Explained Variance: ${(u??0).toFixed(4)}`);const d=[{type:"text",text:s.join("\n")}];let c=!1;for(const t of["png","pdf","svg"])try{const{data:o}=await h(`/v1/results/${e}/image/learning_curve.${t}`);d.push({type:"image",data:o.toString("base64"),mimeType:S(`learning_curve.${t}`),annotations:{audience:["user"],priority:.8}}),c=!0;break}catch{continue}return c||d.push({type:"text",text:"(learning curve plot not available)"}),{content:d}}if("weights"===t){const t=await g("GET",`/v1/results/${e}/weights`),o=t.features??[],a=t.n_nodes??0,r=t.grid??[0,0],n=[`SOM Weights — Job ${e}`,`Grid: ${r[0]}×${r[1]} | Nodes: ${a} | Features: ${o.length}`,"node_coords: [x,y] per node for topology",`Features: ${o.join(", ")}`,"","Normalization Stats:"],i=t.normalization_stats??{};for(const[e,t]of Object.entries(i))n.push(` ${e}: mean=${t.mean?.toFixed(4)}, std=${t.std?.toFixed(4)}`);return n.push("","Full weight matrix available in the response JSON (includes node_coords).","Use the denormalized_weights array for original-scale values."),{content:[{type:"text",text:n.join("\n")},{type:"text",text:JSON.stringify(t,null,2)}]}}const o=await g("GET",`/v1/results/${e}/nodes`),a=[...o].sort((e,t)=>(t.hit_count??0)-(e.hit_count??0)).slice(0,10),r=o.filter(e=>0===e.hit_count).length,n=o.reduce((e,t)=>e+(t.hit_count??0),0),i=[`Node Statistics — Job ${e}`,`Total nodes: ${o.length} | Active: ${o.length-r} | Empty: ${r}`,`Total hits: ${n}`,"","Top 10 Most Populated Nodes:","| Node | Coords | Hits | Hit% |","|------|--------|------|------|"];for(const e of a){if(0===e.hit_count)break;const t=e.coords,o=(e.hit_count/n*100).toFixed(1);i.push(`| ${e.node_index} | (${t?.[0]?.toFixed(1)}, ${t?.[1]?.toFixed(1)}) | ${e.hit_count} | ${o}% |`)}return{content:[{type:"text",text:i.join("\n")},{type:"text",text:`\nFull node statistics JSON:\n${JSON.stringify(o,null,2)}`}]}}),_.tool("project_variable",'Project a pre-computed variable onto a trained SOM without retraining.\n\nBEST FOR: Mapping external metrics (revenue, labels, anomaly scores) onto the\ntrained SOM structure. For formula-based variables from the training dataset,\nprefer derive_variable with project_onto_job; use project_variable only for\nexternally computed arrays.\nNOT FOR: Re-training or adding features to the map.\n\nTIMING: ~5–15s (loads cached SOM, computes per-node aggregation, renders plot).\n\nvalues: array of length n_samples (~11 bytes/sample). Must match training sample\ncount exactly (same CSV row order). Aggregation controls how multiple samples\nper node are combined (mean/median/sum/max/count).\n\nBEFORE calling, ask:\n- "What variable? Is it from the original data or externally computed?"\n- "How to aggregate per node: mean (typical), sum (totals), max (peaks)?"\n\nCOMMON MISTAKES:\n- Wrong number of values (must match n_samples from training)\n- Using mean aggregation for count data (use sum instead)\n- Not trying derive_variable first when the variable can be computed from columns\n\nHINT: If values length mismatch, suggest derive_variable for formula-based variables.',{job_id:o.string().describe("ID of the completed SOM training job"),variable_name:o.string().describe("Name for this variable (used in visualization labels)"),values:o.array(o.number()).describe("Array of values to project — one per training sample, in original CSV row order"),aggregation:o.enum(["mean","median","sum","min","max","std","count"]).optional().default("mean").describe("How to aggregate values for nodes with multiple samples"),output_format:o.enum(["png","pdf","svg"]).optional().default("png").describe("Image output format for the projection plot (default: png)."),output_dpi:o.enum(["standard","retina","print"]).optional().default("retina").describe("Resolution: standard (1x), retina (2x), print (4x)."),colormap:o.string().optional().describe("Override colormap for the projection plot (default: coolwarm). Examples: viridis, plasma, inferno, magma, cividis, turbo, coolwarm, RdBu, Spectral.")},async({job_id:e,variable_name:t,values:o,aggregation:a,output_format:r,output_dpi:n,colormap:i})=>{const s={variable_name:t,values:o,aggregation:a??"mean",output_format:r??"png"};n&&"retina"!==n&&(s.output_dpi={standard:1,retina:2,print:4}[n]??2),i&&(s.colormap=i);const l=(await g("POST",`/v1/results/${e}/project`,s)).id,u=await b(l);if("completed"===u.status){const o=(await g("GET",`/v1/results/${l}`)).summary??{},n=o.variable_stats??{},i=[];i.push({type:"text",text:[`Projected Variable: ${t} (${a??"mean"}) — job: ${l}`,`Parent SOM: ${e} | Samples: ${o.n_samples??0}`,"",`Variable Statistics (per-node ${a??"mean"}):`,` Min: ${void 0!==n.min?Number(n.min).toFixed(3):"N/A"}`,` Max: ${void 0!==n.max?Number(n.max).toFixed(3):"N/A"}`,` Mean: ${void 0!==n.mean?Number(n.mean).toFixed(3):"N/A"}`,` Nodes with data: ${n.n_nodes_with_data??"N/A"}`].join("\n")});const s=t.replace(/[^a-zA-Z0-9_]/g,"_"),u=o.output_format??r??"pdf";return await T(i,l,`projected_${s}.${u}`),{content:i}}return"failed"===u.status?{content:[{type:"text",text:`Projection job ${l} failed: ${u.error??"unknown error"}`}]}:{content:[{type:"text",text:["Variable projection job submitted but did not complete within 30s.",`Projection job ID: ${l}`,"",`Poll with: get_job_status(job_id="${l}")`,`Retrieve with: get_results(job_id="${l}")`].join("\n")}]}}),_.tool("transition_flow",'Compute temporal transition flow for a trained SOM.\n\nShows how data points move between SOM nodes over time — revealing directional\npatterns, cycles, and state machine behavior in sequential data.\n\n**Requires time-ordered data.** Each row must represent a consecutive observation;\nthe transition from row i to row i+lag is counted. If rows are not time-ordered,\nresults will be meaningless.\n\nBest used for:\n- **Time-series dynamics**: how does the system state evolve step-by-step?\n- **Cyclic processes**: daily/weekly patterns, recurring operating modes\n- **Process monitoring**: identify common transition paths and bottlenecks\n- **Regime detection**: find absorbing states (nodes with self-loops) vs transient hubs\n\n**lag** controls the temporal horizon:\n- lag=1 (default): immediate next-step transitions — "where does the system go next?"\n- lag=N: transitions N steps apart — useful for periodic analysis (e.g. lag=24 for daily cycles in hourly data)\n- Try multiple lags to reveal different temporal scales.\n\n**min_transitions** filters noisy arrows — only transitions observed at least this many times are drawn. Increase for cleaner plots on large datasets.\n\n**top_k** controls how many top-flow nodes are reported in statistics.\n\nBEFORE calling, confirm:\n- Data is time-ordered (chronological row sequence)\n- The lag makes sense for the time resolution (e.g. lag=1 for hourly data = 1 hour ahead)\n\nAfter showing results, discuss:\n- Arrow direction and clustering patterns\n- Hub nodes (many transitions through them) vs absorbing nodes (self-loops)\n- Whether cyclic flow matches known periodic behavior',{job_id:o.string().describe("ID of the completed SOM training job"),lag:o.number().int().min(1).optional().default(1).describe("Step lag for transition pairs (default 1 = consecutive rows). Use larger values for periodic analysis (e.g. 24 for daily cycles in hourly data)."),min_transitions:o.number().int().min(1).optional().describe("Minimum transition count to draw an arrow (default: auto). Increase to filter noise on large datasets."),top_k:o.number().int().min(1).optional().default(10).describe("Number of top-flow nodes to include in statistics (default 10)."),colormap:o.string().optional().describe("Colormap for the U-matrix background (default: grays). Try viridis, plasma, or inferno for more contrast."),output_format:o.enum(["png","pdf","svg"]).optional().default("png").describe("Image output format for the flow plot (default: png)."),output_dpi:o.enum(["standard","retina","print"]).optional().default("retina").describe("Resolution: standard (1x), retina (2x), print (4x).")},async({job_id:e,lag:t,min_transitions:o,top_k:a,colormap:r,output_format:n,output_dpi:i})=>{const s={lag:t??1,output_format:n??"png"};void 0!==o&&(s.min_transitions=o),void 0!==a&&(s.top_k=a),void 0!==r&&(s.colormap=r),i&&"retina"!==i&&(s.output_dpi={standard:1,retina:2,print:4}[i]??2);const l=(await g("POST",`/v1/results/${e}/transition-flow`,s)).id,u=await b(l);if("completed"===u.status){const o=(await g("GET",`/v1/results/${l}`)).summary??{},a=o.flow_stats??{},r=[];r.push({type:"text",text:[`Transition Flow Results (job: ${l})`,`Parent SOM: ${e} | Lag: ${t??1} | Samples: ${o.n_samples??0}`,"","Flow Statistics:",` Active flow nodes: ${a.active_flow_nodes??"N/A"}`,` Total transitions: ${a.total_transitions??"N/A"}`,` Mean magnitude: ${void 0!==a.mean_magnitude?Number(a.mean_magnitude).toFixed(4):"N/A"}`].join("\n")});const i=n??"pdf";return await T(r,l,`transition_flow_lag${t??1}.${i}`),{content:r}}return"failed"===u.status?{content:[{type:"text",text:`Transition flow job ${l} failed: ${u.error??"unknown error"}`}]}:{content:[{type:"text",text:["Transition flow job submitted but did not complete within 30s.",`Flow job ID: ${l}`,`Parent job: ${e} | Lag: ${t??1}`,"",`Poll with: get_job_status(job_id="${l}")`,`Retrieve with: get_results(job_id="${l}")`].join("\n")}]}}),_.tool("derive_variable",'Create a derived variable from existing dataset columns using mathematical expressions.\n\nBEST FOR: Computing ratios, differences, log transforms, rolling statistics,\nor any combination of existing columns — either to enrich a dataset before\ntraining or to project a computed variable onto an existing SOM.\n\nTWO MODES:\n1. Add to dataset (default): computes the new column and appends it to the dataset CSV.\n The column is then available for future train_som calls via the \'columns\' parameter.\n2. Project onto SOM: computes the column from the training dataset and projects it\n onto a trained SOM, returning the visualization. Use this to explore how\n derived quantities distribute across the learned map structure.\n\nCOMMON FORMULAS:\n- Ratio: "revenue / cost"\n- Difference: "US10Y - US3M"\n- Log return: "log(close) - log(open)"\n- Z-score: "(volume - rolling_mean(volume, 20)) / rolling_std(volume, 20)"\n- Magnitude: "sqrt(x^2 + y^2)"\n- Unit convert: "temperature - 273.15"\n- First diff: "diff(consumption)"\n\nSUPPORTED FUNCTIONS:\n- Arithmetic: +, -, *, /, ^\n- Math: log, log1p, log10, exp, sqrt, abs, sign, clamp, min, max\n- Trig: sin, cos, tan, asin, acos, atan\n- Rolling: rolling_mean(col, window), rolling_std(col, window), rolling_min, rolling_max\n- Temporal: diff(col), diff(col, n)\n- Constants: pi, numeric literals\n\nWORKFLOW: Ask the user what domain-specific variables they care about.\nSuggest derived variables based on the column names. For example, if\nthe dataset has "revenue" and "cost", suggest "revenue - cost" as profit\nand "revenue / cost" as cost efficiency.\n\nEXPRESSION REFERENCE: In expressions, use underscore-normalized column names (e.g. fixed_acidity not "fixed acidity"). Column names with spaces/special chars are converted to underscores — use that form. Operators: +, -, *, /, ^. Functions: log, sqrt, rolling_mean(col, window), diff(col), etc.\n\nCOMMON MISTAKES:\n- Division by zero: if denominator column has zeros, use options.missing="skip"\n- Rolling functions produce NaN for the first (window-1) rows\n- diff() produces NaN for the first row\n- Spaces in column names: use underscores (e.g. fixed_acidity not "fixed acidity")',{dataset_id:o.string().describe("Dataset ID (source of column data)"),name:o.string().describe("Name for the derived variable (used in column header and visualization)"),expression:o.string().describe("Mathematical expression referencing column names. Examples: 'revenue / cost', 'log(price)', 'diff(temperature)', 'sqrt(x^2 + y^2)', 'rolling_mean(volume, 20)'"),project_onto_job:o.string().optional().describe("If provided, project the derived variable onto this SOM job instead of adding to dataset. The job must be a completed train_som job."),aggregation:o.enum(["mean","median","sum","min","max","std","count"]).optional().default("mean").describe("How to aggregate values per SOM node (only used when project_onto_job is set)"),options:o.object({missing:o.enum(["skip","zero","interpolate"]).optional().default("skip").describe("How to handle NaN/missing values in the result"),window:o.number().int().optional().describe("Default window size for rolling functions (default 20)"),description:o.string().optional().describe("Human-readable description of what this variable represents")}).optional().describe("Configuration for expression evaluation"),output_format:o.enum(["png","pdf","svg"]).optional().default("png").describe("Image format for projection visualization when project_onto_job is set (default: png)."),output_dpi:o.enum(["standard","retina","print"]).optional().default("retina").describe("Resolution for projection visualization"),colormap:o.string().optional().describe("Colormap for projection visualization (default: coolwarm). Examples: viridis, plasma, inferno, magma, cividis, turbo, coolwarm, RdBu, Spectral.")},async({dataset_id:e,name:t,expression:o,project_onto_job:a,aggregation:r,options:n,output_format:i,output_dpi:s,colormap:l})=>{const u={standard:1,retina:2,print:4};if(a){const e={name:t,expression:o,aggregation:r??"mean",output_format:i??"png"};n&&(e.options=n),s&&"retina"!==s&&(e.output_dpi=u[s]??2),l&&(e.colormap=l);const d=(await g("POST",`/v1/results/${a}/derive`,e)).id,c=await b(d);if("completed"===c.status){const e=(await g("GET",`/v1/results/${d}`)).summary??{},n=e.variable_stats??{},s=[];s.push({type:"text",text:[`Derived Variable Projected: ${t} — job: ${d}`,`Expression: ${o}`,`Parent SOM: ${a} | Aggregation: ${r??"mean"}`,"",`Statistics (per-node ${r??"mean"}):`,` Min: ${void 0!==n.min?Number(n.min).toFixed(3):"N/A"}`,` Max: ${void 0!==n.max?Number(n.max).toFixed(3):"N/A"}`,` Mean: ${void 0!==n.mean?Number(n.mean).toFixed(3):"N/A"}`,` Nodes with data: ${n.n_nodes_with_data??"N/A"}`,e.nan_count?` NaN values: ${e.nan_count}`:""].filter(e=>""!==e).join("\n")});const l=t.replace(/[^a-zA-Z0-9_]/g,"_"),u=e.output_format??i??"pdf";return await T(s,d,`projected_${l}.${u}`),{content:s}}return"failed"===c.status?{content:[{type:"text",text:`Derive+project job ${d} failed: ${c.error??"unknown error"}`}]}:{content:[{type:"text",text:`Derive job submitted. Poll: get_job_status("${d}")`}]}}{const a={name:t,expression:o};n&&(a.options=n);const r=(await g("POST",`/v1/datasets/${e}/derive`,a)).id,i=await b(r);if("completed"===i.status){const a=(await g("GET",`/v1/results/${r}`)).summary??{};return{content:[{type:"text",text:[`Derived column "${t}" added to dataset ${e}`,`Expression: ${o}`,`Rows: ${a.n_rows??"?"}`,a.nan_count?`NaN values: ${a.nan_count}`:"",`Min: ${a.min??"?"} | Max: ${a.max??"?"} | Mean: ${a.mean??"?"}`,"","The column is now available in the dataset. Include it in train_som","via the 'columns' parameter, or use datasets(action=preview) to verify."].filter(e=>""!==e).join("\n")}]}}return"failed"===i.status?{content:[{type:"text",text:`Derive variable job ${r} failed: ${i.error??"unknown error"}`}]}:{content:[{type:"text",text:`Derive job submitted. Poll: get_job_status("${r}")`}]}}}),_.tool("manage_account","Manage compute leases, check account status, and view billing history.\nYour default backend is your local Primary Server. Use this tool to temporarily upgrade to cloud compute for heavy jobs.\n\nActions:\n- request_compute: Provisions a cloud burst instance (requires tier and duration_minutes). Leaves tier blank to list options.\n- compute_status: Checks if a burst lease is active and how much time remains.\n- release_compute: Manually terminates an active lease and reverts routing to the Primary Server.\n- compute_history: Views recent compute leases and credit spend.\n- add_funds: Instructions on how to add credits to your account.",{action:{type:"string",description:"One of: request_compute, compute_status, release_compute, compute_history, add_funds"},tier:{type:"string",description:"Compute tier ID (e.g., cpu-8, gpu-t4). Leave empty during request_compute to list tiers.",optional:!0},duration_minutes:{type:"number",description:"How long to lease the instance (default: 60)",optional:!0},limit:{type:"number",description:"Number of records to fetch for compute_history (default: 10)",optional:!0}},async({action:e,tier:t,duration_minutes:o,limit:a})=>{if("request_compute"===e){if(!t)return{content:[{type:"text",text:"Available Compute Tiers:\nCPU Tiers:\n cpu-8: 16 vCPUs, 32 GB RAM (~$0.20/hr)\n cpu-16: 32 vCPUs, 64 GB RAM (~$0.20/hr)\n cpu-24: 48 vCPUs, 96 GB RAM (~$0.28/hr)\n cpu-32: 64 vCPUs, 128 GB RAM (~$0.42/hr)\n cpu-48: 96 vCPUs, 192 GB RAM (~$0.49/hr)\nGPU Tiers:\n gpu-t4: 8 vCPUs, 32 GB, T4 16GB VRAM (~$0.22/hr)\n gpu-t4x: 16 vCPUs, 64 GB, T4 16GB VRAM (~$0.36/hr)\n gpu-t4xx: 32 vCPUs, 128 GB, T4 16GB VRAM (~$0.27/hr)\n gpu-l4: 8 vCPUs, 32 GB, L4 24GB VRAM (~$0.41/hr)\n gpu-l4x: 16 vCPUs, 64 GB, L4 24GB VRAM (~$0.37/hr)\n gpu-a10: 8 vCPUs, 32 GB, A10G 24GB VRAM (~$0.51/hr)\n gpu-a10x: 16 vCPUs, 64 GB, A10G 24GB VRAM (~$0.52/hr)"}]};const e=await g("POST","/v1/compute/lease",{tier:t,duration_minutes:o});return{content:[{type:"text",text:`Compute Lease Requested:\nLease ID: ${e.lease_id}\nStatus: ${e.status}\nEstimated Wait: ${e.estimated_wait_minutes} minutes\nEstimated Cost: $${(e.estimated_cost_cents/100).toFixed(2)}\nCredits Remaining After Reserve: $${(e.credit_balance_cents/100).toFixed(2)}\n\nIMPORTANT: Cloud burst active. Data is pulled from shared Cloudflare R2, so you do NOT need to re-upload datasets. Just wait ~3 minutes and check status.`}]}}if("compute_status"===e){const e=await g("GET","/v1/compute/lease");return"none"!==e.status&&e.lease_id?{content:[{type:"text",text:`Active Compute Lease:\nLease ID: ${e.lease_id}\nStatus: ${e.status}\nTier: ${e.tier} (${e.instance_type})\nTime Remaining: ${Math.round(e.time_remaining_ms/6e4)} minutes`}]}:{content:[{type:"text",text:"No active lease -- running on default Primary Server."}]}}if("release_compute"===e){const e=await g("DELETE","/v1/compute/lease");return{content:[{type:"text",text:`Compute Released:\nDuration Billed: ${e.duration_minutes} minutes\nCredits Deducted: $${(e.credits_deducted/100).toFixed(2)}\nFinal Balance: $${(e.final_balance_cents/100).toFixed(2)}\n\nRouting reverted to default Primary Server.`}]}}if("compute_history"===e){const e=await g("GET",`/v1/compute/history?limit=${a||10}`),t=e.history.map(e=>`- ${e.started_at} | ${e.tier} | ${e.duration_minutes} min | $${(e.credits_charged/100).toFixed(2)}`).join("\n");return{content:[{type:"text",text:`Credit Balance: $${(e.credit_balance_cents/100).toFixed(2)}\n\nRecent Usage:\n${t}`}]}}return"add_funds"===e?{content:[{type:"text",text:"To add funds to your account, please visit the Barivia Billing Portal (integration pending) or ask your administrator to use the CLI tool:\nbash scripts/manage-credits.sh add <org_id> <amount_usd>"}]}:{content:[{type:"text",text:`Unknown action: ${e}. Valid actions are request_compute, compute_status, release_compute, compute_history, add_funds.`}]}}),_.tool("license_info","Get plan/license capabilities, backend info, live status, and training time estimates.\n\nReturns what the current API key is connected to: plan tier, compute class\n(CPU/GPU), usage limits, backend hardware details, job queue state, and\nestimated training times.\n\nUse this BEFORE submitting large jobs to:\n- See your plan's compute class and whether GPU is available\n- Check queue depth to decide whether to wait or proceed\n- Estimate wall-clock time based on the current topology",{},async()=>{const e=await g("GET","/v1/system/info"),t=e.plan??{},o=e.backend??{},a=e.status??{},r=e.training_time_estimates_seconds??{},n=e.worker_topology??{},i=t.gpu_enabled??e.gpu_available??!1?o.gpu_model?`GPU-accelerated (${o.gpu_model}${o.gpu_vram_gb?`, ${o.gpu_vram_gb} GB VRAM`:""})`:"GPU-accelerated":"CPU only",s=e=>-1===e||"-1"===e?"unlimited":String(e??"?"),l=await g("GET","/v1/compute/lease").catch(()=>null),u=await g("GET","/v1/compute/history?limit=30").catch(()=>null),d=[`Your Plan: ${String(t.tier??"unknown").charAt(0).toUpperCase()}${String(t.tier??"unknown").slice(1)}`,` Priority: ${t.priority??"normal"}`,` Concurrency: ${t.max_concurrent_jobs??"?"} simultaneous job${1!==t.max_concurrent_jobs?"s":""}`,` Datasets: ${s(t.max_datasets)} max, ${s(t.max_dataset_rows)} rows each`,` Monthly Jobs: ${s(t.max_monthly_jobs)}`,` Grid Size: ${s(t.max_grid_size)} max`,` Features: ${s(t.max_features)} max`];u&&d.push("",`Compute Credits: $${(u.credit_balance_cents/100).toFixed(2)} remaining`),d.push("","Default Backend:",` Label: ${o.label??"unknown"}`,` Compute: ${i}`),o.memory_gb&&d.push(` Memory: ${o.memory_gb} GB`),l&&l.lease_id&&d.push("","Active Compute Lease (Burst):",` Status: ${l.status}`,` Tier: ${l.tier} (${l.instance_type})`,` Time Left: ${Math.round(l.time_remaining_ms/6e4)} min`);const c=Number(a.running_jobs??e.running_jobs??0),p=Number(a.pending_jobs??e.pending_jobs??0),m=Number(a.queue_depth??e.queue_depth??0),h=a.free_memory_gb??e.free_memory_gb,f=(p+1)*Number(e.training_time_estimates_seconds?.total||0);return d.push("","Live Status:",` Running Jobs: ${c}`,` Pending Jobs: ${p}`,` Queue Depth: ${m}`,` Current Wait: ~${Math.round(f/60)} minutes (before your job starts)`),void 0!==h&&d.push(` Free Memory: ${h} GB`),void 0!==n.num_workers&&d.push("","Worker Topology:",` Workers: ${n.num_workers} × ${n.threads_per_worker} threads`,` Total Thread Budget: ${n.total_thread_budget}`),Object.keys(r).length>0&&(d.push("","Estimated Training Times (seconds):",...Object.entries(r).filter(([e])=>"formula"!==e).map(([e,t])=>` ${e}: ~${t}s`)),r.formula&&d.push(` ${r.formula}`)),{content:[{type:"text",text:d.join("\n")}]}}),_.prompt("info","Overview of the Barivia SOM MCP: capabilities, workflow, tools, analysis types, and tips. Use when the user asks what this MCP can do, how to get started, or what the process is.",{},()=>({messages:[{role:"user",content:{type:"text",text:["Inform the user using this overview:","","**What it is:** Barivia MCP connects you to a Self-Organizing Map (SOM) analytics engine. SOMs learn a 2D map from high-dimensional data for visualization, clustering, pattern discovery, and temporal analysis.","","**Core workflow:**","1. **Upload** — `datasets(action=upload)` with a CSV file path or inline data","2. **Preview** — `datasets(action=preview)` to inspect columns, stats, and detect cyclic/datetime fields","3. **Prepare** — use the `prepare_training` prompt for a guided checklist (column selection, transforms, cyclic encoding, feature weights, grid sizing)","4. **Train** — `train_som` with grid size, epochs, model type, and preprocessing options. Use `preset=quick|standard|refined|high_res` for sensible defaults","5. **Monitor** — `get_job_status` to track progress; `get_results` to retrieve figures when complete","6. **Analyze** — `analyze` with various analysis types (see below)","7. **Feedback** — Ask the user if they'd like to submit feedback via `send_feedback` based on their experience.","8. **Iterate** — `recolor_som` to change colormap without retraining, `compare_runs` to compare hyperparameters, `project_variable` to overlay new variables","","**Analysis types** (via `analyze`):","- `u_matrix` — cluster boundary distances","- `component_planes` — per-feature heatmaps","- `clusters` — automatic cluster detection and statistics","- `quality_report` — QE, TE, explained variance, trustworthiness, neighborhood preservation","- `hit_histogram` — data density across the map","- `transition_flow` — temporal flow patterns (requires time-ordered data)","","**Data tools:**","- `datasets(action=subset)` — filter by row range, value thresholds (gt/lt/gte/lte), equality, or set membership. Combine row_range + filter","- `derive_variable` — create computed columns from expressions (ratios, differences, etc.)","- `project_variable` — overlay any variable onto a trained SOM","","**Output options:** Format (png/pdf/svg) and colormap (coolwarm, viridis, plasma, inferno, etc.) can be set at training or changed later via recolor_som.","","**Key tools:** datasets, list, train_som, get_job_status, get_results, analyze, recolor_som, download_results, project_variable, transition_flow, compare_runs, derive_variable, license_info, explore_som.","","**Tips:**","- Always `preview` before training to understand your data","- Use `license_info` to check GPU availability and plan limits before large jobs","- Start with `preset=quick` for fast iteration, then `refined` for publication quality","- For time-series data, consider `transition_flow` after training","","Keep the reply scannable with headers and bullet points."].join("\n")}}]})),_.prompt("prepare_training","Guided pre-training checklist. Use after uploading a dataset and before calling train_som. Walks through data inspection, column selection, transforms, cyclic/temporal features, weighting, subsetting, and grid sizing.",{dataset_id:o.string().describe("Dataset ID to prepare for training")},async({dataset_id:e})=>{let t=`Please run datasets(action="preview", dataset_id="${e}") first, then call train_som with appropriate parameters or preset.`;try{const o=await g("GET",`/v1/docs/prepare_training?dataset_id=${e}`);o.prompt&&(t=o.prompt)}catch(e){}return{messages:[{role:"user",content:{type:"text",text:t}}]}});const E=new t;_.tool("send_feedback","Send brief feedback or feature requests to Barivia developers (max 190 words). Use when the user has suggestions, ran into issues, or wants something improved. Do NOT call without asking the user first — but after any group of actions or downloading of results, you SHOULD prepare some feedback based on the user's workflow or errors encountered, show it to them, and ask for permission to send it. Once they accept, call this tool.",{feedback:o.string().max(1330).describe("Feedback text")},async({feedback:e})=>f(await g("POST","/v1/feedback",{feedback:e}))),async function(){await _.connect(E)}().catch(console.error);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|