// Package tokens schätzt Tokenzahlen ohne echten Tokenizer (E-09). // Kalibrierung gegen die tatsächliche usage aus jeder API-Antwort folgt in M4. package tokens import "unicode" // Estimate schätzt die Tokenzahl eines Texts: len/4 für lateinischen Text, // len/3 für überwiegend CJK-Text (dort ist ein Token meist ~1 Zeichen). func Estimate(s string) int { if s == "" { return 0 } runes := []rune(s) cjk := 0 for _, r := range runes { if isCJK(r) { cjk++ } } n := len(runes) if cjk*2 > n { return n/3 + 1 } return n/4 + 1 } func isCJK(r rune) bool { return unicode.Is(unicode.Han, r) || unicode.Is(unicode.Hiragana, r) || unicode.Is(unicode.Katakana, r) || unicode.Is(unicode.Hangul, r) }