deploy/openai_server_push.py: launch_openai_server serves a LoRA natively over
the base (vLLM --enable-lora --lora-modules, SGLang --enable-lora --lora-paths)
or merged (--merge, merge_lora_adapter); builds the exact argv; launches in its
own session with server.log / server.pid / launch.json under
out/runs/<run>/serve/<to>/; polls /v1/models (+ vLLM /health) until the tag is
listed; optionally swaps mindX's fallback (provider vllm|sglang).
stop_openai_server SIGTERMs the process group and verifies it is gone. CPU
hosts get bfloat16, VLLM_CPU_KVCACHE_SPACE, SGLang --device cpu; quantized
checkpoints and tensor_parallel > 1 are refused without a GPU; a missing server
is reported with its install hint. Results never raise.
CLI: --dry-run, --stop, --merge, --host, --port, --dtype, --server-bin,
--server-arg, --ready-timeout, --cpu-kvcache-gib. Gradio Serve room offers
sglang. Docs: docs/serve.md (flag provenance), cli.md, README, NAV, CHANGELOG,
llm.txt. Tests: 21 new (Popen/which monkey…
bankml: the verified CPU engine as backend, serve target and imprint probe
bankml (github.com/cryptoAGI/bankml) is reached over HTTP and its CLI only;
nothing is vendored.
- operator/backends/bankml.py: @register_backend("bankml"), default
MINDXTRAIN_BANKML_BASE_URL http://127.0.0.1:18093/v1; keeps the
bankml_receipt (ChatResponse.receipt, last_receipt for streams); HTTP 400
becomes BankmlRefusal(reason) and is never retried with altered params.
- operator: backend_kwargs() replaces the duplicated per-backend branches in
app.py and coach/api.py; GET /bankml + /v1/models health probes;
auto-detect tries bankml only after ollama and vllm; the governance panel
env chain gains MINDXTRAIN_BANKML_BASE_URL last, only when set.
- deploy/bankml_push.py + `serve --to bankml`: merge -> Modelfile through
bankml_sanitize (refuses ADAPTER, a foreign TEMPLATE, penalties, mirostat,
typical_p, resource params; never drops them) -> bankml create; records
the model sha256; refuses quantized configs and non-Llama archs; a bankml
without create/convert (pre-0…
v1.0.4 — close the limitations 1.0.3 listed, and correct the ones it overstated
Correction first: 1.0.3 called every write endpoint and SSE-under-a-real-producer untested. True of its probes, not of the project — the suite already covers both (test_runs_sse.py and a dozen test_coach_*_api.py), and it passed on the refreshed lock. A new module written for those endpoints was deleted once that was checked, rather than shipped as duplicate coverage.
Real gaps closed: the Gradio surface is tested (Blocks tree built, rooms and version parity checked, launched for real under gradio 6.27) and had no coverage at all; the Hub tests no longer trust the environment for the missing-dependency path (they inverted silently once the ui extra brought huggingface-hub in); httpx2 joins the dev group so starlette 1.6 stops deprecating TestClient.
Training path verified under the refreshed lock: dream corpus tokenized, SFT run on CPU (loss 3.938, 512 tokens), a real 22 MB LoRA checkpoint written. 767 pass with the ml extra. ROCm/MI300X, multi-GPU, vLLM serving, full-length runs and…
v1.0.3 — refresh uv.lock, and say exactly what that was tested against
The lock had drifted from pyproject, so every `uv run` re-resolved first (~2.5 min a call). Refreshed: 296 -> 306 packages, 23 changed — starlette 0.52.1 -> 1.6.0 (major), huggingface-hub 1.14.0 -> 1.31.0, gradio 6.27.0 new via all->ui, and three moving BACKWARDS (pydantic 2.13.3 -> 2.12.5, pydantic-core, inspect-ai) by resolver choice rather than any declared constraint.
Tested in a separate environment against both stacks: 765 pass on each; the coach booted under real uvicorn and 37 read-only probes returned identical status codes and identical response sizes — pages, JSON API, static mount, OpenAPI (64 paths), diagnostics, the traversal guard at 400, and SSE. Zero server errors either side.
Not tested, and written into the changelog rather than implied: every write endpoint, SSE under a real producer, the training path (no ml extra on that box), the Gradio UI. `uv run` syncs the environment, so moving a node to this commit rewrites its venv on the next call — the production node i…
v1.0.2 — the Hub is reachable from the command line, and is not a chain
The hf/ extension existed and was complete, but nothing outside a Python import could reach it. New `mindxtrain hf` group: whoami / pull / warm / publish / lineage / dataset / space, each exiting nonzero when the result says ok:false so the ascent loop can warm a base and check $?.
huggingface-hub moves out of the `chain` extra into its own `hf` extra — reaching the Hub no longer means installing web3 and the Algorand SDK. `chain` pulls `mindxtrain[hf]` so existing installs keep working.
push_space dropped its commit receipt; it reports it now. First tests for the module.
765 tests pass (was 750).
v1.0.1 — a failed attempt no longer strands HEAD on a loser
An attempt that raised after its edit was committed left the branch on a commit the loop never scored, so the next baseline read the loser. The champion is restored on the way out — and the restore declines when the tree is dirty outside the editable allowlist, because a `reset --hard` that discards somebody else's work to tidy up after ourselves is worse than the mess.
Also: ui/metrics.py brought in line with the house lint, version bumped in all three places it is declared, NAV points at the new entry, and the accumulated [Unreleased] changelog block is released as part of 1.0.1.
750 tests pass (was 748).
autoresearch: the keep/reset search, and the UI modules that were never shipped
The `research` CLI command shipped without the package it imports; this lands the whole feature (contract, git fence, attempt runner, durable ledger, keep/reset search, Base anchor + registry, coach observer, k8s job, Ollama console + reasoning pass).
Audit fixes: the default editor no longer corrupts a non-flat TOML; mindxtrain.ui resolves its Gradio-backed exports lazily so console/reasoning/parse_log stay base-install importable; the contradiction check is symmetric; new files are ruff clean.
748 tests pass (was 728).
fork mindXtrain from GitHub (Professor-Codephreak/mindXtrain@661bd41) as the mindX-specific line