|
7 | 7 | using LlmTornado.ChatFunctions; |
8 | 8 | using LlmTornado.Code; |
9 | 9 | using LlmTornado.Common; |
| 10 | +using LlmTornado.Responses; |
10 | 11 | using LlmTornado.Tokenize; |
11 | 12 | using LlmTornado.Tokenize.Vendors; |
12 | 13 |
|
@@ -165,5 +166,129 @@ public static async Task TokenizeCohereLongText() |
165 | 166 |
|
166 | 167 | Console.WriteLine($"Cohere long text tokenization: {result.TotalTokens} tokens"); |
167 | 168 | } |
| 169 | + |
| 170 | + [TornadoTest] |
| 171 | + public static async Task TokenizeOpenAiText() |
| 172 | + { |
| 173 | + TokenizeRequest request = new TokenizeRequest(ChatModel.OpenAi.Gpt5.V5Mini, "Hello, world! This is a test message."); |
| 174 | + TokenizeResult? result = await Program.ConnectMulti().Tokenize.CountTokens(request); |
| 175 | + |
| 176 | + Assert.That(result, Is.NotNull); |
| 177 | + Assert.That(result!.TotalTokens, Is.GreaterThan(0)); |
| 178 | + |
| 179 | + Console.WriteLine($"OpenAI text tokenization: {result.TotalTokens} tokens"); |
| 180 | + } |
| 181 | + |
| 182 | + [TornadoTest] |
| 183 | + public static async Task TokenizeOpenAiMessages() |
| 184 | + { |
| 185 | + TokenizeRequest request = new TokenizeRequest(ChatModel.OpenAi.Gpt5.V5Mini, [ |
| 186 | + new ChatMessage(ChatMessageRoles.System, "You are a helpful assistant."), |
| 187 | + new ChatMessage(ChatMessageRoles.User, "Hello, how are you?"), |
| 188 | + new ChatMessage(ChatMessageRoles.Assistant, "I'm doing well, thank you!") |
| 189 | + ]); |
| 190 | + |
| 191 | + TokenizeResult? result = await Program.ConnectMulti().Tokenize.CountTokens(request); |
| 192 | + |
| 193 | + Assert.That(result, Is.NotNull); |
| 194 | + Assert.That(result!.TotalTokens, Is.GreaterThan(0)); |
| 195 | + |
| 196 | + Console.WriteLine($"OpenAI messages tokenization: {result.TotalTokens} tokens"); |
| 197 | + } |
| 198 | + |
| 199 | + [TornadoTest] |
| 200 | + public static async Task TokenizeOpenAiWithTools() |
| 201 | + { |
| 202 | + List<Tool> tools = |
| 203 | + [ |
| 204 | + new Tool(new ToolFunction("get_weather", "Get the weather for a location", new |
| 205 | + { |
| 206 | + type = "object", |
| 207 | + properties = new |
| 208 | + { |
| 209 | + location = new |
| 210 | + { |
| 211 | + type = "string", |
| 212 | + description = "The city and state, e.g. San Francisco, CA" |
| 213 | + } |
| 214 | + }, |
| 215 | + required = new[] { "location" } |
| 216 | + })) |
| 217 | + ]; |
| 218 | + |
| 219 | + TokenizeRequest request = new TokenizeRequest( |
| 220 | + ChatModel.OpenAi.Gpt5.V5Mini, |
| 221 | + [ |
| 222 | + new ChatMessage(ChatMessageRoles.System, "You are a helpful assistant."), |
| 223 | + new ChatMessage(ChatMessageRoles.User, "What's the weather in San Francisco?") |
| 224 | + ], |
| 225 | + tools |
| 226 | + ); |
| 227 | + |
| 228 | + TokenizeResult? result = await Program.ConnectMulti().Tokenize.CountTokens(request); |
| 229 | + |
| 230 | + Assert.That(result, Is.NotNull); |
| 231 | + Assert.That(result!.TotalTokens, Is.GreaterThan(0)); |
| 232 | + |
| 233 | + Console.WriteLine($"OpenAI with tools tokenization: {result.TotalTokens} tokens"); |
| 234 | + } |
| 235 | + |
| 236 | + [TornadoTest] |
| 237 | + [TornadoTestCase("gpt-5-mini")] |
| 238 | + [TornadoTestCase("claude-sonnet-4-20250514")] |
| 239 | + [TornadoTestCase("gemini-2.5-flash")] |
| 240 | + public static async Task TokenizeChatRequestWithTools(string model) |
| 241 | + { |
| 242 | + ChatRequest chatRequest = new ChatRequest |
| 243 | + { |
| 244 | + Model = model, |
| 245 | + Messages = [ |
| 246 | + new ChatMessage(ChatMessageRoles.System, "You are a helpful assistant with access to tools."), |
| 247 | + new ChatMessage(ChatMessageRoles.User, "What's the weather in San Francisco and New York?") |
| 248 | + ], |
| 249 | + Tools = [ |
| 250 | + new Tool(new ToolFunction("get_weather", "Get the weather for a location", new |
| 251 | + { |
| 252 | + type = "object", |
| 253 | + properties = new |
| 254 | + { |
| 255 | + location = new |
| 256 | + { |
| 257 | + type = "string", |
| 258 | + description = "The city and state, e.g. San Francisco, CA" |
| 259 | + } |
| 260 | + }, |
| 261 | + required = new[] { "location" } |
| 262 | + })) |
| 263 | + ] |
| 264 | + }; |
| 265 | + |
| 266 | + TokenizeRequest request = new TokenizeRequest(chatRequest); |
| 267 | + TokenizeResult? result = await Program.ConnectMulti().Tokenize.CountTokens(request); |
| 268 | + |
| 269 | + Assert.That(result, Is.NotNull); |
| 270 | + Assert.That(result!.TotalTokens, Is.GreaterThan(0)); |
| 271 | + |
| 272 | + Console.WriteLine($"[{model}] ChatRequest with tools tokenization: {result.TotalTokens} tokens"); |
| 273 | + } |
| 274 | + |
| 275 | + [TornadoTest] |
| 276 | + public static async Task TokenizeOpenAiFromResponseRequest() |
| 277 | + { |
| 278 | + ResponseRequest responseRequest = new ResponseRequest |
| 279 | + { |
| 280 | + Model = ChatModel.OpenAi.Gpt5.V5Mini, |
| 281 | + Instructions = "You are a helpful assistant.", |
| 282 | + InputString = "What is the meaning of life?" |
| 283 | + }; |
| 284 | + |
| 285 | + TokenizeRequest request = new TokenizeRequest(responseRequest); |
| 286 | + TokenizeResult? result = await Program.ConnectMulti().Tokenize.CountTokens(request); |
| 287 | + |
| 288 | + Assert.That(result, Is.NotNull); |
| 289 | + Assert.That(result!.TotalTokens, Is.GreaterThan(0)); |
| 290 | + |
| 291 | + Console.WriteLine($"OpenAI from ResponseRequest tokenization: {result.TotalTokens} tokens"); |
| 292 | + } |
168 | 293 | } |
169 | 294 |
|
0 commit comments