- cache_test.go (10): KVCache and RotatingKVCache — creation, single/multi update, bounded sliding window, reset, state access - sample_test.go (8): greedy, temperature (high/low), topK (single/multi), chain composition, TopP/MinP stub pass-through - tokenizer_test.go (15): Load (valid/missing/invalid), BOS/EOS detection, encode produces tokens, decode skips specials, decode regular tokens, DecodeToken (regular/special/space/unknown), FormatGemmaPrompt, GPT-2 byte maps (round-trip, printable ASCII, control chars) Total test count: 29 → 148 across 10 test files. Co-Authored-By: Virgil <virgil@lethean.io> Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 KiB
2 KiB
TODO.md — go-mlx C++ Task Queue
Tasks for the CLion Claude session. Written by GoLand Claude or Virgil.
Orientation (First Session)
- Map the mlx-c API surface — Read all 27 headers in
build/_deps/mlx-c-src/mlx/c/. Document which functions the Go side currently binds (cross-reference with Go files) vs which are available but unused. Priority headers:ops.h,fast.h,array.h,transforms.h. - Understand the error model —
error.hprovidesmlx_set_error_handler(). The Go side registers a handler that logs to stderr. Research: can we get structured error info (error codes, categories)? Is the error string stable or does it vary? - Check memory management patterns —
mlx_*_free()functions exist for each type. Verify: is double-free safe? What happens if you free during async eval? Document for the Go finaliser integration.
Priority Tasks (from GoLand Claude)
- Find
mlx_contiguousor equivalent —Floats()/DataInt32()on non-contiguous arrays (transpose, broadcast, slice views) returns wrong data becausemlx_array_data_float32returns the physical buffer, not the logical layout. Need a C function that copies a non-contiguous array to contiguous memory. Check ifmlx_contiguousexists in mlx-c headers or if we needmlx_reshapeto force a copy. This is a data correctness bug — see FINDINGS.md in project root. - Verify
mlx_array_data_*eval semantics — Doesmlx_array_data_float32()trigger evaluation (like C++array::data()does), or must we callmlx_evalfirst? The Go side callsMaterialize()before data access but some code paths might skip it.
Standing Tasks
- API gap analysis — When the GoLand Claude needs a C function that isn't exposed by mlx-c, document the gap here and research if upstream mlx-c supports it or if a patch is needed.
Workflow
- GoLand Claude or Virgil writes tasks here
- Pick up in order, mark
[x]when done - New findings →
cpp/FINDINGS.md - If Go changes needed → note in FINDINGS.md for GoLand Claude