gtm-pilot 1.0.0__tar.gz
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.
- gtm_pilot-1.0.0/.gitignore +14 -0
- gtm_pilot-1.0.0/CHANGELOG.md +29 -0
- gtm_pilot-1.0.0/LICENSE +21 -0
- gtm_pilot-1.0.0/PKG-INFO +293 -0
- gtm_pilot-1.0.0/README.md +268 -0
- gtm_pilot-1.0.0/gtm_pilot/__init__.py +8 -0
- gtm_pilot-1.0.0/gtm_pilot/__main__.py +5 -0
- gtm_pilot-1.0.0/gtm_pilot/app.py +234 -0
- gtm_pilot-1.0.0/gtm_pilot/cli.py +74 -0
- gtm_pilot-1.0.0/gtm_pilot/commands.py +69 -0
- gtm_pilot-1.0.0/gtm_pilot/gputaskman.py +171 -0
- gtm_pilot-1.0.0/gtm_pilot/pathcomplete.py +127 -0
- gtm_pilot-1.0.0/gtm_pilot/pilot.tcss +129 -0
- gtm_pilot-1.0.0/gtm_pilot/screens/__init__.py +1 -0
- gtm_pilot-1.0.0/gtm_pilot/screens/files.py +180 -0
- gtm_pilot-1.0.0/gtm_pilot/screens/forms.py +199 -0
- gtm_pilot-1.0.0/gtm_pilot/screens/keys.py +72 -0
- gtm_pilot-1.0.0/gtm_pilot/screens/measure.py +127 -0
- gtm_pilot-1.0.0/gtm_pilot/screens/menu.py +137 -0
- gtm_pilot-1.0.0/gtm_pilot/screens/missing.py +70 -0
- gtm_pilot-1.0.0/gtm_pilot/screens/output.py +85 -0
- gtm_pilot-1.0.0/gtm_pilot/screens/record.py +200 -0
- gtm_pilot-1.0.0/gtm_pilot/sessions.py +97 -0
- gtm_pilot-1.0.0/pyproject.toml +57 -0
- gtm_pilot-1.0.0/tests/test_app.py +153 -0
- gtm_pilot-1.0.0/tests/test_commands.py +75 -0
- gtm_pilot-1.0.0/tests/test_gputaskman.py +85 -0
- gtm_pilot-1.0.0/tests/test_pathcomplete.py +80 -0
- gtm_pilot-1.0.0/tests/test_sessions.py +98 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to FileX are documented here.
|
|
4
|
+
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## [1.0.0](https://github.com/Madhur-Prakash/gtm-pilot/releases/tag/v1.0.0) - 2026-11-15
|
|
9
|
+
|
|
10
|
+
First stable release.
|
|
11
|
+
|
|
12
|
+
- Menu for gputaskman's live view, snapshot, record, summary, replay, diff and `--list-gpus`.
|
|
13
|
+
- Forms with GPU picker and interval/duration presets (or a custom number of seconds).
|
|
14
|
+
- Record Session with a live sample count, progress for timed recordings, a Stop button, and
|
|
15
|
+
the summary afterwards.
|
|
16
|
+
- Measure a Change: before snapshot, pause, after snapshot, diff, with files named after what
|
|
17
|
+
you measure.
|
|
18
|
+
- One-key shortcuts for every menu action (shown in the footer and the list), and a `?` page
|
|
19
|
+
listing every key.
|
|
20
|
+
- Path autocomplete in the file picker: inline suggestion (Tab or → accepts) and a live list
|
|
21
|
+
of matching folders and files.
|
|
22
|
+
- Actions an installed gputaskman can't do yet are greyed out instead of failing.
|
|
23
|
+
- If gputaskman isn't found, an error screen shows how to install it (uv tool or from source),
|
|
24
|
+
and `r` looks again. If gputaskman is found but fails, the menu says why.
|
|
25
|
+
- `--sessions` / `GTM_PILOT_SESSIONS` and `--gputaskman` / `GTM_PILOT_GPUTASKMAN`.
|
|
26
|
+
- Root-level `gtm_pilot` package layout with support for editable installation using
|
|
27
|
+
`pip install -e .`.
|
|
28
|
+
- Refreshed project documentation with installation, configuration, keyboard, data-file,
|
|
29
|
+
compatibility, and development guidance.
|
gtm_pilot-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Madhur Prakash
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
gtm_pilot-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: gtm-pilot
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: A guided menu for gputaskman: live view, snapshots, recordings, summaries and before/after diffs without remembering the flags. Unofficial companion.
|
|
5
|
+
Project-URL: Repository, https://github.com/Madhur-Prakash/gtm-pilot
|
|
6
|
+
Project-URL: Documentation, https://github.com/Madhur-Prakash/gtm-pilot#readme
|
|
7
|
+
Project-URL: Homepage, https://github.com/Madhur-Prakash/gtm-pilot
|
|
8
|
+
Project-URL: Issues, https://github.com/Madhur-Prakash/gtm-pilot/issues
|
|
9
|
+
Project-URL: gputaskman, https://github.com/shanselman/gputaskman
|
|
10
|
+
Author-email: Madhur Prakash <madhurprakash2005@gmail.com>
|
|
11
|
+
License-Expression: MIT
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Keywords: gpu,gputaskman,monitoring,textual,tui,vram
|
|
14
|
+
Classifier: Development Status :: 3 - Alpha
|
|
15
|
+
Classifier: Environment :: Console
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: Operating System :: MacOS
|
|
18
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
19
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
20
|
+
Classifier: Programming Language :: Python :: 3
|
|
21
|
+
Classifier: Topic :: System :: Monitoring
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Requires-Dist: textual>=8.2.8
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
|
|
26
|
+
<div align="center">
|
|
27
|
+
|
|
28
|
+
# gtm-pilot
|
|
29
|
+
|
|
30
|
+
<p>A guided terminal interface for <a href="https://github.com/shanselman/gputaskman">gputaskman</a>.</p>
|
|
31
|
+
|
|
32
|
+
<p>
|
|
33
|
+
<a href="https://www.python.org/"><img src="https://img.shields.io/badge/python-3.11%2B-3776AB.svg" alt="Python 3.11 or newer"></a>
|
|
34
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-2ea44f.svg" alt="MIT License"></a>
|
|
35
|
+
<a href="https://textual.textualize.io/"><img src="https://img.shields.io/badge/built%20with-Textual-6f42c1.svg" alt="Built with Textual"></a>
|
|
36
|
+
<a href="https://github.com/shanselman/gputaskman"><img src="https://img.shields.io/badge/backend-gputaskman-24292f.svg" alt="Backend: gputaskman"></a>
|
|
37
|
+
</p>
|
|
38
|
+
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
gtm-pilot brings live GPU monitoring, snapshots, recordings, summaries, replays, and
|
|
42
|
+
before-and-after comparisons into one focused menu. It runs the `gputaskman` executable
|
|
43
|
+
already installed on your machine and presents its output without changing measurements,
|
|
44
|
+
labels, process names, or `n/a` values.
|
|
45
|
+
|
|
46
|
+
gtm-pilot is an unofficial companion. It is not part of or affiliated with gputaskman.
|
|
47
|
+
|
|
48
|
+
## Contents
|
|
49
|
+
|
|
50
|
+
- [Features](#features)
|
|
51
|
+
- [Requirements](#requirements)
|
|
52
|
+
- [Installation](#installation)
|
|
53
|
+
- [Usage](#usage)
|
|
54
|
+
- [Configuration](#configuration)
|
|
55
|
+
- [Data files](#data-files)
|
|
56
|
+
- [How it works](#how-it-works)
|
|
57
|
+
- [Development](#development)
|
|
58
|
+
- [License](#license)
|
|
59
|
+
|
|
60
|
+
## Features
|
|
61
|
+
|
|
62
|
+
- GPU selection from a detected adapter list.
|
|
63
|
+
- Live View with configurable refresh intervals.
|
|
64
|
+
- One-shot GPU snapshots.
|
|
65
|
+
- Time-based or manually stopped recording sessions.
|
|
66
|
+
- Live recording sample counts and progress.
|
|
67
|
+
- Recording summaries and offline replays.
|
|
68
|
+
- Before-and-after measurements for model loads and scripts.
|
|
69
|
+
- Comparisons between saved JSON snapshots.
|
|
70
|
+
- Recent-file browsing with path autocomplete.
|
|
71
|
+
- Cross-platform sessions-folder opening.
|
|
72
|
+
- Keyboard shortcuts and a built-in key reference.
|
|
73
|
+
- Compatibility detection for older gputaskman installations.
|
|
74
|
+
- Explicit error messages when gputaskman is missing or a command fails.
|
|
75
|
+
|
|
76
|
+
## Requirements
|
|
77
|
+
|
|
78
|
+
- Python 3.11 or newer.
|
|
79
|
+
- [gputaskman](https://github.com/shanselman/gputaskman), available as `gputaskman`
|
|
80
|
+
or `gtm` on `PATH`.
|
|
81
|
+
- A terminal that supports Textual applications.
|
|
82
|
+
|
|
83
|
+
gtm-pilot does not install gputaskman automatically. It uses the executable you provide or
|
|
84
|
+
the first compatible executable it discovers.
|
|
85
|
+
|
|
86
|
+
## Installation
|
|
87
|
+
|
|
88
|
+
### Install gputaskman
|
|
89
|
+
|
|
90
|
+
Install a released version with uv:
|
|
91
|
+
|
|
92
|
+
```powershell
|
|
93
|
+
uv tool install gputaskman
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
For the newest commands, install from source:
|
|
97
|
+
|
|
98
|
+
```powershell
|
|
99
|
+
uv tool install --force git+https://github.com/shanselman/gputaskman
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
gtm-pilot uses the `summary` and `replay` commands. Run the following to check the
|
|
103
|
+
commands provided by your installation:
|
|
104
|
+
|
|
105
|
+
```powershell
|
|
106
|
+
gputaskman --help
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Install gtm-pilot
|
|
110
|
+
|
|
111
|
+
Install the published tool:
|
|
112
|
+
|
|
113
|
+
```powershell
|
|
114
|
+
uv tool install gtm-pilot
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Or install the current checkout:
|
|
118
|
+
|
|
119
|
+
```powershell
|
|
120
|
+
git clone https://github.com/Madhur-Prakash/gtm-pilot
|
|
121
|
+
cd gtm-pilot
|
|
122
|
+
pip install -e .
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
The editable install keeps source changes available immediately during development.
|
|
126
|
+
|
|
127
|
+
## Usage
|
|
128
|
+
|
|
129
|
+
Start the application:
|
|
130
|
+
|
|
131
|
+
```powershell
|
|
132
|
+
gtm-pilot
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
You can also start the package module directly:
|
|
136
|
+
|
|
137
|
+
```powershell
|
|
138
|
+
python -m gtm_pilot
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Menu actions
|
|
142
|
+
|
|
143
|
+
| Key | Action | Description |
|
|
144
|
+
|---|---|---|
|
|
145
|
+
| `l` | Live View | Opens gputaskman's full-screen monitor. |
|
|
146
|
+
| `s` | Snapshot | Captures one reading for a selected GPU. |
|
|
147
|
+
| `n` | Record Session | Records GPU usage to a JSONL file. |
|
|
148
|
+
| `u` | Summarize Recording | Summarizes a saved recording. |
|
|
149
|
+
| `p` | Replay Recording | Replays a recording offline. |
|
|
150
|
+
| `m` | Measure a Change | Captures before and after snapshots, then runs a diff. |
|
|
151
|
+
| `c` | Compare Snapshots | Diffs two saved snapshots. |
|
|
152
|
+
| `g` | List GPUs | Displays GPU indexes and adapter details. |
|
|
153
|
+
| `o` | Open Sessions Folder | Opens the folder containing saved data. |
|
|
154
|
+
| `r` | Refresh GPUs | Refreshes the detected GPU list. |
|
|
155
|
+
| `?` | Show Keys | Opens the complete keyboard reference. |
|
|
156
|
+
| `q` | Quit | Exits gtm-pilot. |
|
|
157
|
+
|
|
158
|
+
### Keyboard reference
|
|
159
|
+
|
|
160
|
+
| Context | Keys | Action |
|
|
161
|
+
|---|---|---|
|
|
162
|
+
| Menu | Arrow keys, `Enter` | Navigate and select |
|
|
163
|
+
| Forms | `Tab`, `Shift+Tab`, `Enter`, `Esc` | Move, submit, or cancel |
|
|
164
|
+
| File picker | `Tab` or `Right Arrow` | Complete the current path |
|
|
165
|
+
| File picker | `Down Arrow` | Move from the path field to the list |
|
|
166
|
+
| File picker | `Enter` | Open a file or enter a folder |
|
|
167
|
+
| Recording | `s` or `Esc` | Stop recording |
|
|
168
|
+
| Output | Arrow keys, `Page Up`, `Page Down` | Scroll output |
|
|
169
|
+
| Output | `Esc`, `q`, `Enter` | Return to the menu |
|
|
170
|
+
| Anywhere | `Ctrl+P` | Open Textual's command palette |
|
|
171
|
+
| Anywhere | `Ctrl+Q` | Quit |
|
|
172
|
+
|
|
173
|
+
## Configuration
|
|
174
|
+
|
|
175
|
+
| Command-line option | Environment variable | Default |
|
|
176
|
+
|---|---|---|
|
|
177
|
+
| `--sessions DIR` | `GTM_PILOT_SESSIONS` | `~/gpu-sessions` |
|
|
178
|
+
| `--gputaskman PATH` | `GTM_PILOT_GPUTASKMAN` | `gputaskman`, then `gtm` on `PATH` |
|
|
179
|
+
|
|
180
|
+
Examples:
|
|
181
|
+
|
|
182
|
+
```powershell
|
|
183
|
+
gtm-pilot --sessions D:\gpu-runs
|
|
184
|
+
gtm-pilot --gputaskman D:\tools\gputaskman.exe
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Command-line options take precedence over environment variables. Additional options:
|
|
188
|
+
|
|
189
|
+
```powershell
|
|
190
|
+
gtm-pilot --help
|
|
191
|
+
gtm-pilot --version
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Data files
|
|
195
|
+
|
|
196
|
+
Saved data defaults to:
|
|
197
|
+
|
|
198
|
+
```text
|
|
199
|
+
~/gpu-sessions
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
On Windows, this typically resolves to:
|
|
203
|
+
|
|
204
|
+
```text
|
|
205
|
+
C:\Users\<username>\gpu-sessions
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Recordings use `.jsonl` files:
|
|
209
|
+
|
|
210
|
+
```text
|
|
211
|
+
session_2026-11-13_21-18.jsonl
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Measurements use paired `.json` files:
|
|
215
|
+
|
|
216
|
+
```text
|
|
217
|
+
llama3.1-8b_2026-11-13_21-10_before.json
|
|
218
|
+
llama3.1-8b_2026-11-13_21-10_after.json
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
File behavior:
|
|
222
|
+
|
|
223
|
+
- Existing recordings are appended to by gputaskman.
|
|
224
|
+
- Snapshots are never overwritten.
|
|
225
|
+
- Repeated measurements receive `-2`, `-3`, and later suffixes.
|
|
226
|
+
- Measurement labels are made filesystem-safe and limited to 40 characters.
|
|
227
|
+
- File pickers show recent files first, with folders before matching files.
|
|
228
|
+
- Path matching is case-insensitive and preserves the separator style being typed.
|
|
229
|
+
- Hidden files are shown only when the typed name begins with a dot.
|
|
230
|
+
|
|
231
|
+
Review recordings and snapshots before sharing them. They may contain process names,
|
|
232
|
+
paths, command lines, and model names from gputaskman's JSON output.
|
|
233
|
+
|
|
234
|
+
## Compatibility and error handling
|
|
235
|
+
|
|
236
|
+
gtm-pilot discovers gputaskman in this order:
|
|
237
|
+
|
|
238
|
+
1. The path passed with `--gputaskman`.
|
|
239
|
+
2. `GTM_PILOT_GPUTASKMAN`.
|
|
240
|
+
3. `gputaskman` on `PATH`.
|
|
241
|
+
4. `gtm` on `PATH`.
|
|
242
|
+
5. The default `~/.local/bin` tool location.
|
|
243
|
+
|
|
244
|
+
The application checks `gputaskman --help` for the `diff`, `record`, `summary`, and
|
|
245
|
+
`replay` commands. Actions unavailable in the installed version are disabled with an
|
|
246
|
+
explanation.
|
|
247
|
+
|
|
248
|
+
If gputaskman cannot be found, gtm-pilot shows installation guidance. Press `r` after
|
|
249
|
+
installing it to search again. If a command fails, its error output is displayed instead
|
|
250
|
+
of being silently discarded.
|
|
251
|
+
|
|
252
|
+
## How it works
|
|
253
|
+
|
|
254
|
+
- gtm-pilot does not read GPU data directly or add monitoring probes.
|
|
255
|
+
- Every measurement comes from the installed gputaskman executable.
|
|
256
|
+
- Text-producing commands run away from the UI thread and appear in scrollable output pages.
|
|
257
|
+
- Live View and Replay hand the terminal to gputaskman's own full-screen interface.
|
|
258
|
+
- Record Session counts complete samples as they are written.
|
|
259
|
+
- On Linux and macOS, stopping a recording sends `SIGINT`.
|
|
260
|
+
- On Windows, stopping a background recording terminates its process after finished samples
|
|
261
|
+
have been preserved.
|
|
262
|
+
- Windows captured commands run without opening an extra console window.
|
|
263
|
+
|
|
264
|
+
## Development
|
|
265
|
+
|
|
266
|
+
The package uses a root-level `gtm_pilot/` layout and Hatchling as its build backend.
|
|
267
|
+
|
|
268
|
+
```powershell
|
|
269
|
+
pip install -e .
|
|
270
|
+
python -m unittest discover -s tests
|
|
271
|
+
uv build
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Project layout:
|
|
275
|
+
|
|
276
|
+
```text
|
|
277
|
+
gtm_pilot/
|
|
278
|
+
cli.py command-line entry point
|
|
279
|
+
app.py Textual application and action dispatch
|
|
280
|
+
gputaskman.py executable discovery and command execution
|
|
281
|
+
commands.py gputaskman argument builders
|
|
282
|
+
sessions.py session paths and filenames
|
|
283
|
+
pathcomplete.py file-picker autocomplete
|
|
284
|
+
pilot.tcss Textual styles
|
|
285
|
+
screens/ application screens and dialogs
|
|
286
|
+
tests/ unit and UI tests using a fake gputaskman
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## License
|
|
290
|
+
|
|
291
|
+
gtm-pilot is released under the [MIT License](LICENSE).
|
|
292
|
+
|
|
293
|
+
gputaskman is a separate project by Scott Hanselman and remains under its own license.
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# gtm-pilot
|
|
4
|
+
|
|
5
|
+
<p>A guided terminal interface for <a href="https://github.com/shanselman/gputaskman">gputaskman</a>.</p>
|
|
6
|
+
|
|
7
|
+
<p>
|
|
8
|
+
<a href="https://www.python.org/"><img src="https://img.shields.io/badge/python-3.11%2B-3776AB.svg" alt="Python 3.11 or newer"></a>
|
|
9
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-2ea44f.svg" alt="MIT License"></a>
|
|
10
|
+
<a href="https://textual.textualize.io/"><img src="https://img.shields.io/badge/built%20with-Textual-6f42c1.svg" alt="Built with Textual"></a>
|
|
11
|
+
<a href="https://github.com/shanselman/gputaskman"><img src="https://img.shields.io/badge/backend-gputaskman-24292f.svg" alt="Backend: gputaskman"></a>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
gtm-pilot brings live GPU monitoring, snapshots, recordings, summaries, replays, and
|
|
17
|
+
before-and-after comparisons into one focused menu. It runs the `gputaskman` executable
|
|
18
|
+
already installed on your machine and presents its output without changing measurements,
|
|
19
|
+
labels, process names, or `n/a` values.
|
|
20
|
+
|
|
21
|
+
gtm-pilot is an unofficial companion. It is not part of or affiliated with gputaskman.
|
|
22
|
+
|
|
23
|
+
## Contents
|
|
24
|
+
|
|
25
|
+
- [Features](#features)
|
|
26
|
+
- [Requirements](#requirements)
|
|
27
|
+
- [Installation](#installation)
|
|
28
|
+
- [Usage](#usage)
|
|
29
|
+
- [Configuration](#configuration)
|
|
30
|
+
- [Data files](#data-files)
|
|
31
|
+
- [How it works](#how-it-works)
|
|
32
|
+
- [Development](#development)
|
|
33
|
+
- [License](#license)
|
|
34
|
+
|
|
35
|
+
## Features
|
|
36
|
+
|
|
37
|
+
- GPU selection from a detected adapter list.
|
|
38
|
+
- Live View with configurable refresh intervals.
|
|
39
|
+
- One-shot GPU snapshots.
|
|
40
|
+
- Time-based or manually stopped recording sessions.
|
|
41
|
+
- Live recording sample counts and progress.
|
|
42
|
+
- Recording summaries and offline replays.
|
|
43
|
+
- Before-and-after measurements for model loads and scripts.
|
|
44
|
+
- Comparisons between saved JSON snapshots.
|
|
45
|
+
- Recent-file browsing with path autocomplete.
|
|
46
|
+
- Cross-platform sessions-folder opening.
|
|
47
|
+
- Keyboard shortcuts and a built-in key reference.
|
|
48
|
+
- Compatibility detection for older gputaskman installations.
|
|
49
|
+
- Explicit error messages when gputaskman is missing or a command fails.
|
|
50
|
+
|
|
51
|
+
## Requirements
|
|
52
|
+
|
|
53
|
+
- Python 3.11 or newer.
|
|
54
|
+
- [gputaskman](https://github.com/shanselman/gputaskman), available as `gputaskman`
|
|
55
|
+
or `gtm` on `PATH`.
|
|
56
|
+
- A terminal that supports Textual applications.
|
|
57
|
+
|
|
58
|
+
gtm-pilot does not install gputaskman automatically. It uses the executable you provide or
|
|
59
|
+
the first compatible executable it discovers.
|
|
60
|
+
|
|
61
|
+
## Installation
|
|
62
|
+
|
|
63
|
+
### Install gputaskman
|
|
64
|
+
|
|
65
|
+
Install a released version with uv:
|
|
66
|
+
|
|
67
|
+
```powershell
|
|
68
|
+
uv tool install gputaskman
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
For the newest commands, install from source:
|
|
72
|
+
|
|
73
|
+
```powershell
|
|
74
|
+
uv tool install --force git+https://github.com/shanselman/gputaskman
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
gtm-pilot uses the `summary` and `replay` commands. Run the following to check the
|
|
78
|
+
commands provided by your installation:
|
|
79
|
+
|
|
80
|
+
```powershell
|
|
81
|
+
gputaskman --help
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Install gtm-pilot
|
|
85
|
+
|
|
86
|
+
Install the published tool:
|
|
87
|
+
|
|
88
|
+
```powershell
|
|
89
|
+
uv tool install gtm-pilot
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Or install the current checkout:
|
|
93
|
+
|
|
94
|
+
```powershell
|
|
95
|
+
git clone https://github.com/Madhur-Prakash/gtm-pilot
|
|
96
|
+
cd gtm-pilot
|
|
97
|
+
pip install -e .
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
The editable install keeps source changes available immediately during development.
|
|
101
|
+
|
|
102
|
+
## Usage
|
|
103
|
+
|
|
104
|
+
Start the application:
|
|
105
|
+
|
|
106
|
+
```powershell
|
|
107
|
+
gtm-pilot
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
You can also start the package module directly:
|
|
111
|
+
|
|
112
|
+
```powershell
|
|
113
|
+
python -m gtm_pilot
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Menu actions
|
|
117
|
+
|
|
118
|
+
| Key | Action | Description |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| `l` | Live View | Opens gputaskman's full-screen monitor. |
|
|
121
|
+
| `s` | Snapshot | Captures one reading for a selected GPU. |
|
|
122
|
+
| `n` | Record Session | Records GPU usage to a JSONL file. |
|
|
123
|
+
| `u` | Summarize Recording | Summarizes a saved recording. |
|
|
124
|
+
| `p` | Replay Recording | Replays a recording offline. |
|
|
125
|
+
| `m` | Measure a Change | Captures before and after snapshots, then runs a diff. |
|
|
126
|
+
| `c` | Compare Snapshots | Diffs two saved snapshots. |
|
|
127
|
+
| `g` | List GPUs | Displays GPU indexes and adapter details. |
|
|
128
|
+
| `o` | Open Sessions Folder | Opens the folder containing saved data. |
|
|
129
|
+
| `r` | Refresh GPUs | Refreshes the detected GPU list. |
|
|
130
|
+
| `?` | Show Keys | Opens the complete keyboard reference. |
|
|
131
|
+
| `q` | Quit | Exits gtm-pilot. |
|
|
132
|
+
|
|
133
|
+
### Keyboard reference
|
|
134
|
+
|
|
135
|
+
| Context | Keys | Action |
|
|
136
|
+
|---|---|---|
|
|
137
|
+
| Menu | Arrow keys, `Enter` | Navigate and select |
|
|
138
|
+
| Forms | `Tab`, `Shift+Tab`, `Enter`, `Esc` | Move, submit, or cancel |
|
|
139
|
+
| File picker | `Tab` or `Right Arrow` | Complete the current path |
|
|
140
|
+
| File picker | `Down Arrow` | Move from the path field to the list |
|
|
141
|
+
| File picker | `Enter` | Open a file or enter a folder |
|
|
142
|
+
| Recording | `s` or `Esc` | Stop recording |
|
|
143
|
+
| Output | Arrow keys, `Page Up`, `Page Down` | Scroll output |
|
|
144
|
+
| Output | `Esc`, `q`, `Enter` | Return to the menu |
|
|
145
|
+
| Anywhere | `Ctrl+P` | Open Textual's command palette |
|
|
146
|
+
| Anywhere | `Ctrl+Q` | Quit |
|
|
147
|
+
|
|
148
|
+
## Configuration
|
|
149
|
+
|
|
150
|
+
| Command-line option | Environment variable | Default |
|
|
151
|
+
|---|---|---|
|
|
152
|
+
| `--sessions DIR` | `GTM_PILOT_SESSIONS` | `~/gpu-sessions` |
|
|
153
|
+
| `--gputaskman PATH` | `GTM_PILOT_GPUTASKMAN` | `gputaskman`, then `gtm` on `PATH` |
|
|
154
|
+
|
|
155
|
+
Examples:
|
|
156
|
+
|
|
157
|
+
```powershell
|
|
158
|
+
gtm-pilot --sessions D:\gpu-runs
|
|
159
|
+
gtm-pilot --gputaskman D:\tools\gputaskman.exe
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Command-line options take precedence over environment variables. Additional options:
|
|
163
|
+
|
|
164
|
+
```powershell
|
|
165
|
+
gtm-pilot --help
|
|
166
|
+
gtm-pilot --version
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Data files
|
|
170
|
+
|
|
171
|
+
Saved data defaults to:
|
|
172
|
+
|
|
173
|
+
```text
|
|
174
|
+
~/gpu-sessions
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
On Windows, this typically resolves to:
|
|
178
|
+
|
|
179
|
+
```text
|
|
180
|
+
C:\Users\<username>\gpu-sessions
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Recordings use `.jsonl` files:
|
|
184
|
+
|
|
185
|
+
```text
|
|
186
|
+
session_2026-11-13_21-18.jsonl
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Measurements use paired `.json` files:
|
|
190
|
+
|
|
191
|
+
```text
|
|
192
|
+
llama3.1-8b_2026-11-13_21-10_before.json
|
|
193
|
+
llama3.1-8b_2026-11-13_21-10_after.json
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
File behavior:
|
|
197
|
+
|
|
198
|
+
- Existing recordings are appended to by gputaskman.
|
|
199
|
+
- Snapshots are never overwritten.
|
|
200
|
+
- Repeated measurements receive `-2`, `-3`, and later suffixes.
|
|
201
|
+
- Measurement labels are made filesystem-safe and limited to 40 characters.
|
|
202
|
+
- File pickers show recent files first, with folders before matching files.
|
|
203
|
+
- Path matching is case-insensitive and preserves the separator style being typed.
|
|
204
|
+
- Hidden files are shown only when the typed name begins with a dot.
|
|
205
|
+
|
|
206
|
+
Review recordings and snapshots before sharing them. They may contain process names,
|
|
207
|
+
paths, command lines, and model names from gputaskman's JSON output.
|
|
208
|
+
|
|
209
|
+
## Compatibility and error handling
|
|
210
|
+
|
|
211
|
+
gtm-pilot discovers gputaskman in this order:
|
|
212
|
+
|
|
213
|
+
1. The path passed with `--gputaskman`.
|
|
214
|
+
2. `GTM_PILOT_GPUTASKMAN`.
|
|
215
|
+
3. `gputaskman` on `PATH`.
|
|
216
|
+
4. `gtm` on `PATH`.
|
|
217
|
+
5. The default `~/.local/bin` tool location.
|
|
218
|
+
|
|
219
|
+
The application checks `gputaskman --help` for the `diff`, `record`, `summary`, and
|
|
220
|
+
`replay` commands. Actions unavailable in the installed version are disabled with an
|
|
221
|
+
explanation.
|
|
222
|
+
|
|
223
|
+
If gputaskman cannot be found, gtm-pilot shows installation guidance. Press `r` after
|
|
224
|
+
installing it to search again. If a command fails, its error output is displayed instead
|
|
225
|
+
of being silently discarded.
|
|
226
|
+
|
|
227
|
+
## How it works
|
|
228
|
+
|
|
229
|
+
- gtm-pilot does not read GPU data directly or add monitoring probes.
|
|
230
|
+
- Every measurement comes from the installed gputaskman executable.
|
|
231
|
+
- Text-producing commands run away from the UI thread and appear in scrollable output pages.
|
|
232
|
+
- Live View and Replay hand the terminal to gputaskman's own full-screen interface.
|
|
233
|
+
- Record Session counts complete samples as they are written.
|
|
234
|
+
- On Linux and macOS, stopping a recording sends `SIGINT`.
|
|
235
|
+
- On Windows, stopping a background recording terminates its process after finished samples
|
|
236
|
+
have been preserved.
|
|
237
|
+
- Windows captured commands run without opening an extra console window.
|
|
238
|
+
|
|
239
|
+
## Development
|
|
240
|
+
|
|
241
|
+
The package uses a root-level `gtm_pilot/` layout and Hatchling as its build backend.
|
|
242
|
+
|
|
243
|
+
```powershell
|
|
244
|
+
pip install -e .
|
|
245
|
+
python -m unittest discover -s tests
|
|
246
|
+
uv build
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Project layout:
|
|
250
|
+
|
|
251
|
+
```text
|
|
252
|
+
gtm_pilot/
|
|
253
|
+
cli.py command-line entry point
|
|
254
|
+
app.py Textual application and action dispatch
|
|
255
|
+
gputaskman.py executable discovery and command execution
|
|
256
|
+
commands.py gputaskman argument builders
|
|
257
|
+
sessions.py session paths and filenames
|
|
258
|
+
pathcomplete.py file-picker autocomplete
|
|
259
|
+
pilot.tcss Textual styles
|
|
260
|
+
screens/ application screens and dialogs
|
|
261
|
+
tests/ unit and UI tests using a fake gputaskman
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## License
|
|
265
|
+
|
|
266
|
+
gtm-pilot is released under the [MIT License](LICENSE).
|
|
267
|
+
|
|
268
|
+
gputaskman is a separate project by Scott Hanselman and remains under its own license.
|