in prompt/prompt-tokenizer/src/commonTest/kotlin/ai/koog/prompt/tokenizer/PromptTokenizerTest.kt [57:112]
fun testPromptTokenizer() {
// Create a mock tokenizer to track token usage
val mockTokenizer = MockTokenizer()
// Create a prompt tokenizer with our mock tokenizer
val promptTokenizer = OnDemandTokenizer(mockTokenizer)
// Create a prompt with some messages
val testPrompt = prompt("test-prompt") {
system("You are a helpful assistant.")
user("What is the capital of France?")
assistant("Paris is the capital of France.")
}
// Count tokens in the prompt
val totalTokens = promptTokenizer.tokenCountFor(testPrompt)
// Verify that tokens were counted
assertTrue(totalTokens > 0, "Total tokens should be greater than 0")
// Verify that the tokenizer was used and counted tokens
assertTrue(mockTokenizer.totalTokens > 0, "Tokenizer should have counted tokens")
// Store the tokens counted for the prompt (before counting individual messages)
val promptTokenCount = mockTokenizer.totalTokens
// Print the total tokens spent for the prompt
println("[DEBUG_LOG] Total tokens spent for prompt: $promptTokenCount")
// Reset tokenizer to count individual messages separately
mockTokenizer.reset()
val requestMetainfo = RequestMetaInfo.create(Clock.System)
val responseMetainfo = ResponseMetaInfo.create(Clock.System)
// Count tokens for individual messages
val systemTokens = promptTokenizer.tokenCountFor(
Message.System("You are a helpful assistant.", requestMetainfo)
)
val userTokens = promptTokenizer.tokenCountFor(Message.User("What is the capital of France?", requestMetainfo))
val assistantTokens = promptTokenizer.tokenCountFor(
Message.Assistant("Paris is the capital of France.", responseMetainfo)
)
// Print token counts for each message
println("[DEBUG_LOG] System message tokens: $systemTokens")
println("[DEBUG_LOG] User message tokens: $userTokens")
println("[DEBUG_LOG] Assistant message tokens: $assistantTokens")
// Verify that individual messages have positive token counts
assertTrue(systemTokens > 0, "System message should have tokens")
assertTrue(userTokens > 0, "User message should have tokens")
assertTrue(assistantTokens > 0, "Assistant message should have tokens")
// Verify that the total tokens from prompt counting equals what we stored
assertEquals(totalTokens, promptTokenCount, "Total tokens should match the stored prompt token count")
}