|
11 | 11 | use WordPress\AiClient\Messages\DTO\Message; |
12 | 12 | use WordPress\AiClient\Messages\DTO\MessagePart; |
13 | 13 | use WordPress\AiClient\Messages\DTO\ModelMessage; |
| 14 | +use WordPress\AiClient\Messages\Enums\MessagePartChannelEnum; |
14 | 15 | use WordPress\AiClient\Messages\Enums\MessagePartTypeEnum; |
15 | 16 | use WordPress\AiClient\Messages\Enums\MessageRoleEnum; |
16 | 17 | use WordPress\AiClient\Providers\DTO\ProviderMetadata; |
@@ -189,6 +190,36 @@ public function testToText(): void |
189 | 190 | $this->assertEquals($text, $result->toText()); |
190 | 191 | } |
191 | 192 |
|
| 193 | + /** |
| 194 | + * Tests toText method with both reasoning_content and content channels. |
| 195 | + * |
| 196 | + * @return void |
| 197 | + */ |
| 198 | + public function testToTextWithReasoningContent(): void |
| 199 | + { |
| 200 | + $reasoningContent = 'Let me think about this step by step...'; |
| 201 | + $actualContent = 'This is the final answer.'; |
| 202 | + |
| 203 | + $message = new ModelMessage([ |
| 204 | + new MessagePart($reasoningContent, MessagePartChannelEnum::thought()), |
| 205 | + new MessagePart($actualContent, MessagePartChannelEnum::content()) |
| 206 | + ]); |
| 207 | + $candidate = new Candidate($message, FinishReasonEnum::stop()); |
| 208 | + $tokenUsage = new TokenUsage(10, 8, 18); |
| 209 | + |
| 210 | + $result = new GenerativeAiResult( |
| 211 | + 'result_with_reasoning', |
| 212 | + [$candidate], |
| 213 | + $tokenUsage, |
| 214 | + $this->createTestProviderMetadata(), |
| 215 | + $this->createTestModelMetadata() |
| 216 | + ); |
| 217 | + |
| 218 | + // toText() should only return content from the 'content' channel, not 'thought' channel |
| 219 | + $this->assertEquals($actualContent, $result->toText()); |
| 220 | + $this->assertNotEquals($reasoningContent, $result->toText()); |
| 221 | + } |
| 222 | + |
192 | 223 | /** |
193 | 224 | * Tests toText throws exception when no text content. |
194 | 225 | * |
@@ -430,6 +461,50 @@ public function testToTextsWithMultipleCandidates(): void |
430 | 461 | $this->assertEquals($texts, $result->toTexts()); |
431 | 462 | } |
432 | 463 |
|
| 464 | + /** |
| 465 | + * Tests toTexts method with both reasoning_content and content channels. |
| 466 | + * |
| 467 | + * @return void |
| 468 | + */ |
| 469 | + public function testToTextsWithReasoningContent(): void |
| 470 | + { |
| 471 | + $reasoningContent1 = 'Let me think about the first question...'; |
| 472 | + $actualContent1 = 'This is the first answer.'; |
| 473 | + $reasoningContent2 = 'Now for the second question...'; |
| 474 | + $actualContent2 = 'This is the second answer.'; |
| 475 | + |
| 476 | + $message1 = new ModelMessage([ |
| 477 | + new MessagePart($reasoningContent1, MessagePartChannelEnum::thought()), |
| 478 | + new MessagePart($actualContent1, MessagePartChannelEnum::content()) |
| 479 | + ]); |
| 480 | + $message2 = new ModelMessage([ |
| 481 | + new MessagePart($reasoningContent2, MessagePartChannelEnum::thought()), |
| 482 | + new MessagePart($actualContent2, MessagePartChannelEnum::content()) |
| 483 | + ]); |
| 484 | + |
| 485 | + $candidates = [ |
| 486 | + new Candidate($message1, FinishReasonEnum::stop()), |
| 487 | + new Candidate($message2, FinishReasonEnum::stop()) |
| 488 | + ]; |
| 489 | + $tokenUsage = new TokenUsage(20, 15, 35); |
| 490 | + |
| 491 | + $result = new GenerativeAiResult( |
| 492 | + 'result_texts_with_reasoning', |
| 493 | + $candidates, |
| 494 | + $tokenUsage, |
| 495 | + $this->createTestProviderMetadata(), |
| 496 | + $this->createTestModelMetadata() |
| 497 | + ); |
| 498 | + |
| 499 | + // toTexts() should only return content from the 'content' channel, not 'thought' channel |
| 500 | + $expectedTexts = [$actualContent1, $actualContent2]; |
| 501 | + $this->assertEquals($expectedTexts, $result->toTexts()); |
| 502 | + |
| 503 | + // Verify reasoning content is not included |
| 504 | + $this->assertNotContains($reasoningContent1, $result->toTexts()); |
| 505 | + $this->assertNotContains($reasoningContent2, $result->toTexts()); |
| 506 | + } |
| 507 | + |
433 | 508 | /** |
434 | 509 | * Tests toFiles method with multiple candidates. |
435 | 510 | * |
|
0 commit comments