Start · Sprachen · JavaScript · Referenz · LanguageDetector.measureInputUsage()

LanguageDetector.measureInputUsage()

Methode

Ermittelt asynchron, wie viel der Eingabequote (<code>inputQuota</code>) eine Spracherkennung für den übergebenen Text verbrauchen würde, ohne die Erkennung selbst auszuführen.

seit JavaScript Experimentell: Chrome 138+ (Desktop), kein Baselin Kategorie: webapi

Signatur

LanguageDetector.prototype.measureInputUsage(input, options)

Beschreibung

Die Methode measureInputUsage() gehört zur experimentellen Language Detector API, die zu den im Browser eingebauten KI-Funktionen zählt. Sie berechnet, wie viele Einheiten der Eingabequote ein Aufruf von detect() mit demselben Text belegen würde. Die Spracherkennung selbst läuft dabei nicht.

Jede LanguageDetector-Instanz hat eine schreibgeschützte Eigenschaft inputQuota. Sie gibt an, wie groß eine Eingabe höchstens sein darf. Überschreitet ein Text diese Grenze, lehnt detect() mit einem QuotaExceededError ab. Mit measureInputUsage() prüfen Sie das vorher. So können Sie lange Texte kürzen, in Stücke teilen oder die Nutzerin bzw. den Nutzer warnen, bevor ein Fehler auftritt.

Die Einheit des Rückgabewerts ist nicht festgelegt. Meist sind es Tokens des zugrunde liegenden Modells, keine Zeichen. Vergleichen Sie den Wert deshalb nur mit inputQuota und rechnen Sie ihn nicht in Zeichen oder Wörter um.

Parameter

Name Typ Default Beschreibung
$input Pflicht string Der Text, dessen Verbrauch gemessen werden soll. Es sollte derselbe Text sein, der später an detect() geht.
$options Object {} Optionales Objekt mit Einstellungen.
$options.signal AbortSignal Ein Signal, mit dem sich die Messung abbrechen lässt. Wird es ausgelöst, lehnt das Promise mit AbortError bzw. dem Abbruchgrund ab.

Rückgabewert

Typ
Promise<number>
Beschreibung
Ein Promise, das mit der Zahl der Quoten-Einheiten erfüllt wird, die input verbrauchen würde. Es lehnt z. B. mit InvalidStateError ab, wenn das Dokument nicht aktiv ist oder der Detector bereits mit destroy() freigegeben wurde, und mit AbortError, wenn der Vorgang abgebrochen wurde.

Beispiele

Verbrauch messen und mit der Quote vergleichen

const detector = await LanguageDetector.create();

const text = 'Das ist ein kurzer deutscher Beispielsatz.';
const usage = await detector.measureInputUsage(text);

console.log(`Verbrauch: ${usage} von ${detector.inputQuota}`);

if (usage <= detector.inputQuota) {
  const [top] = await detector.detect(text);
  console.log(top.detectedLanguage, top.confidence.toFixed(2));
}
Verbrauch: 9 von Infinity de 0.98

Zu lange Eingaben vor detect() abfangen

const detectSafely = async (detector, text) => {
  const usage = await detector.measureInputUsage(text);
  if (usage > detector.inputQuota) {
    // Nur den Anfang prüfen – für die Spracherkennung reicht das meist
    const shortened = text.slice(0, Math.floor(text.length * detector.inputQuota / usage));
    return detector.detect(shortened);
  }
  return detector.detect(text);
};

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

Messung per AbortSignal mit Zeitlimit abbrechen

const detector = await LanguageDetector.create();

try {
  const usage = await detector.measureInputUsage('Bonjour tout le monde', {
    signal: AbortSignal.timeout(500)
  });
  console.log('Einheiten:', usage);
} catch (err) {
  if (err.name === 'AbortError' || err.name === 'TimeoutError') {
    console.warn('Messung abgebrochen');
  } else {
    throw err;
  }
} finally {
  detector.destroy();
}
Einheiten: 5

// Wichtig · Fallstricke

  • Experimentell: Die API gibt es derzeit nur in Chrome (Desktop, ab Version 138). Firefox und Safari unterstützen sie nicht. Prüfen Sie die Unterstützung mit 'LanguageDetector' in self und die Verfügbarkeit des Modells mit LanguageDetector.availability().
  • Die API funktioniert nur in einem sicheren Kontext (HTTPS). In iframes muss die Permissions-Policy language-detector sie ausdrücklich erlauben.
  • inputQuota kann Infinity sein. Ein Vergleich mit <= funktioniert trotzdem, geben Sie den Wert aber nicht ungeprüft in der Oberfläche aus.
  • Der Rückgabewert ist keine Zeichenzahl. Das Verhältnis von Zeichen zu Einheiten hängt von Sprache und Modell ab. Kürzungen anhand dieses Verhältnisses (siehe Beispiel 2) sind nur eine Näherung.
  • Nach destroy() lehnt die Methode mit InvalidStateError ab.
  • Auch die Messung kostet etwas Rechenzeit. Bei sehr häufigen Aufrufen, z. B. bei jedem Tastendruck, sollten Sie die Aufrufe drosseln (Debounce).