Signatur
Beschreibung
Die statische Methode Summarizer.availability() gehört zur Summarizer API, einer der eingebauten KI-APIs des Browsers. Mit ihr findet man heraus, ob sich mit einer bestimmten Konfiguration (Art der Zusammenfassung, Format, Länge, Sprachen) ein Summarizer erzeugen lässt, bevor man Summarizer.create() aufruft.
Das Ergebnis ist ein Promise, das mit einem von vier Werten erfüllt wird:
"unavailable": Der Browser unterstützt die Konfiguration nicht, z. B. wegen einer nicht unterstützten Sprache, zu schwacher Hardware oder zu wenig Speicherplatz."downloadable": Die Konfiguration wird unterstützt, das Modell (oder ein Teil davon) muss aber erst heruntergeladen werden."downloading": Das Modell wird gerade heruntergeladen."available": Das Modell ist einsatzbereit undcreate()kann sofort aufgerufen werden.
Sinnvoll ist die Methode für progressive Verbesserung: Man blendet KI-Funktionen nur ein, wenn sie verfügbar sind, zeigt vor einem nötigen Download einen Hinweis an oder weicht auf eine serverseitige Zusammenfassung aus. Die Optionen sollten dieselben sein, die man später an Summarizer.create() übergibt, weil sonst die Verfügbarkeit abweichen kann.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $options | object | {} | Konfigurationsobjekt, dessen Unterstützung geprüft werden soll. Es hat dieselben Konfigurationsfelder wie Summarizer.create(). |
| $options.type | "key-points" | "tldr" | "teaser" | "headline" | "key-points" | Art der Zusammenfassung: Kernpunkte, Kurzfassung, Anreißer oder Überschrift. |
| $options.format | "markdown" | "plain-text" | "markdown" | Ausgabeformat der Zusammenfassung. |
| $options.length | "short" | "medium" | "long" | "short" | Gewünschte Länge. Was das genau bedeutet, hängt von type ab (z. B. Anzahl der Stichpunkte oder Sätze). |
| $options.expectedInputLanguages | string[] | BCP-47-Sprachcodes der zu erwartenden Eingabetexte, z. B. ["de", "en"]. |
|
| $options.expectedContextLanguages | string[] | BCP-47-Sprachcodes des zu erwartenden Kontexts (sharedContext bzw. context). |
|
| $options.outputLanguage | string | BCP-47-Sprachcode der gewünschten Ausgabesprache, z. B. "en". |
Rückgabewert
Promise, das mit einem String erfüllt wird, der die Verfügbarkeit der Konfiguration angibt. Bei ungültigen Optionen wird es abgelehnt, etwa mit einem TypeError bei unbekannten Enum-Werten. Ist die API durch eine Permissions Policy gesperrt, wird es mit einer NotAllowedError-DOMException abgelehnt.Beispiele
Unterstützung prüfen und Button ein- oder ausblenden
const summarizeBtn = document.querySelector('#summarize');
const checkSupport = async () => {
// Wird die API überhaupt unterstützt?
if (!('Summarizer' in self)) {
summarizeBtn.hidden = true;
return;
}
const status = await Summarizer.availability({
type: 'tldr',
format: 'plain-text',
length: 'short'
});
console.log('Verfügbarkeit:', status);
summarizeBtn.hidden = status === 'unavailable';
};
checkSupport();
Download-Hinweis anzeigen und Fortschritt verfolgen
const options = {
type: 'key-points',
format: 'markdown',
length: 'medium',
expectedInputLanguages: ['en'],
outputLanguage: 'en'
};
document.querySelector('#start').addEventListener('click', async () => {
const status = await Summarizer.availability(options);
if (status === 'unavailable') {
console.warn('Zusammenfassung wird auf diesem Gerät nicht unterstützt.');
return;
}
// create() innerhalb der Nutzeraktivierung (Klick) aufrufen,
// falls ein Download nötig ist
const summarizer = await Summarizer.create({
...options,
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Download: ${Math.round(e.loaded * 100)} %`);
});
}
});
const text = document.querySelector('article').textContent;
console.log(await summarizer.summarize(text));
});
Fallback auf Server-API bei fehlender Sprachunterstützung
const summarize = async (text) => {
const opts = {
type: 'tldr',
expectedInputLanguages: ['de'],
outputLanguage: 'de'
};
const status = 'Summarizer' in self
? await Summarizer.availability(opts)
: 'unavailable';
if (status === 'available') {
const summarizer = await Summarizer.create(opts);
return summarizer.summarize(text);
}
// Fallback: serverseitige Zusammenfassung
const res = await fetch('/api/summarize', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text })
});
const { summary } = await res.json();
return summary;
};
summarize('Langer deutscher Artikeltext …').then(console.log);
// Wichtig · Fallstricke
- Experimentell: Die Summarizer API ist derzeit nur in Chromium-basierten Desktop-Browsern (Chrome/Edge ab etwa Version 138) verfügbar und dort an Hardware-Voraussetzungen gebunden (Arbeitsspeicher/GPU, freier Speicherplatz). Firefox und Safari unterstützen sie nicht. Vorher immer mit
'Summarizer' in selfprüfen, ob es sie gibt. - Nur im sicheren Kontext (HTTPS) nutzbar. In iframes kann die API durch die Permissions Policy
summarizergesperrt sein. availability()selbst löst keinen Download aus. Den Download startet erstSummarizer.create(), und dafür ist bei"downloadable"oder"downloading"eine Nutzeraktivierung (z. B. ein Klick) nötig."available"ist keine Zusage für später: Der Status kann sich ändern, etwa wenn der Browser das Modell wegen Speichermangels löscht. Deshalb unmittelbar vorcreate()erneut prüfen.- Die Optionen bei
availability()undcreate()sollten übereinstimmen. Ein"available"für Englisch sagt nichts über Deutsch aus. - Aus Datenschutzgründen (Fingerprinting) kann der Browser Ergebnisse vereinheitlichen oder verzögern.