(
item: LLMInteractionItem,
message: ChatMessage,
forceRole: boolean = false,
)
| 284 | } |
| 285 | |
| 286 | private logMessage( |
| 287 | item: LLMInteractionItem, |
| 288 | message: ChatMessage, |
| 289 | forceRole: boolean = false, |
| 290 | ) { |
| 291 | let showRole = true; |
| 292 | if ( |
| 293 | !forceRole && |
| 294 | (message.role === "assistant" || message.role === "thinking") |
| 295 | ) { |
| 296 | const interaction = this.getInteractionData(item); |
| 297 | const lastMessage = |
| 298 | interaction.lastItem?.kind === "message" |
| 299 | ? interaction.lastItem.message |
| 300 | : null; |
| 301 | if (message.role === lastMessage?.role) { |
| 302 | showRole = false; |
| 303 | } |
| 304 | } |
| 305 | |
| 306 | if (showRole) { |
| 307 | this.logLines(item, "Role: " + message.role); |
| 308 | } |
| 309 | |
| 310 | switch (message.role) { |
| 311 | case "assistant": |
| 312 | if (message.toolCalls) { |
| 313 | this.logToolcalls(item, message.toolCalls); |
| 314 | } |
| 315 | this.logMessageContent(item, message); |
| 316 | break; |
| 317 | case "thinking": |
| 318 | if (message.toolCalls) { |
| 319 | this.logToolcalls(item, message.toolCalls); |
| 320 | } |
| 321 | this.logMessageContent(item, message); |
| 322 | if (message.redactedThinking) { |
| 323 | this.logLines(item, `Redacted Thinking: ${message.redactedThinking}`); |
| 324 | } |
| 325 | if (message.signature) { |
| 326 | this.logLines(item, `Signature: ${message.signature}`); |
| 327 | } |
| 328 | break; |
| 329 | case "user": |
| 330 | this.logMessageContent(item, message); |
| 331 | break; |
| 332 | case "system": |
| 333 | this.logMessageText(item, message.content); |
| 334 | break; |
| 335 | case "tool": |
| 336 | this.logLines(item, `Tool Call ID: ${message.toolCallId}`); |
| 337 | this.logMessageText(item, message.content); |
| 338 | break; |
| 339 | } |
| 340 | } |
| 341 | |
| 342 | private logTokens( |
| 343 | item: LLMInteractionSuccess | LLMInteractionError | LLMInteractionCancel, |
no test coverage detected