Start · Sprachen · JavaScript · Referenz · LanguageModel.destroy()

LanguageModel.destroy()

Methode

Beendet eine <code>LanguageModel</code>-Sitzung, gibt die belegten Ressourcen (Modell, Kontext, Speicher) frei und bricht laufende Anfragen ab.

seit JavaScript Experimentell: Chrome 138+ (Erweiterungen), im Web Kategorie: webapi

Signatur

LanguageModel.prototype.destroy()

Beschreibung

Die Methode destroy() der Schnittstelle LanguageModel (Prompt API) beendet eine mit LanguageModel.create() erzeugte Sitzung endgültig. Danach gibt der Browser die Ressourcen frei, die für diese Sitzung reserviert waren. Dazu zählen der Gesprächskontext, zwischengespeicherte Token und unter Umständen auch das geladene On-Device-Modell im Arbeits- bzw. Grafikspeicher, falls keine andere Sitzung es mehr nutzt.

Anfragen, die bei diesem Aufruf noch laufen (prompt(), promptStreaming(), append(), measureInputUsage()), werden mit einer DOMException vom Typ AbortError abgebrochen. Jeder spätere Aufruf einer Methode derselben Instanz schlägt fehl. Eine zerstörte Sitzung lässt sich nicht wiederherstellen. Wer weiterarbeiten möchte, muss mit LanguageModel.create() eine neue Sitzung anlegen.

Rufen Sie destroy() auf, sobald eine Sitzung nicht mehr gebraucht wird: wenn ein Chat-Dialog geschlossen wird, beim Wechsel der Ansicht in einer Single-Page-App, nach einer einmaligen Aufgabe (etwa einer Zusammenfassung) oder bevor eine Sitzung mit anderem System-Prompt neu angelegt wird. Weil lokale Sprachmodelle viel Speicher belegen, ist das Freigeben vor allem auf schwächeren Geräten wichtig.

Denselben Effekt erreichen Sie über das Signal eines AbortController, das Sie bei create({ signal }) übergeben. Ein abort() zerstört dann die Sitzung.

Rückgabewert

Typ
undefined
Beschreibung
Kein Rückgabewert. Die Methode arbeitet synchron, und die Sitzung ist direkt nach dem Aufruf unbrauchbar.

Beispiele

Einmalige Aufgabe: Sitzung nach Gebrauch freigeben

const summarizeText = async (text) => {
  if ((await LanguageModel.availability()) === 'unavailable') {
    throw new Error('Prompt API nicht verfügbar');
  }

  const session = await LanguageModel.create({
    initialPrompts: [
      { role: 'system', content: 'Fasse Texte in einem Satz auf Deutsch zusammen.' }
    ]
  });

  try {
    return await session.prompt(text);
  } finally {
    // Ressourcen auch im Fehlerfall zuverlässig freigeben
    session.destroy();
  }
};

const result = await summarizeText('Die Prompt API erlaubt es, ein lokales Sprachmodell direkt im Browser zu nutzen ...');
console.log(result);
Die Prompt API ermöglicht die Nutzung eines lokalen Sprachmodells im Browser.

Laufende Anfrage durch destroy() abbrechen

const session = await LanguageModel.create();

const pending = session.prompt('Schreibe einen sehr langen Aufsatz über die Geschichte des Internets.');

// Nutzer klickt nach kurzer Zeit auf „Abbrechen“
setTimeout(() => session.destroy(), 500);

try {
  await pending;
} catch (err) {
  console.log(err.name);
}

// Spätere Aufrufe schlagen ebenfalls fehl
try {
  await session.prompt('Hallo?');
} catch (err) {
  console.log('Sitzung ist zerstört:', err.name);
}
AbortError Sitzung ist zerstört: InvalidStateError

Chat-Komponente: Sitzung beim Schließen aufräumen

class ChatWidget {
  #session = null;

  async open() {
    this.#session = await LanguageModel.create({
      initialPrompts: [{ role: 'system', content: 'Du bist ein hilfsbereiter Support-Assistent.' }]
    });
  }

  async ask(question) {
    if (!this.#session) throw new Error('Chat ist nicht geöffnet');
    return this.#session.prompt(question);
  }

  close() {
    this.#session?.destroy();
    this.#session = null;
  }
}

const chat = new ChatWidget();
await chat.open();
console.log(await chat.ask('Wie setze ich mein Passwort zurück?'));

// Seite verlassen → Speicher freigeben
window.addEventListener('pagehide', () => chat.close());

Alternative: Zerstören über AbortController

const controller = new AbortController();

const session = await LanguageModel.create({ signal: controller.signal });

document.querySelector('#stop').addEventListener('click', () => {
  // wirkt wie session.destroy()
  controller.abort();
});

console.log(await session.prompt('Nenne drei Farben.'));
Rot, Grün, Blau.

// Wichtig · Fallstricke

  • Experimentelle API: Die Prompt API gibt es bisher nur in Chromium-basierten Browsern. In Chrome-Erweiterungen ist sie ab Version 138 nutzbar, auf Webseiten nur per Origin Trial oder Flag. Firefox und Safari unterstützen sie nicht. Prüfen Sie deshalb vorher mit 'LanguageModel' in self und LanguageModel.availability(), ob sie vorhanden ist.
  • Endgültig: Nach destroy() lässt sich die Instanz nicht mehr verwenden. Jeder weitere Aufruf von prompt(), promptStreaming(), append() oder clone() wird abgelehnt (in Chrome derzeit mit InvalidStateError). Setzen Sie Verweise auf die Sitzung anschließend auf null.
  • Laufende Anfragen: Offene Promises werden mit AbortError abgelehnt. Fangen Sie diesen Fehler gezielt ab, damit ein gewollter Abbruch nicht als echter Fehler gemeldet wird.
  • Geklonte Sitzungen: Eine mit clone() erzeugte Sitzung ist unabhängig. Wird das Original zerstört, betrifft das den Klon nicht, und umgekehrt. Jede Instanz müssen Sie einzeln freigeben.
  • Kontext statt Zerstören: Ist nur das Kontingent (inputQuota) erschöpft, kann ein neuer Anfang sinnvoll sein. Dafür rufen Sie destroy() auf und legen mit create() eine neue Sitzung an, statt immer mehr Sitzungen parallel offen zu halten.
  • Speicher: Ohne destroy() werden die Ressourcen erst durch die Speicherbereinigung oder beim Schließen der Seite freigegeben. Das kann auf Geräten mit wenig RAM zu Engpässen führen.