Start · Sprachen · JavaScript · Referenz · Summarizer.availability()

Summarizer.availability()

Methode

Prüft asynchron, ob das eingebaute KI-Modell des Browsers eine bestimmte <code>Summarizer</code>-Konfiguration unterstützt, gerade herunterlädt oder erst herunterladen muss.

seit JavaScript Experimentell: Chrome/Edge 138+ (Desktop), nicht B Kategorie: webapi

Signatur

Summarizer.availability(options)

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 und create() 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

Typ
Promise<"unavailable" | "downloadable" | "downloading" | "available">
Beschreibung
Ein 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();
Verfügbarkeit: available

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));
});
Download: 0 % Download: 57 % Download: 100 % * Kernpunkt 1 … * Kernpunkt 2 …

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);
Kurze Zusammenfassung des Artikels …

// 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 self prüfen, ob es sie gibt.
  • Nur im sicheren Kontext (HTTPS) nutzbar. In iframes kann die API durch die Permissions Policy summarizer gesperrt sein.
  • availability() selbst löst keinen Download aus. Den Download startet erst Summarizer.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 vor create() erneut prüfen.
  • Die Optionen bei availability() und create() sollten übereinstimmen. Ein "available" für Englisch sagt nichts über Deutsch aus.
  • Aus Datenschutzgründen (Fingerprinting) kann der Browser Ergebnisse vereinheitlichen oder verzögern.