File size: 4,054 Bytes
28c70af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# `sAGI/console.py` — the bankML console: bankML as itself, and what it measures

## Summary

The console (0.3.7) is a small page with four tabs over `bankml serve`: **Interaction** (ask; the streamed answer and its
receipt), **Admin** (CPU, RAM and GPU sliders and D3 charts of measured use), **Logging** (every exchange) and
**Infotags** (iNFT publication metadata). It talks to bankML as itself — `sAGI/personas/bankml.persona` — and gives that
persona a SELF block measured at each question, so what bankML says about its own tokens, speed, load and power is
measurement, not invention.

## Technical usage

```sh
python3 sAGI/console.py [--host 127.0.0.1] [--port 7875]   # loopback hosts only; bankml serve at $BANKML_SERVE_LISTEN (127.0.0.1:18093)
```

| route | what |
|---|---|
| `GET /`, `/app.js`, `/style.css`, `/vendor/d3.v7.min.js`, `/vendor/d3.LICENSE` | the page and its assets (D3 v7.9.0, ISC, vendored) |
| `GET /api/state` | `/bankml`, `/bankml/usage`, `/bankml/metrics`, the saved resources, the persona and its doctrine root, the SELF block |
| `POST /api/ask` `{"message", "history"?, "max_tokens"?, "temperature"?, "top_k"?, "top_p"?, "min_p"?, "repeat_penalty"?, "seed"?}` | NDJSON: `{"piece"}` lines, then `{"done", "error", "receipt", "metrics", "answer_sha256_ok"}`; the exchange (question, answer, receipt, the engine's metrics record, the SELF block it was asked with) is appended to `$BANKML_UI_STATE/console.jsonl` |
| `POST /api/resources` `{"threads", "ram_gb", "gpu_limit"}` | one verified restart of the native engine with rollback (`models.apply_resources`) |
| `GET /api/log` | the last 200 exchanges and the engine log's tail |
| `GET /api/infotags` | ERC-721 metadata: name, description, `attributes`, and the RFC 6962 root and CIDs |

`/api/ask` sends the persona's system prompt with the SELF block appended, the last 12 user and assistant turns of
`history`, and the question to `/v1/chat/completions` (streamed, `max_tokens` 256 unless set). The SELF block is
rendered for the model as one sentence per measurement with its unit (`self_text`), "not measured" for a `null` — a
bare JSON key (`last_eval_tps`) was read as seconds in testing.

## How it is verified

`testing/test_console.py` (18 checks, in the gate, no engine needed): every asset served; the CSP; unknown paths 404; a foreign
`Host` 403; a cross-origin POST 403; a non-JSON POST 400; an empty question 400; SELF says "not measured" without an engine and names units
with one; the Infotags root equals `savante.merkle_root` over the log's exact lines. Live on Bonsai-1.7B: "I am bankML…",
its token totals and generation speed read correctly from SELF, and every receipt's sha256 matches the streamed text.

## Advantages and efficiency

- **No framework, no network.** Python's standard library and one vendored D3; CSP `default-src 'none'` with `'self'`.
- **Safe controls.** The sliders restart the engine through the importer's verified switch with rollback; the console
  refuses any host but loopback, because it can restart the engine.
- **Proof without disclosure.** The exchanges stay on disk; Infotags publishes their Merkle root and CID, as Savante's
  `.history` commitments do.
- **The persona's prompt is cached.** The persona comes first and the SELF block last, so after the first question the
  engine reuses the persona's prefix (first answer 37 s, then 16 s to the first token on Bonsai-1.7B).

## Limitations

- The persona's system prompt is about 550 tokens: the first question of a session pays for it on the CPU.
- It forwards only `temperature`, `top_k`, `top_p`, `min_p`, `repeat_penalty` and `seed`; the rest of the 0.3.7
  sampler chain and logprobs are reachable through `/v1` directly, not from the page. One conversation at a time
  (bankML's single slot; requests sent together are answered in turn).
- The page has no DeltaVerse substrate background yet.

## See also

[metrics.md](metrics.md) · [gpu.md](gpu.md) · [sys.md](sys.md) · [../usage.md](../usage.md) §6c · [../install.md](../install.md)