Files
modelgrid/test/test.showcase.ts
Juergen Kunz daaf6559e3
Some checks failed
CI / Type Check & Lint (push) Failing after 5s
CI / Build Test (Current Platform) (push) Failing after 5s
CI / Build All Platforms (push) Successful in 49s
initial
2026-01-30 03:16:57 +00:00

217 lines
5.6 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Showcase test for ModelGrid CLI outputs
* Demonstrates all the beautiful colored output features
*
* Run with: deno run --allow-all test/showcase.ts
*/
import { type ITableColumn, logger } from '../ts/logger.ts';
import { theme } from '../ts/colors.ts';
console.log('');
console.log('═'.repeat(80));
logger.highlight('MODELGRID CLI OUTPUT SHOWCASE');
logger.dim('Demonstrating beautiful, colored terminal output');
console.log('═'.repeat(80));
console.log('');
// === 1. Basic Logging Methods ===
logger.logBoxTitle('Basic Logging Methods', 60, 'info');
logger.logBoxLine('');
logger.log('Normal log message (default color)');
logger.success('Success message with ✓ symbol');
logger.error('Error message with ✗ symbol');
logger.warn('Warning message with ⚠ symbol');
logger.info('Info message with symbol');
logger.dim('Dim/secondary text for less important info');
logger.highlight('Highlighted/bold text for emphasis');
logger.logBoxLine('');
logger.logBoxEnd();
console.log('');
// === 2. Colored Boxes ===
logger.logBoxTitle('Colored Box Styles', 60);
logger.logBoxLine('');
logger.logBoxLine('Boxes can be styled with different colors:');
logger.logBoxEnd();
console.log('');
logger.logBox(
'Success Box (Green)',
[
'Used for successful operations',
'Container started, model loaded, etc.',
],
60,
'success',
);
console.log('');
logger.logBox(
'Error Box (Red)',
[
'Used for critical errors and failures',
'Configuration errors, GPU detection failures, etc.',
],
60,
'error',
);
console.log('');
logger.logBox(
'Warning Box (Yellow)',
[
'Used for warnings and deprecations',
'Driver updates needed, low VRAM, etc.',
],
60,
'warning',
);
console.log('');
logger.logBox(
'Info Box (Cyan)',
[
'Used for informational messages',
'Version info, model info, etc.',
],
60,
'info',
);
console.log('');
// === 3. GPU Status Table ===
const gpuColumns: ITableColumn[] = [
{ header: 'ID', key: 'id' },
{ header: 'Model', key: 'model' },
{ header: 'VRAM', key: 'vram', align: 'right' },
{
header: 'Status',
key: 'status',
color: (v) => {
if (v.includes('Ready')) return theme.success(v);
if (v.includes('Busy')) return theme.warning(v);
return theme.dim(v);
},
},
{ header: 'Utilization', key: 'utilization', align: 'right' },
];
const gpuData = [
{
id: 'gpu-0',
model: 'NVIDIA RTX 4090',
vram: '24 GB',
status: 'Ready',
utilization: '15%',
},
{
id: 'gpu-1',
model: 'NVIDIA RTX 4090',
vram: '24 GB',
status: 'Busy',
utilization: '92%',
},
{
id: 'gpu-2',
model: 'AMD RX 7900 XTX',
vram: '24 GB',
status: 'Ready',
utilization: '0%',
},
];
logger.logTable(gpuColumns, gpuData, 'GPU Devices');
console.log('');
// === 4. Container Table ===
const containerColumns: ITableColumn[] = [
{ header: 'ID', key: 'id' },
{ header: 'Type', key: 'type' },
{ header: 'Status', key: 'status' },
{ header: 'GPU', key: 'gpu' },
{ header: 'Models', key: 'models', align: 'right' },
];
const containerData = [
{ id: 'ollama-1', type: 'ollama', status: 'Running', gpu: 'gpu-0', models: '3' },
{ id: 'vllm-1', type: 'vllm', status: 'Running', gpu: 'gpu-1', models: '1' },
];
logger.logTable(containerColumns, containerData, 'AI Containers');
console.log('');
// === 5. Service Status Example ===
logger.logBoxTitle('Service Status', 70, 'success');
logger.logBoxLine('');
logger.logBoxLine(`Status: ${theme.statusActive('Active (Running)')}`);
logger.logBoxLine(`Enabled: ${theme.success('Yes')}`);
logger.logBoxLine(`Uptime: 2 days, 5 hours, 23 minutes`);
logger.logBoxLine(`PID: ${theme.dim('12345')}`);
logger.logBoxLine(`Memory: ${theme.dim('245.2 MB')}`);
logger.logBoxLine('');
logger.logBoxEnd();
console.log('');
// === 6. Configuration Example ===
logger.logBoxTitle('Configuration', 70);
logger.logBoxLine('');
logger.logBoxLine(`GPUs Detected: ${theme.highlight('3')}`);
logger.logBoxLine(`Containers: ${theme.highlight('2')}`);
logger.logBoxLine(`API Port: ${theme.dim('8080')}`);
logger.logBoxLine(`Config File: ${theme.path('/etc/modelgrid/config.json')}`);
logger.logBoxLine('');
logger.logBoxEnd();
console.log('');
// === 7. Model List Example ===
const modelColumns: ITableColumn[] = [
{ header: 'Model', key: 'name' },
{ header: 'Container', key: 'container' },
{ header: 'Size', key: 'size', align: 'right' },
{ header: 'Status', key: 'status' },
];
const modelData = [
{ name: 'llama3:8b', container: 'ollama-1', size: '4.7 GB', status: 'Loaded' },
{ name: 'mistral:7b', container: 'ollama-1', size: '4.1 GB', status: 'Loaded' },
{ name: 'llama3:70b', container: 'vllm-1', size: '40 GB', status: 'Loaded' },
];
logger.logTable(modelColumns, modelData, 'Loaded Models');
console.log('');
// === 8. Error Example ===
logger.logBoxTitle('Error Example', 70, 'error');
logger.logBoxLine('');
logger.logBoxLine(`✗ Failed to start container vllm-2`);
logger.logBoxLine('');
logger.logBoxLine('Possible causes:');
logger.logBoxLine(` ${theme.dim('• Insufficient VRAM on assigned GPU')}`);
logger.logBoxLine(` ${theme.dim('• Docker daemon not running')}`);
logger.logBoxLine(` ${theme.dim('• NVIDIA container toolkit not installed')}`);
logger.logBoxLine('');
logger.logBoxLine(`Try: ${theme.command('modelgrid gpu status')}`);
logger.logBoxLine('');
logger.logBoxEnd();
console.log('');
// === Final Summary ===
console.log('═'.repeat(80));
logger.success('CLI Output Showcase Complete!');
logger.dim('All color and formatting features demonstrated');
console.log('═'.repeat(80));
console.log('');