Öffentliches Register
Software-GesundheitsberichtSchema 0.26.0 · Metriken 1.13.0 · 2026-07-22 02:14 UTC

varjoranta / turboquant-vllm

TurboQuant+ KV cache compression for vLLM. 3.8x smaller KV cache, same conversation quality. Fused CUDA kernels with automatic PyTorch fallback.

Python · C++ · CudaMIT★ 76 Sterne⑂ 14 Forksseit März 2026Auf GitHub ansehen ↗

varjoranta/turboquant-vllm erreicht einen Gesundheitsindex von 63 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (78/100) ab, am schwächsten bei Community & Adoption (46/100). Zuletzt vor 7 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

63
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

63
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Hannu VarjorantaPersönliches Konto
19 Follower15 öffentliche Reposseit Jan. 2010Avrea

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
PyPIturboquant-plus-vllm0.13.1296019vor 7 Tagencompressioncudainferencekv-cachellmquantizationvllm

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

78Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 7 Tagen
6.2/36Commit-Rhythmus — 9/52 Wochen mit Commits
18/18Commit-Volumen — 330 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year330
human_commit_share1
days_since_last_push7
active_weeks_last_year9
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 17 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 7 Tagen
27/27Release-Rhythmus — ein Release etwa alle 7,7 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count17
latest_release_tagv0.13.12
releases_from_tagsnein
days_since_latest_release7
mean_days_between_releases7,7

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

46Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
30.4/60Stars — 76 Stars
9.3/25Forks — 14 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks14
stars76
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
39.8/80Downloads pro Monat — 960 Downloads/Monat über pypi
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesturboquant-plus-vllm
dependents
ecosystemspypi
total_downloads
monthly_downloads960
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

61Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
1.2/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 95 % der Commits
5.4/13.5Breite der Beitragenden — 4 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 5 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor1
contributors_sampled4
top_contributor_share0,946
Wie die Bewertung erfolgt
46.8/46.8Issue-Lösungsquote — 100 % der Issues geschlossen
36.1/38.3PR-Annahme — 51/54 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 2/25 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs51
open_issues0
closed_issues7
issue_closed_ratio1
closed_unmerged_prs3
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
9.4/25Reichweite des Inhabers — 19 Follower von varjoranta
20.8/25Kontohistorie — 15 öffentliche Repos, Kontoalter ca. 16 Jahre
Verwendete Eingangsdaten
followers19
owner_typeUser
is_verified
owner_loginvarjoranta
public_repos15
account_age_days6.016
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf pypi
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 7 Tagen
20/20Versionshistorie — 19 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesturboquant-plus-vllm
ecosystemspypi
any_deprecatednein
min_days_since_publish7

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

74Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration
9.6/9.6Pre-Commit-Hooks
0/6.4.editorconfig
16/20OpenSSF Scorecard: CI-Tests — 13 out of 15 merged PRs checked by a CI test -- score normalized to 8
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_configja
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

50Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
3/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2/2.5CI-Tests — 13 out of 15 merged PRs checked by a CI test -- score normalized to 8
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 2/25 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 5 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — keine Daten
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): packaging. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

49Gefährdet · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 100 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — turboquant_vllm/py.typed
0/10Reproduzierbare Umgebung
4/10Belegte Agentenpraxis — 2 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configsturboquant_vllm/py.typed
agent_commit_share0,02
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
27/45Typprüfbarer Code — Python mit Typprüfungs-Konfiguration (turboquant_vllm/py.typed)
54/55Handhabbare Dateigrößen — 2/110 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languagePython
largest_source_bytes86.178
source_files_sampled110
oversized_source_files2
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

76GitHub-Sterne
4Mitwirkende
330Commits, letzte 12 Monate
7Tage seit letztem Push
17Releases
1Bus-Faktor
0offene Issues
PyPIPaket-Ökosysteme

Warnungen zur Datenerhebung

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index pypi:turboquant-plus-vllm@0.13.12; advisories assessed against the repository dependency graph instead

Weitere Details

Stern- und Fork-Verlauf 76 ★ / 14 ⇿
76Sterne
14Forks
17Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

020406080761462026-032026-052026-07
Major 0Minor 4Patch 13
OpenSSF Scorecard 5.0 / 10
5.0Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-22 02:14 UTC

10Binary-Artifactsno binaries found in the repo
4Branch-Protectionbranch protection is not maximal on development and all release branches
8CI-Tests13 out of 15 merged PRs checked by a CI test -- score normalized to 8
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 2/25 approved changesets -- score normalized to 0
10Contributorsproject has 5 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 6
RegistryPaketVersionsvorgabeManifest
PyPItorch>=2.1pyproject.toml
PyPIscipy>=1.11pyproject.toml
PyPInumpy>=1.24pyproject.toml
PyPItransformers>=4.57.6pyproject.toml
PyPIsafetensors>=0.4pyproject.toml
PyPIclick>=8.0pyproject.toml
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 1795,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "C": 4042,
        "C++": 152189,
        "Cuda": 145161,
        "Shell": 23623,
        "Python": 1000151
      },
      "pushed_at": "2026-07-14T06:44:32Z",
      "created_at": "2026-03-30T21:08:54Z",
      "owner_type": "User",
      "updated_at": "2026-07-21T19:52:12Z",
      "description": "TurboQuant+ KV cache compression for vLLM. 3.8x smaller KV cache, same conversation quality. Fused CUDA kernels with automatic PyTorch fallback.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Python",
      "significant_languages": [
        "Python",
        "C++",
        "Cuda"
      ]
    },
    "owner": {
      "blog": "https://avrea.com",
      "name": "Hannu Varjoranta",
      "type": "User",
      "login": "varjoranta",
      "company": "Avrea",
      "location": "Helsinki, Finland",
      "followers": 19,
      "avatar_url": "https://avatars.githubusercontent.com/u/192872?v=4",
      "created_at": "2010-01-30T14:08:49Z",
      "is_verified": null,
      "public_repos": 15,
      "account_age_days": 6016
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.13.12",
          "kind": "patch",
          "published_at": "2026-07-14T06:44:35Z"
        },
        {
          "tag": "v0.13.11",
          "kind": "patch",
          "published_at": "2026-07-13T20:47:33Z"
        },
        {
          "tag": "v0.13.10",
          "kind": "patch",
          "published_at": "2026-07-13T18:11:12Z"
        },
        {
          "tag": "v0.13.9",
          "kind": "patch",
          "published_at": "2026-07-13T08:48:16Z"
        },
        {
          "tag": "v0.13.8",
          "kind": "patch",
          "published_at": "2026-06-25T11:14:06Z"
        },
        {
          "tag": "v0.13.7",
          "kind": "patch",
          "published_at": "2026-05-16T17:24:50Z"
        },
        {
          "tag": "v0.13.6",
          "kind": "patch",
          "published_at": "2026-05-15T06:19:00Z"
        },
        {
          "tag": "v0.13.5",
          "kind": "patch",
          "published_at": "2026-05-13T20:03:13Z"
        },
        {
          "tag": "v0.13.3",
          "kind": "patch",
          "published_at": "2026-05-06T16:07:18Z"
        },
        {
          "tag": "v0.13.2",
          "kind": "patch",
          "published_at": "2026-05-06T07:37:24Z"
        },
        {
          "tag": "v0.13.1",
          "kind": "patch",
          "published_at": "2026-04-25T05:58:06Z"
        },
        {
          "tag": "v0.12.0",
          "kind": "minor",
          "published_at": "2026-04-23T09:27:54Z"
        },
        {
          "tag": "v0.13.0",
          "kind": "minor",
          "published_at": "2026-04-23T09:26:36Z"
        },
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2026-04-23T09:27:54Z"
        },
        {
          "tag": "v0.10.1",
          "kind": "patch",
          "published_at": "2026-04-18T19:36:05Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2026-04-17T04:58:24Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2026-04-16T03:11:03Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "c8a7e0a73b2b9bb93dc66c9380dceab985a0fbc5",
          "body": "…(#61)\n\nvLLM 0.25 made FusedMoE a factory function (expert module is RoutedExperts) and added shared_experts= to the MoE apply signature. Match RoutedExperts across versions via _moe_module_types(); apply/apply_monolithic forward **kwargs. GPU-verified: OLMoE-1B-7B online TQ3 decodes on A100/vLLM 0.25. + 5 CPU tests. Ships v0.13.12.",
          "is_bot": false,
          "headline": "fix: vLLM 0.25 online MoE compression (RoutedExperts + apply kwargs) …",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-07-14T06:43:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a7b62a43dd418d2fc16c0687d2f7df541d320a8",
          "body": "Default VLLM_USE_AOT_COMPILE off. vLLM 0.25 (torch>=2.10) enables AOT compile, which binds params by name (incl. 'weight'); the plugin replaces .weight with compressed buffers -> KeyError at engine init on dense TQ models (Qwen3-8B). GPU-verified fix on A100/CUDA13/vLLM 0.25 (decodes; 6.98 vs 91.71 tok/s bs=1). + AOT regression test, README 0.25 status. Ships v0.13.11.",
          "is_bot": false,
          "headline": "fix: vLLM 0.25 AOT-compile incompatibility — dense models work (#60)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-07-13T20:45:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79d2fe03e721ea1a17ecc410082276d16635de15",
          "body": "A Qwen3-8B TQ3 benchmark on vLLM 0.25 (A100/CUDA13, v0.13.10) revealed a\nsecond 0.25 break beyond the FusedMoE fix: KeyError: 'weight' in the model\nforward during profile_run — the same model's TQ3 path worked on vLLM 0.19.\nOnly tiny dense models (Qwen2.5-0.5B) currently decode on 0.25. Corrects the\nearlier over-optimistic 'works on 0.25.x' claim; recommends pinning vLLM <= 0.20.\n\nClaude-Session: https://claude.ai/code/session_01RWwoqrXcWowTJcUqWhfkdG",
          "is_bot": false,
          "headline": "docs(readme): honest vLLM 0.25 status — partial, not complete",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-07-13T19:50:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "933afec738d7c1cdb50b12bd8d42b945bc47054e",
          "body": "…v0.13.10)\n\n'Works with any stable vLLM release' was false — v0.13.9 broke on vLLM 0.25.0\nuntil the v0.13.10 FusedMoE isinstance fix. Replace with the GPU-verified\ncompat story (0.19-0.20 + 0.25.x Linear path; online MoE compression skipped\non 0.25.x where FusedMoE is no longer a plain class).\n\nClaude-Session: https://claude.ai/code/session_01RWwoqrXcWowTJcUqWhfkdG",
          "is_bot": false,
          "headline": "docs(readme): correct vLLM compatibility claim (0.25.x support as of …",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-07-13T18:15:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5fa5d81168df3d0040a8605ce50bcba175d6f12a",
          "body": "…(#59)\n\nGuard FusedMoE isinstance with isinstance(FusedMoE, type) — vLLM 0.25.0 exports FusedMoE as a non-None non-class object, breaking the TQ_WEIGHT_BITS online path at engine init even on dense models. GPU-verified on vLLM 0.25.0/A100/CUDA13 (eager + graphs decode). Also fixes stale CUDA-gated tests (PolarQuantTorch bits->bit_width; weight_dequant missing block_size). Ships as v0.13.10.",
          "is_bot": false,
          "headline": "fix: vLLM 0.25 compatibility (online path) + stale CUDA-test cleanup …",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-07-13T18:06:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57f53952a07ef9eb0c9367843123462862ec55a1",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v0.13.9",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-07-13T08:42:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd7461d963183c7d4995764988d36441a17f22a6",
          "body": "…(#58)\n\nFull-codebase correctness audit, hardened by four adversarial review rounds (15 -> 8 -> 4 -> 1 -> 0 findings).\n\nHigh-severity:\n- weight_quant: learned-rotation (SpinQuant-style) wrappers quantized with R but dequantized with the fixed WHT, producing garbage output. Reconstruction is now cent\n[…]\n but were not executed on hardware. Requires a GPU smoke run (Qwen3-8B TQ3 decode) before a release is cut.\n\nAuthored by @gaby (Claude Code, 4-round loop review). Reviewed and verified by @varjoranta.",
          "is_bot": false,
          "headline": "fix: correctness across quant, loader, REAP pruning, AWQ export, MLX …",
          "author_name": "Juan Calderon-Perez",
          "author_login": "gaby",
          "committed_at": "2026-07-13T08:39:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8ef4c6c4af918f64c1292c3c1b51495d7b69faad",
          "body": "…CUDA13 build (#57)\n\nAudit of the `--quantization turboquant` weights path fixing three silent-corruption bugs and extending GPU build support to datacenter Blackwell + CUDA 13.x.\n\nCorrectness fixes:\n- csrc: drop the host-side \"skip if config unchanged\" __constant__ upload cache — it records no memc\n[…]\nequires a GPU compile + smoke test (sm_80+, ideally Blackwell + TP>=2 MoE) before any release is cut.\n\nAuthored by @gaby (Claude Fable 5, MAX mode + loop review). Reviewed and verified by @varjoranta.",
          "is_bot": false,
          "headline": "fix: TP/EP MoE load accounting, CUDA-graph-safe constants, Blackwell/…",
          "author_name": "Juan Calderon-Perez",
          "author_login": "gaby",
          "committed_at": "2026-07-11T08:12:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bea0bedaacc03311c49187a16d24a6235b23c0ba",
          "body": "Sparse-MLA KV-cache coverage for the vllm-project/vllm#38476\n(TRITON_MLA_SPARSE) backend. The KV monkey-patch now reaches\nSparseMLAAttentionImpl, which is a sibling of MLAAttentionImpl and was\npreviously missed by the MLACommonImpl base-class patch (turboquant-vllm\n#56). No change for users not on the #38476 branch.",
          "is_bot": false,
          "headline": "chore(release): v0.13.8",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-06-18T10:48:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d03e3cc476a33eaa120f5abe92e7ab6e870c602d",
          "body": "…ession\n\nThe KV monkey-patch wrapped FlashAttentionImpl and the MLACommonImpl base\nclass, covering all standard MLA backends (TritonMLA, FlashAttnMLA,\nFlashMLA). The sparse-MLA backend from vllm-project/vllm#38476\n(TRITON_MLA_SPARSE, SM8x/11x/12x) ships SparseMLAAttentionImpl as a sibling\nof MLAAtte\n[…]\nignal via\n__wrapped__, decode-only skip, resolver None-when-absent, resolver walks to\nnext candidate). Existing patch/compressor suite green (13 passed). ruff +\nruff format clean.\n\nReported-by: zt1024",
          "is_bot": false,
          "headline": "feat(vllm_patch): patch sparse-MLA backend (vllm #38476) for KV compr…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-06-18T10:16:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b545ab3b1ea41ad4f6bea4db66694e15139f6476",
          "body": "The wall #9/#10 + prebuilt-verification changes (f9bd39d..0c34b38) were\nnot ruff-format clean, so the pre-commit (ruff v0.14.0) check failed on\nmain while CPU tests stayed green. Formatting-only, no behavior change;\ntests re-verified.",
          "is_bot": false,
          "headline": "style: ruff-format the v0.13.7 additions (CI pre-commit was red)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-16T17:36:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c34b38c3cc5295e8d5b3f2346ea035443eecf42",
          "body": "build() accepted any importable prebuilt _native/*.so before checking\nthe local GPU arch, so on a new architecture (e.g. DGX Spark / GB10\nsm_121) a bundled prebuilt could silently win over a correct on-device\nJIT build, making perf diagnosis unreliable (no crash, just untuned\nkernels).\n\n- On a CUDA \n[…]\n- Bundled builds (TQ_CUDA_BUNDLE=1) now write the arches manifest.\n- CPU / no-GPU hosts accept prebuilt as before (no behavior change).\n- tests/test_build_prebuilt.py (7 cases).\n\nCo-authored-by: codex",
          "is_bot": false,
          "headline": "v0.13.7: verify prebuilt CUDA extension arch coverage before use",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-16T17:24:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8c9faedfa513fceea69aa57565e964bc87855896",
          "body": "…hape (wall #10)\n\nThe packed-only heuristic (f9bd39d) trusted the registered in_dim to\ncompute n_groups, so DSV4-Flash's w2 (which mis-reports in_dim:\nregistered 1024 vs real 2048) was mis-corrected to (256,8192,1024)\ninstead of (256,4096,2048) -> 'from_packed expected norms shape\n(2097152,8) for (2\n[…]\nnow covers w13\n(out under-reported) + w2 (in under-reported) + standard no-op +\nround-trip for both + inconsistent-not-accepted; full native-MoE\nsuite green (47 passed, 5 CUDA-skipped), no regression.",
          "is_bot": false,
          "headline": "fix(vllm_quant): derive native MoE shape from norms, not registered s…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-16T11:30:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f9bd39d44e968cb8ab93069ccf4549ab921b19f7",
          "body": "DeepSeek-V4-Flash registers w13_weight with the un-fused out_dim\n(moe_intermediate_size=2048) while the native TQ3 checkpoint packs the\ngate_up-fused w13 (2*2048=4096). _normalize_packed_layout and\nCompressed3D.from_packed derived expected shapes from the registered\nshape, so they expected half the \n[…]\npy (6 cases\nincl. corrected-shape decompress round-trip + inconsistent-layout still\nraises) plus full native-MoE suite green (41 passed, 5 CUDA-skipped),\nconfirming no regression to the standard path.",
          "is_bot": false,
          "headline": "fix(vllm_quant): recover true MoE out_dim from packed tensor (wall #9)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-16T10:19:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "034f6c21a4b649a903da66da7bdbaf938abd63d2",
          "body": "get_all_weights pre-applied model.hf_to_vllm_mapper to raw disk names\nand yielded the mapped name. vLLM's AutoWeightsLoader.load_weights\napplies the same mapper again, so non-MoE weights were mapped twice.\nWith non-idempotent rules (DSV4 head.weight -> lm_head.weight) the\nsecond pass corrupts the na\n[…]\nill used for tq/MoE structure detection and\nmeta-param lookup; only the pass-through yield now emits raw_name so\nvLLM applies the mapper a single time. Sibling vLLM hardening:\nvllm-project/vllm#42777.",
          "is_bot": false,
          "headline": "fix(vllm_quant): yield raw weight names so vLLM maps exactly once",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-16T04:30:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "08db1a54564afcc876782ee4f1de06d02dc01b27",
          "body": "Promised in issue #46. Reader feedback was that the bulleted\n'What this package ships today' list is hard to navigate — six\ncomponents feel disconnected when they actually layer cleanly.\n\nAdds an ASCII layered overview between the upstream-callout\nblockquotes and the Quick start section. Five layers\n[…]\nn alone vs from\nthe kernels on top.\n\nA graphical diagram + dedicated architecture page is on the\nfollow-up list; the ASCII version ships now since it covers the\nspecific confusion namgyu-youn flagged.",
          "is_bot": false,
          "headline": "docs(readme): add 'Architecture at a glance' layered diagram",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-15T14:32:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1de418e39aa6fe6780a5410eea2b9278eaa1da67",
          "body": null,
          "is_bot": false,
          "headline": "fix(checkpoint): preserve raw source config fields",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-15T12:37:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "154f9eccfdcdd0e0f42af65210ead5fb65577329",
          "body": null,
          "is_bot": false,
          "headline": "feat(checkpoint): plumb trust_remote_code for TQ3 export",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-15T08:41:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "864921fa7f5712b08861b538ce5e725983ffa3b7",
          "body": null,
          "is_bot": false,
          "headline": "fix(checkpoint): accept int8 MXFP4 source weights",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-15T08:09:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a98346d39db55962e5b0530ba9fc5af258736f95",
          "body": "Adds source-quantized checkpoint handling to save_tq3_checkpoint() so\nthat author-quantized HF releases (DeepSeek V4 Flash, future FP8/FP4\nfamilies) can be converted to native TQ3 without a silent\n`tensor.float()` corrupting the math.\n\nDetection + guarding\n- New `UnsupportedQuantizedSourceError` rai\n[…]\nmpressor.*`) skipped, not\n  compressed.\n\nFollow-up polish captured in the PR description.\n\nAuthored by codex CLI on @varjoranta's machine, reviewed by Claude.\n\nCo-authored-by: codex <codex@openai.com>",
          "is_bot": false,
          "headline": "feat(checkpoint): FP8/MXFP4 source dequant + DeepSeek V4 skip patterns",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-15T07:41:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "20527991456e3d759ce10972babad094758d403d",
          "body": "Bumps version from 0.13.5 to 0.13.6 to mark the audit-driven hardening\nround (PRs #48, #49) and the Qwen3.6-27B dense-hybrid doc (PR #47).\n\nNo behavior change on happy paths. The three landed audit fixes only\nflip silent-failure paths to loud-failure ones, plus a build-helper\nedge case.",
          "is_bot": false,
          "headline": "v0.13.6: audit fixes + Qwen3.6-27B doc",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-15T06:18:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f29d5b7b8699edc156ed1050ad899ad5e5bbda4",
          "body": "…13.5)\n\nAdds the Qwen3.6-27B Path A proof-point alongside the existing 35B-A3B\nMoE entry: 14.46 tok/s graphs-on, 13.93 tok/s eager on RTX PRO 6000 96GB\nat bs=1. 15.37 GB compressed (3.6×). Same plugin code, dense+hybrid\narchitecture path (16 full-attention + 48 GatedDeltaNet layers).",
          "is_bot": false,
          "headline": "docs(readme): add Qwen3.6-27B dense-hybrid headline + matrix row (v0.…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-15T06:17:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51d0bfeff4d0a1cccc61c8a4d4d9bced11198844",
          "body": "Converts three silent-failure paths into loud-failure paths. Each was\npreviously easy to ship past — the failure was a corrupted artifact\ndiscovered weeks later, not an immediate crash.\n\n1. AWQ export (`compress_and_export`): MoE 3D expert tensors were\n   silently skipped, producing a dense-only AWQ\n[…]\nvice validation).\n\nCherry-picked from gaby/turboquant-vllm#45.\n\nCo-authored-by: gaby <gaby@users.noreply.github.com>\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: fail fast on unsupported MoE export/load paths",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-15T06:16:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f26e55ad3619ec3d7fa89f842c3f36e355ca7b6f",
          "body": "Fixes three bugs surfaced by an automated codebase audit:\n\n1. `_cuda_version_tuple()` in both `build.py` and `flute_build.py` rejected\n   valid CUDA toolkit versions like `\"12\"` (no minor component). The unpack\n   `major, minor = v.split(\".\")[:2]` raised ValueError and fell back to\n   (0, 0), which \n[…]\nupstream by gaby's\ncopilot-swe-agent run, shepherded by @gaby.\n\nCo-authored-by: gaby <gaby@users.noreply.github.com>\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: harden CUDA version parsing and REAP calibration fallback",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-15T06:16:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6be95945046bf8a3f9cf099ea5ba42b15da1b073",
          "body": "v0.13.5: native-packed MoE for Qwen3.6 family + multimodal mapper-aware regroup",
          "is_bot": false,
          "headline": "Merge pull request #45 from varjoranta/fix/save-tq3-multimodal-configs",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T20:10:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "446486f61dac0e5db0130fc133b039e96b3846a8",
          "body": "End-to-end Qwen3.6-35B-A3B-TQ3-native through vLLM 0.20.2 +\nFlashInfer CUTLASS MoE backend. Pre-fused expert checkpoint layout\n(.experts.gate_up_proj.tq_packed / .experts.down_proj.tq_packed),\nmapper-aware regroup for multimodal MoE, scratch-pool device safety,\nEPLB/monolithic backend delegation, EP\n[…]\nn 3.3× slower\n\nGSM8K-200 follow-up (eval workload exceeds the supervisor harness\npolling window; will run as a standalone eval).\n\nPublished: https://huggingface.co/varjosoft/Qwen3.6-35B-A3B-TQ3-native",
          "is_bot": false,
          "headline": "v0.13.5: native-packed MoE for Qwen3.6 family",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T20:02:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3bee522ec00f692650f71ebe0e6bd7cd6ead0b7b",
          "body": "Line-length collapses on four log/error strings + spacing around\n_try_pre_fused_rename. No behavior change.",
          "is_bot": false,
          "headline": "style: ruff format on v9 edits (unblock PR #45 CI)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T17:58:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e583e5e069011d82d5eb06d7b1aad6f06842ba4",
          "body": "Codex review of v8 (89213e0) suggested two defensive additions:\n\n1. Add bare w13/w2 aliases to _NATIVE_MOE_PRE_FUSED_TO_TARGET. Safe\n   because pre-fused names lack a per-expert index (no collision with\n   per-expert 'experts.0.w2').\n\n2. Handle optional .weight suffix in the dispatch regex. Catches \n[…]\ners correctly (with/without\n  .weight, gate_up_proj/down_proj/w13/w2/w13_weight/w2_weight)\n- Per-expert names (Qwen3-30B-A3B layout) still return None and fall\n  through to the per-expert regroup path",
          "is_bot": false,
          "headline": "feat(moe): widen pre-fused dispatch + test coverage (v9, codex review)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T16:47:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "89213e0518560b40755900e1c54aba445ec870e6",
          "body": "Qwen3.6-style native-packed checkpoints store experts pre-fused on\ndisk: '.experts.gate_up_proj.tq_packed' (gate+up concatenated across\nall experts) and '.experts.down_proj.tq_packed'. No per-expert index,\nno '.weight.' suffix.\n\nv7's mapper-aware regroup correctly applied the hf_to_vllm_mapper but\ns\n[…]\n_packed\n\nNo regroup state, no per-expert buffering — single-pass passthrough.\nThe original per-expert regroup path is preserved for Qwen3-30B-A3B\nand other models that store one expert per safetensor.",
          "is_bot": false,
          "headline": "fix(moe): direct yield for pre-fused expert tensors (v8)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T16:43:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4db9e611efbe64db618c03151df6f6199c420798",
          "body": "v7's mapper-aware regroup fired the zero-yield raise on Qwen3.6-35B-A3B,\nproving the guard works but not pinpointing the mismatch. Add bounded\ndiagnostic logging at every early-return point in\n_maybe_flush_native_moe_target so the next run identifies whether:\n- regex never matches (proj naming diffe\n[…]\n (FusedMoE structure changed)\n\nAlso log meta_params .experts. sample at generator startup so we see\nwhat shape of keys we're matching against. Rate-limited to 5 per\ncategory to keep log noise bounded.",
          "is_bot": false,
          "headline": "diag(moe): log first regroup misses with full context (v7.1)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T16:21:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d52d277faa75c2f2c4157d67a701cf09e4248037",
          "body": "- Define module-level tuple for the four placeholder params, replace\n  three existing duplicate site-local copies (delete loop in finalize,\n  native_required set in create_weights, meta-placeholder check in\n  process_weights_after_loading).\n- Drop narrating-what comments added in v7; keep the Why: e\n[…]\n.\n- Shorten the three v7 RuntimeError messages: the regroup-level raise\n  carries the cause explanation; downstream guards just identify state.\n\nNo behavior change. Simplify pass on v7 diff (ff94076).",
          "is_bot": false,
          "headline": "refactor: hoist _NATIVE_PACKED_PARAM_NAMES + trim v7 verbosity",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T15:21:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ff9407695b9400fb86d4c7ce2d8971542bdb4099",
          "body": "For multimodal MoE models (Qwen3-VL-MoE / Qwen3.6-35B-A3B), vLLM's\nhf_to_vllm_mapper rewrites parameter names before AutoWeightsLoader\nmatches against named_parameters(). v6 and earlier compared HF-side\nnames against post-mapper named_parameters keys in\n_maybe_flush_native_moe_target, so every per-e\n[…]\nspecific errors\n   instead of falling through into the decompress assert.\n\nThis fixes the v6 → v7 regression: load tier completes for Qwen3.6-35B-A3B\nwithout the AssertionError at weight_quant.py:839.",
          "is_bot": false,
          "headline": "fix(moe): mapper-aware native MoE regroup + reject meta in Compressed3D",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T15:04:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f24161ed96db43265dc4ed39785890b982675e08",
          "body": "TurboQuantFusedMoEScratchPool inherited its allocation device from\nw13_compressed.packed.device. When _finalize_native_packed_moe runs\nduring vLLM's meta-init context, the compressed tensor can be on meta,\nwhich silently lands the pool's bf16 dequant buffers on meta too.\n\nWhen that happens, every _b\n[…]\n. Fall back to CPU when meta\nis the only signal (test environments). Assert at construction so any\nfuture regression fails loud at pool init instead of via 60 residual-meta\nwarnings during model load.",
          "is_bot": false,
          "headline": "fix(moe): force scratch pool on real device, never meta",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T08:06:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7113a741424c31ada7e42009aeb6cbba1a842009",
          "body": "Map router topk ids through the layer expert map before sparse MoE dequant so expert-parallel ranks decompress local expert slots instead of treating global ids as local indices.",
          "is_bot": false,
          "headline": "fix(moe): map sparse dequant experts for EP",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T06:35:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7acfde76f9a27a9ce5fb6078a7c0b0afe53babc0",
          "body": "Apply the same vLLM routing-tensor skip set to residual meta diagnostics so intentionally-meta tensors like _expert_map do not mask real leaks after native MoE finalize.",
          "is_bot": false,
          "headline": "fix(moe): filter expected residual meta tensors",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T06:27:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ada1de04b308ca5961eac48c7ee9129600ef0f1",
          "body": "Add full-dequant apply_monolithic delegation for monolithic MoE backends, and reject native-packed FlashInfer TRTLLM explicitly because its block-layout transform cannot be represented by the native compressed rows.",
          "is_bot": false,
          "headline": "fix(moe): handle monolithic backend delegation",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T06:26:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08e6aab6d78a8c8caa6d8561a39303611a4255c2",
          "body": "Expose the underlying unquantized MoE method's EPLB support from TurboQuantOnlineMoEMethod so vLLM does not reject EPLB during FusedMoE construction before the runtime wrapper is installed.",
          "is_bot": false,
          "headline": "fix(moe): delegate EPLB support before wrapping",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T06:24:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39e4b00a5fd446ce972cda95a06722309fbcea2f",
          "body": "Keep native/online MoE dequant scratch buffers on the per-model TurboQuantConfig instead of a module global, avoiding accidental buffer sharing across independent LLM instances in one process.",
          "is_bot": false,
          "headline": "fix(moe): scope native scratch pool to config",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T06:07:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "355084cd4c8578d0e1a3ebf2c44fc7077fd41dd6",
          "body": "When native-packed TQ3 loads into FlashInfer CUTLASS, reorder compressed w13 rows from gate/up to up/gate so runtime sparse dequant writes the layout vLLM's kernel setup expects.",
          "is_bot": false,
          "headline": "fix(moe): swap native w13 for FlashInfer CUTLASS",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T06:01:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88224ed9949185bdbdfa4208158cecd6edf95e69",
          "body": "Pass the initialized unquantized MoE method into TurboQuantFusedMoEMethod so vLLM still sees its moe_kernel, quant config, and EPLB support after quant-method replacement.",
          "is_bot": false,
          "headline": "fix(moe): preserve base method on TQ wrapper",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T06:00:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87c162139d60bf248ce4af989100c0c16b68b804",
          "body": "…__dict__)\n\nReplace v4's constructor-based path with vLLM's reload.meta.materialize_meta_tensor\nidiom: torch.empty_strided preserves stride exactly, __class__ swap preserves\nsubclass without __init__ risk, __dict__.copy() preserves weight_loader and other\ncustom attrs. Direct assignment to owner mod\n[…]\nr.runner / method._unquant.moe_kernel\nescapes the sweep.\n\nRegression test in tests/test_native_moe_loader.py covers param + buffer\nmaterialization, stride preservation, custom attrs, and SKIP_TENSORS.",
          "is_bot": false,
          "headline": "fix(moe): vLLM-canonical meta materialize (empty_strided + __class__/…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T05:51:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bd897ada14650cd007e6b04508518bfb74aa3f9b",
          "body": "…zation\n\nempty_like(meta) and meta.to(cuda) both fail with \"Cannot copy out of meta\ntensor; no data!\" because PyTorch routes them through a copy path that\nneeds the source's storage. Use torch.empty(shape, dtype, device, layout)\nfor pure construction with no source-data dependency.\n\nWhen the subclas\n[…]\nd a final w13/w2 rebind to the scratch pool after the materialize\nsweep, since the sweep would otherwise clobber the pool binding with\nempty zeros when _replace_quant_method puts those params on meta.",
          "is_bot": false,
          "headline": "fix(moe): use torch.empty + full-Parameter replace for meta materiali…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T03:58:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "070b8d1c6aee0495c6154d26a0d0eab3b68e914b",
          "body": "The previous attempt used torch.zeros(shape, dtype, device='cuda') which\ncaused 'variable and tensor have incompatible tensor type' on vLLM's\ncustom Parameter subclasses (ModelWeightParameter,\nChannelQuantScaleParameter, etc.) whose set_data validates against the\noriginal tensor's layout/type.\n\nUse \n[…]\new\nsubclasses that still reject. Log any failures by name so a third-pass\ncan be written if needed.\n\nAlso separate 'materialized' and 'failed' lists in the log output so\nthe diagnostic is unambiguous.",
          "is_bot": false,
          "headline": "fix(moe): use empty_like+to() fallback for meta-param materialization",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T03:28:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a1be16d701d0f1e2593e33f6429b545d3eccaff1",
          "body": "The PR #44 native-packed MoE finalize path rebinds w13_weight and w2_weight\nto real CUDA tensors (pool.w13/w2), and the existing diagnostic walked\nthose four named slots. But vLLM 0.20+'s FlashInfer CUTLASS MoE backend\nreads ADDITIONAL tensors (per-expert scales, packing tables, FP8 staging\nbuffers)\n[…]\nant scheme uses them).\n\nLogs the materialized names so the run output documents the rescue,\nwhich also serves as forensic data: the names tell us what FlashInfer\nexpects that PR #44 didn't anticipate.",
          "is_bot": false,
          "headline": "fix(moe): materialize all meta tensors after native MoE finalize",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-13T03:07:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5171a96076eb150daf01904f17dd90f8dd5c0d6b",
          "body": "The 3-bit unpack kernels in turboquant_vllm/triton_ops.py compute byte_idx0\nand byte_idx1 for the position within a 128-wide group, then load both bytes\nand use 'crosses' to decide whether the 3-bit code spans them. But the b1\nload uses only the row-dim mask:\n\n    b1 = tl.load(packed_ptr + ptrs1, ma\n[…]\n(tq_fused_gemm kernel)\n  triton_ops.py:~505  (tq_fwht_input_gemm kernel)\n\nDiagnosis attribution: codex review of the kernel after the v0.13.4 run\non A100 confirmed the OOB pattern via static analysis.",
          "is_bot": false,
          "headline": "fix(triton): mask b1 load by 'crosses' to avoid 1-byte OOB at offs_k=127",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-12T18:54:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a4766ba35664f73b2c1a5835d1d7afab4a336e9d",
          "body": "PR #31 added conv1d to turboquant_vllm/weight_quant.py:_SKIP_PATTERNS to\nunblock Qwen3-Next / Qwen3.5 / Qwen3.6-A3B family (GatedDeltaNet / linear-\nattention conv blocks). The checkpoint.py copy was missed, so\nsave_tq3_checkpoint still quantizes conv1d weights into native packed\ncheckpoints — silent\n[…]\nent the sync requirement in a comment so\nfuture drift is caught faster.\n\nReported by codex-agent code review and listed as P0 in\nverda-model-bench/.plans/turboquant-vllm-cleanup-pending-2026-05-12.md.",
          "is_bot": false,
          "headline": "fix(checkpoint): add conv1d to _SKIP_PATTERNS (sync with weight_quant)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-12T14:21:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2c4ea2062e63a8688e484776662109cc0e5e5f98",
          "body": "Single blank line after import inside the new HF-hub branch — pure formatting.",
          "is_bot": false,
          "headline": "style: ruff format on save_tq3_checkpoint multimodal config block",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-12T14:07:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3e314e0f03175c5ca6721376cadad69f8f1da6e",
          "body": "…q3_checkpoint\n\nFor models loaded from HuggingFace Hub (not a local path), save_tq3_checkpoint\nonly persisted config.json + tokenizer files via AutoConfig.save_pretrained()\nand AutoTokenizer.save_pretrained(). It silently dropped multimodal/processor\nsibling configs (preprocessor_config.json, image_\n[…]\nndidate sibling config\nand copy into output_dir if present in the source repo. Existing local-path\nbranch already does the equivalent via shutil.copy2 on every *.json file.\n\nVersion bumped to v0.13.4.",
          "is_bot": false,
          "headline": "fix(checkpoint): preserve multimodal sibling configs in HF-Hub save_t…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-12T14:03:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d931b61f997757db8a4d3b2109b637dcfb0f6112",
          "body": "* Support native-packed TQ3 MoE checkpoint loading\n\n* style: ruff format vllm_quant.py\n\nPure formatting — re-wrap long lines and fix one over-indented\nlogger.info block. No semantic change.\n\n---------\n\nCo-authored-by: Hannu Varjoranta <varjo@avrea.com>",
          "is_bot": false,
          "headline": "Support native-packed TQ3 MoE checkpoint loading (#44)",
          "author_name": "Kenneth Tang",
          "author_login": "ChengYen-Tang",
          "committed_at": "2026-05-12T06:47:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f8aad0c6a4f32218182aad26ae8d1aa00b18c55",
          "body": null,
          "is_bot": false,
          "headline": "Improve TurboQuant CUDA build and prebuilt loader (#43)",
          "author_name": "Kenneth Tang",
          "author_login": "ChengYen-Tang",
          "committed_at": "2026-05-12T06:42:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f966df194454896ba9c0d7acf9125571ce8f718",
          "body": "* Wrap CUDA dequant fallback in torch.library custom op\n\n* style: ruff format register_fake signature\n\nWrap the long parameter list across multiple lines to satisfy\nruff format. Pure formatting change, no semantic impact.\n\n---------\n\nCo-authored-by: Hannu Varjoranta <varjo@avrea.com>",
          "is_bot": false,
          "headline": "Wrap CUDA dequant fallback in torch.library custom op (#42)",
          "author_name": "Kenneth Tang",
          "author_login": "ChengYen-Tang",
          "committed_at": "2026-05-12T06:38:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "496498d51c95127f8a23eea3231996f06454b861",
          "body": null,
          "is_bot": false,
          "headline": "release: bump version to 0.13.3",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-06T16:07:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3d82fb9f93921dba5dfbc080cb926d4c3a64471",
          "body": "…) (#41)\n\n* fix(loader): strip FP8 leftover scales in TQ3-native checkpoints (#39)\n\n`fno2010/MiniMax-M2.7-TQ3` and similar checkpoints originated as FP8\nblock-quantized, then were re-quantized to TQ3. The TQ3 packing replaced\nthe FP8 weights with `.weight.tq_packed` + `.weight.tq_norms`, but the\nFP8\n[…]\nring + drop redundant test_known_suffixes_present\n  (parametrized cases already cover the suffixes)\n* drop one duplicate weight_scale_inv parametrize case + WHAT-narration\n  comments in negative cases",
          "is_bot": false,
          "headline": "fix(loader): strip FP8 leftover scales in TQ3-native checkpoints (#39…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-06T16:06:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a5b69e0245265165d55be4c1ecbca9103a7bf2c3",
          "body": null,
          "is_bot": false,
          "headline": "release: bump version to 0.13.2",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-06T07:36:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34145e64c224d0e52122ef00ff1f5a475cc8c2b8",
          "body": "* fix(vllm_quant): hoist TurboQuantConfig to module top-level (#39)\n\n`TurboQuantConfig` was defined inside `register()` as a closure.\ncloudpickle serializes closure-defined classes by value, walking the\nclosure cells — which transitively reach `torch.ops.turboquant.*`, an\n`_OpNamespace` that pickle \n[…]\nnd-trip (runs with vLLM, exercises the actual\n  failure path)\n\nReported by @ChengYen-Tang on `fno2010/MiniMax-M2.7-TQ3` + Docker.\n\n* fix: ruff format — extra blank line before _materialize_and_process",
          "is_bot": false,
          "headline": "fix(vllm_quant): hoist TurboQuantConfig to module top-level (#39) (#40)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-05-06T07:32:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9311d914bb0b482cd3d4b1e26248648be142dcfb",
          "body": null,
          "is_bot": false,
          "headline": "release: bump version to 0.13.1",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-25T05:57:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3acdf7888fc16c58622b90240d058a8ee8a2390",
          "body": "…irectly\n\nTwo related cleanups motivated by post-v0.13 nsys profile (2026-04-25):\n\n## Partial-rotary CUDA routing\n\nBefore: `_can_use_full_wht_kernels()` gated BOTH the Triton fast path AND\nthe CUDA C++ extension path on `rotary_dim is None`. Partial-rotary\nq_proj / k_proj layers (Qwen3.6-35B-A3B, Mi\n[…]\n test_block_diagonal_wht.py)\nthe dense-side bottleneck for partial-rotary models should drop further.\n\nNote: this branch is on top of `fix/cuda13-dup-template` (PR #37). Both\nare required for v0.13.1.",
          "is_bot": false,
          "headline": "perf(cuda): route partial-rotary q/k_proj through CUDA + write bf16 d…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-25T05:57:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "40526d0fa5628b87d29eba8855488089610462c2",
          "body": "…oad ambiguity (#37)\n\nThe 4-arg template (OutputT, GROUP_SIZE, BITS, BLOCK_SIZE=GROUP_SIZE) added\nin PR #36 (block-diag WHT) subsumes the 3-arg template added in PR #35\n(Phase 2 sparse MoE). When called as `<OutT, GS, B>` the default argument\ndisambiguates for older nvcc but CUDA 13 rejects it as am\n[…]\nfault, which is functionally\nequivalent to the deleted template (verified: NUM_STAGES formula equal when\nBLOCK_SIZE==GROUP_SIZE, norm uses rsqrtf(BLOCK_SIZE) vs rsqrtf(GROUP_SIZE)\nequal in that case).",
          "is_bot": false,
          "headline": "fix(cuda): remove duplicate sparse_3d_kernel template — CUDA 13 overl…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-25T05:56:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "221da522d54694afe62423fe226ca02da08dddd6",
          "body": null,
          "is_bot": false,
          "headline": "release: bump version to 0.13.0",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-23T08:35:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e31ff0cbae3093857379eff41c89452f83b0ffbd",
          "body": "* docs: v0.12.0 — sparse MoE dequant, 8.4× Qwen3-30B-A3B decode\n\nAdds the v0.12.0 bullet to the feature list and a headline tok/s number\nto the quickstart, documenting the PR #33 win: MoE apply() now dequants\nonly active experts, 1.22 → 10.23 tok/s at bs=1 decode on\nQwen3-30B-A3B-Instruct-2507 on H1\n[…]\nmv_bs1.py: fix ruff E702 (multiple statements per\n  line) + F401 (unused import) that had been blocking pre-commit.\n- ruff format sweep: 14 files reformatted to current ruff style; no\n  logic changes.",
          "is_bot": false,
          "headline": "perf(cuda): block-diagonal WHT — 10.1× decode on Qwen3.6-35B-A3B (#36)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-23T08:34:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "13f75d9497faa3b098a1872b3fbdf12cf7f6ecb3",
          "body": "…tion (#35)\n\n* docs: v0.12.0 — sparse MoE dequant, 8.4× Qwen3-30B-A3B decode\n\nAdds the v0.12.0 bullet to the feature list and a headline tok/s number\nto the quickstart, documenting the PR #33 win: MoE apply() now dequants\nonly active experts, 1.22 → 10.23 tok/s at bs=1 decode on\nQwen3-30B-A3B-Instru\n[…]\ninto is strictly faster and safer there.\n\nKeeps the sparse fast path for bs=1 decode (topk_ids.numel() = top_k,\ntypically 8 << n_experts=128) which is the case that delivers the 8.4x\nmeasured speedup.",
          "is_bot": false,
          "headline": "perf(moe): Phase 2 CUDA sparse kernel — removes enforce_eager restric…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-23T07:00:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3374637c4ac6fca4c99048848f711f70dfce03fa",
          "body": "Adds the v0.12.0 bullet to the feature list and a headline tok/s number\nto the quickstart, documenting the PR #33 win: MoE apply() now dequants\nonly active experts, 1.22 → 10.23 tok/s at bs=1 decode on\nQwen3-30B-A3B-Instruct-2507 on H100.\n\nAlso flags the enforce_eager=True requirement — Phase 1 uses a Python\nloop over active experts which breaks CUDA graph capture. Phase 2\n(follow-up) will add a GPU-resident sparse kernel and remove the\nrestriction.\n\nVersion bumped to 0.12.0 in pyproject.toml.",
          "is_bot": false,
          "headline": "docs: v0.12.0 — sparse MoE dequant, 8.4× Qwen3-30B-A3B decode (#34)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-23T05:48:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e8a3ffe6afad1a39fca84fc41e76be84bf1eb24",
          "body": "…d (#33)\n\nThe MoE apply() path was decompressing ALL N experts' w13/w2 tensors\non every forward, but the downstream fused_moe kernel routes through\ntopk_ids and only reads the 8 active experts. On Qwen3-30B-A3B (128\nexperts, top-8) that's 120/128 = 93.75% wasted dequant work. nsys\nprofile on H100 sh\n[…]\ne, accepts\nempty / out-of-range indices without crashing. 15/15 tests pass.\n\nSee verda-model-bench/.plans/moe-sparse-dequant-smoking-gun-2026-04-23.md\nfor the full nsys breakdown and engineering plan.",
          "is_bot": false,
          "headline": "perf(moe): sparse dequant — only decompress active experts per forwar…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-23T05:44:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c749527c4bebbd66f77b741718208df33208fdbf",
          "body": "…is_aware (#32)\n\nCurrent walker runs _select_bits once on w13_param and applies the result to\nBOTH w13_weight (gate + up) AND w2_weight (down) across every expert. On every\nMoE model measured (Gemma 4 26B, Qwen3-30B-A3B, Qwen3-Coder-30B-A3B,\nQwen3.6-35B-A3B, Granite-1B), w2 is consistently heavier-t\n[…]\n-bench/.plans/per-expert-bits-design-2026-04-22.md. Tier 1\n(per-expert bits within each side) is a follow-up requiring storage-format\nchanges; this commit ships the trivial-but-real independence gain.",
          "is_bot": false,
          "headline": "feat(moe): independent bit-width selection for w13 vs w2 under kurtos…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-22T19:29:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d6be89c9cd3082067f22bd6b79353e17f38cdfaf",
          "body": "…et (#31)\n\nQwen3-Next and Qwen3.5 implement the Mamba causal conv as a\n`ColumnParallelLinear` named `conv1d`, then call `causal_conv1d_*`\nkernels that read `self.conv1d.weight.view(...)` directly in\n`gdn_linear_attn.py::_forward_core`. `TurboQuantWrapper` exposes\n`packed_weight` / `norms` / `tq_sign\n[…]\nt: `test_walker_skips_conv1d_linears` exercises the\nGDN layout (conv1d beside out_proj under a `linear_attn` submodule)\nand asserts conv1d stays a plain `nn.Linear` while out_proj is\nwrapped as usual.",
          "is_bot": false,
          "headline": "fix: skip `conv1d` Linears to unblock Qwen3-Next/Qwen3.5 Gated DeltaN…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-22T15:29:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "57c9b200b750e4dd6ef20035597a0f9bc698dc7a",
          "body": "Partial-rotary models (MiniMax M2.5/M2.7, Qwen3.6-A3B) quantize weight\ngroups under a block-diagonal WHT so the RoPE-rotated head prefix and the\ncontent-only suffix stay under separate rotations inside a quantization\ngroup. Without this, a full-width WHT mixes the two semantic groups and\ncorrupts po\n[…]\n Verda capacity has been locked out\nfor the last several hours; harness is staged under\nscripts/gpu/plugin-blockdiag-smoke/ (verda-model-bench repo).\n\nSigned-off-by: Hannu Varjoranta <varjo@avrea.com>",
          "is_bot": false,
          "headline": "turboquant-vllm: block-diagonal WHT for partial-rotary models (#30)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-22T15:23:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "168516bb564058b9785f6f3f6ff8073db8757052",
          "body": "…ed work (#29)\n\nThree README updates from the 2026-04-22 morning session, bundled:\n\n- Qwen3-30B-A3B-Instruct-2507 GSM8K-200 91.5% (4.4× compression to 13.69 GB\n  on H100) replaces the empty-quality Qwen3-30B row in the Results table —\n  first full validation of the upstream vLLM fork's turboquant-mo\n[…]\nernary\n  FWHT-rotated quantization with FWHT-fused-in-SMEM kernel pattern;\n  different quant grid than ours, a kernel idea worth mining for Blackwell\n\nSigned-off-by: Hannu Varjoranta <varjo@avrea.com>",
          "is_bot": false,
          "headline": "docs: Qwen3-30B golden result, upstream-vs-plugin notes, ITQ3_S relat…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-22T15:19:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "efaae362b6061e8eb2532372c4450fe692d52cc2",
          "body": "Highlights:\n- Qwen3.6-35B-A3B-TQ-apex3 hits 96.5% gsm8k-200 — first TurboQuant\n  checkpoint to beat mlx-community/*-4bit (94.5%) on accuracy, at 1 GB\n  smaller on disk (18 vs 19 GB)\n- PAT-0349 kurtosis-aware bit-width selection per tensor family:\n  routed experts TQ3, attention + shared-expert TQ4, \n[…]\n    (18 GB, 96.5% gsm8k) ← new\n\nSpeed on M4 Pro 48 GB is ~29 tok/s for 35B-A3B, capped by Lloyd-Max\ncodebook lookup at the Metal level (~54 µs/call floor). See README MLX\nsection for trade-off detail.",
          "is_bot": false,
          "headline": "v0.11.0: kurtosis-aware mixed-precision MLX checkpoints + apex family",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-20T16:00:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7f8f50d3d1d46b31786d233e05cc3b1af816070f",
          "body": "…s it)\n\nAdds tq3_gemv_bs1_moe_fused_mlx which takes the full (num_experts, OC*n_groups, 48)\npacked tensor + active-expert indices and gathers inside the kernel. Eliminates\nthe external mx.take(packed) + mx.take(norms) pair from the Python call path.\n\nWired into TurboQuantMLXSwitchLinear for TQ3 shar\n[…]\n's async scheduler was already pipelining the mx.take behind other work.\n\nKept as infrastructure. Captures a subtle lesson: per-call sync profiling on\nMLX can overstate real wall contribution by 2-5×.",
          "is_bot": false,
          "headline": "mlx: fused-gather MoE kernel for TQ3 shared-x path (infra; async hide…",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-20T15:15:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ca69b1df51e5b8e197a64d1fbcb1bfe0b9b11d59",
          "body": "Ports MLX's qmv_fast_impl shape (2 simdgroups/TG, 4 results/simdgroup,\nvalues_per_thread=16, block_size=512, codebook in thread-local array).\nCorrectness: output matches v1 within fp16 noise (max abs diff 8e-6).\n\nSpeed: same as v1 (178 vs 168 µs on 4096×4096 bs=1). The Metal compiler\nalready puts th\n[…]\nhing the\nkernel ceiling. The 2.7× gap vs MLX-4bit (79 tok/s) is above kernel\nlevel — in WHT rotation × 800+ calls per step, or MoE mx.take gather\noverhead, or Python dispatch. Investigation continues.",
          "is_bot": false,
          "headline": "mlx: add tq3_gemv_bs1_mlx_v2 register-pattern kernel (infrastructure)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-20T14:39:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "79e94436be8293e3b956fe7b09954d1e70aa0e8d",
          "body": "Adds three TQ4 counterparts to the existing TQ3 bs=1 fused GEMV kernels:\n\n  tq4_gemv_bs1_mlx             — standalone Linear (shared expert, attn)\n  tq4_gemv_bs1_batched_mlx     — SwitchLinear shared-x (MoE gate/up)\n  tq4_gemv_bs1_batched_per_x_mlx — SwitchLinear per-x (MoE down_proj)\n\nSame warp-per\n[…]\nrnels:  35.85 tok/s decode\n  vs uniform TQ3:       35.43 tok/s decode (null-difference — same speed)\n\nMixed-bits no longer costs speed. Whether it closes the gsm8k quality\ngap is the next measurement.",
          "is_bot": false,
          "headline": "mlx: TQ4 bs=1 Metal GEMV kernels — mixed-bits at full speed",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-20T09:11:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f0455520e6a8e9adce286e400fe527cc6e36dc52",
          "body": "Loader previously assumed uniform 3-bit across all TQ layers. Broke on\ncheckpoints produced with sensitive_bits=4 (e.g. varjosoft/Qwen3.6-35B-\nA3B-TQ-apex) because:\n\n  - TurboQuantMLXLinear called unpack_indices_3bit_mlx directly —\n    failed on 4-bit layers packed 2 values/byte (64 bytes/group)\n   \n[…]\n 35 tok/s uniform TQ3) because the\n4-bit layers hit the generic einsum path rather than a fused kernel.\n\nNext commit adds TQ4 bs=1 fast-path kernels so mixed-bits checkpoints\nrun at competitive speed.",
          "is_bot": false,
          "headline": "mlx: handle mixed-bits TQ checkpoints (TQ-apex support)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-20T09:08:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4329f2a59dbd6c7c8017c5da41c67b5af7aa84a2",
          "body": "The sys.modules['flute'] alias in __init__.py makes `import flute.tune`\nresolve to turboquant_vllm.flute.tune. Keeping the bare `flute.`\nimport syntax also means bare attribute references later in the same\nfiles (like `flute.tune.TuneMetaData` in type annotations) continue\nto work — `import turboquant_vllm.flute.tune` binds the name\n`turboquant_vllm` locally, not `flute`, so the attr lookups fail.",
          "is_bot": false,
          "headline": "vendored flute: revert internal imports to bare `flute.X`",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-19T06:45:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d652418d3ebae662c7e556de9197f78119b0376a",
          "body": "So that internal bare references like `flute.tune.TuneMetaData` in the\nvendored wrappers resolve to this package without rewriting every file.\nUses setdefault so an externally-installed flute-kernel still wins if\nthe user has one.",
          "is_bot": false,
          "headline": "vendored flute: register as sys.modules['flute'] alias",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-19T06:44:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8787a5a390832e89bae016825a135d46d1fbfab4",
          "body": "CUTLASS 3.9+ recast only halves the stride-1 dimension. Per-group scale\ntensors in FLUTE's kernel pipeline are broadcast across rank 0 (stride=0),\nso recast leaves scale's rank-0 shape unchanged — the original\n`size<0>(scale) == size<0>(scale_vec) * _2` assertion fails because\n4 != 8 for the broadca\n[…]\nhat over-constrained the input shape space.\n\nSource/source2/target tensors are contiguous at rank-0 (stride=_1), so\ntheir `size<0>(x) == size<0>(x_vec) * _2` assertions still hold and\nremain enforced.",
          "is_bot": false,
          "headline": "csrc/flute/packbits_utils: skip rank-0 assertion for broadcast scale",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-19T05:29:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "63c195c2536e3db24cc79139fd9fc00e3ede77cb",
          "body": "FLUTE's packbits_utils.hpp assertions at line 73/312 fail when the\nkernel is instantiated for SM90 — the layout choices CUTLASS makes for\nHopper's WGMMA path don't satisfy FLUTE's rank-0-halving assumption.\nRestrict to sm_80/sm_86/sm_89 until a Hopper WGMMA path is implemented\nseparately.",
          "is_bot": false,
          "headline": "flute_build: drop SM90+ gencode (FLUTE is Ampere/Ada-only)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-19T05:19:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c56e6a1fbe633a30f888c5237b80116ff29e4ff4",
          "body": "CUTLASS v3.9.2+ changed cute::recast semantics so upcast<N>() only\nhalves the dimension with stride=1, not rank 0 unconditionally. This\nbreaks FLUTE's csrc/flute/packbits_utils.hpp static_asserts at line 73\n(12+ template instantiations fail). v3.5.1 preserves the legacy\nrank-0-halving behavior that \n[…]\n\n\nTradeoff: v3.5.1 has its own CUDA 13 quirk in cuda_host_adapter.hpp\n(requires explicit <cuda.h>). On a CUDA 12.4 image both issues vanish —\nv3.5.1 + CUDA 12.4 is FLUTE's upstream-tested combination.",
          "is_bot": false,
          "headline": "third_party/cutlass: pin to v3.5.1 for FLUTE compat",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-19T05:08:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8b2bd4605d805bbdf1cff3a312d820b50ce3030a",
          "body": "FLUTE's LUT-based GEMM engine is the canonical fast path for scalar-HIGGS\nweight quantization — used by HuggingFace transformers' HIGGS integration\nand pointed at by @dalistarh on vllm-project/vllm#39970. Vendoring\nreplaces the external ``flute-kernel`` pip dependency whose prebuilt\nwheels (cu121 / \n[…]\ncom/HanGuo97/flute\nLicense: Apache-2.0 — attribution in NOTICE.\n\nFirst import triggers a 5-15 min torch JIT compile; cached after.\nRequires nvcc + a CUTLASS checkout (submodule if installed from git).",
          "is_bot": false,
          "headline": "feat: vendor FLUTE (Guo et al., EMNLP 2024) into turboquant-plus-vllm",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-19T04:42:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0e0493867f386abcddf0453650ff77e2f4d8980b",
          "body": "Their project implements the actual TurboQuant paper (Zandieh et al.)\non Apple Silicon — V2 (mx.quantized_matmul) + V3 (Lloyd-Max) KV-cache\ncompression paths with perplexity + throughput benchmarks across\nLlama/Mistral/Gemma. Orthogonal to our HIGGS-scalar weight path.\n\nPositions the two projects as complementary rather than competing,\nand gives readers who arrive via Google's press cycle for the name\n\"TurboQuant\" a clear pointer to where the actual KV algorithm lives\non MLX.",
          "is_bot": false,
          "headline": "README: link sharpner/turboquant-mlx for KV-cache compression",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-18T20:22:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b898d9229b59192f393edd75074440cbcf1714a",
          "body": "Bundles f88ad1c (mlx_loader stacking per-expert TQ packed tensors for\nQwen3-Coder-A3B-class checkpoints, plus num_local_experts → num_experts\nconfig alias) with a new serving example.\n\nexamples/mac-serve-tq3.py wraps mlx_lm.server with the three patches\nneeded to survive agent clients on a 48 GiB Ma\n[…]\nred/memory/cache limits with mx.clear_cache() between\nrequests.\n\nValidated against opencode + Qwen3-Coder-30B-A3B-Instruct TQ3 (33.8 tok/s\nsingle-token decode, 4.62/5 on the 20-scenario quality eval).",
          "is_bot": false,
          "headline": "v0.10.1: Apple Silicon serving example + MoE loader fix release",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-18T19:35:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f88ad1cd19c0ed9607f5d45425f8364a3cb4e3f2",
          "body": "Qwen3-Coder-30B-A3B checkpoints store MoE weights as per-expert\n`experts.{E}.{proj}.weight.tq_{packed,norms}`. mlx_lm's sanitize()\nearly-returns on `.tq_*` suffixes, so these were never stacked into\nthe `switch_mlp.{proj}.weight.tq_*` form that _replace_switch_linears\nlooks up — 18432 MoE tensors si\n[…]\n_experts` → `num_experts` for newer mlx_lm that\nrenamed the config field.\n\nBench on Qwen3-Coder-30B-A3B TQ3 (M4 Pro): 33.8 tok/s with v0.10.0\nMetal GEMV kernel, 0.81 tok/s on the fp32 einsum fallback.",
          "is_bot": false,
          "headline": "mlx_loader: stack per-expert TQ packed tensors + num_experts alias",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-18T17:26:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "017d03841f99f014249b4bb08f7f205309c1b57b",
          "body": "Custom Metal shaders via mx.fast.metal_kernel: SIMD-group-per-output-\nchannel GEMV that fuses 3-bit unpack + 8-centroid codebook lookup +\nper-group norm scaling + matmul into one pass. Three variants:\n\n  tq3_gemv_bs1_mlx              — single Linear (dense path)\n  tq3_gemv_bs1_batched_mlx      — MoE\n[…]\nally excludes tensor-core\nparity — Apple GPUs lack mma.sync analogs at scale, but llama.cpp\nproves SIMD-group + simd_sum is enough for sub-byte GEMV.\n\nSigned-off-by: Hannu Varjoranta <varjo@avrea.com>",
          "is_bot": false,
          "headline": "v0.10.0: bs=1 Metal GEMV kernel for TQ3 dense + MoE on Apple Silicon",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-18T09:34:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "100668bb81a3b808f6e13cebd80a2efc3d1ec389",
          "body": "Documents the new bs=1 CUDA GEMV feature and the measured 2.12x\nQwen3-8B A100 bs=1 decode speedup over the Triton-only path. Links to\nthe existing 'When Triton Stops' write-up for motivation.\n\nSigned-off-by: Hannu Varjoranta <varjo@avrea.com>",
          "is_bot": false,
          "headline": "README: add v0.9.0 bs=1 CUDA GEMV bullet",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-18T07:47:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dfc0f724ee32c085f38e09ed6bfa5a9f35e98415",
          "body": "A Python-level M==1 check in apply() is compiled out by vLLM's Dynamo\ntrace: the trace runs once on profile_run input (batch >> 1) and\nspecializes the branch against that shape, so every CUDA-graph replay\n(including the size=1 capture) uses the Triton path. Measured on\nQwen3-8B TQ3 bs=1 on A100: 8.0\n[…]\nmp to 0.9.0 since this makes the c7e2a15 CUDA kernel\nactually reachable under fullgraph compile, turning a dormant feature\ninto a measurable speedup.\n\nSigned-off-by: Hannu Varjoranta <varjo@avrea.com>",
          "is_bot": false,
          "headline": "v0.9.0: runtime-dispatch bs=1 CUDA GEMV through custom op",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-18T07:43:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c7e2a1523ecb1d285fb9b578a67516acdbdcc5d4",
          "body": "Warp-per-output-channel CUDA GEMV (tq3_gemv_bs1) for TQ3 weight\nquantization at batch size 1. Triton's GEMV pads M=1 up to M=16 and\nwastes 15/16ths of the tensor-core tile; this kernel dispatches one\nwarp per output channel and accumulates in fp32.\n\nIn vllm_quant.py, when bits=3, group_size=128, and\n[…]\nt-verified against the Python pack/unpack reference on\nA100 and H100, max relative error 0.4% on Qwen3-8B shapes\n(4096x4096, 4096x12288, 12288x4096).\n\nSigned-off-by: Hannu Varjoranta <varjo@avrea.com>",
          "is_bot": false,
          "headline": "cuda: bs=1 GEMV kernel for 3-bit weights",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-17T21:07:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "289f4be694c6333b0535717b21373dfb941c3ed0",
          "body": "Values are 0-7 by construction; downstream consumers only use them for\nadvanced indexing into the centroids codebook, which accepts any\ninteger dtype. Saves 4x memory on the dense Linear indices buffer.",
          "is_bot": false,
          "headline": "mlx: return uint8 indices from unpack_indices_3bit_mlx",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-17T07:50:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7b2585bf9b5aa81ca28ba54312e2ac5b252483a",
          "body": "New in this release:\n\n- MLX loader for dense + MoE TQ3 checkpoints via mlx-lm\n  (load_tq3_model / load_tq3). Qwen2.5-0.5B at 26 tok/s,\n  Granite-1B MoE at 84 tok/s, Qwen3.5-35B fits in 19 GB on\n  48 GB Mac.\n\n- TurboQuantMLXSwitchLinear — MoE drop-in for mlx_lm's\n  SwitchLinear with active-only exper\n[…]\ns format.\n\n- FWHT-on-input forward path (rht_on_last_dim_mlx shared helper).\n\n- TurboQuantConfig constructor validation (bits, group_size,\n  sensitive_bits).\n\n96 tests passing on Mac, 21 MLX-specific.",
          "is_bot": false,
          "headline": "v0.8.0: MLX MoE loader, active-only dequant, 35B on Mac",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-17T04:57:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0c439c885c7bac99d951ec26ed7794e39afdddf9",
          "body": "Two changes that make 35B MoE loadable on 48 GB Apple Silicon:\n\n1. TurboQuantMLXSwitchLinear no longer pre-unpacks indices to int32\n   at init. For 256-expert models the int32 blowup was ~1 GB per\n   SwitchLinear (120 GB total). Now stores _packed_per_expert as\n   uint8, gathers active experts via m\n[…]\n MLX ops per MoE projection\n    per layer, each a separate Metal kernel. Fused kernel needed for\n    interactive speeds on 30B+ models.\n  - Granite-1B-A400M still runs at 84 tok/s — small MoE is fast.",
          "is_bot": false,
          "headline": "Fix MoE memory: keep packed uint8, pin via mx.eval, no int32 blowup",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-17T04:06:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2162db80e72fd3194bf517981caaab116144fe6f",
          "body": "The previous all-experts dequant materialised a\n``(num_experts, out, in)`` fp32 tensor every forward. Measured on\nQwen3.5-35B dims (256 experts, out=512, in=2048): 27.85 ms per\ngate_proj forward → projected ~0.3 tok/s across 40 layers. Unusable.\n\nNew path gathers only the experts the routing tensor \n[…]\n-per-slot; the routing step\ngather_mm was doing is free. Output shape matches SwitchLinear's\n``(*leading, k, 1, out)`` contract so SwitchGLU's final squeeze works.\n\nAll 21 MLX parity tests still pass.",
          "is_bot": false,
          "headline": "TurboQuantMLXSwitchLinear: active-experts-only dequant",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-16T19:47:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "210443d50e3f43d0eab4b0b3244f7fd701ab6d5b",
          "body": "The forward FWHT + sign-flip pattern is shared by the dense\n``fwht_on_input_matmul_mlx`` path and the new MoE\n``TurboQuantMLXSwitchLinear.__call__`` path. Lifting it to a single\n``rht_on_last_dim_mlx`` helper kills the duplication and prevents the\ntwo paths from drifting if we tweak rotation convent\n[…]\nwhat the code does (flattening 3D input, padding for\ngroup_size, \"FWHT-on-input: apply once per token\"). The identifiers\nare self-describing.\n\nNo behaviour change — the 13 MLX parity tests still pass.",
          "is_bot": false,
          "headline": "Extract rht_on_last_dim_mlx helper; drop narrating comments",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-16T19:33:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a361b524fc620881ce41539c6c24e099e4b01fc6",
          "body": "HF Qwen3.5-MoE (and architecturally similar MoE models) store each\nlayer's gate and up projections as one fused 3D tensor\n``(num_experts, 2*moe_intermediate, hidden)``; mlx_lm's ``sanitize``\nsplits them at load time into two ``SwitchLinear`` modules. Our\n``save_tq3_checkpoint`` compresses the fused \n[…]\nd produces the same forward output as a\n  reference built from the dequantised halves.\n\nWith this, qwen3_5_moe-style TQ3 checkpoints (e.g. Qwen3.5-35B-A3B)\nbecome loadable end-to-end on Apple Silicon.",
          "is_bot": false,
          "headline": "mlx_loader: split fused experts.gate_up_proj post-sanitize",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-16T19:29:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "46c505ef9c3693a4299e26a0b3292e3b0d399e2b",
          "body": "``AutoConfig.save_pretrained`` on transformers 4.52+ replaces the\nlegacy ``rope_theta`` / ``rope_scaling`` fields with a consolidated\n``rope_parameters`` dict, but mlx_lm's per-architecture ``ModelArgs``\nclasses still require the legacy names. Round-tripping HF models\nthrough ``save_tq3_checkpoint``\n[…]\na 4 style nested configs).\n\nWith this in place the opt-in real-model gate\n(TQ_REAL_MODEL_TEST=1) now passes:\n  granite-3.0-1b-a400m-base -> TQ3 -> load_tq3 -> 89 tok/s\n  on an M4 Pro, coherent output.",
          "is_bot": false,
          "headline": "mlx_loader: rewrite legacy RoPE keys after transformers 4.52+ save",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-16T19:18:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "647e55683b3c3fc975a72706511eda36bcf9c80a",
          "body": "Adds MoE support to the MLX serving path:\n\n- ``TurboQuantMLXSwitchLinear`` — drop-in for mlx_lm's SwitchLinear\n  that holds packed TQ3 experts and dequantises on every forward via\n  the FWHT-on-input path, then uses ``mx.gather_mm`` (same primitive\n  SwitchLinear uses) to route tokens to their exper\n[…]\nghts. The docstring marks this\n  file as the stable definition of done; it also ships an opt-in\n  real-model test for ``ibm-granite/granite-3.0-1b-a400m-base``\n  gated behind ``TQ_REAL_MODEL_TEST=1``.",
          "is_bot": false,
          "headline": "MLX MoE path: TurboQuantMLXSwitchLinear + loader + TDD goal test",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-16T19:03:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "47173bfa24b45e76b2541e080ea86d5917c1eabf",
          "body": "The full-dequant path materialised a whole (out, in) weight tensor\nper forward, which dominated wall-clock on the mlx-lm serving path.\nSwapping in ``fwht_on_input_matmul_mlx`` moves the single WHT onto\nthe activation instead of applying the inverse WHT per weight row,\nthen does a grouped einsum.\n\nEn\n[…]\n6.3 tok/s  (~2.4x)\n\nAlso drops the now-unused ``_norms_flat`` cached attribute (the new\npath consumes ``self.norms`` directly) and flattens 3D/4D token\ninputs to match the matmul helper's 2D contract.",
          "is_bot": false,
          "headline": "TurboQuantMLXLinear: switch forward to FWHT-on-input matmul",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-16T18:51:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "baee6fbf3b09372a4f8143fed8201fde2ec37427",
          "body": "Parity with the upstream vLLM PR #39970: reject unsupported bits\n(not in {2, 3, 4}), non-positive or non-multiple-of-8 group_size,\nand sensitive_bits outside {2, 3, 4, None}. Bad configs now fail at\nmodel load with a clear error rather than inside a Triton kernel.\n\nTurboQuantConfig is a nested class that requires vLLM at import,\nso validation has no Mac-only unit test here; the identical checks\nare covered in tests/quantization/test_turboquant_online.py on the\nvLLM PR side.",
          "is_bot": false,
          "headline": "Validate TurboQuantConfig(bits, group_size, sensitive_bits)",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-16T18:28:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df193bb806e6cbdd32bc008fb6ec11e8ec5a0894",
          "body": "Phase 5a — walks an mlx_lm architecture, replaces each nn.Linear whose\npacked form is present in weights with a TurboQuantMLXLinear, then\nloads the remaining tensors (embeddings, norms, biases) via the\nstock model.load_weights path. Supports optional sensitive_bits from\ntq_config.json. MoE experts a\n[…]\na temp dir, loads it back, and verifies the\nforward output matches a reference model using the same dequantized\nweights (rtol=5e-3). Two negative tests cover missing tq_config.json\nand unknown format.",
          "is_bot": false,
          "headline": "MLX loader: load dense TQ3 native checkpoints through mlx_lm",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-16T12:49:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e52adf9a8b5d48f40359ea5e655163cd6d1281e2",
          "body": "Local ruff 0.15.x and the CI-pinned 0.14.0 disagree on multi-argument\nfunction-call wrapping; re-run through the pinned version.",
          "is_bot": false,
          "headline": "Fix pr/turboquant.py formatting for pinned ruff 0.14.0",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-16T12:30:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2274a25afc6bebaf5a505c00cf61c8561e85d820",
          "body": "- Remove unused imports (numpy in bench_mlx_vs_cpu.py, torch in test_eager_rotation_cache.py)\n- Run ruff format on files that were drifting from the project style\n\nAll 85 tests pass, no logic changes — pure formatting/lint cleanup so\npre-commit CI matches the tests CI which was already green.",
          "is_bot": false,
          "headline": "Apply ruff lint + format to pass pre-commit CI",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-16T11:47:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1575dec3748281ab654d13e61bb1538b41de42b4",
          "body": "…link upstream PR\n\nThree substantive updates:\n\n1. Algorithm attribution: the weight-compression scalar algorithm is\n   HIGGS (Malinovskii et al., NAACL 2025), not TurboQuant. TurboQuant\n   (Zandieh et al., ICLR 2026) is an online vector quantizer for KV\n   cache and ANN — the framework this project \n[…]\n benchmark result\n(49x vs PyTorch CPU on M4 Pro, validated against the reference).\n\nRelated projects reshuffled to lead with the two upstream PRs and the\nHIGGS / TurboQuant / Gray 1984 citation chain.",
          "is_bot": false,
          "headline": "README: correct algorithm attribution, add MLX Mac dev-loop section, …",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-16T11:40:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8afbe2f4fd865cbaf05833b96ca52c86bcd66a67",
          "body": "Loads one real Linear (Qwen3-Coder-30B-A3B q_proj, 4096x2048) from the\non-disk TQ3 checkpoint into four paths on M4 Pro 48GB:\n\n    PyTorch CPU fallback        : 44.32 ms/call  (1.0x  baseline)\n    MLX native                  :  1.81 ms/call  (24.5x)\n    MLX + mx.compile fusion     :  1.59 ms/call  (\n[…]\n9 hours) with FWHT-on-input + compile. Still slow for MoE\nat scale, but usable range for dense models <= 8B.\n\nFull suite: 85 passed (up from 84 with 1 new FWHT parity test,\n3 subtests), 0 regressions.",
          "is_bot": false,
          "headline": "Benchmark: MLX FWHT-on-input gives 49x speedup over PyTorch CPU",
          "author_name": "Hannu Varjoranta",
          "author_login": "varjoranta",
          "committed_at": "2026-04-16T11:36:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 17,
      "commits_last_year": 330,
      "latest_release_at": "2026-07-14T06:44:35Z",
      "latest_release_tag": "v0.13.12",
      "releases_from_tags": false,
      "days_since_last_push": 7,
      "active_weeks_last_year": 9,
      "days_since_latest_release": 7,
      "mean_days_between_releases": 7.7
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "turboquant-plus-vllm",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "compression",
            "cuda",
            "inference",
            "kv-cache",
            "llm",
            "quantization",
            "vllm",
            "Development Status :: 3 - Alpha",
            "License :: OSI Approved :: MIT License",
            "Programming Language :: Python :: 3",
            "Topic :: Scientific/Engineering :: Artificial Intelligence"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/turboquant-plus-vllm/",
          "is_deprecated": false,
          "latest_version": "0.13.12",
          "repository_url": "https://github.com/varjoranta/turboquant-vllm",
          "versions_count": 19,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 960,
          "first_published_at": "2026-04-03T05:33:01.023312Z",
          "latest_published_at": "2026-07-14T06:44:14.813281Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 7
        }
      ]
    },
    "popularity": {
      "forks": 14,
      "stars": 76,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-04-01",
            "count": 1
          },
          {
            "date": "2026-04-02",
            "count": 1
          },
          {
            "date": "2026-04-03",
            "count": 1
          },
          {
            "date": "2026-04-10",
            "count": 2
          },
          {
            "date": "2026-04-12",
            "count": 2
          },
          {
            "date": "2026-04-16",
            "count": 1
          },
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-05-02",
            "count": 1
          },
          {
            "date": "2026-05-07",
            "count": 1
          },
          {
            "date": "2026-05-14",
            "count": 1
          },
          {
            "date": "2026-06-27",
            "count": 1
          },
          {
            "date": "2026-07-20",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 14,
        "total_forks": 14
      },
      "star_history": {
        "days": [
          {
            "date": "2026-03-31",
            "count": 6
          },
          {
            "date": "2026-04-01",
            "count": 2
          },
          {
            "date": "2026-04-02",
            "count": 1
          },
          {
            "date": "2026-04-03",
            "count": 2
          },
          {
            "date": "2026-04-04",
            "count": 2
          },
          {
            "date": "2026-04-07",
            "count": 2
          },
          {
            "date": "2026-04-08",
            "count": 1
          },
          {
            "date": "2026-04-09",
            "count": 2
          },
          {
            "date": "2026-04-10",
            "count": 3
          },
          {
            "date": "2026-04-11",
            "count": 2
          },
          {
            "date": "2026-04-12",
            "count": 1
          },
          {
            "date": "2026-04-13",
            "count": 5
          },
          {
            "date": "2026-04-14",
            "count": 3
          },
          {
            "date": "2026-04-16",
            "count": 2
          },
          {
            "date": "2026-04-17",
            "count": 1
          },
          {
            "date": "2026-04-18",
            "count": 3
          },
          {
            "date": "2026-04-19",
            "count": 1
          },
          {
            "date": "2026-04-20",
            "count": 3
          },
          {
            "date": "2026-04-21",
            "count": 1
          },
          {
            "date": "2026-04-22",
            "count": 2
          },
          {
            "date": "2026-04-23",
            "count": 1
          },
          {
            "date": "2026-04-24",
            "count": 1
          },
          {
            "date": "2026-04-28",
            "count": 1
          },
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-05-01",
            "count": 1
          },
          {
            "date": "2026-05-03",
            "count": 1
          },
          {
            "date": "2026-05-06",
            "count": 1
          },
          {
            "date": "2026-05-12",
            "count": 1
          },
          {
            "date": "2026-05-13",
            "count": 2
          },
          {
            "date": "2026-05-16",
            "count": 2
          },
          {
            "date": "2026-05-24",
            "count": 2
          },
          {
            "date": "2026-05-25",
            "count": 1
          },
          {
            "date": "2026-05-29",
            "count": 1
          },
          {
            "date": "2026-06-08",
            "count": 1
          },
          {
            "date": "2026-06-09",
            "count": 1
          },
          {
            "date": "2026-06-12",
            "count": 1
          },
          {
            "date": "2026-06-13",
            "count": 1
          },
          {
            "date": "2026-06-18",
            "count": 1
          },
          {
            "date": "2026-06-22",
            "count": 1
          },
          {
            "date": "2026-06-24",
            "count": 1
          },
          {
            "date": "2026-06-25",
            "count": 1
          },
          {
            "date": "2026-06-29",
            "count": 1
          },
          {
            "date": "2026-07-01",
            "count": 1
          },
          {
            "date": "2026-07-06",
            "count": 1
          },
          {
            "date": "2026-07-12",
            "count": 1
          },
          {
            "date": "2026-07-14",
            "count": 1
          },
          {
            "date": "2026-07-20",
            "count": 1
          },
          {
            "date": "2026-07-21",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 76,
        "total_stars": 76
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "turboquant_vllm/py.typed"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 86178,
      "source_files_sampled": 110,
      "oversized_source_files": 2,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "pyproject.toml"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [
        {
          "name": "torch",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.1"
        },
        {
          "name": "scipy",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.11"
        },
        {
          "name": "numpy",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=1.24"
        },
        {
          "name": "transformers",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=4.57.6"
        },
        {
          "name": "safetensors",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.4"
        },
        {
          "name": "click",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=8.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 51,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 7,
        "closed_unmerged_prs": 3
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "varjoranta",
          "commits": 298,
          "avatar_url": "https://avatars.githubusercontent.com/u/192872?v=4"
        },
        {
          "type": "User",
          "login": "gaby",
          "commits": 12,
          "avatar_url": "https://avatars.githubusercontent.com/u/835733?v=4"
        },
        {
          "type": "User",
          "login": "ChengYen-Tang",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/32535494?v=4"
        },
        {
          "type": "User",
          "login": "DblD",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/346583?v=4"
        }
      ],
      "contributors_sampled": 4,
      "top_contributor_share": 0.946
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "pre-commit.yml",
        "tests.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": true
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 4,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 8,
            "reason": "13 out of 15 merged PRs checked by a CI test -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 2/25 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 5 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 10,
            "reason": "GitHub workflow tokens follow principle of least privilege",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "c8a7e0a73b2b9bb93dc66c9380dceab985a0fbc5",
        "ran_at": "2026-07-22T02:14:40Z",
        "aggregate_score": 5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-14T06:44:32Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-14T06:43:08Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/varjoranta/turboquant-vllm",
    "host": "github.com",
    "name": "turboquant-vllm",
    "owner": "varjoranta"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 63,
      "inputs": {
        "security": 50,
        "vitality": 78,
        "community": 46,
        "governance": 61,
        "engineering": 74
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 78,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "commits_last_year": 330,
              "human_commit_share": 1,
              "days_since_last_push": 7,
              "active_weeks_last_year": 9
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 7 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "9/52 weeks with commits",
                "points": 6.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "330 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 330
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 17,
              "latest_release_tag": "v0.13.12",
              "releases_from_tags": false,
              "days_since_latest_release": 7,
              "mean_days_between_releases": 7.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "17 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 17
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 7 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~7.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 7.7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 46,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "forks": 14,
              "stars": 76,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "below_threshold"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "76 stars",
                "points": 30.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 76
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "14 forks",
                "points": 9.3,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 14
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 50,
            "inputs": {
              "packages": [
                "turboquant-plus-vllm"
              ],
              "dependents": null,
              "ecosystems": "pypi",
              "total_downloads": null,
              "monthly_downloads": 960
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "960 downloads/month across pypi",
                "points": 39.8,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 960,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 61,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 26,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 4,
              "top_contributor_share": 0.946
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 95% of commits",
                "points": 1.2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 95
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "4 contributors",
                "points": 5.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 5 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "merged_prs": 51,
              "open_issues": 0,
              "closed_issues": 7,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 3
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "51/54 decided PRs merged",
                "points": 36.1,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 51,
                      "decided": 54
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 2/25 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 50,
            "inputs": {
              "followers": 19,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "varjoranta",
              "public_repos": 15,
              "account_age_days": 6016
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "19 followers of varjoranta",
                "points": 9.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 19,
                      "login": "varjoranta"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "15 public repos, account ~16 yr old",
                "points": 20.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 15
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 16
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "turboquant-plus-vllm"
              ],
              "ecosystems": "pypi",
              "any_deprecated": false,
              "min_days_since_publish": 7
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 7 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "19 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 19
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 74,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": true
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 16,
                "status": "met",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 9.6,
                "status": "met",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "13 out of 15 merged PRs checked by a CI test -- score normalized to 8",
                "points": 16,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 50,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 50,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "13 out of 15 merged PRs checked by a CI test -- score normalized to 8",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 2/25 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 5 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "GitHub workflow tokens follow principle of least privilege",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 8
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "at_risk",
        "name": "AI Readiness",
        "value": 49,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 48,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "turboquant_vllm/py.typed"
              ],
              "agent_commit_share": 0.02,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 11,
                "status": "met",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "turboquant_vllm/py.typed",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "turboquant_vllm/py.typed"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "2 of the last 100 commits agent-authored or agent-credited",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 2,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 86178,
              "source_files_sampled": 110,
              "oversized_source_files": 2
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python with type-check config (turboquant_vllm/py.typed)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "turboquant_vllm/py.typed",
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "2/110 source files over 60KB",
                "points": 54,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 110,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index pypi:turboquant-plus-vllm@0.13.12; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T02:14:53.816142Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/v/varjoranta/turboquant-vllm.svg",
  "full_name": "varjoranta/turboquant-vllm",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.26.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenPyPI.