Skip to content
| Marketplace
Sign in
Visual Studio Code>Machine Learning>Local Code AttentionNew to Visual Studio Code? Get it now.
Local Code Attention

Local Code Attention

palsch

|
1 install
| (0) | Free
Explore real local model attention directly in source code.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Local Code Attention

Eine VS-Code-Extension, die echte Attention eines lokalen Code-Sprachmodells direkt im Quellcode zeigt.

Benutzung

  1. Local Code Attention im VS Code Marketplace installieren oder code --install-extension palsch.local-code-attention ausfuehren. Alternativ die VSIX-Datei ueber Extensions > Install from VSIX... installieren.
  2. Einen vertrauenswürdigen Workspace und eine C++, JavaScript-, PHP-, Python- oder andere Quelldatei öffnen.
  3. Die Extension richtet ihre eigene Runtime ein und lädt Qwen2.5-Coder-0.5B herunter. Dafür wird beim ersten Start Internet benötigt; etwa 1,6–2 GB Speicherplatz einplanen (je nach Plattform). Keine eigene Python-Installation nötig.
  4. Statusleiste und VS-Code-Benachrichtigung zeigen Einrichtung, Download und Modellstart an. Für Runtime-Manager und Modell erscheinen geladene MB und Prozentwerte; Paketinstallationen zeigen die aktuelle Phase und Paketnamen mit laufendem Fortschrittsbalken. Ein Klick auf die laufende Attention-Statusanzeige beziehungsweise Cancel in der Benachrichtigung stoppt den laufenden Download oder Prozess. Nach dem Abbrechen bleibt die Automatik pausiert, bis Local Attention: Set Up / Retry erneut gewählt wird. Bereits vollständige Downloads werden wiederverwendet; unterbrochene Downloads werden nach Möglichkeit fortgesetzt. Die Einrichtung startet über den Befehl Local Attention: Set Up / Retry auch ohne geöffnete Quelldatei. Mehrere VS-Code-Fenster koordinieren ihre Runtime-Installation über eine Sperre. Die Statusleiste zeigt den Fortschritt. Danach ein Wort anklicken: Blau zeigt dessen stärkste Attention-Verbindungen, Gelb die Auswahl. Die Intensität ist relativ zur stärksten sichtbaren Verbindung.
  5. Die Attention-Farben erscheinen direkt in der eingebauten VS-Code-Minimap, sofern diese aktiviert ist. Das gilt auch für die Blockdarstellung (editor.minimap.renderCharacters: false). Die bisherige Fernfokus-Seitenleiste und ihre Regler wurden entfernt. Die native Navigation per Klick und Ziehen bleibt erhalten. Zusätzlich erscheinen Markierungen an der rechten Editor-Übersichtsleiste.

Die native Minimap übernimmt Attention-Farben über die öffentliche Semantic-Tokens-API. Dadurch werden auch die betroffenen Zeichen im Editor farbig; die Hintergrund-Highlights bleiben bestehen. Vorhandene semantische Sprachfarben werden beim Aktivieren des Overlays übernommen und außerhalb der Attention-Bereiche erhalten. Deaktivieren der Minimap gibt die semantische Färbung wieder an die Sprach-Extension zurück. Explizit deaktiviertes semantisches Highlighting (editor.semanticHighlighting.enabled: false) verhindert diese Minimap-Farben; in diesem Fall die Einstellung aktivieren. Es werden weder Compilerdiagnosen erzeugt noch Quelldateien oder Benutzereinstellungen für die Darstellung verändert. Farbregeln werden als überschreibbare Extension-Defaults bereitgestellt.

Nach Codeänderungen verschwinden alte Markierungen sofort. Nach 1,5 Sekunden Pause wird neu analysiert. Cursorwechsel verwenden bereits berechnete Werte und brauchen keine Modellanfrage. Die drei zuletzt analysierten Inhalte bleiben im Arbeitsspeicher; nach Neustart wird neu gerechnet.

Was die Farben bedeuten

Das Modell ist Qwen2.5-Coder-0.5B, mit festgelegter Modellrevision. Die Extension liest echte Softmax-Attention aus dem Forward-Pass mit eager-Attention. Sie mittelt alle Layer und Heads und addiert Incoming und Outgoing: mean(A) + mean(A)ᵀ. Bei einem angeklickten Wort werden die Scores seiner Modell-Tokens kombiniert. Pro Token werden für sofortige Klick-Vorschauen die stärksten 48 Verbindungen gespeichert. Verbindungen innerhalb der gesamten Auswahl werden nicht hervorgehoben.

Textmarkierung: Die Attention aller ausgewaehlten Modell-Tokens wird wieder pro Ziel addiert und durch die Tokenzahl geteilt. Auch starke Einzelbezuege duerfen erscheinen; es gibt keine 60-%-Bedingung. Erst danach wird die Darstellung begrenzt: hoechstens zwoelf starke Ziele, mit zusaetzlichem Ausblenden des schwachen Hintergrunds. Bei mindestens vier positiven Zielen dient deren unteres Quartil als Hintergrundniveau. Die Farbe beschreibt den Abstand ueber diesem Niveau; nur Treffer ab 35 % der verbleibenden Spitze werden gezeigt. Ein gleichmaessig flacher Hintergrund ergibt keine Markierungen. Hover-Prozentwerte bleiben die urspruengliche relative Attention-Staerke, vor dieser Farbkorrektur. Ein bis drei isolierte Treffer behalten ihre bisherige Skala.

Das gilt für Editor und native Minimap, über mehrere Zeilen und beim Rückwärtsmarkieren. Nach einer sofortigen Vorschau berechnet der Worker nach 50 ms Pause die kombinierten Scores aus der vollständigen RAM-Matrix. Normalerweise ist kein neuer Modelllauf nötig. Wurde die Matrix einer älteren Datei aus dem Cache verdrängt, wird sie für eine genaue Auswahl neu berechnet. Veraltete Ergebnisse nach Auswahlwechseln werden verworfen. Einfache Wortklicks funktionieren unverändert.

Standardansicht ist jetzt Positionsbereinigt. Für ein Token an der Dateiposition q sind einschließlich des Tokens selbst q + 1 Positionen verfügbar. Gleichmäßige Attention hätte dort den Wert 1 / (q + 1). Die korrigierte gerichtete Matrix ist deshalb B[q,k] = A[q,k] * (q + 1). Erst danach werden Incoming und Outgoing zu B + Bᵀ kombiniert. Eine gleichmäßig kausale Attention ergibt für alle verschiedenen Tokenpaare denselben Score 1. Ein Score über 1 bedeutet bei einem einzelnen Tokenpaar mehr Attention als unter dieser gleichmäßigen Referenz. Bei Textmarkierungen wird danach die Darstellung auf starke Spitzen begrenzt; Wortklicks kombinieren ihre Subtokens wie bisher.

Über Local Attention: Choose Normalization oder localAttention.normalization kann zwischen position und raw gewechselt werden. Beide Ranglisten werden beim selben Modelllauf vor der Top-48-Auswahl berechnet und zwischengespeichert; Umschalten benötigt keine erneute Inference. Statusleiste und Hover nennen den Modus. Prozentangaben im Hover sind relative Darstellungsstärken, keine Attention-Wahrscheinlichkeiten. Die Korrektur gleicht die Zahl verfügbarer Tokens aus; sie entfernt keine gelernten Positions-, Entfernungs- oder Sink-Effekte und verändert nicht das Modell.

Die Farbstärke fällt standardmäßig quadratisch ab: Helligkeit = relative Stärke ^ 2. Die stärkste Verbindung bleibt voll eingefärbt; 50 % relative Stärke ergeben 25 % Helligkeit, 20 % ergeben 4 %. So treten die wichtigsten Stellen klar hervor und schwache Verbindungen verschwinden schneller. Die Sichtbarkeitsschwelle gilt nach der Farbkurve. Hover-Prozentwerte zeigen weiterhin die relative Attention-Stärke und nicht die veränderte Helligkeit.

Local Attention: Adjust Contrast bietet den Standard mit Exponent 2, einen sanften Verlauf mit 0,75 und linearen Original-Kontrast mit 1. Alternativ localAttention.contrastGamma einstellen (0,1-4, Standard 2). Änderungen wirken sofort auf vorhandene Ergebnisse und benötigen keinen Modelllauf. Es gibt keine Korrektur nach der allgemeinen Popularität einer Codestelle.

Nahe Tokens werden immer leicht und fest mit d^2 / (d^2 + 1) abgeschwächt. Bei Abstand 1 bleiben 50 %, bei Abstand 2 80 %, bei Abstand 3 90 % und bei Abstand 10 rund 99 % erhalten. Das läuft vor der Ranglisten-Auswahl und vor der Kombination ausgewaehlter Tokens. Es gibt dafür keinen Slider, Zahlenwert, Schalter, Sidebar oder Fernfokus-Status mehr. Alte distantFocus- und distantFocusDistance-Einstellungen werden ignoriert. Die Modellberechnung bleibt unverändert; die feste Gewichtung betrifft nur die dargestellten Scores. Der Anfangsfilter ist unabhängig davon.

Für kombinierte Auswahl-Scores hält der Worker die vollständigen CPU-Attention-Matrizen im RAM. Der Cache verwendet normalerweise bis zu ein Achtel des Systemspeichers, maximal 4 GiB, behält aber mindestens die aktuelle zulässige Datei vollständig. Eine 16.384-Token-Matrix belegt 1 GiB, eine 32.768-Token-Matrix 4 GiB. Ältere Matrizen können verdrängt und bei Bedarf neu berechnet werden.

Standardmäßig werden die ersten vier Modell-Tokens der Datei bei der Auswahl sichtbarer Verbindungen ausgeblendet. Solche frühen Tokens können als „Attention Sinks“ viel Attention sammeln. Die übrigen Verbindungen werden anschließend relativ zu ihrem eigenen Maximum dargestellt; ein ausgeblendeter Anfang kann die Farbintensität deshalb nicht herunterdrücken. Der Filter wird vor der Auswahl der stärksten 48 Verbindungen angewendet. Der Anfangsfilter selbst verändert weder die Modellberechnung einschließlich der frühen Tokens noch die verbleibenden Rohgewichte. Er ist unabhängig von der Positionskorrektur und bleibt auch in der Raw-Ansicht aktiv, solange er nicht auf 0 gesetzt wird.

localAttention.excludedPrefixTokens steuert die Anzahl (Standard 4, Bereich 0–32). Mit 0 erscheint die ungefilterte Ansicht. Änderungen lösen eine automatische Neuanalyse aus. Die Prozentwerte im Hover beziehen sich auf das Maximum der verbleibenden sichtbaren Verbindungen, nicht auf den Anteil an der gesamten Attention.

Das ist Modell-Attention, kein Nachweis für semantische oder kausale Codeabhängigkeiten. Auch Kommentare, Satzzeichen oder unerwartete Stellen können stark gewichtet sein. Das Modell ist kausal: Ein Token beachtet nur frühere Tokens und sich selbst; Incoming macht auch Beziehungen zu späteren Tokens sichtbar.

Große Dateien und Hardware

Die gesamte Datei wird in einem gemeinsamen Modellkontext analysiert, bis maximal 32.768 Tokens. Es gibt keine voneinander getrennten Analysefenster. Jedes Token sieht seinen gesamten kausal verfügbaren Dateikontext. Incoming-Attention macht dadurch auch Verbindungen zu weit späteren Stellen sichtbar. RoPE-Positionen und alle 24 Layer gelten durchgehend für die ganze Datei. Intern werden lediglich 256 Query-Zeilen gleichzeitig berechnet, immer gegen sämtliche Datei-Keys; die Softmax und das Modell entsprechen der ursprünglichen vollständigen Attention. Die Statusleiste nennt ausdrücklich full-file context.

maxTokens begrenzt die zulässige Dateigröße (Standard/Maximum 32.768). Größere Dateien werden mit einer Erklärung abgelehnt, niemals still abgeschnitten oder in unabhängige Fenster geteilt. Eine zusätzliche Speicherabschätzung schützt kleinere Rechner. Dateien über 2 Millionen UTF-16-Zeichen werden nicht analysiert. Die alte Einstellung windowTokens entfällt; gespeicherte Werte haben keine Wirkung.

Apple Silicon verwendet automatisch Metal/MPS mit Float16; andere Rechner verwenden die CPU mit Float32. Vollständige Attention braucht quadratisch mehr Rechenarbeit und Matrixspeicher mit wachsender Tokenzahl. Query-Tiles und blockweises Ranking vermeiden das gleichzeitige Vorhalten aller Layer-/Head-Matrizen. Die Statusanzeige meldet den Layer-Fortschritt; Abbrechen beendet den Worker. Nach dem Modelllauf wird ungenutzter Metal-Poolspeicher freigegeben. Cursorwechsel zeigen sofort gespeicherte Treffer; Textauswahlen werden aus der RAM-Matrix kombiniert und auf starke Spitzen begrenzt. Erstmaliger Download und Modellstart kommen zur Laufzeit hinzu. CPU-Analysen können deutlich länger dauern.

Gemessen auf dem Entwicklungs-Mac mit Apple Silicon und 48 GB RAM (Modell bereits geladen; Version 0.1.9: echter Modelllauf plus vier Ranglisten; seit 0.2.0 nur noch zwei Ranglisten):

Datei-Tokens Analysezeit Attention-Matrix im RAM
1.024 ca. 0,5 s 4 MiB
4.096 ca. 3 s 64 MiB
8.192 ca. 10 s 256 MiB
16.384 ca. 38 s 1 GiB

Modellstart zusätzlich etwa 1–2 Sekunden bei vorhandenem Cache. Gemessener Metal-Pool am Layer-Ende bei 16.384 Tokens etwa 4,6 GiB, nach Freigabe etwa 1 GiB; dies ist keine vollständige Prozess-RAM-Messung. Modell, Arbeitsdaten und Ranglisten brauchen zusätzlichen Speicher neben der CPU-Matrix. 32.768 Tokens sind zulässig, aber noch nicht gemessen. Reproduzierbar mit .test-runtime/bin/python tests/benchmark_worker.py.

macOS ARM wurde mit dem echten Modell getestet. Windows x64, Intel macOS und Linux (x64/ARM64) sind implementiert, aber noch nicht auf diesen Systemen getestet. Bei Remote SSH läuft die Workspace-Extension einschließlich Modell auf dem Remote-Rechner; dort gelten dessen Hardware und Speichergrenzen. Remote SSH wurde noch nicht praktisch getestet. Windows ARM64 wird derzeit nicht unterstützt. Intel-Macs verwenden wegen fehlender neuerer PyTorch-Wheels PyTorch 2.2.2.

Befehle und Einstellungen

  • Local Attention: Set Up / Retry – Einrichtung oder Analyse erneut versuchen.
  • Local Attention: Analyze Current File – die aktuelle Datei neu berechnen.
  • Local Attention: Enable / Disable – automatische Analyse und Highlights umschalten.
  • Local Attention: Cancel Download / Analysis – laufenden Download, Einrichtung oder Analyse abbrechen.
  • Local Attention: Choose Normalization – sofort zwischen Positionsbereinigt und Original-Attention wechseln.
  • Local Attention: Adjust Contrast – Sichtbarkeit schwächerer Verbindungen anpassen.
  • Local Attention: Show Logs – Einrichtung, Fehler und Laufzeiten ansehen.

Einstellungen unter Local Attention: enabled, maxTokens (128–32768), debounceMs, excludedPrefixTokens, device (auto, cpu, mps). Bei Metal-Problemen auf cpu umstellen.

Lokalität

Der Code wird über stdin an einen von der Extension gestarteten Prozess auf demselben Extension-Host übergeben. Es gibt keinen HTTP-Server, keine externe Inference-API und keine Extension-Telemetrie. GitHub, Python-Paketserver und Hugging Face werden nur für Runtime-/Modelldownloads verwendet. Nach vollständiger Einrichtung ist Analyse offline möglich. In untrusted Workspaces bleibt die Analyse aus. Installierte Pakete und Modell liegen im VS-Code-Global-Storage dieser Extension; Quellcode und Attention-Ergebnisse werden dort nicht gespeichert. Die vorhandene Runtime wird nach erfolgreicher Einrichtung ohne erneute Paketinstallation wiederverwendet.

Entwicklung

npm ci
npm test
npm run package

Mit F5 startet ein Extension Development Host. Backend-Tests benötigen die Pakete aus backend/requirements.txt:

uv venv --python 3.12 .test-runtime
uv pip install --python .test-runtime/bin/python --torch-backend cpu -r backend/requirements.txt
.test-runtime/bin/python -m unittest discover -s tests -p 'test_*.py'
npm run test:editor

Der Editor-Integrationstest verwendet einen isolierten VS-Code-Test-Host und lädt dabei die echte Runtime und das echte Modell herunter. Es gibt keinen simulierten Attention-Modus in der Extension.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft