lonoboard 0.1.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.
Files changed (42) hide show
  1. lonoboard-0.1.0/LICENSE +29 -0
  2. lonoboard-0.1.0/PKG-INFO +193 -0
  3. lonoboard-0.1.0/README.md +168 -0
  4. lonoboard-0.1.0/pyproject.toml +43 -0
  5. lonoboard-0.1.0/setup.cfg +4 -0
  6. lonoboard-0.1.0/src/lonoboard/__init__.py +3 -0
  7. lonoboard-0.1.0/src/lonoboard/__main__.py +3 -0
  8. lonoboard-0.1.0/src/lonoboard/board/__init__.py +2 -0
  9. lonoboard-0.1.0/src/lonoboard/board/hub.py +290 -0
  10. lonoboard-0.1.0/src/lonoboard/board/logo.py +109 -0
  11. lonoboard-0.1.0/src/lonoboard/board/model.py +48 -0
  12. lonoboard-0.1.0/src/lonoboard/board/render.py +335 -0
  13. lonoboard-0.1.0/src/lonoboard/board/screens.py +1080 -0
  14. lonoboard-0.1.0/src/lonoboard/board/session.py +655 -0
  15. lonoboard-0.1.0/src/lonoboard/board/telnet.py +154 -0
  16. lonoboard-0.1.0/src/lonoboard/cli.py +218 -0
  17. lonoboard-0.1.0/src/lonoboard/collector.py +400 -0
  18. lonoboard-0.1.0/src/lonoboard/config.py +181 -0
  19. lonoboard-0.1.0/src/lonoboard/demo.py +288 -0
  20. lonoboard-0.1.0/src/lonoboard/hardware.py +164 -0
  21. lonoboard-0.1.0/src/lonoboard/network.py +79 -0
  22. lonoboard-0.1.0/src/lonoboard/runtime.py +179 -0
  23. lonoboard-0.1.0/src/lonoboard/sources.py +330 -0
  24. lonoboard-0.1.0/src/lonoboard/static/fonts/LICENSE-CC-BY-SA-4.0.txt +428 -0
  25. lonoboard-0.1.0/src/lonoboard/static/fonts/PxPlus_IBM_VGA_8x16.ttf +0 -0
  26. lonoboard-0.1.0/src/lonoboard/static/fonts/PxPlus_IBM_VGA_9x16.ttf +0 -0
  27. lonoboard-0.1.0/src/lonoboard/static/terminal.html +297 -0
  28. lonoboard-0.1.0/src/lonoboard/usage.py +139 -0
  29. lonoboard-0.1.0/src/lonoboard/util.py +137 -0
  30. lonoboard-0.1.0/src/lonoboard/web.py +218 -0
  31. lonoboard-0.1.0/src/lonoboard.egg-info/PKG-INFO +193 -0
  32. lonoboard-0.1.0/src/lonoboard.egg-info/SOURCES.txt +40 -0
  33. lonoboard-0.1.0/src/lonoboard.egg-info/dependency_links.txt +1 -0
  34. lonoboard-0.1.0/src/lonoboard.egg-info/entry_points.txt +2 -0
  35. lonoboard-0.1.0/src/lonoboard.egg-info/top_level.txt +1 -0
  36. lonoboard-0.1.0/tests/test_board.py +182 -0
  37. lonoboard-0.1.0/tests/test_parsers.py +128 -0
  38. lonoboard-0.1.0/tests/test_render.py +98 -0
  39. lonoboard-0.1.0/tests/test_security.py +137 -0
  40. lonoboard-0.1.0/tests/test_servers.py +180 -0
  41. lonoboard-0.1.0/tests/test_sources.py +81 -0
  42. lonoboard-0.1.0/tests/test_usage.py +58 -0
@@ -0,0 +1,29 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Zachary Taylor
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.
22
+
23
+ ---
24
+
25
+ The fonts in src/lonoboard/static/fonts/ (PxPlus_IBM_VGA_8x16.ttf and
26
+ PxPlus_IBM_VGA_9x16.ttf) are from The Ultimate Oldschool PC Font Pack by VileR
27
+ (https://int10h.org/oldschool-pc-fonts/) and are licensed separately under the
28
+ Creative Commons Attribution-ShareAlike 4.0 International License; see
29
+ src/lonoboard/static/fonts/LICENSE-CC-BY-SA-4.0.txt.
@@ -0,0 +1,193 @@
1
+ Metadata-Version: 2.4
2
+ Name: lonoboard
3
+ Version: 0.1.0
4
+ Summary: A live dashboard for the machines running your AI models, drawn like a 1990s ANSI BBS
5
+ License-Expression: MIT
6
+ Project-URL: Homepage, https://github.com/ztaylor/lonoboard
7
+ Project-URL: Issues, https://github.com/ztaylor/lonoboard/issues
8
+ Project-URL: Changelog, https://github.com/ztaylor/lonoboard/blob/main/CHANGELOG.md
9
+ Keywords: bbs,ansi,ansi-art,telnet,llama.cpp,ollama,vllm,llm,dashboard,homelab
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Environment :: Console
12
+ Classifier: Environment :: Web Environment
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: System Administrators
15
+ Classifier: Operating System :: POSIX :: Linux
16
+ Classifier: Operating System :: MacOS
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Topic :: Terminals :: Telnet
19
+ Classifier: Topic :: System :: Monitoring
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ License-File: src/lonoboard/static/fonts/LICENSE-CC-BY-SA-4.0.txt
24
+ Dynamic: license-file
25
+
26
+ # lonoboard
27
+
28
+ [![CI](https://github.com/ztaylor/lonoboard/actions/workflows/ci.yml/badge.svg)](https://github.com/ztaylor/lonoboard/actions/workflows/ci.yml)
29
+
30
+ **A live dashboard for the machines running your AI models, drawn like a 1990s ANSI BBS.**
31
+
32
+ Telnet in, or open a browser, and you get a live board for that machine. It shows the models
33
+ it serves, their memory and GPU use, requests and tokens per second, an event log, and a chat
34
+ window for talking to the models. Everything is drawn in CP437 and the CGA palette, the way
35
+ ACiD and iCE drew it.
36
+
37
+ telnet gpu-box 2323 # any terminal; SyncTERM or NetRunner for the full effect
38
+ http://gpu-box:7777/ # the same board in a browser
39
+
40
+ ![lonoboard: the main screen, the services lightbar and a chat](https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/hero.gif)
41
+
42
+ It works with llama.cpp, Ollama, vLLM and any OpenAI-compatible server. It finds them on its
43
+ own, and you can also list them in a config file. It runs on NVIDIA, AMD, Apple Silicon or a
44
+ plain CPU. It's a single Python program with no dependencies.
45
+
46
+ ## Try it
47
+
48
+ pipx install lonoboard
49
+ lonoboard demo # a simulated machine, with a fake chat
50
+ lonoboard check # what lonoboard finds on this machine
51
+ lonoboard # the real board, on localhost
52
+
53
+ Or try it without installing: `uvx lonoboard demo`.
54
+
55
+ Python 3.11 or newer. Then open <http://localhost:7777/> or run `telnet localhost 2323`.
56
+
57
+ <table>
58
+ <tr><td><img src="https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/main.png" alt="The main screen"></td>
59
+ <td><img src="https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/services.png" alt="Services, with live details"></td></tr>
60
+ <tr><td><img src="https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/chat.png" alt="Chatting with a model"></td>
61
+ <td><img src="https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/usage.png" alt="Requests per hour and the top 10"></td></tr>
62
+ <tr><td><img src="https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/fleet.png" alt="Viewing another machine in the fleet"></td>
63
+ <td><img src="https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/amber.png" alt="Amber monochrome"></td></tr>
64
+ </table>
65
+
66
+ ## The board
67
+
68
+ The board is made of **screens**, each sized to your window:
69
+
70
+ | key | screen | what's on it |
71
+ |-----|----------|--------------|
72
+ | `M` | main | logo, system stats, GPU memory by service, recent requests, the menu, the event log |
73
+ | `S` | services | every model server on a lightbar; on wide windows, slot activity and live details |
74
+ | `H` | host | system stats, memory, GPU, slot activity |
75
+ | `U` | usage | requests per hour over 24 h, and the top 10 by tokens today |
76
+ | `R` | requests | recent requests: tokens, tok/s, prompt size and speed |
77
+ | `E` | events | services coming and going, generations starting and finishing |
78
+ | `N` | network | each service's URLs and API endpoints, other published ports |
79
+ | `F` | fleet | other machines running lonoboard; pick one to view its board |
80
+
81
+ - **Moving around:**
82
+ - A letter jumps to a screen. `←` `→` flip between screens and `esc` goes back to main.
83
+ - `↑` `↓` move the lightbar, `enter` opens the selected item, and `1`–`9` open a service.
84
+ - A screen too tall for the window splits into pages. `space` reads on, `b` goes back.
85
+ - The mouse works: click entries, rows and links, and use the wheel to turn pages.
86
+ - **Details** (`enter` on a service): status, model, context, last request, memory, the systemd
87
+ unit or container, endpoints, launch flags, and a live tail of its log.
88
+ - **Chat** (`c`): talk to any chat model on the machine, and `tab` switches model. Replies
89
+ stream, reasoning collapses into a summary, and `esc` stops a reply. Conversations aren't
90
+ stored.
91
+ - **Display** (`d`):
92
+ - IBM VGA 8x16 or 9x16 font.
93
+ - VGA colour, amber or green monochrome.
94
+ - iCE colours or blink for bright backgrounds.
95
+ - CRT effect.
96
+ - `?` opens help. `q` quits a telnet session after asking first.
97
+
98
+ ### Terminals
99
+
100
+ lonoboard negotiates echo, window size and terminal type, and adapts to what it finds:
101
+
102
+ | terminal | what lonoboard sends |
103
+ |----------|----------------|
104
+ | modern (xterm, kitty, ghostty, WezTerm, PuTTY…) | UTF-8, hyperlinks, mouse reporting and the alternate screen |
105
+ | anything else | classic CP437 ANSI-BBS with iCE colours |
106
+
107
+ Colour depth is chosen separately:
108
+
109
+ | terminal | colours |
110
+ |----------|---------|
111
+ | known to support 24-bit | exact VGA colours |
112
+ | `*-256color` | the nearest xterm-256 colours |
113
+ | everything else | the terminal's own 16 colours |
114
+
115
+ <img src="https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/terminal.png" width="560" alt="The board in a classic 80x25 terminal">
116
+
117
+ In a telnet session, press `d` and then `m` to cycle the colour mode, or `u` to switch between
118
+ UTF-8 and CP437.
119
+
120
+ ## Model servers
121
+
122
+ | server | found by | what lonoboard shows |
123
+ |--------|----------|----------------|
124
+ | llama.cpp | process or port | model, quant, params, context, slots and busy slots, per-request tok/s from its log |
125
+ | Ollama | process or port 11434 | installed and loaded models, VRAM, requests from its log |
126
+ | vLLM | `/metrics` | model, context, running requests, token counters |
127
+ | OpenAI-compatible (LM Studio, …) | port or config | models, health, chat; optional API key |
128
+
129
+ lonoboard finds the systemd unit or Docker container behind each server. That gives it state,
130
+ uptime, restarts and logs. See [docs/sources.md](https://github.com/ztaylor/lonoboard/blob/main/docs/sources.md) for details.
131
+
132
+ **Hardware:**
133
+ - **NVIDIA** via `nvidia-smi`, including unified-memory systems like the DGX Spark.
134
+ - **AMD** via `rocm-smi`.
135
+ - **Apple Silicon** via `ioreg`.
136
+ - **CPU-only.**
137
+
138
+ ## Running it for real
139
+
140
+ lonoboard install --now # a systemd user service running `lonoboard serve`
141
+
142
+ The board listens on **localhost only** until you say otherwise. To reach it from elsewhere:
143
+
144
+ - **Tailscale** (recommended). Keep it on localhost and publish it with `tailscale serve`. lonoboard
145
+ then finds the other machines on your tailnet for the fleet screen.
146
+ - **Your LAN.** Set `listen` and a `password`. lonoboard won't listen beyond localhost or your
147
+ tailnet without one. The password is asked for at a login prompt in the terminal, and the
148
+ API takes it as a bearer token.
149
+
150
+ [SECURITY.md](https://github.com/ztaylor/lonoboard/blob/main/SECURITY.md) covers what the board shows and how it's protected.
151
+
152
+ See [docs/deployment.md](https://github.com/ztaylor/lonoboard/blob/main/docs/deployment.md) for systemd, Tailscale, Docker and deploying to
153
+ several machines over SSH, and [docs/public-demo.md](https://github.com/ztaylor/lonoboard/blob/main/docs/public-demo.md) for hosting a public
154
+ demo board.
155
+
156
+ ## Configuration
157
+
158
+ Nothing needs configuring, but everything can be. Settings go in `~/.config/lonoboard/config.toml`,
159
+ or in a file named by `--config` or `$LONOBOARD_CONFIG`:
160
+
161
+ ```toml
162
+ [board]
163
+ tagline = "the attic box"
164
+
165
+ [[server]]
166
+ name = "lmstudio"
167
+ url = "http://127.0.0.1:1234"
168
+ kind = "openai"
169
+ ```
170
+
171
+ [examples/config.toml](https://github.com/ztaylor/lonoboard/blob/main/examples/config.toml) lists every setting, and
172
+ [docs/configuration.md](https://github.com/ztaylor/lonoboard/blob/main/docs/configuration.md) explains them.
173
+
174
+ ## JSON API
175
+
176
+ Anything that doesn't ask for HTML gets JSON:
177
+
178
+ curl localhost:7777/ # host, services, other ports, fleet
179
+ curl localhost:7777/api/usage # requests per hour, top 10
180
+
181
+ See [docs/api.md](https://github.com/ztaylor/lonoboard/blob/main/docs/api.md) for every endpoint.
182
+
183
+ ## Credits
184
+
185
+ - The fonts are `PxPlus_IBM_VGA_8x16` and `PxPlus_IBM_VGA_9x16`, from
186
+ [The Ultimate Oldschool PC Font Pack](https://int10h.org/oldschool-pc-fonts/) by VileR. They
187
+ are licensed CC BY-SA 4.0 and bundled, so the board works offline.
188
+ - The look is inspired by the ANSI art groups of the 1990s: ACiD, iCE, Blocktronics and the
189
+ rest of the 16colo.rs archive.
190
+
191
+ ## License
192
+
193
+ MIT, see [LICENSE](https://github.com/ztaylor/lonoboard/blob/main/LICENSE). The bundled fonts keep their CC BY-SA 4.0 license.
@@ -0,0 +1,168 @@
1
+ # lonoboard
2
+
3
+ [![CI](https://github.com/ztaylor/lonoboard/actions/workflows/ci.yml/badge.svg)](https://github.com/ztaylor/lonoboard/actions/workflows/ci.yml)
4
+
5
+ **A live dashboard for the machines running your AI models, drawn like a 1990s ANSI BBS.**
6
+
7
+ Telnet in, or open a browser, and you get a live board for that machine. It shows the models
8
+ it serves, their memory and GPU use, requests and tokens per second, an event log, and a chat
9
+ window for talking to the models. Everything is drawn in CP437 and the CGA palette, the way
10
+ ACiD and iCE drew it.
11
+
12
+ telnet gpu-box 2323 # any terminal; SyncTERM or NetRunner for the full effect
13
+ http://gpu-box:7777/ # the same board in a browser
14
+
15
+ ![lonoboard: the main screen, the services lightbar and a chat](https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/hero.gif)
16
+
17
+ It works with llama.cpp, Ollama, vLLM and any OpenAI-compatible server. It finds them on its
18
+ own, and you can also list them in a config file. It runs on NVIDIA, AMD, Apple Silicon or a
19
+ plain CPU. It's a single Python program with no dependencies.
20
+
21
+ ## Try it
22
+
23
+ pipx install lonoboard
24
+ lonoboard demo # a simulated machine, with a fake chat
25
+ lonoboard check # what lonoboard finds on this machine
26
+ lonoboard # the real board, on localhost
27
+
28
+ Or try it without installing: `uvx lonoboard demo`.
29
+
30
+ Python 3.11 or newer. Then open <http://localhost:7777/> or run `telnet localhost 2323`.
31
+
32
+ <table>
33
+ <tr><td><img src="https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/main.png" alt="The main screen"></td>
34
+ <td><img src="https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/services.png" alt="Services, with live details"></td></tr>
35
+ <tr><td><img src="https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/chat.png" alt="Chatting with a model"></td>
36
+ <td><img src="https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/usage.png" alt="Requests per hour and the top 10"></td></tr>
37
+ <tr><td><img src="https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/fleet.png" alt="Viewing another machine in the fleet"></td>
38
+ <td><img src="https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/amber.png" alt="Amber monochrome"></td></tr>
39
+ </table>
40
+
41
+ ## The board
42
+
43
+ The board is made of **screens**, each sized to your window:
44
+
45
+ | key | screen | what's on it |
46
+ |-----|----------|--------------|
47
+ | `M` | main | logo, system stats, GPU memory by service, recent requests, the menu, the event log |
48
+ | `S` | services | every model server on a lightbar; on wide windows, slot activity and live details |
49
+ | `H` | host | system stats, memory, GPU, slot activity |
50
+ | `U` | usage | requests per hour over 24 h, and the top 10 by tokens today |
51
+ | `R` | requests | recent requests: tokens, tok/s, prompt size and speed |
52
+ | `E` | events | services coming and going, generations starting and finishing |
53
+ | `N` | network | each service's URLs and API endpoints, other published ports |
54
+ | `F` | fleet | other machines running lonoboard; pick one to view its board |
55
+
56
+ - **Moving around:**
57
+ - A letter jumps to a screen. `←` `→` flip between screens and `esc` goes back to main.
58
+ - `↑` `↓` move the lightbar, `enter` opens the selected item, and `1`–`9` open a service.
59
+ - A screen too tall for the window splits into pages. `space` reads on, `b` goes back.
60
+ - The mouse works: click entries, rows and links, and use the wheel to turn pages.
61
+ - **Details** (`enter` on a service): status, model, context, last request, memory, the systemd
62
+ unit or container, endpoints, launch flags, and a live tail of its log.
63
+ - **Chat** (`c`): talk to any chat model on the machine, and `tab` switches model. Replies
64
+ stream, reasoning collapses into a summary, and `esc` stops a reply. Conversations aren't
65
+ stored.
66
+ - **Display** (`d`):
67
+ - IBM VGA 8x16 or 9x16 font.
68
+ - VGA colour, amber or green monochrome.
69
+ - iCE colours or blink for bright backgrounds.
70
+ - CRT effect.
71
+ - `?` opens help. `q` quits a telnet session after asking first.
72
+
73
+ ### Terminals
74
+
75
+ lonoboard negotiates echo, window size and terminal type, and adapts to what it finds:
76
+
77
+ | terminal | what lonoboard sends |
78
+ |----------|----------------|
79
+ | modern (xterm, kitty, ghostty, WezTerm, PuTTY…) | UTF-8, hyperlinks, mouse reporting and the alternate screen |
80
+ | anything else | classic CP437 ANSI-BBS with iCE colours |
81
+
82
+ Colour depth is chosen separately:
83
+
84
+ | terminal | colours |
85
+ |----------|---------|
86
+ | known to support 24-bit | exact VGA colours |
87
+ | `*-256color` | the nearest xterm-256 colours |
88
+ | everything else | the terminal's own 16 colours |
89
+
90
+ <img src="https://raw.githubusercontent.com/ztaylor/lonoboard/main/docs/media/terminal.png" width="560" alt="The board in a classic 80x25 terminal">
91
+
92
+ In a telnet session, press `d` and then `m` to cycle the colour mode, or `u` to switch between
93
+ UTF-8 and CP437.
94
+
95
+ ## Model servers
96
+
97
+ | server | found by | what lonoboard shows |
98
+ |--------|----------|----------------|
99
+ | llama.cpp | process or port | model, quant, params, context, slots and busy slots, per-request tok/s from its log |
100
+ | Ollama | process or port 11434 | installed and loaded models, VRAM, requests from its log |
101
+ | vLLM | `/metrics` | model, context, running requests, token counters |
102
+ | OpenAI-compatible (LM Studio, …) | port or config | models, health, chat; optional API key |
103
+
104
+ lonoboard finds the systemd unit or Docker container behind each server. That gives it state,
105
+ uptime, restarts and logs. See [docs/sources.md](https://github.com/ztaylor/lonoboard/blob/main/docs/sources.md) for details.
106
+
107
+ **Hardware:**
108
+ - **NVIDIA** via `nvidia-smi`, including unified-memory systems like the DGX Spark.
109
+ - **AMD** via `rocm-smi`.
110
+ - **Apple Silicon** via `ioreg`.
111
+ - **CPU-only.**
112
+
113
+ ## Running it for real
114
+
115
+ lonoboard install --now # a systemd user service running `lonoboard serve`
116
+
117
+ The board listens on **localhost only** until you say otherwise. To reach it from elsewhere:
118
+
119
+ - **Tailscale** (recommended). Keep it on localhost and publish it with `tailscale serve`. lonoboard
120
+ then finds the other machines on your tailnet for the fleet screen.
121
+ - **Your LAN.** Set `listen` and a `password`. lonoboard won't listen beyond localhost or your
122
+ tailnet without one. The password is asked for at a login prompt in the terminal, and the
123
+ API takes it as a bearer token.
124
+
125
+ [SECURITY.md](https://github.com/ztaylor/lonoboard/blob/main/SECURITY.md) covers what the board shows and how it's protected.
126
+
127
+ See [docs/deployment.md](https://github.com/ztaylor/lonoboard/blob/main/docs/deployment.md) for systemd, Tailscale, Docker and deploying to
128
+ several machines over SSH, and [docs/public-demo.md](https://github.com/ztaylor/lonoboard/blob/main/docs/public-demo.md) for hosting a public
129
+ demo board.
130
+
131
+ ## Configuration
132
+
133
+ Nothing needs configuring, but everything can be. Settings go in `~/.config/lonoboard/config.toml`,
134
+ or in a file named by `--config` or `$LONOBOARD_CONFIG`:
135
+
136
+ ```toml
137
+ [board]
138
+ tagline = "the attic box"
139
+
140
+ [[server]]
141
+ name = "lmstudio"
142
+ url = "http://127.0.0.1:1234"
143
+ kind = "openai"
144
+ ```
145
+
146
+ [examples/config.toml](https://github.com/ztaylor/lonoboard/blob/main/examples/config.toml) lists every setting, and
147
+ [docs/configuration.md](https://github.com/ztaylor/lonoboard/blob/main/docs/configuration.md) explains them.
148
+
149
+ ## JSON API
150
+
151
+ Anything that doesn't ask for HTML gets JSON:
152
+
153
+ curl localhost:7777/ # host, services, other ports, fleet
154
+ curl localhost:7777/api/usage # requests per hour, top 10
155
+
156
+ See [docs/api.md](https://github.com/ztaylor/lonoboard/blob/main/docs/api.md) for every endpoint.
157
+
158
+ ## Credits
159
+
160
+ - The fonts are `PxPlus_IBM_VGA_8x16` and `PxPlus_IBM_VGA_9x16`, from
161
+ [The Ultimate Oldschool PC Font Pack](https://int10h.org/oldschool-pc-fonts/) by VileR. They
162
+ are licensed CC BY-SA 4.0 and bundled, so the board works offline.
163
+ - The look is inspired by the ANSI art groups of the 1990s: ACiD, iCE, Blocktronics and the
164
+ rest of the 16colo.rs archive.
165
+
166
+ ## License
167
+
168
+ MIT, see [LICENSE](https://github.com/ztaylor/lonoboard/blob/main/LICENSE). The bundled fonts keep their CC BY-SA 4.0 license.
@@ -0,0 +1,43 @@
1
+ [build-system]
2
+ requires = ["setuptools>=77"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "lonoboard"
7
+ description = "A live dashboard for the machines running your AI models, drawn like a 1990s ANSI BBS"
8
+ readme = "README.md"
9
+ license = "MIT"
10
+ license-files = ["LICENSE", "src/lonoboard/static/fonts/LICENSE-CC-BY-SA-4.0.txt"]
11
+ requires-python = ">=3.11"
12
+ dependencies = []
13
+ dynamic = ["version"]
14
+ keywords = ["bbs", "ansi", "ansi-art", "telnet", "llama.cpp", "ollama", "vllm", "llm", "dashboard", "homelab"]
15
+ classifiers = [
16
+ "Development Status :: 3 - Alpha",
17
+ "Environment :: Console",
18
+ "Environment :: Web Environment",
19
+ "Intended Audience :: Developers",
20
+ "Intended Audience :: System Administrators",
21
+ "Operating System :: POSIX :: Linux",
22
+ "Operating System :: MacOS",
23
+ "Programming Language :: Python :: 3",
24
+ "Topic :: Terminals :: Telnet",
25
+ "Topic :: System :: Monitoring",
26
+ ]
27
+
28
+ [project.urls]
29
+ Homepage = "https://github.com/ztaylor/lonoboard"
30
+ Issues = "https://github.com/ztaylor/lonoboard/issues"
31
+ Changelog = "https://github.com/ztaylor/lonoboard/blob/main/CHANGELOG.md"
32
+
33
+ [project.scripts]
34
+ lonoboard = "lonoboard.cli:main"
35
+
36
+ [tool.setuptools.dynamic]
37
+ version = { attr = "lonoboard.__version__" }
38
+
39
+ [tool.setuptools.packages.find]
40
+ where = ["src"]
41
+
42
+ [tool.setuptools.package-data]
43
+ lonoboard = ["static/*.html", "static/fonts/*"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,3 @@
1
+ """lonoboard: a live dashboard for the machines running your AI models, drawn like a 1990s ANSI BBS."""
2
+
3
+ __version__ = "0.1.0"
@@ -0,0 +1,3 @@
1
+ from lonoboard.cli import main
2
+
3
+ main()
@@ -0,0 +1,2 @@
1
+ """The board: lonoboard's text-mode application, served over telnet and to the web terminal."""
2
+ from lonoboard.board.session import Board, Session # noqa: F401