Signatur
Beschreibung
Die schreibgeschützte Eigenschaft inputQuota einer Summarizer-Instanz liefert das Eingabe-Limit, das das im Browser integrierte Sprachmodell (z. B. Gemini Nano in Chrome) für einen einzelnen Aufruf von summarize() oder summarizeStreaming() zur Verfügung stellt. Der Wert wird in einer implementierungsabhängigen Einheit angegeben – in der Praxis sind das Tokens, nicht Zeichen oder Wörter.
Wofür braucht man das? Lokale Modelle haben ein begrenztes Kontextfenster. Überschreitet der Eingabetext (inklusive sharedContext und dem pro Aufruf übergebenen context) dieses Limit, schlägt die Zusammenfassung mit einer QuotaExceededError-DOMException fehl. Mit inputQuota zusammen mit Summarizer.prototype.measureInputUsage() lässt sich vorab prüfen, ob ein Text passt, und langer Text kann gezielt in Abschnitte aufgeteilt werden.
Weil die Umrechnung von Zeichen in Tokens vom Modell abhängt, solltest du die Größe nie selbst schätzen, sondern immer measureInputUsage() nutzen und das Ergebnis mit inputQuota vergleichen. Der Wert ist pro Instanz fest und ändert sich während der Lebensdauer des Objekts nicht.
Rückgabewert
Infinity sein, wenn die Implementierung kein Limit hat.Beispiele
Kontingent einer Instanz auslesen
if ('Summarizer' in self) {
const availability = await Summarizer.availability();
if (availability !== 'unavailable') {
const summarizer = await Summarizer.create({ type: 'tldr', length: 'short' });
console.log(`Eingabe-Limit: ${summarizer.inputQuota} Tokens`);
summarizer.destroy();
}
} else {
console.log('Summarizer API wird nicht unterstützt.');
}
Vor dem Zusammenfassen prüfen, ob der Text passt
const summarizer = await Summarizer.create({
type: 'key-points',
format: 'markdown',
sharedContext: 'Technischer Blogartikel'
});
const text = document.querySelector('article').innerText;
const usage = await summarizer.measureInputUsage(text);
if (usage <= summarizer.inputQuota) {
const summary = await summarizer.summarize(text);
console.log(summary);
} else {
console.warn(`Text zu lang: ${usage} von ${summarizer.inputQuota} Tokens.`);
}
Langen Text abschnittsweise zusammenfassen
const summarizeLongText = async (paragraphs) => {
const summarizer = await Summarizer.create({ type: 'tldr', length: 'medium' });
const chunks = [];
let current = '';
for (const p of paragraphs) {
const candidate = current ? `${current}\n\n${p}` : p;
const usage = await summarizer.measureInputUsage(candidate);
if (usage > summarizer.inputQuota && current) {
chunks.push(current);
current = p;
} else {
current = candidate;
}
}
if (current) chunks.push(current);
const partials = [];
for (const chunk of chunks) {
partials.push(await summarizer.summarize(chunk));
}
summarizer.destroy();
return partials.join('\n');
};
const paragraphs = [...document.querySelectorAll('article p')].map((p) => p.innerText);
console.log(await summarizeLongText(paragraphs));
// Wichtig · Fallstricke
- Einheit ist nicht Zeichen:
inputQuotazählt modellabhängige Tokens.text.lengthmit dem Wert zu vergleichen ist falsch – immermeasureInputUsage()verwenden. - Kontext zählt mit: Auch
sharedContextauscreate()und diecontext-Option eines einzelnen Aufrufs verbrauchen Kontingent. Übergib dieselben Optionen anmeasureInputUsage(text, { context })wie ansummarize(). - Fehlerfall: Wird das Limit überschritten, wird das Promise von
summarize()mit einerDOMExceptionnamensQuotaExceededErrorabgelehnt – fange sie mittry…catchab. - Kompatibilität: Die Summarizer API ist experimentell und derzeit nur in Chrome (Desktop, ab Version 138) mit geeigneter Hardware verfügbar; sie setzt einen sicheren Kontext (HTTPS) voraus und kann per Permissions Policy (
summarizer) eingeschränkt sein. Vorher mit'Summarizer' in selfundSummarizer.availability()prüfen. - Der konkrete Wert unterscheidet sich zwischen Browsern, Modellversionen und Geräten – nie hart kodieren.