Commit Graph
1210 Commits
Author SHA1 Message Date
Niko1221 202bb94ae6 split HIP: AMD gfx1201 starts the split by default (AUTO_SPLIT_AMD_ARCHS), off by key, preset or STRATA_SPLIT_ENGINE=0; tests and docs 2026-11-02 12:27:01 +01:00
Niko1221 2c1771dce2 Merge f-0291-split (up to ea2aed12c: auto/on/off switch, drafting fix, i-quant sets, PF_JOB) into f-0291-split-hip; AMD opt-in rule (AUTO_SPLIT_AMD_ARCHS), strata-split-N-gfx1201 lookup, packaging/build_split_hip.sh, AMD tests 2026-11-02 12:13:42 +01:00
Niko1221 8bccfe281e docs: SPLIT_ENGINE.md with the copy-engine ring's numbers, the parallel table and the suite result 2026-11-01 23:46:34 +01:00
Niko1221 fcba411c41 split: packaging/build_split_cuda.sh (fails if the engine can call a peer function) and docs/SPLIT_ENGINE.md 2026-11-01 21:01:47 +01:00
Niko1221 3a3fd4391b Int3 merge f-0291-mac-q (bef28201f): FP16 default on resident IQ3_S and Q2_0 on Metal through setup's config, Coder on spec 3 2026-11-01 15:52:51 +01:00
Niko1221 bef28201ff Mac config: the fp16 decode (STRATA_METAL_F16=1) is the default of a resident IQ3_S or Q2_0 pack; the Coder joins --spec 3 --spec-min-p 0.5
Coder: expert-pruned 256-expert Coder, M5 Max, 5 interleaved pairs, identical greedy tokens in all 40 runs per class, over --spec 2: story -2.5%
(0/5), code +7.1%, JSON +9.3%, agent turn +12.5% (5/5 each). It has no Mac setup entry yet; the name is what a config for it would pass.

fp16 decode (PR 4807): setup writes STRATA_METAL_F16=1 into the config's env for a resident IQ3_S or Q2_0 pack (STRATA_METAL_F16=0 there turns
it off; streaming and the other sets are untouched). The owner's rule was an option unless it passes the 61-task quality suite: off / on / off
again on IQ3_S 54/61 each, on Q2_0 54/61 each, the same 7 tasks failing in all arms, no family drop, no new hallucination flag, 0 pass/fail
changes between two runs of the same arm; decode +14% (IQ3_S) and +15% (Q2_0) in the suite runs, top-1 96-97% and mean KL 0.009-0.016 against fp32
(phaseA-tests/mac-q/RESULTS.md sections 20, 22, 30).
2026-11-01 15:52:11 +01:00
Niko1221 687527d7a3 Int3 merge f-0291-ds-left final (ea2e791d8): screens say 5 experts on 3+ RDNA4 cards 2026-11-01 13:15:20 +01:00
Niko1221 ea2e791d8b Screens and app say 5 experts on several RDNA4 cards that hold half of the experts, as the engine does
The engine gives 5 experts per word on two or more RDNA4 cards that together hold at least half of the experts (4 x R9700), but strata launch --plan, the Speed screen and the app's Speed label called Full quality the default there.
dsv41_fit.rdna4_faster() applies the engine's rule with the plan's own numbers: one card the run uses (on Windows one AMD card): yes; several: yes when the plan puts at least half of the set's experts on them (3 or more R9700 for every official set; two hold 37-47%, so they keep 6). strata launch uses it with the chosen model; the model catalog carries rdna4_faster per DeepSeek size for the app (NativeSize, Speed label); --speed help and docs/MODELS.md say it. Other makes and older Radeons are unchanged.
2026-11-01 13:14:36 +01:00
Niko1221 0f7159ca35 Int3 merge f-0291-ds-left (386d2e441): #4677 stop bound, 5 experts by default on one RDNA4 card 2026-11-01 13:07:20 +01:00
Niko1221 386d2e4416 DeepSeek: 5 experts per word by default on a single RDNA4 card (R9700, RX 9000); --experts N still wins
One R9700 holds under a fifth of a 2.25 bpw set, so the CPU lane and the SSD set the speed, as on the 16 GiB cards and the multi-card RDNA4 rule that already take 5.
1 x R9700 on p620 (125 GB RAM), 2.25 bpw, frozen expert profile, 5 interleaved pairs, 5 against 6 experts: decode 15.24 against 13.08 tok/s (+16%, 5 of 5 pairs), a scripted agent loop -24% wall time (5 of 5), the long-read loop -12% (5 of 5). KL against the 6-expert run 0.030 (6 against 6: 0.008); against the original model 0.1106 against 0.1067-0.1071. quality027 quick: 18 of 19 with 5 experts and with 6, the same task flagged in both.
ds4_experts_rule.hpp: experts_per_word() takes single_rdna4 (the engine passes rdna4() with one device); DS4_DEFAULTS=026 gives the model's 6 back. The Terminal's Speed words (strata launch --plan and screens), the app's Speed label (arch added to RunCard) and docs/MODELS.md say the same. Several RDNA4 cards keep the existing rule (they must hold half of the experts); the screens still do not mirror that one.
2026-11-01 13:04:39 +01:00
Niko1221 fbdcd5cbea ISTA-DAS: the setup message that names the two sets and the DeepSeek doc's setup commands use the on-screen spelling (--model ISTA-DAS-2.25bpw is accepted by model_alias; IST-DAS-... and ist-das-... keep working) 2026-11-01 10:57:29 +01:00
Niko1221 cc703b5e48 #4040 --lookup-max-t 12 by default (serve, 8-row CUDA build, one GPU, no batch/DFlash2/layer split/chain); --lookup-max-t 0 or STRATA_LOOKUP_MAX_T=0 turns it off (owner 11-01) 2026-11-01 09:48:05 +01:00
Niko1221 9e75dc6cf5 Int3 merge f-0291-pr-nv2 (e20842779) 2026-11-01 09:36:38 +01:00
Niko1221 af1cfe99cb Int3 merge f-0291-pr-nv (5e46c3415) 2026-11-01 09:36:38 +01:00
Niko1221 d10d67b005 docs: DETAILS.md, --lookup-max-t row now says 12 and carries the cap and agent-loop measurements 2026-11-01 06:51:24 +01:00
Niko1221 5e46c34159 DGX Spark: STRATA_SIDE_MIXER=2 is one of the sm_121 defaults (docs: five speed defaults)
Port of pull request 4737 by InB4DevOps (commit c14ee15d9 on v0.2.8). The mixer's input-only QSA/GDN work runs on graph branches; scheduling only, no arithmetic change.
STRATA_SM121_PERF=0, STRATA_DEFAULTS=026 or STRATA_SIDE_MIXER=0 turn it off. Measured here on a Spark, IQ3_S, greedy: ids identical 48 of 48; alone +1.0..+2.9% per class, with mode 8 +3.6% pooled.
Not yet measured at parallel 4.
2026-11-01 06:06:57 +01:00
Niko1221 01f804ea18 Trial2 merge f-0291-mac-q (8e7ed6818) 2026-11-01 03:45:53 +01:00
Niko1221 62db0bf10f Trial2 merge f-0291-pr-amd (82eaeb422): verify.cpp head keeps both: pr-nv2's chunked head (h0/HT, up to 8 columns a launch) and pr-amd's fused q8_1 image (q8_head, image at the chunk's own xq_ offset) 2026-11-01 03:45:21 +01:00
Niko1221 5438023a6a Trial2 merge f-0291-pr-intel (2b4d43bac) 2026-11-01 03:44:34 +01:00
Niko1221 2716defb83 Trial2 merge f-0291-pr-nv2 (64bf69080) 2026-11-01 03:44:33 +01:00
Niko1221 5206a299f8 docs: DETAILS.md rows for --lookup-max-t, STRATA_PF_GROUP_SCRATCH / STRATA_PF_HC_REGION, STRATA_PW_WITH_BATCH, STRATA_MTP_ROOM_MIN, with the numbers measured on f-0291-int-trial
The four switches are ports of PRs 4040 (merbanan), 4039 (merbanan), 3095 (Vop3p) and 3307 (gopinath87607); all stay off by default.
2026-11-01 02:57:12 +01:00
Niko1221 b130965ca6 AMD community tuning: the simt2 QSA selector (PR 3073, author Vop3p) is the default on gfx103x only
Mode 2 of STRATA_SELECT_SIMT was added for HIP in the previous commit as an opt-in.  For the RX 6000 cards its contributor measured it
on (gfx103x) it now joins the one community switch: on by default with STRATA_AMD_COMMUNITY_TUNING on, any STRATA_SELECT_SIMT value
the user sets wins, and no other card changes.  Values change in the last bits (another summation order); the contributor's numbers are
labelled as theirs in docs/AMD_HIP.md and have not been reproduced (no gfx103x card here).  amd_community_test checks the default and
that the switch turns it off.
2026-11-01 02:15:38 +01:00
Niko1221 161eb97fc6 docs/INTEL.md: the #4185 decode kernels, the build option and the controls, with what is on by default 2026-11-01 01:30:29 +01:00
Niko1221 3277bfcd71 Metal: opt-in fp16 GEMVs and Q2_0 experts in decode windows (STRATA_METAL_F16=1), from PR 4807 by rasa04
Unset, the output is unchanged (the build with the change, unset, gives the same greedy ids as the build without it in 12 of 12 runs, gemv_parity / gr_parity / expert_parity pass). With STRATA_METAL_F16=1 the decode windows of a resident model use half-precision GEMVs (Q2_0, Q3_K-Q6_K, IQ4_XS) and the Q2_0 routed experts.
M5 Max, spec 3 + min-p 0.5, 3 interleaved pairs, decode tok/s unset -> on: Q2_0 story 105.0 -> 114.9 (+9.4%), code 125.6 -> 143.7 (+15.5%), json 130.8 -> 135.1 (+3.3%, one noisy pair), agent 116.1 -> 131.6 (+13.4%); IQ3_S (dense GEMVs only) story 93.1 -> 104.3 (+8.8%), code 103.6 -> 118.5 (+12.5%), json 122.5 -> 135.4 (+10.6%), agent 103.8 -> 117.8 (+12.3%).
It changes arithmetic: teacher-forced over 4,995 positions against the same build unset, Q2_0 top-1 97.12%, mean KL 0.0094 (p99 0.119), perplexity 4.456 against 4.442; IQ3_S top-1 96.16%, mean KL 0.0160 (p99 0.211), perplexity 4.119 against 4.135. The half range is not guarded (see the PR). Off by default.
2026-11-01 00:39:53 +01:00
Niko1221 1f8ca8de1e RDNA4 routed-expert, draft, shared-expert and head kernels (PR 3259 and PR 3264, author bsorensen110)
Ports the two RDNA4 pull requests onto this tree by hand (three-way merge of the rejected hunks).  Where the contributor made a
default depend on a device query, the default is the gfx12 table or the env variable instead, so STRATA_GFX12_DEFAULTS=0 still
gives the old behaviour; the LDS-only barriers and the S2 and head changes that were only run on gfx1201 apply to gfx12 only,
every other target keeps what it ran before.

- iq_kernels.cu (3259): LDS-only barriers in the grid / activation staging, first-pass barrier skipped, vectorised ed_stage_entry,
  expdec_gu_kernel launch bounds in waves per EU on HIP, EXPDEC down read at first use; expdec_bench builds on HIP.
- s2_expert_grouped.cu (3264): single-entry gu/down specialisation for the draft layer, fused swiglu + q8_0 on the hit paths,
  LDS-only barrier on gfx12.
- verify_kernels.cu, quantize_act.cu, elementwise.cu, shared_expert.cu, fused_gr.cu, mtp.cpp, verify.cpp (3264): multi-block argmax
  and top-prob on gfx12, warp-per-block quantize_q8_0_scaled, mapped copies in one launch on HIP, shared expert reuses the q8_1
  image, counter-free q8_mixed in the hyper-connection read, the draft layer and the head write the q8_1 image themselves.
- parity tests of both pull requests (verify_parity on HIP, s2/shared/gr parity cases).
2026-10-31 23:35:50 +01:00
Niko1221 3eb91676df AMD community tuning: gfx1010 SDWA dot4 and two gfx1030 rocBLAS tables under one switch
Ports three community changes that we have no card to run (no gfx1010, no gfx1030 here), on by default under the one
setting STRATA_AMD_COMMUNITY_TUNING (=0 turns the tables off; cmake -DSTRATA_AMD_COMMUNITY_TUNING=OFF compiles the portable
dot for gfx1010 again).  Each is limited to the card or exact library build it was made for.

- gfx1010 (RX 5700 / 5700 XT) signed dot4 takes the SDWA byte-select sequence gfx1012 already used: PR 4855, author Keoian.
  Same arithmetic, four signed byte products accumulated modulo 2^32.
- rocBLAS table gfx1030 / 5.4.0.ad84daa81c (TheRock gfx103X-all 7.13 wheels): PR 3343, author elightcap.
- rocBLAS table gfx1030 / 5.2.0.dabb6df2b98-dirty (Arch Linux ROCm 7.2.4): PR 3924, author schmittcn.

include/strata/core/amd_community.hpp holds the switch, the list of community tables and the engine log line (printed only
on gfx1010 and gfx1030); gemm.cu refuses a community table with the switch off, the existing loader still refuses any table
whose architecture or full rocBLAS version string differs.  amd_community_test checks that the switch turns each one off.
The contributors' numbers are labelled as theirs in docs/AMD_HIP.md and have not been reproduced.
2026-10-31 23:30:43 +01:00
Niko1221 5a41f3b391 SYCL: #4185 opt-in mixed-IQ3 decode optimizations on Battlemage (from glorysdj's PR #4185), ported onto this tree, not yet measured
Ported from glorysdj's draft pull request #4185 (commits 961f62963 and 0726ef5ad of that branch; the documentation commit is not taken).
A compile option STRATA_SYCL_IQ_DECODE_FAST (default OFF: packed Q2 expansion, IQ4 bit-select lookup, fast IQ3_S sign arithmetic) and fourteen runtime controls, all default off:
STRATA_IQ3S_GU_SLM, STRATA_IQ4NL_DOWN_SLM, STRATA_RESIDENT_PLAN_COMPACT, STRATA_IQ2S_GU_ROW_REUSE, STRATA_IQ3XXS_GU_ROW_REUSE, STRATA_GR_CACHED_NORM, STRATA_GR_LO_REUSE, STRATA_MMVQ_SHAPE_RPW, STRATA_GDN_QK_REG, STRATA_EXPERT_ROW_E3, STRATA_Q6_SHAPE_GRF, STRATA_IQ3S_GU_ROW_REUSE, STRATA_GR_REDUCE_ILP, STRATA_ATTN_MERGE_ACTIVE.
Conflicts resolved against this tree: the kprof launch wrappers kept (new launches in the conflicted hunks use strata::kprof::kp), the resident-plan launch keeps the kprof wrapper with the compact thread count, native_expert_bench.cpp keeps this tree's fixed bench (the PR's older version of the same hunks is dropped), qsa_prompt_attn_parity.cpp keeps the per-cell check and adds the PR's FP32HASH line and QA_FP32_GRAPH timing.
Also in the diff: docs/INTEL.md section from the PR.
2026-10-31 23:26:20 +01:00
Niko1221 5273fb667d prefill: STRATA_PREFILL_ROUTED_STREAM=1 (opt-in) does not copy the streamed experts no token of the chunk routes to; test
Port of pull request 4283 by bitaccesscomau (two commits 3956b94a7 and fcb0e399c on v0.2.8), applied without conflict on the 0.2.9 trial tree.
Off unless the variable is set; STRATA_PREFILL_ROUTED_STREAM_DEPTH sets the copies queued ahead (default 16).
2026-10-31 23:25:11 +01:00
Niko1221 8dcda377a0 SYCL: #3248 correctness fixes (from maxfridbe's PR #3248): host-only copies on the CPU, s2 grouped kernels without FMA contraction, gr_parity QFUSE skip, crossover cache dir
Ported from maxfridbe's pull request #3248 (commits d95a9c4b0, 5fbef34f9, 344e43e1d, c44fb63be of that branch), cherry-picked without the prompt-kernel commits.
- conversation_snapshot: a copy with neither end in device memory (pinned host <-> pageable host) is a memcpy on the CPU; through the queue it runs on the Arc's copy engine, which the PR reports hanging (Engine reset: engine_class=bcs).
- s2_expert_grouped: #pragma clang fp contract(off) in the two transposed grouped kernels (fixups.py 9d keeps it across re-migrations; 9c the snapshot test's sycl::free).
- gr_parity: the STRATA_QFUSE read check is skipped when the SYCL fused GR read writes no q8_1.
- strata-sycl.sh: STRATA_CACHE_DIR defaults to the mounted data root so the int8 crossover cache survives the --rm container.
2026-10-31 23:24:31 +01:00
Niko1221 eaae5a865c Trial merge f-0291-mac-q (5957d10f7) 2026-10-31 22:01:52 +01:00
Niko1221 7d94b1d5b9 Trial merge f-0291-gh-app (5c0259e20) 2026-10-31 22:01:09 +01:00
Niko1221 9567238476 Trial merge f-0291-gh-eng (31c3a16f4): NOTICE.md keeps the base's block (thread pool fence #618 already listed; ds4_pool.hpp identical) 2026-10-31 22:01:09 +01:00
Niko1221 0f2778ae22 Trial merge f-0291-fixes (dde320ffa): keep both _parallel_lines and _broken_nvidia_note in launch/cmd.py 2026-10-31 22:00:53 +01:00
Niko1221 5957d10f75 Mac config: --spec 3 --spec-min-p 0.5 for a resident Q2_0 pack too; IQ3_S numbers re-measured
M5 Max, MTP, 5 interleaved pairs, fixed harness (each run's spec, min-p and context read from the engine's own log), greedy ids identical in every run, over --spec 2:
Q2_0 story 104.4 -> 104.7 (+0.4%), code 114.4 -> 127.3 (+11.5%), JSON 124.6 -> 132.5 (+6.3%), agent turn 115.9 -> 117.9 (+1.9%, 3/5 pairs).
IQ3_S story 94.2 -> 93.3 (-0.9%), code 103.8 -> 106.1 (+2.5%), JSON 105.1 -> 122.6 (+16.7%), agent turn 102.1 -> 107.1 (+4.9%).
The earlier Q2_0 'flat' result and IQ3_S '+1.4..3.6%' came from a harness that gave the spec flags to the first pair of an arm only. Other sets keep --spec 2.
2026-10-31 21:35:23 +01:00
Niko1221 656ddfd050 docs/MAC.md: --parallel works on Metal; the numbers measured on an M5 Max with IQ3_S 2026-10-31 21:10:12 +01:00
Niko1221 d6912d7744 docs: DeepSeek --parallel (what it does, the numbers, where it was run); app test: Concurrent requests reaches a DeepSeek run config and nothing is added without it 2026-10-31 19:37:26 +01:00
Niko1221 31c3a16f4f Qwen3.6-35B-A3B: the penalties count the reply's tokens by default too; STRATA_PENALTY_PROMPT=1 brings the old window back (#4590)
The Qwen3.6 engine (src/qwen35/q36_engine.cu) started its penalty history from the whole prompt (`hist = ids`), so its model-card presence penalty 1.5 counted the prompt's last tokens as in the other engines. The history now starts at the last prompt token and grows with the tokens written (penalty_history_start in include/strata/qwen35/sampling.hpp), the same window as src/program/generate.cpp; batch slots copy that history. STRATA_PENALTY_PROMPT=1 keeps the whole prompt.

Tested: qwen35_sampling_test (276 checks, 9 new for the default and the opt-out), and a CUDA sm_86 build on z440. Replay on z440, one A4000, UD-Q6_K_XL, the reporter's conversation cut to 250 records, 400 tokens: 16 sampled seeds and 2 greedy requests per arm. This model did not return the old JSON in either arm (0/16 with the default, 0/16 with STRATA_PENALTY_PROMPT=1; 0/2 greedy in both), so this replay does not show a difference between the two windows; no answer in either arm started with the old JSON or a code fence.

docs/DETAILS.md: the sentence saying the Qwen3.6 path still counts the prompt is replaced.
2026-10-31 19:33:33 +01:00
Niko1221 12a1f2c545 Mac config: --spec 3 --spec-min-p 0.5 for a resident IQ3_S pack (+1.4..3.6%, same tokens)
M5 Max, MTP, IQ3_S, 5 interleaved pairs (2 + 3), greedy tokens identical in every run: --spec 3 --spec-min-p 0.5 against --spec 2:
story 93.8 vs 92.4 tok/s (+1.4%), code 103.4 vs 100.4 (+3.0%), JSON 105.3 vs 101.6 (+3.6%), agent turn 100.8 vs 98.0 (+2.8%).
Q2_0 measured flat (-1.0% to 0.0%, 5 pairs; 800-token story -0.7%), so it keeps --spec 2; --spec 3/4 without min-p lose on both.
mac_fit.spec_args picks the flags by model; engine_args takes the model name (setup.py and metal/setup_mac.py pass it); a streaming
Mac keeps STREAM_SPEC, a Mac without the draft layer keeps --spec 2. The engine's own default (--spec 2) and an explicit --spec in a
config are unchanged. Test: tools/test_setup_mac.py.
2026-10-31 18:09:56 +01:00
Niko1221 ed76b12f9d The repeat, frequency and presence penalties count the tokens the reply has written, not the last tokens of the prompt; STRATA_PENALTY_PROMPT=1 brings the old window back (#4590)
With the model-card presence penalty 1.5 over the last 64 tokens, the prompt's own tokens (the digits of a new task, a quoted JSON answer) were penalised, and a conversation whose last turn asks for something new could get its previous answer back. The window now starts at the end of the prompt: the fed-back last prompt token and the reply's tokens. Earlier assistant turns inside the prompt are not counted. The history is built from the request's prompt ids on every request, so a conversation restored from the conversation cache or a saved slot gets the same window as a cold read. The STRATA_ADMIT_MERGE_FIRST merged first window is not used for a request with a penalty window, since its prompt rows would join the reply window.

Measured with the opt-in switch (618cd7a4b) on a P100, IQ2_XS, the reporter's saved 4-message conversation, 32 seeds per arm: old JSON returned 13/32 as shipped, 4/32 reply-only, 3/32 with presence 0. Qwen IQ3_S on an R9700, 16 seeds: old JSON 8/16 as shipped, 0/16 reply-only. 61-task quality027, greedy, one run per arm: 56 and 55 passed as shipped (two runs), 55 reply-only, 54 with presence 0.

Added penalty_window_test (header-only, CPU) and a line in docs/DETAILS.md.
2026-10-31 17:46:28 +01:00
Tycho Rasch f6e3042a61 Windows HIP: keep the pinned expert arena's GPU aliases clear of the process's memory, so one start in ten no longer reads every long prompt wrong (#3431, #2960; PR #4787)
On Windows the HIP runtime gives every cudaHostRegister'ed range a second address for the GPU and takes any host pointer inside it for the registered memory, but it does not reserve that range in the process's address space. In about one start in ten the stack of the thread that pins the expert arena lay there: small cudaMemcpy calls from local variables then read (and wrote) the arena, and every long prompt was read wrong until a restart.

- pinned.cu: each registered range's alias is reserved (MEM_RESERVE); a range whose alias already covers memory in use is unregistered and treated as refused by the driver, so it stays resident but unpinned (logged).
- generate.cpp: main keeps the free address space below 1 TiB reserved for the life of the process and runs the engine on a new thread, so its stack and later allocations lie above the aliases (STRATA_STACK_ISOLATE=0 turns it off).
- pinned_alias_test, docs/AMD_HIP.md.

Windows HIP only; other backends keep their behaviour. Author's measurements: 0 bad starts in 110 (main + change 0 in 70, main alone 5 in 70) on an RX 7900 XTX. Here: the HIP objects, pinned_alias_test and pin_budget_test build for gfx1100 with ROCm 10.2 (no gfx1100 card to run them on). The hunk in pinned.hpp was applied by hand because v0.2.9 has the shared-file fields between the lines the PR touched.
2026-10-31 12:52:41 +01:00
xripandNiko1221 9efac55f51 Anthropic tool search: a request with a defer_loading tool returns a call for an undeclared name as a tool_use, and a tool_reference loads the tool's definition where it stands (#4663, PR #4700)
Claude Code declares ToolSearch and a defer_loading placeholder and names its MCP tools only in the conversation; when the model
calls one of them straight away the call came back as text and the session stopped. Ported from PR #4700 by xrip onto v0.2.9
(the server.py hunk for the parser call moved); the PR's own tests are included.

Co-authored-by: Niko1221 <[email protected]>
2026-10-31 12:46:05 +01:00
Niko1221 d88531297c Launch on an Intel Arc card prepares the model itself: setup.py --prepare-pack builds the pack from the GGUF files and fetches gguf-py on its own, the run settings are written as before, and docs/INTEL_ARC.md's quick start is true 2026-10-31 12:05:53 +01:00
Niko1221 86c94204a1 Naming: the DeepSeek sets are ISTA-DAS on screen and in the docs; the ids (--model IST-DAS-2.25bpw) are unchanged and the new spelling is accepted too 2026-10-31 09:51:11 +01:00
Niko1221 97e6f1fe19 Version 0.2.9: Terminal and app 0.2.9, engine and Control 0.1.55 (every Qwen and DeepSeek package, Metal and SYCL included) 2026-10-30 18:40:46 +01:00
Niko1221 4d12701181 Merge f-0281-ds 2026-10-30 18:40:13 +01:00
Niko1221 d96873fc56 Merge f-036-strix-q 2026-10-30 18:40:11 +01:00
Niko1221 2fef430202 Merge f-034-cand (0.2.9 candidate) into f-036-strix 2026-10-30 10:52:31 +01:00
Niko1221 06f212aefe GDN: production-linked parity/bench harness, dispatch probe, FP64 fixtures, contract doc; opt-in STRATA_GDN_TC on 99-KB cards (split v/T/P buffering) 2026-10-30 01:12:19 +01:00
Niko1221 d7cb41ba87 DeepSeek local GGUF: accept both layouts of the IST-DAS sets, the pinned four-shard one and ISTA-DASLab's six-shard one (owner decision, option B)
The download default stays on the four-shard pin cb02422c; nothing is fetched under the new names. The six-shard files (Hub commit a419d74c,
27 October: five shards a set, the Engram as the sixth) and the four-shard files with the first shard ISTA re-published on 26 October (what the
Hub's last four-shard commit 653a9874 serves; #4237 was refused by the app because only the pinned size of shard 1 was known) are taken from
files already here, by size and SHA-256.

- setup.py: DSV41_ISTA6_FILES (15 files), shards6 on the three sets, dsv41_layout_of / dsv41_parts / dsv41_pack_layout; install_dsv41 picks the
  layout of a --gguf-dir folder (both whole: the pinned one), packs the five files with the Engram as --engram, and builds the pack again when it
  was made from the other layout's files. The converted Engram (same name and size, another hash) is accepted beside the pinned one.
- strata_control/dsv41_sets.py, models.py: the app's check and `strata models import` know the six-shard names, the re-published shard 1, and
  that a folder with both whole layouts of one set is that set once.
- strata_cli/launch: --model-path and the guided screen name what is missing in the layout that is there.
- tools/dsv41/pack_gguf.py: --engram as the sixth shard of a six-shard split; the pinned release's Engram serves the six-shard shards too.
- Tests for each; docs/DEEPSEEK41.md.

Builds on the cherry-picks of #4348 (integer tensors in the GGUF reader) and #4632 (StackArc3's six-shard work, option A), which this
commit reworks so the four-shard pin and files keep working unchanged.

Related: #4237, #4256, #4632.
2026-10-30 00:32:32 +01:00
StackArc3 c4e975cc7a Accept ISTA-DASLab's six-shard DeepSeek V4.1 Flash GGUF layout
On 27 October 2026 ISTA-DASLab replaced the four-shard IST-DAS builds on
the Hub's main with six-shard builds (llama.cpp b11870+ layout), and
--model-path with those files failed with "...-00001-of-00004.gguf is
missing". The v0.2.7.1 pin still serves the old files.

- Pin a419d74c: five shards per build named of-00006 and the shared
  Engram as the sixth. The Engram was converted in place (same name and
  size, new hash).
- pack_gguf.py counts an --engram file as the sixth shard only if it is
  one file, not already among the shards, number count-1 of the same
  split, and holds the single tensor per_layer_token_embd.weight.
- An Engram whose finish mark names an old hash is fetched again in the
  same run. One whose mark has no hash is hashed: a match is kept and
  marked, a mismatch is fetched again. A user's own old one is refused
  with the reason.
- A pack from an earlier run is rebuilt unless it names this run's files.
- Six-shard only; four-shard files are ignored and stay on disk. The
  first-release name tables are now empty. No engine code changes.

Related: #4237, #4256.
2026-10-30 00:16:56 +01:00