import type { EmbeddingInput } from "./embedding-inputs.js";
// Helpers for enforcing embedding model input size limits. // // We use UTF-8 byte length as a conservative upper bound for tokenizer output. // Tokenizers operate over bytes; a token must contain at least one byte, so // token_count <= utf8_byte_length.
export function estimateUtf8Bytes(text: string): number { if (!text) { return0;
} return Buffer.byteLength(text, "utf8");
}
export function estimateStructuredEmbeddingInputBytes(input: EmbeddingInput): number { if (!input.parts?.length) { return estimateUtf8Bytes(input.text);
}
let total = 0; for (const part of input.parts) { if (part.type === "text") {
total += estimateUtf8Bytes(part.text); continue;
}
total += estimateUtf8Bytes(part.mimeType);
total += estimateUtf8Bytes(part.data);
} return total;
}
export function splitTextToUtf8ByteLimit(text: string, maxUtf8Bytes: number): string[] { if (maxUtf8Bytes <= 0) { return [text];
} if (estimateUtf8Bytes(text) <= maxUtf8Bytes) { return [text];
}
const parts: string[] = [];
let cursor = 0; while (cursor < text.length) { // The number of UTF-16 code units is always <= the number of UTF-8 bytes. // This makes `cursor + maxUtf8Bytes` a safe upper bound on the next split point.
let low = cursor + 1;
let high = Math.min(text.length, cursor + maxUtf8Bytes);
let best = cursor;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.