Signatur
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
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);
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);
}
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.'));
// 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 selfundLanguageModel.availability(), ob sie vorhanden ist. - Endgültig: Nach
destroy()lässt sich die Instanz nicht mehr verwenden. Jeder weitere Aufruf vonprompt(),promptStreaming(),append()oderclone()wird abgelehnt (in Chrome derzeit mitInvalidStateError). Setzen Sie Verweise auf die Sitzung anschließend aufnull. - Laufende Anfragen: Offene Promises werden mit
AbortErrorabgelehnt. 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 Siedestroy()auf und legen mitcreate()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.