|
9 | 9 | use Prism\Prism\ValueObjects\Messages\AssistantMessage; |
10 | 10 | use Prism\Prism\ValueObjects\Messages\Support\Document; |
11 | 11 | use Prism\Prism\ValueObjects\Messages\Support\Image; |
| 12 | +use Prism\Prism\ValueObjects\Messages\Support\OpenAIFile; |
12 | 13 | use Prism\Prism\ValueObjects\Messages\SystemMessage; |
13 | 14 | use Prism\Prism\ValueObjects\Messages\ToolResultMessage; |
14 | 15 | use Prism\Prism\ValueObjects\Messages\UserMessage; |
@@ -84,6 +85,7 @@ protected function mapUserMessage(UserMessage $message): void |
84 | 85 | ['type' => 'text', 'text' => $message->text()], |
85 | 86 | ...self::mapImageParts($message->images()), |
86 | 87 | ...self::mapDocumentParts($message->documents()), |
| 88 | + ...self::mapFileParts($message->files()), |
87 | 89 | ], |
88 | 90 | ]; |
89 | 91 | } |
@@ -111,22 +113,34 @@ protected static function mapImageParts(array $images): array |
111 | 113 | protected static function mapDocumentParts(array $documents): array |
112 | 114 | { |
113 | 115 | return array_map(function (Document $document): array { |
114 | | - if (! in_array($document->dataFormat, ['base64', 'file_id'])) { |
| 116 | + if ($document->dataFormat !== 'base64') { |
115 | 117 | throw new \InvalidArgumentException("OpenAI does not support $document->dataFormat documents."); |
116 | 118 | } |
117 | 119 |
|
118 | 120 | return [ |
119 | 121 | 'type' => 'file', |
120 | | - 'file' => $document->dataFormat === 'base64' ? [ |
| 122 | + 'file' => [ |
121 | 123 | 'file_data' => sprintf('data:%s;base64,%s', $document->mimeType, $document->document), // @phpstan-ignore argument.type |
122 | 124 | 'filename' => $document->documentTitle, |
123 | | - ] : [ |
124 | | - 'file_id' => $document->document, |
125 | 125 | ], |
126 | 126 | ]; |
127 | 127 | }, $documents); |
128 | 128 | } |
129 | 129 |
|
| 130 | + /** |
| 131 | + * @param OpenAIFile[] $files |
| 132 | + * @return array<int, mixed> |
| 133 | + */ |
| 134 | + protected static function mapFileParts(array $files): array |
| 135 | + { |
| 136 | + return array_map(fn (OpenAIFile $file): array => [ |
| 137 | + 'type' => 'file', |
| 138 | + 'file' => [ |
| 139 | + 'file_id' => $file->fileId, |
| 140 | + ], |
| 141 | + ], $files); |
| 142 | + } |
| 143 | + |
130 | 144 | protected function mapAssistantMessage(AssistantMessage $message): void |
131 | 145 | { |
132 | 146 | $toolCalls = array_map(fn (ToolCall $toolCall): array => [ |
|
0 commit comments