| package util |
|
|
| const ( |
| defaultTokenizerModel = "gpt-4o" |
| claudeTokenizerModel = "claude" |
| ) |
|
|
| func CountPromptTokens(text, model string) int { |
| base := maxTokenCount( |
| EstimateTokens(text), |
| countWithTokenizer(text, model), |
| ) |
| if base <= 0 { |
| return 0 |
| } |
| return base + conservativePromptPadding(base) |
| } |
|
|
| func CountOutputTokens(text, model string) int { |
| base := maxTokenCount( |
| EstimateTokens(text), |
| countWithTokenizer(text, model), |
| ) |
| if base <= 0 { |
| return 0 |
| } |
| return base |
| } |
|
|
| func conservativePromptPadding(base int) int { |
| padding := base / 50 |
| if padding < 4 { |
| padding = 4 |
| } |
| return padding |
| } |
|
|
| func maxTokenCount(values ...int) int { |
| best := 0 |
| for _, v := range values { |
| if v > best { |
| best = v |
| } |
| } |
| return best |
| } |
|
|