Skip to content

Releases

mlx-reason-ct 0.6.0

Choose a tag to compare

@sandovaljoseph sandovaljoseph released this 10 Nov 23:17

Breaking changes

bfloat16_fast is the default precision, and the float32 and bfloat16_fp32 profiles are removed. NV-Reason-CT is a BF16 model and both removed profiles already read its BF16 weights; asking for them now raises InvalidInputError. bfloat16 remains for NVIDIA's BF16 arithmetic reproduced step by step.

-generate_report("ct.nii.gz", "outputs", model_dir="models", precision="float32")
+generate_report("ct.nii.gz", "outputs", model_dir="models")

Without a prompt, reports are requested in the NV-Reason-CT model card's words, so the report generated without a prompt changes. The request is now "Write a structured chest CT report." or "Write a structured abdominal CT report." instead of "write a structured chest CT report" or "write a structured abdomen CT report", and "Write a structured CT report." without a region. This is the same request mc-nv-reason-ct sends on CUDA.

Fixes

Prompts with tools now match NV-Reason-CT's processor token for token. 0.4.x sorted the schema keys and escaped <, >, & and ', which lengthened the prompt and could change the answer. Prompts without tools are unchanged.

Tool-call response choices containing <tool_call> pass the new response check. The check in the v0.5.0 tag, which was not published to PyPI, rejected them, so reason-ct-tools stopped at its first decision.

If writing an output fails partway, the previous report, response and run files are restored instead of leaving a mixed set.

Report, response and run files are written with 0600 permissions, and a symlink at an output path is replaced instead of followed.

A missing or malformed mlx/manifest.json raises InvalidInputError in mlx-reason-ct verify, instead of FileNotFoundError or JSONDecodeError.

Faster

Prompt processing takes half as long. On an M5 Max with a LUNA16 chest CT, prefill takes 6.2 s instead of 11.9 s and a full report 12.4 s instead of 17.9 s, with the same report text. Measurements

Peak memory drops from 14.4 GB to about 12.5 GB. Visual weights are released once the CT is encoded, and prompt processing runs in bounded blocks. medmlx users get 0.6.0 with medmlx 0.7.0.

mlx-reason-ct 0.4.1

Choose a tag to compare

@sandovaljoseph sandovaljoseph released this 07 Nov 20:47

medmlx no longer refuses Reason-CT on Macs with about 15 to 23 GB of free memory. 0.4.0 still declared the 22.7 GB peak from before its memory reduction; a chest or abdominal CT report peaks at 14.4 GB, and the runtime now declares 14.5 GB.

mlx-reason-ct 0.4.0

Choose a tag to compare

@sandovaljoseph sandovaljoseph released this 04 Nov 21:47

Fixes

Process memory no longer balloons during one-shot reports. generate_report, run and the CLI now grow the KV cache in preallocated 256-token chunks instead of reallocating it for every token at the ~14k-token CT context. Peak MLX memory for a float32 chest report is about 13.7 GB.

New

--precision bfloat16_fast is the fastest profile. It uses BF16 operands for the CT and prompt and FP32 for generated tokens, the LM head, norms, attention and caches. Its text can differ from float32 where the two most likely tokens nearly tie.

Faster

float32 reports take about 0.6x the time of 0.3.6, with bit-identical output (chest report, M5 Max). Decoder weights are held as their exact BF16 source values, and a matching kernel halves the bytes read per generated token.

mlx-reason-ct 0.3.6

Choose a tag to compare

@sandovaljoseph sandovaljoseph released this 01 Nov 03:52

First release: generate reports and ask questions about 3D chest and abdomen CT, locally on Apple Silicon.