Start · Sprachen · JavaScript · Referenz · LanguageDetector.inputQuota

LanguageDetector.inputQuota

Eigenschaft

Schreibgeschützte Zahl, die angibt, wie viel Eingabe eine <code>LanguageDetector</code>-Instanz bei einem einzelnen Aufruf von <code>detect()</code> höchstens verarbeiten kann.

seit JavaScript Chrome/Edge 138+ (experimentell, nicht Baseline) Kategorie: webapi

Signatur

LanguageDetector.inputQuota

Beschreibung

Die Eigenschaft inputQuota gehört zur eingebauten KI-Schnittstelle LanguageDetector (Language Detector API). Sie liefert eine Zahl: Das ist das Eingabelimit, das der Browser bzw. das lokale Sprachmodell für eine einzelne Spracherkennung vorsieht. Die Einheit legt die Implementierung fest (meist Token, nicht Zeichen). Direkt mit string.length vergleichen lässt sich der Wert deshalb nicht.

Zusammen mit LanguageDetector.prototype.measureInputUsage() ist inputQuota nützlich, um vor dem Aufruf von detect() zu prüfen, ob ein Text in das Limit passt. So vermeidest du einen abgelehnten Promise mit QuotaExceededError und kannst lange Texte gezielt kürzen oder in Abschnitte aufteilen. Für die Spracherkennung reicht meist schon ein repräsentativer Ausschnitt.

Der Wert ist pro Instanz fest und ändert sich nicht, solange die Instanz existiert. Gibt es kein Limit, kann der Wert Infinity sein.

Rückgabewert

Typ
number
Beschreibung
Das maximale Eingabebudget pro detect()-Aufruf in der Einheit der Implementierung (meist Token). Kann Infinity sein.

Beispiele

Detektor erzeugen und Kontingent auslesen

if ('LanguageDetector' in self) {
  const availability = await LanguageDetector.availability();
  if (availability !== 'unavailable') {
    const detector = await LanguageDetector.create();
    console.log('Eingabelimit:', detector.inputQuota);
  }
} else {
  console.log('Language Detector API nicht unterstützt');
}
Eingabelimit: 1024 // Wert abhängig von Browser und Modell

Vor detect() prüfen, ob der Text ins Limit passt

const detector = await LanguageDetector.create();
const text = document.querySelector('#kommentar').value;

const usage = await detector.measureInputUsage(text);

if (usage <= detector.inputQuota) {
  const [best] = await detector.detect(text);
  console.log(`Sprache: ${best.detectedLanguage} (${(best.confidence * 100).toFixed(1)} %)`);
} else {
  console.warn(`Text zu lang: ${usage} von ${detector.inputQuota} erlaubt`);
}
Sprache: de (97.3 %)

Langen Text schrittweise kürzen

const detectSafely = async (detector, text) => {
  let sample = text;
  // Text halbieren, bis er ins Kontingent passt
  while (sample.length > 0 &&
         (await detector.measureInputUsage(sample)) > detector.inputQuota) {
    sample = sample.slice(0, Math.floor(sample.length / 2));
  }
  return detector.detect(sample);
};

const detector = await LanguageDetector.create({ expectedInputLanguages: ['de', 'en'] });
const results = await detectSafely(detector, sehrLangerArtikel);
console.log(results[0].detectedLanguage);
en

QuotaExceededError abfangen

const detector = await LanguageDetector.create();
try {
  await detector.detect('Lorem ipsum '.repeat(100000));
} catch (err) {
  if (err.name === 'QuotaExceededError') {
    console.error(`Limit von ${detector.inputQuota} überschritten`);
  } else {
    throw err;
  }
}
Limit von 1024 überschritten

// Wichtig · Fallstricke

  • Kompatibilität: Experimentelle API, bisher nur in Chromium-Browsern (Chrome/Edge ab etwa Version 138) für Desktop verfügbar. Firefox und Safari unterstützen sie nicht. Prüfe die Unterstützung vorher mit 'LanguageDetector' in self. Die API steht nur in sicheren Kontexten (HTTPS) zur Verfügung.
  • Einheit: inputQuota zählt meist Token, keine Zeichen. Wie viel ein Text verbraucht, verrät nur measureInputUsage(). Vergleiche mit text.length sind unzuverlässig.
  • Nur lesbar: Eine Zuweisung wird ignoriert (im strict mode gibt es einen TypeError). Das Limit lässt sich nicht erhöhen.
  • Wird das Limit überschritten, lehnt detect() den Promise mit einem QuotaExceededError ab.
  • Das Modell muss eventuell erst heruntergeladen werden. create() braucht dann unter Umständen eine Nutzeraktion und kann dauern. Den Fortschritt verfolgst du über die Option monitor.
  • Nach destroy() ist die Instanz nicht mehr nutzbar. Der Wert von inputQuota ist dann ohne Bedeutung.