@appkit/llamacpp-cli 1.4.1 → 1.6.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/CHANGELOG.md +21 -0
- package/MONITORING-ACCURACY-FIX.md +199 -0
- package/PER-PROCESS-METRICS.md +190 -0
- package/README.md +136 -1
- package/dist/cli.js +21 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +12 -3
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/monitor.d.ts +2 -0
- package/dist/commands/monitor.d.ts.map +1 -0
- package/dist/commands/monitor.js +126 -0
- package/dist/commands/monitor.js.map +1 -0
- package/dist/commands/ps.d.ts +3 -1
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +75 -5
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/server-show.d.ts.map +1 -1
- package/dist/commands/server-show.js +10 -3
- package/dist/commands/server-show.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +14 -2
- package/dist/commands/start.js.map +1 -1
- package/dist/lib/history-manager.d.ts +46 -0
- package/dist/lib/history-manager.d.ts.map +1 -0
- package/dist/lib/history-manager.js +157 -0
- package/dist/lib/history-manager.js.map +1 -0
- package/dist/lib/metrics-aggregator.d.ts +40 -0
- package/dist/lib/metrics-aggregator.d.ts.map +1 -0
- package/dist/lib/metrics-aggregator.js +211 -0
- package/dist/lib/metrics-aggregator.js.map +1 -0
- package/dist/lib/system-collector.d.ts +80 -0
- package/dist/lib/system-collector.d.ts.map +1 -0
- package/dist/lib/system-collector.js +311 -0
- package/dist/lib/system-collector.js.map +1 -0
- package/dist/tui/HistoricalMonitorApp.d.ts +5 -0
- package/dist/tui/HistoricalMonitorApp.d.ts.map +1 -0
- package/dist/tui/HistoricalMonitorApp.js +490 -0
- package/dist/tui/HistoricalMonitorApp.js.map +1 -0
- package/dist/tui/MonitorApp.d.ts +4 -0
- package/dist/tui/MonitorApp.d.ts.map +1 -0
- package/dist/tui/MonitorApp.js +315 -0
- package/dist/tui/MonitorApp.js.map +1 -0
- package/dist/tui/MultiServerMonitorApp.d.ts +4 -0
- package/dist/tui/MultiServerMonitorApp.d.ts.map +1 -0
- package/dist/tui/MultiServerMonitorApp.js +712 -0
- package/dist/tui/MultiServerMonitorApp.js.map +1 -0
- package/dist/types/history-types.d.ts +30 -0
- package/dist/types/history-types.d.ts.map +1 -0
- package/dist/types/history-types.js +11 -0
- package/dist/types/history-types.js.map +1 -0
- package/dist/types/monitor-types.d.ts +123 -0
- package/dist/types/monitor-types.d.ts.map +1 -0
- package/dist/types/monitor-types.js +3 -0
- package/dist/types/monitor-types.js.map +1 -0
- package/dist/types/server-config.d.ts +1 -0
- package/dist/types/server-config.d.ts.map +1 -1
- package/dist/types/server-config.js.map +1 -1
- package/dist/utils/downsample-utils.d.ts +35 -0
- package/dist/utils/downsample-utils.d.ts.map +1 -0
- package/dist/utils/downsample-utils.js +107 -0
- package/dist/utils/downsample-utils.js.map +1 -0
- package/dist/utils/file-utils.d.ts +6 -0
- package/dist/utils/file-utils.d.ts.map +1 -1
- package/dist/utils/file-utils.js +38 -0
- package/dist/utils/file-utils.js.map +1 -1
- package/dist/utils/process-utils.d.ts +35 -2
- package/dist/utils/process-utils.d.ts.map +1 -1
- package/dist/utils/process-utils.js +220 -25
- package/dist/utils/process-utils.js.map +1 -1
- package/docs/images/.gitkeep +1 -0
- package/package.json +5 -1
- package/src/cli.ts +21 -4
- package/src/commands/create.ts +14 -4
- package/src/commands/monitor.ts +110 -0
- package/src/commands/ps.ts +88 -5
- package/src/commands/server-show.ts +10 -3
- package/src/commands/start.ts +15 -2
- package/src/lib/history-manager.ts +172 -0
- package/src/lib/metrics-aggregator.ts +257 -0
- package/src/lib/system-collector.ts +315 -0
- package/src/tui/HistoricalMonitorApp.ts +548 -0
- package/src/tui/MonitorApp.ts +386 -0
- package/src/tui/MultiServerMonitorApp.ts +792 -0
- package/src/types/history-types.ts +39 -0
- package/src/types/monitor-types.ts +162 -0
- package/src/types/server-config.ts +1 -0
- package/src/utils/downsample-utils.ts +128 -0
- package/src/utils/file-utils.ts +40 -0
- package/src/utils/process-utils.ts +243 -25
- package/test-load.sh +100 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [1.6.0](https://github.com/appkitstudio/llamacpp-cli/compare/v1.5.0...v1.6.0) (2026-01-17)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* add full-hour downsampling functions and enhance multi-server monitor UI with dynamic server ID width ([ae2862a](https://github.com/appkitstudio/llamacpp-cli/commit/ae2862acba905cddf60f0e7c30f6a7867391a5e2))
|
|
11
|
+
* add GPU memory tracking to server monitoring ([bc59c6a](https://github.com/appkitstudio/llamacpp-cli/commit/bc59c6a74580e428ab674167146caea47d8a32c1))
|
|
12
|
+
* enhance monitoring functionality with server status updates and improved resource tracking ([45fb833](https://github.com/appkitstudio/llamacpp-cli/commit/45fb833da5efe023a2271e7bd12d780a71474629))
|
|
13
|
+
* enhance multi-server monitor UI with improved navigation and selection indicators ([9e57cfb](https://github.com/appkitstudio/llamacpp-cli/commit/9e57cfb8ce93a2c561981598cf75f0e4ff1a477d))
|
|
14
|
+
* enhance server monitoring with interactive dashboard and improved metrics display ([fba8d79](https://github.com/appkitstudio/llamacpp-cli/commit/fba8d79ee58ecd7ccfe02e319ae7bf5474b591df))
|
|
15
|
+
* implement per-process metrics for historical monitoring accuracy ([cc59df0](https://github.com/appkitstudio/llamacpp-cli/commit/cc59df069775031de1bfacdeb3a462a17610e4eb))
|
|
16
|
+
* improve historical monitoring UI with faster refresh rate and enhanced display elements ([e0ce04b](https://github.com/appkitstudio/llamacpp-cli/commit/e0ce04ba258f6d945a977c39f056ba22cb324c70))
|
|
17
|
+
|
|
18
|
+
## [1.5.0](https://github.com/appkitstudio/llamacpp-cli/compare/v1.4.1...v1.5.0) (2026-01-13)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
* add multi-server monitor with optimized metrics collection ([9deaf2b](https://github.com/appkitstudio/llamacpp-cli/commit/9deaf2b12280304a0941b0da82a0838d2a80bf6a))
|
|
24
|
+
* add real-time monitoring TUI with GPU/CPU metrics ([5f762f5](https://github.com/appkitstudio/llamacpp-cli/commit/5f762f542817e405fd05c1fe3282a4621456c068))
|
|
25
|
+
|
|
5
26
|
## [1.4.1](https://github.com/appkitstudio/llamacpp-cli/compare/v1.4.0...v1.4.1) (2026-01-09)
|
|
6
27
|
|
|
7
28
|
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# Historical Monitoring Accuracy Fix
|
|
2
|
+
|
|
3
|
+
**STATUS:** This document describes the initial fix attempt for memory calculations. However, the root issue was that historical monitoring was showing **system-wide metrics** instead of **per-process metrics**. See `PER-PROCESS-METRICS.md` for the correct implementation.
|
|
4
|
+
|
|
5
|
+
## Issue Summary
|
|
6
|
+
|
|
7
|
+
Comparison between our historical monitoring and macmon revealed discrepancies in memory usage calculations.
|
|
8
|
+
|
|
9
|
+
## Issues Identified
|
|
10
|
+
|
|
11
|
+
### 1. Memory Total Calculation (CRITICAL)
|
|
12
|
+
|
|
13
|
+
**Problem:** Total memory was calculated by summing all vm_stat page counts, which doesn't equal the actual installed RAM.
|
|
14
|
+
|
|
15
|
+
**Evidence:**
|
|
16
|
+
- Historical monitor showed: ~60% memory usage
|
|
17
|
+
- macmon showed: 26.86 / 32.0 GB = ~84% memory usage
|
|
18
|
+
- The denominator (32.0 GB installed RAM) was being calculated incorrectly
|
|
19
|
+
|
|
20
|
+
**Root Cause:**
|
|
21
|
+
```typescript
|
|
22
|
+
// OLD CODE (INCORRECT)
|
|
23
|
+
const totalPages = pagesActive + pagesWired + pagesCompressed +
|
|
24
|
+
pagesFree + pagesInactive + pagesSpeculative;
|
|
25
|
+
const memoryTotal = totalPages * pageSize;
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
This approach has fundamental flaws:
|
|
29
|
+
- vm_stat doesn't report all memory categories (kernel reserved, etc.)
|
|
30
|
+
- Page counts don't sum to actual installed RAM
|
|
31
|
+
- Results in artificially inflated "total" value
|
|
32
|
+
- Makes memory usage appear lower than reality
|
|
33
|
+
|
|
34
|
+
**Fix:**
|
|
35
|
+
```typescript
|
|
36
|
+
// NEW CODE (CORRECT)
|
|
37
|
+
// Get total installed RAM from sysctl (accurate)
|
|
38
|
+
const memoryTotal = await execCommand('sysctl -n hw.memsize 2>/dev/null');
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Use `sysctl hw.memsize` to get actual installed RAM size in bytes. This matches what Activity Monitor and macmon report.
|
|
42
|
+
|
|
43
|
+
### 2. Memory Used Calculation (VERIFIED CORRECT)
|
|
44
|
+
|
|
45
|
+
**Current approach:**
|
|
46
|
+
```typescript
|
|
47
|
+
// Used = Active + Wired + Compressed
|
|
48
|
+
const usedPages = pagesActive + pagesWired + pagesCompressed;
|
|
49
|
+
const memoryUsed = usedPages * pageSize;
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
This formula is **correct** and matches what Activity Monitor and macmon report as "used memory".
|
|
53
|
+
|
|
54
|
+
- **Active:** Recently used memory
|
|
55
|
+
- **Wired:** Kernel memory that can't be paged out
|
|
56
|
+
- **Compressed:** Compressed pages in RAM
|
|
57
|
+
|
|
58
|
+
We removed the calculation of unused page types (free, inactive, speculative) since they're not needed.
|
|
59
|
+
|
|
60
|
+
### 3. CPU Calculation (VERIFIED CORRECT)
|
|
61
|
+
|
|
62
|
+
**Formula:**
|
|
63
|
+
```typescript
|
|
64
|
+
cpuUsage = ((pcpuUsage * pCoreCount) + (ecpuUsage * eCoreCount)) / totalCores * 100
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
This weighted average is mathematically correct:
|
|
68
|
+
- macmon reports per-core-type averages (P-CPU: 25%, E-CPU: 36%)
|
|
69
|
+
- Formula computes overall system average: `(25% × 6 + 36% × 4) / 10 = 29.4%`
|
|
70
|
+
- Historical average of 33% is reasonable given fluctuations over time
|
|
71
|
+
|
|
72
|
+
### 4. GPU Calculation (VERIFIED CORRECT)
|
|
73
|
+
|
|
74
|
+
**Observation:**
|
|
75
|
+
- Historical: Avg: 1.8%, Max: 4.0%, Min: 0.6%
|
|
76
|
+
- macmon snapshot: GPU 4%
|
|
77
|
+
|
|
78
|
+
This is **expected behavior**:
|
|
79
|
+
- GPU is mostly idle (0-2%) between inference requests
|
|
80
|
+
- Spikes to 4% during active token generation
|
|
81
|
+
- Average of 1.8% correctly reflects mostly-idle state
|
|
82
|
+
- Max of 4.0% matches macmon's instantaneous reading
|
|
83
|
+
|
|
84
|
+
## Changes Made
|
|
85
|
+
|
|
86
|
+
### `src/lib/system-collector.ts`
|
|
87
|
+
|
|
88
|
+
**1. Removed total memory calculation from vm_stat parsing:**
|
|
89
|
+
```typescript
|
|
90
|
+
// Now only returns memoryUsed
|
|
91
|
+
private parseVmStatOutput(output: string): { memoryUsed: number }
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**2. Added method to get actual installed RAM:**
|
|
95
|
+
```typescript
|
|
96
|
+
private async getTotalMemory(): Promise<number> {
|
|
97
|
+
const output = await execCommand('sysctl -n hw.memsize 2>/dev/null');
|
|
98
|
+
return parseInt(output.trim(), 10) || 0;
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**3. Combined both sources in new method:**
|
|
103
|
+
```typescript
|
|
104
|
+
private async getMemoryMetrics(): Promise<{
|
|
105
|
+
memoryUsed: number;
|
|
106
|
+
memoryTotal: number;
|
|
107
|
+
}> {
|
|
108
|
+
// Get used memory from vm_stat (active + wired + compressed)
|
|
109
|
+
const vmStatOutput = await execCommand('vm_stat 2>/dev/null');
|
|
110
|
+
const { memoryUsed } = this.parseVmStatOutput(vmStatOutput);
|
|
111
|
+
|
|
112
|
+
// Get total installed RAM from sysctl (accurate)
|
|
113
|
+
const memoryTotal = await this.getTotalMemory();
|
|
114
|
+
|
|
115
|
+
return { memoryUsed, memoryTotal };
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**4. Updated collector to use new method:**
|
|
120
|
+
```typescript
|
|
121
|
+
// Always get memory from vm_stat + sysctl (accurate total from sysctl)
|
|
122
|
+
const memoryMetrics = await this.getMemoryMetrics();
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Verification
|
|
126
|
+
|
|
127
|
+
After these changes, memory usage should now accurately match macmon and Activity Monitor:
|
|
128
|
+
|
|
129
|
+
**Before:**
|
|
130
|
+
- Total: Calculated from page sum (~40 GB equivalent)
|
|
131
|
+
- Used: 26.86 GB
|
|
132
|
+
- **Percentage: ~60% (WRONG)**
|
|
133
|
+
|
|
134
|
+
**After:**
|
|
135
|
+
- Total: 32.0 GB (from `sysctl hw.memsize`)
|
|
136
|
+
- Used: 26.86 GB (from vm_stat)
|
|
137
|
+
- **Percentage: ~84% (CORRECT)**
|
|
138
|
+
|
|
139
|
+
## Testing Recommendations
|
|
140
|
+
|
|
141
|
+
1. **Compare with macmon:**
|
|
142
|
+
```bash
|
|
143
|
+
# Terminal 1: Run macmon
|
|
144
|
+
macmon
|
|
145
|
+
|
|
146
|
+
# Terminal 2: Monitor server
|
|
147
|
+
npm run dev -- server monitor <server-id>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Memory percentages should now match within 1-2%.
|
|
151
|
+
|
|
152
|
+
2. **Compare with Activity Monitor:**
|
|
153
|
+
- Open Activity Monitor → Memory tab
|
|
154
|
+
- Check "Memory Used" value
|
|
155
|
+
- Should match historical monitor's memory calculation
|
|
156
|
+
|
|
157
|
+
3. **Verify historical data:**
|
|
158
|
+
```bash
|
|
159
|
+
# View historical metrics (press H in monitor)
|
|
160
|
+
npm run dev -- server monitor <server-id>
|
|
161
|
+
# Press 'H' to toggle historical view
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Memory usage should now show realistic values (~80-90% on actively used system).
|
|
165
|
+
|
|
166
|
+
4. **Check edge cases:**
|
|
167
|
+
- Fresh boot (low memory usage ~30-40%)
|
|
168
|
+
- Under load (high memory usage ~85-95%)
|
|
169
|
+
- Multiple servers running (memory should increase proportionally)
|
|
170
|
+
|
|
171
|
+
## Impact on Historical Data
|
|
172
|
+
|
|
173
|
+
**Note:** Existing historical data was collected with the old (incorrect) calculation.
|
|
174
|
+
|
|
175
|
+
**Options:**
|
|
176
|
+
|
|
177
|
+
1. **Keep old data as-is** (recommended for now)
|
|
178
|
+
- Historical charts will show old incorrect baseline
|
|
179
|
+
- New data will be accurate going forward
|
|
180
|
+
- Natural transition over 24 hours as old data ages out
|
|
181
|
+
|
|
182
|
+
2. **Clear history and start fresh:**
|
|
183
|
+
```bash
|
|
184
|
+
rm ~/.llamacpp/history/*.json
|
|
185
|
+
```
|
|
186
|
+
- Immediate accuracy
|
|
187
|
+
- Lose historical context
|
|
188
|
+
|
|
189
|
+
## Related Files
|
|
190
|
+
|
|
191
|
+
- `src/lib/system-collector.ts` - System metrics collection (MODIFIED)
|
|
192
|
+
- `src/lib/history-manager.ts` - History persistence (unchanged)
|
|
193
|
+
- `src/tui/HistoricalMonitorApp.ts` - Historical UI (unchanged)
|
|
194
|
+
|
|
195
|
+
## References
|
|
196
|
+
|
|
197
|
+
- macOS `vm_stat` documentation: Reports memory in pages (16KB on Apple Silicon)
|
|
198
|
+
- macOS `sysctl` documentation: `hw.memsize` reports installed RAM in bytes
|
|
199
|
+
- Activity Monitor algorithm: Uses active + wired + compressed for "Memory Used"
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# Per-Process Metrics Implementation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Historical monitoring now shows **per-process metrics** for the specific llama-server being monitored, rather than system-wide metrics. This provides accurate resource usage for each model.
|
|
6
|
+
|
|
7
|
+
## What Changed
|
|
8
|
+
|
|
9
|
+
### Before (System-Wide)
|
|
10
|
+
- **GPU Usage:** All processes combined
|
|
11
|
+
- **CPU Usage:** All processes combined
|
|
12
|
+
- **Memory Usage:** All processes combined (% of total RAM)
|
|
13
|
+
|
|
14
|
+
### After (Per-Process)
|
|
15
|
+
- **GPU Usage:** System-wide (unchanged - can't isolate per-process on macOS)
|
|
16
|
+
- **CPU Usage:** Just the llama-server process (from `ps`)
|
|
17
|
+
- **Memory Usage:** Just the llama-server process in GB (from `top`)
|
|
18
|
+
|
|
19
|
+
## Implementation Details
|
|
20
|
+
|
|
21
|
+
### 1. Process Metrics Collection
|
|
22
|
+
|
|
23
|
+
**Added CPU collection (`src/utils/process-utils.ts`):**
|
|
24
|
+
```typescript
|
|
25
|
+
// Batch collection for efficiency
|
|
26
|
+
export async function getBatchProcessCpu(pids: number[]): Promise<Map<number, number | null>>
|
|
27
|
+
|
|
28
|
+
// Single process collection
|
|
29
|
+
export async function getProcessCpu(pid: number): Promise<number | null>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Features:**
|
|
33
|
+
- Uses `ps -p <pid> -o %cpu` to get per-process CPU percentage
|
|
34
|
+
- 3-second cache to prevent excessive process spawning
|
|
35
|
+
- Batch collection for multi-server monitoring
|
|
36
|
+
- Returns percentage (0-100+, can exceed 100% on multi-core)
|
|
37
|
+
|
|
38
|
+
### 2. Type Updates
|
|
39
|
+
|
|
40
|
+
**ServerMetrics interface (`src/types/monitor-types.ts`):**
|
|
41
|
+
```typescript
|
|
42
|
+
export interface ServerMetrics {
|
|
43
|
+
// ... existing fields
|
|
44
|
+
processMemory?: number; // Already existed
|
|
45
|
+
processCpuUsage?: number; // NEW: Per-process CPU %
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**HistorySnapshot interface (`src/types/history-types.ts`):**
|
|
50
|
+
```typescript
|
|
51
|
+
export interface HistorySnapshot {
|
|
52
|
+
server: {
|
|
53
|
+
// ... existing fields
|
|
54
|
+
processMemory?: number; // Already existed
|
|
55
|
+
processCpuUsage?: number; // NEW: Per-process CPU %
|
|
56
|
+
};
|
|
57
|
+
system?: {
|
|
58
|
+
// ... system-wide metrics (kept for live monitoring)
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 3. Metrics Collection
|
|
64
|
+
|
|
65
|
+
**MetricsAggregator (`src/lib/metrics-aggregator.ts`):**
|
|
66
|
+
- Added `processCpuUsage` parameter to `collectServerMetrics()`
|
|
67
|
+
- Collects CPU in parallel with other metrics
|
|
68
|
+
- Supports batch collection for multi-server scenarios
|
|
69
|
+
|
|
70
|
+
**HistoryManager (`src/lib/history-manager.ts`):**
|
|
71
|
+
- Saves `processCpuUsage` in snapshots
|
|
72
|
+
- Maintains backward compatibility (optional field)
|
|
73
|
+
|
|
74
|
+
### 4. Historical Monitor UI
|
|
75
|
+
|
|
76
|
+
**HistoricalMonitorApp (`src/tui/HistoricalMonitorApp.ts`):**
|
|
77
|
+
|
|
78
|
+
**Chart Changes:**
|
|
79
|
+
|
|
80
|
+
**GPU Usage:**
|
|
81
|
+
- **Unchanged:** Still system-wide
|
|
82
|
+
- **Reason:** macOS doesn't provide per-process GPU metrics easily
|
|
83
|
+
- **Label:** "GPU Usage (%)"
|
|
84
|
+
|
|
85
|
+
**CPU Usage:**
|
|
86
|
+
- **Before:** `snapshot.system.cpuUsage` (system-wide)
|
|
87
|
+
- **After:** `snapshot.server.processCpuUsage` (per-process)
|
|
88
|
+
- **Label:** "Process CPU Usage (%)"
|
|
89
|
+
- **Range:** Not forced to 0-100% (can show >100% for multi-threaded workloads)
|
|
90
|
+
|
|
91
|
+
**Memory Usage:**
|
|
92
|
+
- **Before:** `(system.memoryUsed / system.memoryTotal) * 100` (system-wide %)
|
|
93
|
+
- **After:** `processMemory / (1024 * 1024 * 1024)` (per-process GB)
|
|
94
|
+
- **Label:** "Process Memory Usage (GB)"
|
|
95
|
+
- **Format:** Shows 2 decimal places (e.g., "3.45 GB")
|
|
96
|
+
- **Statistics:** Avg, Max, Min in GB
|
|
97
|
+
|
|
98
|
+
**Multi-Server Comparison:**
|
|
99
|
+
- Table also updated to show per-process CPU and memory
|
|
100
|
+
- Memory column now shows GB instead of %
|
|
101
|
+
|
|
102
|
+
## Benefits
|
|
103
|
+
|
|
104
|
+
1. **Accurate Attribution:** See exactly what each model is using
|
|
105
|
+
2. **Multi-Server Clarity:** Compare resource usage across different models
|
|
106
|
+
3. **Debugging:** Identify which specific model is consuming resources
|
|
107
|
+
4. **Capacity Planning:** Understand per-model requirements
|
|
108
|
+
|
|
109
|
+
## Example Output
|
|
110
|
+
|
|
111
|
+
**Before (System-Wide):**
|
|
112
|
+
```
|
|
113
|
+
CPU Usage (%)
|
|
114
|
+
Avg: 33.0% (±17.4) Max: 86.6% Min: 12.0%
|
|
115
|
+
|
|
116
|
+
Memory Usage (%)
|
|
117
|
+
Avg: 31.0% (±0.6) Max: 31.9% Min: 29.9%
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**After (Per-Process):**
|
|
121
|
+
```
|
|
122
|
+
Process CPU Usage (%)
|
|
123
|
+
Avg: 45.2% (±12.3) Max: 120.5% Min: 8.1%
|
|
124
|
+
|
|
125
|
+
Process Memory Usage (GB)
|
|
126
|
+
Avg: 3.45 GB (±0.12) Max: 3.67 GB Min: 3.21 GB
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Edge Cases Handled
|
|
130
|
+
|
|
131
|
+
1. **Missing Data:** Fields are optional, gracefully handles old snapshots
|
|
132
|
+
2. **Process Not Running:** Returns null, charts skip those data points
|
|
133
|
+
3. **Multi-Core:** CPU can exceed 100% (expected behavior)
|
|
134
|
+
4. **Cache Expiry:** 3-second TTL prevents stale data
|
|
135
|
+
5. **Batch Collection:** Efficient when monitoring multiple servers
|
|
136
|
+
|
|
137
|
+
## Testing Recommendations
|
|
138
|
+
|
|
139
|
+
1. **Single Server:**
|
|
140
|
+
```bash
|
|
141
|
+
npm run dev -- server monitor <server-id>
|
|
142
|
+
# Press 'H' to view historical data
|
|
143
|
+
```
|
|
144
|
+
- Verify CPU shows reasonable per-process values (not system-wide)
|
|
145
|
+
- Verify memory shows model size in GB (not total RAM %)
|
|
146
|
+
|
|
147
|
+
2. **Multi-Server:**
|
|
148
|
+
```bash
|
|
149
|
+
npm run dev -- server monitor
|
|
150
|
+
# Press 'H' to view comparison table
|
|
151
|
+
```
|
|
152
|
+
- Verify each server shows different CPU/memory values
|
|
153
|
+
- Verify table shows GB for memory column
|
|
154
|
+
|
|
155
|
+
3. **Compare with Activity Monitor:**
|
|
156
|
+
- Open Activity Monitor
|
|
157
|
+
- Filter for `llama-server` process
|
|
158
|
+
- CPU % should match within 5-10%
|
|
159
|
+
- Memory should match within 0.1 GB
|
|
160
|
+
|
|
161
|
+
4. **Compare with `ps`:**
|
|
162
|
+
```bash
|
|
163
|
+
ps -p <pid> -o %cpu,rss
|
|
164
|
+
```
|
|
165
|
+
- CPU % should match
|
|
166
|
+
- RSS (memory) should match when converted to GB
|
|
167
|
+
|
|
168
|
+
## Backward Compatibility
|
|
169
|
+
|
|
170
|
+
- Old history files still work (missing fields treated as undefined)
|
|
171
|
+
- System-wide metrics still collected for live monitoring
|
|
172
|
+
- Live monitoring TUI unchanged (still shows system-wide for context)
|
|
173
|
+
- Only historical view changed to per-process
|
|
174
|
+
|
|
175
|
+
## Related Files
|
|
176
|
+
|
|
177
|
+
- `src/utils/process-utils.ts` - Added CPU collection functions
|
|
178
|
+
- `src/types/monitor-types.ts` - Added processCpuUsage field
|
|
179
|
+
- `src/types/history-types.ts` - Added processCpuUsage to snapshots
|
|
180
|
+
- `src/lib/metrics-aggregator.ts` - Collects CPU metrics
|
|
181
|
+
- `src/lib/history-manager.ts` - Saves CPU metrics
|
|
182
|
+
- `src/tui/HistoricalMonitorApp.ts` - Displays per-process charts
|
|
183
|
+
|
|
184
|
+
## Future Improvements
|
|
185
|
+
|
|
186
|
+
1. **Per-Process GPU:** Investigate Metal API for GPU attribution
|
|
187
|
+
2. **Network I/O:** Track per-process network usage
|
|
188
|
+
3. **Disk I/O:** Track per-process disk reads/writes
|
|
189
|
+
4. **Thread Count:** Show number of threads used by process
|
|
190
|
+
5. **Context Switches:** Show voluntary/involuntary context switches
|
package/README.md
CHANGED
|
@@ -15,8 +15,9 @@ CLI tool to manage local llama.cpp servers on macOS. Provides an Ollama-like exp
|
|
|
15
15
|
- 🤖 **Model downloads** - Pull GGUF models from Hugging Face
|
|
16
16
|
- ⚙️ **Smart defaults** - Auto-configure threads, context size, and GPU layers based on model size
|
|
17
17
|
- 🔌 **Auto port assignment** - Automatically find available ports (9000-9999)
|
|
18
|
-
- 📊 **
|
|
18
|
+
- 📊 **Real-time monitoring TUI** - Multi-server dashboard with drill-down details, live GPU/CPU/memory metrics, token generation speeds, and animated loading states
|
|
19
19
|
- 🪵 **Smart logging** - Compact one-line request format with optional full JSON details
|
|
20
|
+
- ⚡️ **Optimized metrics** - Batch collection and caching prevent CPU spikes (10x fewer processes)
|
|
20
21
|
|
|
21
22
|
## Why llamacpp-cli?
|
|
22
23
|
|
|
@@ -76,6 +77,12 @@ llamacpp server create llama-3.2-3b-instruct-q4_k_m.gguf
|
|
|
76
77
|
# View running servers
|
|
77
78
|
llamacpp ps
|
|
78
79
|
|
|
80
|
+
# Monitor all servers (multi-server dashboard)
|
|
81
|
+
llamacpp server monitor
|
|
82
|
+
|
|
83
|
+
# Or monitor a specific server
|
|
84
|
+
llamacpp server monitor llama-3.2-3b
|
|
85
|
+
|
|
79
86
|
# Chat with your model interactively
|
|
80
87
|
llamacpp server run llama-3.2-3b
|
|
81
88
|
|
|
@@ -451,6 +458,134 @@ The compact format shows one line per HTTP request and includes:
|
|
|
451
458
|
|
|
452
459
|
Use `--http` to see full request/response JSON, or `--verbose` option to see all internal server logs.
|
|
453
460
|
|
|
461
|
+
### `llamacpp server monitor [identifier]`
|
|
462
|
+
Real-time monitoring TUI showing server metrics, GPU/CPU usage, and active inference slots.
|
|
463
|
+
|
|
464
|
+

|
|
465
|
+
|
|
466
|
+
**Two Modes:**
|
|
467
|
+
|
|
468
|
+
**1. Multi-Server Dashboard (no identifier):**
|
|
469
|
+
```bash
|
|
470
|
+
llamacpp server monitor
|
|
471
|
+
```
|
|
472
|
+
Shows overview of all servers with system resources. Use arrow keys (↑/↓) or vim keys (k/j) to navigate, then press Enter to view server details.
|
|
473
|
+
|
|
474
|
+
**2. Single-Server Monitor (with identifier):**
|
|
475
|
+
```bash
|
|
476
|
+
# Monitor by partial name
|
|
477
|
+
llamacpp server monitor llama-3.2-3b
|
|
478
|
+
|
|
479
|
+
# Monitor by port
|
|
480
|
+
llamacpp server monitor 9000
|
|
481
|
+
|
|
482
|
+
# Monitor by server ID
|
|
483
|
+
llamacpp server monitor llama-3-2-3b
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
**Multi-Server Dashboard:**
|
|
487
|
+
```
|
|
488
|
+
┌─────────────────────────────────────────────────────────┐
|
|
489
|
+
│ System Resources │
|
|
490
|
+
│ GPU: [████░░░] 65% CPU: [███░░░] 38% Memory: 58% │
|
|
491
|
+
├─────────────────────────────────────────────────────────┤
|
|
492
|
+
│ Servers (3 running, 0 stopped) │
|
|
493
|
+
│ │ Server ID │ Port │ Status │ Slots │ tok/s │
|
|
494
|
+
│───┼────────────────┼──────┼────────┼───────┼──────────┤
|
|
495
|
+
│ ► │ llama-3-2-3b │ 9000 │ ● RUN │ 2/4 │ 245 │ (highlighted)
|
|
496
|
+
│ │ qwen2-7b │ 9001 │ ● RUN │ 1/4 │ 198 │
|
|
497
|
+
│ │ llama-3-1-8b │ 9002 │ ○ IDLE │ 0/4 │ - │
|
|
498
|
+
└─────────────────────────────────────────────────────────┘
|
|
499
|
+
↑/↓ Navigate | Enter for details | [H]istory [R]efresh [Q] Quit
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
**Single-Server View:**
|
|
503
|
+
- **Server Information** - Status, uptime, model name, endpoint, slot counts
|
|
504
|
+
- **Request Metrics** - Active/idle slots, prompt speed, generation speed
|
|
505
|
+
- **Active Slots** - Per-slot token generation rates and progress
|
|
506
|
+
- **System Resources** - GPU/CPU/ANE utilization, memory usage, temperature
|
|
507
|
+
|
|
508
|
+
**Keyboard Shortcuts:**
|
|
509
|
+
- **Multi-Server Mode:**
|
|
510
|
+
- `↑/↓` or `k/j` - Navigate server list
|
|
511
|
+
- `Enter` - View details for selected server
|
|
512
|
+
- `ESC` - Back to list (from detail view)
|
|
513
|
+
- `H` - View historical metrics
|
|
514
|
+
- `R` - Force refresh now
|
|
515
|
+
- `+/-` - Adjust update speed
|
|
516
|
+
- `Q` - Quit
|
|
517
|
+
- **Single-Server Mode:**
|
|
518
|
+
- `H` - View historical metrics
|
|
519
|
+
- `R` - Force refresh now
|
|
520
|
+
- `+/-` - Adjust update speed
|
|
521
|
+
- `Q` - Quit
|
|
522
|
+
- **Historical View:**
|
|
523
|
+
- `H` - Toggle Hour View (Recent ↔ Hour)
|
|
524
|
+
- `ESC` - Back to live monitoring
|
|
525
|
+
- `Q` - Quit
|
|
526
|
+
|
|
527
|
+
**Historical Monitoring:**
|
|
528
|
+
|
|
529
|
+
Press `H` from any live monitoring view to see historical time-series charts. The historical view shows:
|
|
530
|
+
|
|
531
|
+
- **Token generation speed** over time with statistics (avg, max, stddev)
|
|
532
|
+
- **GPU usage** over time with min/max/avg
|
|
533
|
+
- **CPU usage** over time with min/max/avg
|
|
534
|
+
- **Memory usage** over time with min/max/avg
|
|
535
|
+
|
|
536
|
+
**View Modes (Toggle with `H` key):**
|
|
537
|
+
|
|
538
|
+
- **Recent View (default):**
|
|
539
|
+
- Shows last 40-80 samples (~1-3 minutes)
|
|
540
|
+
- Raw data with no downsampling - perfect accuracy
|
|
541
|
+
- Best for: "What's happening right now?"
|
|
542
|
+
|
|
543
|
+
- **Hour View:**
|
|
544
|
+
- Shows all ~1,800 samples from last hour
|
|
545
|
+
- **Absolute time-aligned downsampling** (30:1 ratio) - chart stays perfectly stable
|
|
546
|
+
- Bucket boundaries never shift (aligned to round minutes)
|
|
547
|
+
- New samples only affect their own bucket, not the entire chart
|
|
548
|
+
- **Bucket max** for GPU/CPU/token speed (preserves peaks)
|
|
549
|
+
- **Bucket mean** for memory (shows average)
|
|
550
|
+
- Chart labels indicate "Peak per bucket" or "Average per bucket"
|
|
551
|
+
- Best for: "What happened over the last hour?"
|
|
552
|
+
|
|
553
|
+
**Note:** The `H` key has two functions:
|
|
554
|
+
- From **live monitoring** → Enter historical view (Recent mode)
|
|
555
|
+
- Within **historical view** → Toggle between Recent and Hour views
|
|
556
|
+
|
|
557
|
+
**Data Collection:**
|
|
558
|
+
|
|
559
|
+
Historical data is automatically collected whenever you run the monitor command. Data is retained for 24 hours in `~/.llamacpp/history/<server-id>.json` files, then automatically pruned.
|
|
560
|
+
|
|
561
|
+
**Multi-Server Historical View:**
|
|
562
|
+
|
|
563
|
+
From the multi-server dashboard, press `H` to see a summary table comparing average metrics across all servers for the last hour.
|
|
564
|
+
|
|
565
|
+
**Features:**
|
|
566
|
+
- **Multi-server dashboard** - Monitor all servers at once
|
|
567
|
+
- **Real-time updates** - Metrics refresh every 2 seconds (adjustable)
|
|
568
|
+
- **Historical monitoring** - View time-series charts of past metrics (press `H` from monitor view)
|
|
569
|
+
- **Token-per-second calculation** - Shows actual generation speed per slot
|
|
570
|
+
- **Progress bars** - Visual representation of GPU/CPU/memory usage
|
|
571
|
+
- **Error recovery** - Shows stale data with warnings if connection lost
|
|
572
|
+
- **Graceful degradation** - Works without GPU metrics (uses memory-only mode)
|
|
573
|
+
|
|
574
|
+
**Optional: GPU/CPU Metrics**
|
|
575
|
+
|
|
576
|
+
For GPU and CPU utilization metrics, install macmon:
|
|
577
|
+
```bash
|
|
578
|
+
brew install vladkens/tap/macmon
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
Without macmon, the monitor still shows:
|
|
582
|
+
- ✅ Server status and uptime
|
|
583
|
+
- ✅ Active slots and token generation speeds
|
|
584
|
+
- ✅ Memory usage (via built-in vm_stat)
|
|
585
|
+
- ❌ GPU/CPU/ANE utilization (requires macmon)
|
|
586
|
+
|
|
587
|
+
**Identifiers:** Port number, server ID, or partial model name
|
|
588
|
+
|
|
454
589
|
## Configuration
|
|
455
590
|
|
|
456
591
|
llamacpp-cli stores its configuration in `~/.llamacpp/`:
|
package/dist/cli.js
CHANGED
|
@@ -21,6 +21,7 @@ const show_1 = require("./commands/show");
|
|
|
21
21
|
const server_show_1 = require("./commands/server-show");
|
|
22
22
|
const config_1 = require("./commands/config");
|
|
23
23
|
const config_global_1 = require("./commands/config-global");
|
|
24
|
+
const monitor_1 = require("./commands/monitor");
|
|
24
25
|
const package_json_1 = __importDefault(require("../package.json"));
|
|
25
26
|
const program = new commander_1.Command();
|
|
26
27
|
program
|
|
@@ -42,11 +43,12 @@ program
|
|
|
42
43
|
});
|
|
43
44
|
// List running servers
|
|
44
45
|
program
|
|
45
|
-
.command('ps')
|
|
46
|
-
.description('
|
|
47
|
-
.
|
|
46
|
+
.command('ps [identifier]')
|
|
47
|
+
.description('Interactive server monitoring dashboard')
|
|
48
|
+
.option('--table', 'Show static table instead of TUI (for scripting)')
|
|
49
|
+
.action(async (identifier, options) => {
|
|
48
50
|
try {
|
|
49
|
-
await (0, ps_1.psCommand)();
|
|
51
|
+
await (0, ps_1.psCommand)(identifier, options);
|
|
50
52
|
}
|
|
51
53
|
catch (error) {
|
|
52
54
|
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
@@ -268,6 +270,21 @@ server
|
|
|
268
270
|
process.exit(1);
|
|
269
271
|
}
|
|
270
272
|
});
|
|
273
|
+
// Monitor server (deprecated - redirects to ps)
|
|
274
|
+
server
|
|
275
|
+
.command('monitor [identifier]')
|
|
276
|
+
.description('Monitor server with real-time metrics TUI (deprecated: use "llamacpp ps" instead)')
|
|
277
|
+
.action(async (identifier) => {
|
|
278
|
+
try {
|
|
279
|
+
console.log(chalk_1.default.yellow('⚠️ The "monitor" command is deprecated and will be removed in a future version.'));
|
|
280
|
+
console.log(chalk_1.default.dim(' Please use "llamacpp ps" instead for the same functionality.\n'));
|
|
281
|
+
await (0, monitor_1.monitorCommand)(identifier);
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
console.error(chalk_1.default.red('❌ Error:'), error.message);
|
|
285
|
+
process.exit(1);
|
|
286
|
+
}
|
|
287
|
+
});
|
|
271
288
|
// Parse arguments
|
|
272
289
|
program.parse();
|
|
273
290
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,0CAA8C;AAC9C,sCAA0C;AAC1C,8CAAkD;AAClD,4CAAgD;AAChD,wCAA4C;AAC5C,0CAA8C;AAC9C,8CAAkD;AAClD,0CAA8C;AAC9C,sCAA0C;AAC1C,0CAA8C;AAC9C,8CAAkD;AAClD,0CAA8C;AAC9C,wDAA2D;AAC3D,8CAAwD;AACxD,4DAA+D;AAC/D,mEAA0C;AAE1C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,qDAAqD,CAAC;KAClE,OAAO,CAAC,sBAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,cAAc;AACd,OAAO;KACJ,OAAO,CAAC,IAAI,CAAC;KACb,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAA,kBAAW,GAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,uBAAuB;AACvB,OAAO;KACJ,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAcA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAcA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+JxF"}
|