Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
446 commits
Select commit Hold shift + click to select a range
f81f447
perf(probe): pre-size NewProbeBus sinks slice — half allocs at 4 sinks
Snider May 27, 2026
45aa062
perf(openai): tighten chunkSSEFrameSize estimate — 192/208-byte alloc…
Snider May 27, 2026
ba76625
perf(discover): cache pathSeparator() via sync.Once — 15-23% faster o…
Snider May 27, 2026
133123d
perf(quant/jang): hoist ProfileBits resolution out of bitsForRole loop
Snider May 27, 2026
fb49548
perf(quant/jang): share lowered fingerprint between quantizationType …
Snider May 27, 2026
4779347
perf(parser): drop ParseReasoning to 2 allocs/op via pre-grown visibl…
Snider May 30, 2026
26bd964
perf(parser): cut ParseTools allocs via RawMessage arguments (no deco…
Snider May 30, 2026
4092fb5
perf(scheduler): fuse generateOptions to one closure + cache greedy s…
Snider May 30, 2026
92ba626
chore(deps): bump core/go → v0.10.3
Snider May 31, 2026
293d4a9
feat(anthropic): spec-compliant Messages streaming event builders
Snider Jun 2, 2026
d11c677
fix(openai): recognise gemma4 <channel|> close so reasoning answers r…
Snider Jun 3, 2026
a3f5d8c
feat(openai): thinking on/off request surface (chat_template_kwargs +…
Snider Jun 3, 2026
cb0e9a4
fix(options): stop defaulting MaxTokens — it is not a thing to default
Snider Jun 6, 2026
1f95107
feat(openai): multimodal content parts — image_url intake for vision …
Snider Jun 12, 2026
5b897b1
feat(openai): thinking_budget request surface — cap thought-channel t…
Snider Jun 13, 2026
3e1ce31
chore(deps): bump dappco.re/go v0.10.3 → v0.10.4
Snider Jun 13, 2026
d427d53
feat(classify): add 1B-model classify/calibrate/validate tooling
Snider Jun 21, 2026
1e9406a
feat(stream): streaming event taxonomy + assembler
Snider Jun 21, 2026
842bd52
feat(retry,modality,embed,respcache): inference-serving primitives
Snider Jun 21, 2026
5c501c6
refactor(inference): TextModel/Backend interface returns core.Result
Snider Jun 21, 2026
680f3e0
feat(inference): lift 16 serving primitives from go-ai (Tier B)
Snider Jun 21, 2026
0ccf0f9
feat(inference): lift openai provider backend from go-ai (Tier B final)
Snider Jun 21, 2026
21d7b47
feat(inference): lift 7 serving primitives from go-ai (Tier C)
Snider Jun 21, 2026
dec44a9
feat(inference): absorb go-ai serving layer + facade (ceiling break)
Snider Jun 21, 2026
183c9a2
feat(inference): absorb go-ai mcp service (core+inference only)
Snider Jun 21, 2026
f371ad1
build(inference): wire api/io/rag/ratelimit dev externals into workspace
Snider Jun 27, 2026
8e35ab1
feat(inference): lift weightsync from go-ml (Tier 1)
Snider Jun 27, 2026
52a2058
feat(inference): lift registry from go-ml (Tier 1)
Snider Jun 27, 2026
f405302
feat(inference): lift datapipe from go-ml (Tier 1)
Snider Jun 27, 2026
d24ac78
feat(inference): fold quantfmt into go/quant (Tier 2)
Snider Jun 27, 2026
fc379ca
feat(inference): lift serving layer from go-ml (serving core)
Snider Jun 27, 2026
7cda9b7
feat(inference): relocate metrics push into datapipe (Tier 2)
Snider Jun 27, 2026
2da8159
feat(inference): lift scoring suite into go/score (Tier 2)
Snider Jun 27, 2026
16760ce
feat(inference): lift go-ml eval as go/experiments (Tier 2)
Snider Jun 27, 2026
88f7551
feat(inference): lift capability probing into go/capability (Tier 3)
Snider Jun 27, 2026
1c48eee
feat(inference): lift model management into go/modelmgmt (Tier 3)
Snider Jun 27, 2026
96a9556
feat(inference): lift agent orchestrator into go/agent (Tier 5)
Snider Jun 27, 2026
10324b6
feat(inference): reconcile go-ml io.go into go/score (Tier 6)
Snider Jun 27, 2026
8f85db7
feat(inference): lift ML service facade into go/mlservice (Tier 6)
Snider Jun 27, 2026
f031af9
feat(inference): reconcile ML HTTP routes into go/api (Tier 6)
Snider Jun 27, 2026
003b33e
feat(inference): lift ML MCP subsystem into go/mlservice/mcp (Tier 6)
Snider Jun 27, 2026
c6767f7
refactor(mcp): adopt core/mcp for the ML subsystem (consolidation #9)
Snider Jun 27, 2026
7d41f26
refactor(inference): renamespace go-ml/go-ai origin artifacts
Snider Jun 27, 2026
ca4eafc
refactor(provider): consolidate vendor clients under provider/ (#10)
Snider Jun 27, 2026
d0fa610
refactor(agent): worker uses serving.HTTPBackend, not an ad-hoc clien…
Snider Jun 27, 2026
0246cff
refactor(mcp): retire go-ai's custom-jsonrpc go/mcp (#9 complete)
Snider Jun 27, 2026
aa2af2e
refactor(serving): HTTPBackend uses the shared provider/openai codec …
Snider Jun 27, 2026
09958d9
chore(inference): drop committed 8.4MB test binary + ignore build art…
Snider Jun 27, 2026
27a1b54
chore(inference): idiom + test-smell cleanup (audit #2/#3)
Snider Jun 27, 2026
4e16bfc
test(eval): add unit tests, 0.0% -> 71.8% coverage
Snider Jun 27, 2026
740771d
perf(stream): lazy tool-index map + presize Collect accumulator
Snider Jun 28, 2026
53e2fb7
perf(prompt): zero-alloc placeholder tokens + single scan per turn
Snider Jun 28, 2026
6059c6d
perf(parse): strconv.ParseFloat for numbers + presize call/array slices
Snider Jun 28, 2026
b0ae072
perf(provider/openai): presize JSON array walkers (DecodeRequest path)
Snider Jun 28, 2026
f297da0
perf(jsonenc): decode-side string/array allocs (Builder + presize)
Snider Jun 28, 2026
a199303
perf(chat): drop discarded FallbackChain allocs + presize Message.Text
Snider Jun 28, 2026
6457078
perf(quant): exact-sized Builder for QuantInfo.String (drop concat ch…
Snider Jun 28, 2026
2a92fac
perf(scheduler): route default-sampler Generate/Chat through the gree…
Snider Jun 28, 2026
4145655
perf(radix): lazy children map + share immutable edge backing on split
Snider Jun 28, 2026
cfb811b
perf(session): drop Continue's double clone + exact-size Append grow
Snider Jun 28, 2026
91a3b7e
perf(parser): single reasoning accumulator + drop per-call Family Concat
Snider Jun 28, 2026
8769936
test(state): benchmarks for BorrowBytes/BorrowRefBytes (coverage; pac…
Snider Jun 28, 2026
e92bedb
perf(score): hoist extractJSON regex + ASCII fold + single-pass dedup
Snider Jun 28, 2026
a763812
perf(serving): zero-copy request/response bodies + presize convertOpt…
Snider Jun 28, 2026
7caad72
perf(classify): on-demand scan buffer + concat over Sprintf + zero-co…
Snider Jun 28, 2026
c47f8b8
perf(pipeline): hoist invariant steer msg + presize session/userTurns
Snider Jun 28, 2026
14cf403
perf(datapipe): on-demand scan buffers + hoist per-row slices + concat
Snider Jun 28, 2026
c62c4c7
perf(ai): index-sort routing candidates (drop per-comparison string key)
Snider Jun 28, 2026
5d62c5b
test(driver): dispatch-path benchmarks (coverage; package at floor)
Snider Jun 28, 2026
bd59f69
perf(lora): cache immutable adapter ID + slices.SortFunc in List
Snider Jun 28, 2026
14c1b13
perf(chathistory): scan into slice backing slot, hoist per-row scratch
Snider Jun 28, 2026
d6744b5
perf(agent): hoist/presize across eval+influx push paths + in-place c…
Snider Jun 28, 2026
f8bc324
perf(modelmgmt): hoist gguf regex + drop redundant header copies + pr…
Snider Jun 28, 2026
319152b
perf(registry): drop Put alias-slice + slices.SortFunc over sort.Slice
Snider Jun 28, 2026
558f377
test(api): provider + routes benchmarks (coverage; package at floor)
Snider Jun 28, 2026
35d4e82
perf(kvtier): allocation-free rebalance via reused under-mutex scratch
Snider Jun 28, 2026
1b61ccc
perf(capability): hoist 19 per-call constant regexes (the cross-packa…
Snider Jun 28, 2026
a9ac7d6
perf(mlservice): presize dedupe/Backends + zero-copy body conversions
Snider Jun 28, 2026
078b12f
perf(model/pack): presize Hash metadata-file slice
Snider Jun 28, 2026
b30d397
perf(agent): hoist DiscoverCheckpointsIter's per-call regex to a pack…
Snider Jun 28, 2026
7ba8f51
test(structured): Parse/Validate/ParseWithRepair benchmarks (coverage…
Snider Jun 28, 2026
dba3fd1
test(ngram): per-token Draft/DraftNext + Update benchmarks (coverage;…
Snider Jun 28, 2026
28627c4
perf(fusion): presize synthesis prompt + non-capturing panel goroutines
Snider Jun 28, 2026
a923e1a
perf(transform): reuse scratch buffer across MiddleOut shrink iterations
Snider Jun 28, 2026
8d79410
perf(tools): non-capturing goroutine in Dispatch parallel path
Snider Jun 28, 2026
1553bde
perf(respcache): skip the stop-list copy when already sorted
Snider Jun 28, 2026
22aeb2d
perf(modality): presize Assemble text concat (drop intermediate slice)
Snider Jun 28, 2026
da11744
test(retry): Do/Classify benchmarks (coverage; hot path alloc-free)
Snider Jun 28, 2026
66f3e3c
test(welfare): Detect/Guard/Mediate benchmarks (coverage; own code at…
Snider Jun 28, 2026
1e208bc
perf(sessionkv): struct response bodies over gin.H maps
Snider Jun 28, 2026
33ad1bc
test(batch): Run/RunAsCompleted/TokenBucket benchmarks (coverage; at …
Snider Jun 28, 2026
6616140
perf(welfare/slurs): tokenise via sub-slice views (drop scratch buffe…
Snider Jun 28, 2026
f61f850
test(safety): Decide/Mark/IsDisclosed benchmarks (coverage; at floor)
Snider Jun 28, 2026
a0e94c4
test(usage): Add/Sum/Cost/Normalise benchmarks (coverage; alloc-free)
Snider Jun 28, 2026
427262b
test(budget): Decide/FitsWindow/FitsMemory benchmarks (coverage; hot …
Snider Jun 28, 2026
bbddbf3
test(embed): EmbedBatched/RerankTopK/Cosine benchmarks (coverage)
Snider Jun 29, 2026
6f3d079
test(experiments): evaluator + MemStore list benchmarks (coverage)
Snider Jun 29, 2026
649a8ac
test(mlservice/mcp): ML subsystem tool benchmarks (coverage)
Snider Jun 29, 2026
83163f0
perf(schedule): presize per-seq token buffer — Run 259->67 allocs/op …
Snider Jun 29, 2026
802330d
perf(experiments): presize ListFeedback + slices.SortFunc — 11->1 all…
Snider Jun 29, 2026
dd589d4
perf(embed): slices.SortStableFunc in RerankTopK — 3->0 allocs/op
Snider Jun 29, 2026
ad21bb2
perf(residency): slices.SortFunc in planEviction — Touch evict 4->1 a…
Snider Jun 29, 2026
9e77703
perf(lab): hoist constant bodies + per-wrap auth header (AX-11)
Snider Jun 29, 2026
6c302c4
perf(mlservice/mcp): presize mlProbe results slice — 53->48 allocs/op
Snider Jun 29, 2026
980aa29
test(creds): Resolve/Allows/String benchmarks (coverage; hot path all…
Snider Jun 29, 2026
d92daaa
test(obs): StartRun/Finish/MeanByKey benchmarks (coverage)
Snider Jun 29, 2026
84b365c
test(specctl): Record/NextLength/AcceptRate benchmarks (coverage; all…
Snider Jun 29, 2026
e7d5398
test(weightsync): Update/Begin/End benchmarks (coverage; alloc-free)
Snider Jun 29, 2026
c6f2de8
perf(schedule): slab the Seqs + alias the queue — Run 67->35 allocs/o…
Snider Jun 29, 2026
53a2781
perf(schedule): slab the token output buffers — Run 35->4 allocs/op (…
Snider Jun 29, 2026
6861a7f
refactor(state/filestore): split 1612-LOC store.go into one-concern-p…
Snider Jun 29, 2026
4cad4a5
refactor(provider/openai): split 1157-LOC openai.go into one-concern-…
Snider Jun 29, 2026
a193540
refactor(parse): split parse.go into tool-call + reasoning concerns (…
Snider Jun 29, 2026
ca13e8d
refactor(lora): split lora.go into one-concern-per-file (AX-3/AX-7)
Snider Jun 29, 2026
39ee78e
feat(inference): min_p / seed / suppress-tokens / min-tokens-before-s…
Snider Jul 1, 2026
2621595
feat(hf): port HuggingFace Hub client + cache resolver up from go-mlx…
Snider Jul 1, 2026
cb27767
feat(lora): fold LoRA adapter config + inspect up from go-mlx (engine…
Snider Jul 1, 2026
04b8d0e
feat(state): add engine-agnostic artifact envelope up from go-mlx
Snider Jul 1, 2026
00dda62
feat(modelmgmt): add engine-agnostic EPUB3 model-book exporter up fro…
Snider Jul 1, 2026
be59af7
feat(dataset): add JSONL loader + sampling up from go-mlx (engine-agn…
Snider Jul 1, 2026
f4c46db
feat(lora): bridge AdapterInfo to state.AdapterIdentity (bundle push-up)
Snider Jul 1, 2026
b54b86b
feat(merge): add engine-agnostic model-merge + compare up from go-mlx
Snider Jul 1, 2026
4bf1388
feat(distill): add engine-agnostic distillation loss + checkpoint up …
Snider Jul 1, 2026
11a692b
feat(grpo): add engine-agnostic GRPO reward/advantage + checkpoint up…
Snider Jul 1, 2026
8f45540
feat(gguf): add engine-agnostic GGUF parse + quantise up from go-mlx
Snider Jul 1, 2026
5e72c45
feat(train): add engine-agnostic SFT checkpoint + SSD code-benchmark …
Snider Jul 1, 2026
4214201
refactor(gguf): one wire engine — safetensors leaf pkg, root+modelmgm…
Snider Jul 2, 2026
575a11a
test(driver): hermetic lifecycle coverage 9.9% -> 92.8% — fake-binary…
Snider Jul 2, 2026
b0b0ff2
refactor(checkpoint): shared sidecar engine + AdapterInfo vocabulary …
Snider Jul 2, 2026
1bc0afd
feat(sampling): recover orphaned min_p wire threading + InMemoryStore…
Snider Jul 2, 2026
902c8aa
test(chathistory): conversation-persistence coverage 60.5% -> 90.5% —…
Snider Jul 2, 2026
e12ea0a
test(mlservice/mcp): MCP tool-surface coverage 57.4% -> 95.7% via exi…
Snider Jul 2, 2026
918a1c7
test(quant): codebook 64.2% -> 100%, jang 67% -> 99.4% — round-trips,…
Snider Jul 2, 2026
1091e54
test(lab,model-pack): dashboard command 35.5% -> 94.8%, pack CLI 0% -…
Snider Jul 2, 2026
aa25585
test(state/filestore): durable-store coverage 68.8% -> 96.5% — fault …
Snider Jul 2, 2026
dfd6a44
test(module): adjudicate 101 flagged tests — zero fakes found, 100 ho…
Snider Jul 2, 2026
68e67a5
feat(scheme,gguf): relocate the scheme contract layer up + export the…
Snider Jul 2, 2026
e4a7175
feat(merge): export SamePath/SamePathResolved/CopyModelPackMetadata/H…
Snider Jul 2, 2026
8e5456b
feat(modelmgmt,dataset,safetensors): three engine-flagged niceties
Snider Jul 2, 2026
23c3f0f
test(state,eval): both to 100.0% — the wake/sleep contracts and eval …
Snider Jul 2, 2026
0baca70
test(agent): checkpoint-evaluation agent 71.2% -> 97.0% — the eval pi…
Snider Jul 2, 2026
0a16f1d
test(provider): ollama 71.8% -> 100.0%, openai 73.6% -> 99.1% — wire …
Snider Jul 2, 2026
046a0c3
fix(gguf): MXFP4/NVFP4 tensor-type IDs off by one — conflated ggml_ty…
Snider Jul 3, 2026
f21bacd
docs(inference): engine-merge design — serving's shape wins the compo…
Snider Jul 4, 2026
c26f8a8
feat(inference): speculative-decode metrics + device-info contracts (…
Snider Jul 4, 2026
e2125c0
feat(inference): lift kv from go-mlx (engine-merge Tier 1)
Snider Jul 4, 2026
7cb4bb0
feat(inference): KV-state capability contracts in kv.Snapshot terms (…
Snider Jul 4, 2026
c7777c3
docs(inference): spine + session file-level triage — wave-ordered exe…
Snider Jul 4, 2026
e76877c
feat(inference): config reconcile root side — GenerateConfig grows th…
Snider Jul 4, 2026
31e0434
feat(inference): lift bundle from go-mlx (engine-merge Tier 1)
Snider Jul 4, 2026
f5eeb5b
Merge branch 'lift/bundle' into dev
Snider Jul 4, 2026
8cd9e74
feat(inference): lift probe from go-mlx (engine-merge Tier 1)
Snider Jul 4, 2026
8b0ce0d
feat(inference): lift blockcache from go-mlx (engine-merge Tier 1)
Snider Jul 4, 2026
37a54c6
feat(inference): lift spine (partial) from go-mlx (engine-merge Tier 1)
Snider Jul 4, 2026
1492898
Merge branch 'lift/probe-spine' into dev
Snider Jul 4, 2026
998cd6b
feat(inference): ProbeSink joins GenerateConfig — config reconcile co…
Snider Jul 4, 2026
c8d29ab
feat(inference): lift artifact from go-mlx (engine-merge Tier 1)
Snider Jul 4, 2026
3744a23
Merge branch 'lift/artifact' into dev
Snider Jul 4, 2026
03b3c1c
docs(inference): engine/metal clarified — pkg/native IS engine/metal,…
Snider Jul 4, 2026
4976287
docs(inference): hip caveat — engine/hip reintroduces cgo; no-cgo is …
Snider Jul 4, 2026
9c3f163
feat(inference): lift safetensors extension from go-mlx (engine-merge…
Snider Jul 4, 2026
7419146
feat(inference): lift quant/autoround from go-mlx (engine-merge Tier 1)
Snider Jul 4, 2026
acac78c
feat(inference): lift profile from go-mlx (engine-merge Tier 1)
Snider Jul 4, 2026
4daae7b
feat(inference): lift pack from go-mlx as modelpack (engine-merge Tie…
Snider Jul 4, 2026
e514385
feat(inference): lift memory from go-mlx (engine-merge Tier 1)
Snider Jul 4, 2026
3d4eb6a
Merge branch 'lift/memory-chain' into dev
Snider Jul 4, 2026
80f14a5
docs(inference): pkg/model stays decoupled from engine/metal; scheme …
Snider Jul 4, 2026
69b9a92
feat(inference): lift agent from go-mlx (engine-merge Tier 1)
Snider Jul 4, 2026
9919c54
feat(inference): lift spine/model_info from go-mlx (engine-merge Tier 1)
Snider Jul 4, 2026
d753ca3
Merge branch 'lift/agent-modelinfo' into dev
Snider Jul 4, 2026
dd04a26
feat(inference): engine-neutral session contract + lift state/session…
Snider Jul 4, 2026
6edbe39
feat(kv): cache modes resolve through the scheme registry — KV data p…
Snider Jul 4, 2026
580d183
feat(scheme,memory): KV cache width is a registry capability, not a p…
Snider Jul 4, 2026
755a4c6
feat(enginetest): engine conformance kit — the SessionHandle suite (e…
Snider Jul 4, 2026
5b5c90a
feat(enginetest): TextModel conformance suite (kit slice 2)
Snider Jul 4, 2026
f67ae50
feat(inference): runtime memory read-back + maintenance capabilities …
Snider Jul 4, 2026
9b9d635
feat(serving): GenOpts carries the reasoning + sampling controls (con…
Snider Jul 4, 2026
d82e886
docs(inference): retire the false 'serving skeletal' open question — …
Snider Jul 4, 2026
318119b
tier3(M1): pkg/model -> inference/model family; merge pkg/safetensors…
Snider Jul 4, 2026
816c72f
Merge tier3 M1 — pkg/model becomes the inference model/ family; safet…
Snider Jul 4, 2026
0d69428
tier3(M2 leaf 1/2): pkg/tokenizer -> inference/tokenizer
Snider Jul 4, 2026
3efc98d
tier3(M2 leaf 2/2): gguf tensor-loading layer -> inference/gguf
Snider Jul 4, 2026
b142528
tier3(M2): pkg/native -> inference/engine/metal (the Apple-GPU engine)
Snider Jul 4, 2026
d206f6e
Merge tier3 M2 — pkg/native becomes engine/metal; tokenizer + gguf-te…
Snider Jul 4, 2026
3667fdd
tier3(compose): engine/metal self-registers "metal"; SessionHandle + …
Snider Jul 4, 2026
cc586ad
Merge tier3 compose — engine/metal self-registers as the metal backend
Snider Jul 4, 2026
788f67e
refactor(engine): hoist engine-agnostic session/model adapter into sh…
Snider Jul 4, 2026
8893627
Merge engine/shared-session — hoist the agnostic session/model adapte…
Snider Jul 4, 2026
bd50aca
engine/hip: land go-rocm hip engine as go-inference/engine/hip (mecha…
Snider Jul 4, 2026
071f60f
Merge engine/hip-land (move) — go-rocm hip lands as go-inference/engi…
Snider Jul 4, 2026
3ae42dc
engine/hip: rocmKVCache host <-> kv.Snapshot converter (the structura…
Snider Jul 4, 2026
cb714d8
engine/hip: engine.Session over hip's retained decode + HIP-gated par…
Snider Jul 4, 2026
9a1791a
Merge engine/hip-reconcile — hip session speaks kv.Snapshot on the sh…
Snider Jul 4, 2026
5c90987
engine/metal serves real models: model/builtin arch aggregator + real…
Snider Jul 4, 2026
3d7140d
feat(serving): rescue lthn-mlx serve business logic into go-inference…
Snider Jul 4, 2026
19533c8
Merge cmd/lem #267 — thin lem serve binary + serving HTTP library
Snider Jul 4, 2026
9ef2727
feat(generate): rescue lthn-mlx generate into a go-inference library;…
Snider Jul 4, 2026
6b2cfe4
feat(serving/admin): rescue the lthn-mlx /v1/admin control plane into…
Snider Jul 4, 2026
fbf16ea
Merge cmd/lem #268 + #269 — thin generate + admin control plane; logi…
Snider Jul 4, 2026
38eace0
feat(engine/metal): export LoRATrainer — head-LoRA SFT over the real …
Snider Jul 4, 2026
1a56fb6
feat(engine): add the engine.Trainer seam beside engine.Session
Snider Jul 4, 2026
c5ce04b
feat(engine/metal): honour AdapterPath at load + SFT round-trip smoke
Snider Jul 4, 2026
85209cf
Merge #273 — engine.Trainer seam + metal LoRA trainer + apply-at-infe…
Snider Jul 4, 2026
ce6dd3b
engine: forward OpenTrainer through TextModel so the train seam is re…
Snider Jul 5, 2026
05947b3
train: port the LEM SSD + SFT orchestration onto the engine-neutral s…
Snider Jul 5, 2026
feede51
tune: add the MTP-draft-block tune library (honest sweep degradation)
Snider Jul 5, 2026
2a974d8
cmd/lem: wire the thin ssd / sft / tune training verbs
Snider Jul 5, 2026
46df57c
train: gated real-model SSD smoke on the metal engine (opt-in, no GPU…
Snider Jul 5, 2026
c282e9d
Merge #270 — LEM training verbs (ssd/sft/tune) onto the engine-neutra…
Snider Jul 5, 2026
9e164d4
feat(generate): thread image input through the neutral multimodal path
Snider Jul 5, 2026
a9c436f
feat(cmd/lem): wire pack + ebook verbs onto engine-neutral libraries …
Snider Jul 5, 2026
9d298c3
Merge #272 — lem pack + ebook verbs
Snider Jul 5, 2026
3b22b62
Merge #271 — multimodal CLI generate (image plumbing at serve parity)
Snider Jul 5, 2026
c07a012
refactor: fold fine-tuning packages under train/ (lora/distill/grpo/d…
Snider Jul 5, 2026
dcfd5a6
refactor: fold radix blockcache kvtier sessionkv memory residency bud…
Snider Jul 5, 2026
f404c50
refactor: fold gguf safetensors quant hf modelmgmt modelpack bundle w…
Snider Jul 5, 2026
7393c79
refactor: fold bench score experiments classify probe obs profile dat…
Snider Jul 5, 2026
c3bda26
refactor: fold enginetest driver scheme registry capability under eng…
Snider Jul 5, 2026
814c7e0
refactor: fold ai tools under agent/ (path-is-documentation grouping)
Snider Jul 5, 2026
b7b766b
refactor: fold generate ngram parse parser tokenizer specctl under de…
Snider Jul 5, 2026
57a938d
refactor: fold api chat session chathistory stream structured pipelin…
Snider Jul 5, 2026
0c57663
feat(engine): vision bridge — engine.TextModel answers image turns (#…
Snider Jul 5, 2026
823e359
perf(engine/metal): attention scratch pool → core.Pool[T] (dedup)
Snider Jul 5, 2026
0a168e5
perf(engine/metal): remaining 17 scratch pools → core.Pool[T]
Snider Jul 5, 2026
995c2f7
Merge metal-pool — remaining 17 scratch pools → core.Pool[T]
Snider Jul 5, 2026
dd1c396
chore: bump Core to 22a06aa — Coalesce/FirstPositive/SliceEqual/Resul…
Snider Jul 5, 2026
a4aa11c
refactor: consolidate dup tiny helpers onto core.Coalesce/FirstPositi…
Snider Jul 5, 2026
9bec60a
Merge core-utils — consolidate dup tiny helpers onto Core primitives
Snider Jul 5, 2026
5084515
chore: bump Core to 4058238 — FirstNonBlank
Snider Jul 5, 2026
975d319
refactor(kv,agent,model): consolidate firstNonEmpty copies onto core.…
Snider Jul 5, 2026
927a2bf
refactor(engine/metal): dedup no-copy output-view lifecycle into noCo…
Snider Jul 5, 2026
2aa6444
Merge firstnonblank — trimming firstNonEmpty → core.FirstNonBlank
Snider Jul 5, 2026
3f20ea3
Merge metal-view — extract shared noCopyOutputView (7/9 kernel scratc…
Snider Jul 5, 2026
7207a6b
chore: bump Core to d86a36a — MapString
Snider Jul 5, 2026
9b0b361
refactor(eval,model,serving): strVal -> core.MapString (DRY consolida…
Snider Jul 5, 2026
a8f53f5
Merge tinies — strVal → core.MapString (3 pkgs)
Snider Jul 5, 2026
73407e3
feat(model): MatNT — shared reference matmul (in·wᵀ) for the arch pac…
Snider Jul 5, 2026
6bb4f4a
chore(deps): adopt repaired core + ecosystem Fs Result migration
Snider Jul 5, 2026
3297c9e
fix(engine/hip): retire go-rocm-era import-boundary tests
Snider Jul 5, 2026
564f18d
build(metal): own the metal build chain via Apple MLX + lthn patches …
Snider Jul 5, 2026
575c21c
build(metal): move built metallibs dist/ -> build/dist/ (all artifact…
Snider Jul 5, 2026
e7f080f
chore(metal): move MLX submodule lib/mlx -> external/mlx (submodule c…
Snider Jul 5, 2026
8369507
feat(gui): port the LEM desktop app (Wails v3) into go-inference/gui
Snider Jul 5, 2026
de44542
feat(lem): static self-contained binary — embed both metallibs (-tags…
Snider Jul 5, 2026
1981f8a
docs: rewrite to the consolidated go-inference (engines + serving + l…
Snider Jul 5, 2026
66125b0
feat(serving): GET /v1/models + move storage to ~/Lethean/lem
Snider Jul 5, 2026
a52f7d9
feat(hip): cmd/lem registers engine/hip + bring the ROCm/CUDA/CPU Mak…
Snider Jul 5, 2026
77ea118
build(hip): vendor the ROCm 7.2 runtime submodules for the static amd…
Snider Jul 5, 2026
3b66369
feat(eval/score/lek): port LEK phonetics scorer + arm the score-cascade
Snider Jul 5, 2026
5ba21a4
build(taskfile): test/cover/bench/qa targets + AGENTS test-writing gu…
Snider Jul 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 0 additions & 12 deletions .forgejo/workflows/security-scan.yml

This file was deleted.

14 changes: 0 additions & 14 deletions .forgejo/workflows/test.yml

This file was deleted.

9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,12 @@
.core/
.idea/
.vscode/
# build / test artefacts
*.test
*.out
.DS_Store
*.bak
go.work.sum
/build/
*.air
cmd/lem/*.metallib.gz
75 changes: 75 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,78 @@
path = external/go
url = https://github.com/dappcore/go.git
branch = dev
[submodule "external/go-i18n"]
path = external/go-i18n
url = https://github.com/dappcore/go-i18n.git
branch = dev
[submodule "external/go-io"]
path = external/go-io
url = https://github.com/dappcore/go-io.git
branch = dev
[submodule "external/go-rag"]
path = external/go-rag
url = https://github.com/dappcore/go-rag.git
branch = dev
[submodule "external/go-ratelimit"]
path = external/go-ratelimit
url = https://github.com/dappcore/go-ratelimit.git
branch = dev
[submodule "external/api"]
path = external/api
url = https://github.com/dappcore/api.git
branch = dev
[submodule "external/go-store"]
path = external/go-store
url = https://github.com/dappcore/go-store.git
branch = dev
[submodule "external/mcp"]
path = external/mcp
url = https://github.com/dappcore/mcp.git
branch = dev
[submodule "external/go-ws"]
path = external/go-ws
url = https://github.com/dappcore/go-ws.git
branch = dev
[submodule "external/go-process"]
path = external/go-process
url = https://github.com/dappcore/go-process.git
branch = dev
[submodule "external/go-log"]
path = external/go-log
url = https://github.com/dappcore/go-log.git
branch = dev
[submodule "external/go-proxy"]
path = external/go-proxy
url = https://github.com/dappcore/go-proxy.git
branch = dev
[submodule "external/go-scm"]
path = external/go-scm
url = https://github.com/dappcore/go-scm.git
branch = dev
[submodule "external/mlx"]
path = external/mlx
url = https://github.com/ml-explore/mlx.git
[submodule "external/go-container"]
path = external/go-container
url = https://github.com/dappcore/go-container.git
branch = dev
[submodule "external/gui"]
path = external/gui
url = https://github.com/dappcore/gui.git
branch = dev
[submodule "external/cli"]
path = external/cli
url = https://github.com/dappcore/cli.git
branch = dev
[submodule "external/rocm-hip"]
path = external/rocm-hip
url = https://github.com/ROCm/HIP.git
branch = release/rocm-rel-7.2
[submodule "external/rocm-clr"]
path = external/rocm-clr
url = https://github.com/ROCm/clr.git
branch = release/rocm-rel-7.2
[submodule "external/rocr-runtime"]
path = external/rocr-runtime
url = https://github.com/ROCm/ROCR-Runtime.git
branch = release/rocm-rel-7.2
68 changes: 62 additions & 6 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,73 @@ assert behavior directly against the symbol named by the test. A triplet named
`TestOptions_WithMaxTokens_Bad` must invoke `WithMaxTokens` in its own body,
not route through a dispatcher helper.

## Writing Tests, Examples & Benchmarks

Every source file ships three siblings — extend them, never create monolithic
compliance files, versioned test files (`_v2`), or `ax7*` files:

| Sibling of `foo.go` | Holds | Verified by |
|---------------------|-------|-------------|
| `foo_test.go` | one `Test<Symbol>_<Case>` per exported symbol per variant | `task test` |
| `foo_example_test.go` | one `Example<Symbol>` per symbol, with an `// Output:` block | `task test` (runs + diffs the output) |
| `foo_bench_test.go` | one `Benchmark<Symbol>` per hot symbol | `task bench` |

**Tests — name the symbol, exercise it directly.** A test asserts against the
symbol its name claims: `TestOptions_WithMaxTokens_Bad` must call
`WithMaxTokens` in its own body, not route through a dispatcher/table helper.
A test that never names its symbol is fake coverage the audit flags. Write the
AX-7 triplet for each symbol — `_Good` (valid input, happy path), `_Bad`
(invalid input is rejected), `_Ugly` (malformed / boundary / empty). Production
functions that can fail return `core.Result`: the `_Good` test asserts `r.OK`
then reads `r.Value`; the `_Bad`/`_Ugly` tests assert `!r.OK`.

**Examples are compiled documentation.** `func ExampleWithMaxTokens()` ends with
a `// Output:` block so `go test` runs and diffs it — a stale example fails the
build. Print with `Println` from `dappco.re/go`, never `fmt.Println`.

**Benchmarks measure the load path.** Shape:

```go
var sinkResult core.Result // package sink — stops the compiler eliding the call

func BenchmarkDiscover(b *testing.B) {
dir := writeFixtureModel(b) // setup OUTSIDE the timed loop
b.ReportAllocs()
b.ResetTimer() // discount the setup
for i := 0; i < b.N; i++ {
sinkResult = Discover(dir) // assign to the sink so it can't be optimised away
}
}
```

Read **B/op as hard as allocs/op** — the biggest wins (whole-slice clones,
full-file reads) leave allocs/op flat while B/op screams. allocs/op is only
trustworthy at steady state, so `task bench` runs `-benchtime=20x`; a cold
3-iteration number is inflated by setup.

## Working Locally

Use the same commands as the compliance brief before handing work back:
Run the Taskfile gates before handing work back (portable lanes need no GPU;
`*:metal` lanes need `task metallib` first):

```sh
task qa # gofmt check + go vet + portable tests — the pre-handback gate
task test # portable suite (default tags, runs anywhere)
task test:metal # engine/metal suite (-tags metal_runtime; needs task metallib)
task cover # coverage.out + total — must clear the 95% codecov target
task bench # every benchmark with -benchmem (allocation regressions)
```

`codecov.yml` enforces **95%** on both the project and each patch, measured on
the portable `task cover` profile (the surface a Linux CI compiles; engine/metal
is Darwin-only and covered by `task test:metal`).

For core/go idiom compliance specifically, the audit script is the work
provider — a change is not complete until it reports `verdict: COMPLIANT` with
every counter at zero:

```sh
GOWORK=off go mod tidy
GOWORK=off go vet ./...
GOWORK=off go test -count=1 ./...
gofmt -l .
bash /Users/snider/Code/core/go/tests/cli/v090-upgrade/audit.sh .
```

The audit script is the work provider for compliance tasks. A change is not
complete until it reports `verdict: COMPLIANT` with every counter at zero.
Loading