Files
autocomplete-model/models/README.md
T
HarvmasterandClaude Opus 5.5 d246fb9349
ci / build (push) Canceled after 0s
Models stage-d (default) + stage-e (next-edit companion); extension 0.6.1
- stage-d: next-line / block-close / multi-line fixes, symbols format 2, TS errors in the header.
  Held-out: 0.426 exact / 0.700 edit sim (stage-c 0.405 / 0.689); block close 0.27 -> 0.79.
- stage-e: next-edit (80% exact region rewrites, abstains on 100% of no-edit samples).
- Manifest: nextEditModel (companion) and nextEditFormat (older extensions ignore it, so they
  never use next-edit with the empty-output deletion bug).
- Daemon: next-edit served by the companion model in a second llama-server, started after the
  main model loads.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J39imRDT8L7xYbWzsVWd8A
2026-10-04 00:23:15 +00:00

5.5 KiB
Raw Blame History

Models

Q8_0 GGUF fill-in-the-middle models for the Local Autocomplete extension, fine-tuned from Qwen2.5-Coder-0.5B for TypeScript, Vue and Node.js.

model description prompt order context modes size
stage-d Suffix-first FIM with symbols (incl. namespace imports) + TS errors; better next-line, block closing and multi-line completions spm symbols, simple 531 MB
stage-e Next-edit prediction (rewrites a region around the cursor or answers "no edit"); also does FIM, slightly below stage-d spm symbols, simple 531 MB
stage-c Suffix-first FIM with repo/symbol-context headers (default) spm symbols, simple 531 MB
stage-b Suffix-first FIM without context headers (previous stage) spm raw 531 MB

The extension reads manifest.json, downloads the selected model once, verifies its SHA-256 and runs it locally with llama.cpp. The files are stored with Git LFS; download links use Gitea's /media/ route:

https://git.harvmaster.com/Harvmaster/autocomplete-model/media/branch/main/models/<file>

Evaluation (612 held-out samples from private repos the model never saw, suffix-first prompts)

exact match edit similarity still parses
Qwen2.5-Coder-0.5B (base) 0.270 0.506 0.783
Qwen2.5-Coder-1.5B (base) 0.366 0.623 0.882
stage-b 0.391 0.689 0.952
stage-c (with symbol context) 0.397 0.681 0.954
stage-c + token healing (daemon default) 0.405 0.689
stage-d (symbols + TS errors, healed) 0.426 0.700 0.954
stage-e (symbols + TS errors, healed) 0.412 0.691 0.962

New behaviours (886 further held-out samples), exact match, stage-c → stage-d: closing a block 0.27 → 0.79, next line 0.01 → 0.18, rest of block 0.08 → 0.11, member access 0.63 → 0.66.

Next-edit (stage-e, 445 held-out samples): 80% exact region rewrites (edit similarity 0.99) where an edit was due, and "no edit" on 100% of samples where none was. stage-d uses stage-e as its next-edit companion (nextEditModel in the manifest): the extension downloads both and the daemon runs it in a second llama-server.

The base models were evaluated in their native prefix-first order (they can't do suffix-first). Suffix-first prompts let the editor reuse the KV cache while typing: about 2 tokens re-processed per keystroke, ~90–100 ms end-to-end on a laptop CPU.

Using the files directly

Any llama.cpp-based runtime works, but the prompt must match the training layout. The daemon and shared/prompt.ts are the reference. Suffix-first (spm) order:

<|fim_prefix|><|fim_suffix|>{suffix}<|fim_middle|>{prefix}   → model generates the middle, then <|endoftext|>

stage-c additionally expects a repo-level header: <|repo_name|>{repo}\n<|file_sep|>{path}\n, optionally with a __symbols__.d.ts pseudo-file of available symbols before it.

Training data

Fine-tuned on permissively licensed open-source repositories (below, pinned commits) and on the publisher's own code (not published). Secrets were scrubbed from all training data; held-out evaluation repos were never trained on.

repository commit license
github.com/WiseLibs/better-sqlite3 f8e2d54120 MIT
github.com/CashScript/cashscript 71a243b656 MIT
gitlab.com/electrum-cash/network c7511725a9 MIT
github.com/element-plus/element-plus ad514f79ba MIT
github.com/fastify/fastify 19d5be0daf MIT
github.com/h3js/h3 3afe46b170 MIT
github.com/kysely-org/kysely 4b7287e71b MIT
github.com/bitauth/libauth 60aec239cc MIT
github.com/nuxt/ui e8dd339dfd MIT
github.com/unjs/ofetch 1dbc37fd1c MIT
github.com/vuejs/pinia 98587ca465 MIT
github.com/quasarframework/quasar 0fd7ce30e7 MIT
github.com/unovue/reka-ui e9230140ed MIT
github.com/unovue/shadcn-vue f12a6a098d MIT
github.com/vitejs/vite 10033218d2 MIT
github.com/vuejs/vitepress 56fa6c9df1 MIT
github.com/vitest-dev/vitest 964e1a4404 MIT
github.com/vuejs/core 4ab865a848 MIT
github.com/intlify/vue-i18n 6ef45366e1 MIT
github.com/vuejs/router 07663eb6be MIT
github.com/vbenjs/vue-vben-admin 50f4ede309 MIT
github.com/vueuse/vueuse efdd69a148 MIT
github.com/websockets/ws 297202cdae MIT
github.com/colinhacks/zod 0b216ef674 MIT

License

Apache-2.0 (LICENSE, NOTICE), as a derivative of Qwen2.5-Coder.