|
11 | 11 |
|
12 | 12 | namespace Symfony\AI\Store\Document; |
13 | 13 |
|
| 14 | +use Psr\Log\LoggerInterface; |
| 15 | +use Psr\Log\NullLogger; |
14 | 16 | use Symfony\AI\Platform\Capability; |
15 | 17 | use Symfony\AI\Platform\Model; |
16 | 18 | use Symfony\AI\Platform\PlatformInterface; |
|
20 | 22 | public function __construct( |
21 | 23 | private PlatformInterface $platform, |
22 | 24 | private Model $model, |
| 25 | + private LoggerInterface $logger = new NullLogger(), |
23 | 26 | ) { |
24 | 27 | } |
25 | 28 |
|
26 | 29 | public function __invoke(array $documents): array |
27 | 30 | { |
| 31 | + $documentCount = \count($documents); |
| 32 | + $this->logger->info('Starting vectorization process', ['document_count' => $documentCount]); |
| 33 | + |
28 | 34 | if ($this->model->supports(Capability::INPUT_MULTIPLE)) { |
| 35 | + $this->logger->debug('Using batch vectorization with model that supports multiple inputs'); |
29 | 36 | $result = $this->platform->invoke($this->model, array_map(fn (TextDocument $document) => $document->content, $documents)); |
30 | 37 |
|
31 | 38 | $vectors = $result->asVectors(); |
| 39 | + $this->logger->debug('Batch vectorization completed', ['vector_count' => \count($vectors)]); |
32 | 40 | } else { |
| 41 | + $this->logger->debug('Using sequential vectorization for model without multiple input support'); |
33 | 42 | $results = []; |
34 | | - foreach ($documents as $document) { |
| 43 | + foreach ($documents as $i => $document) { |
| 44 | + $this->logger->debug('Vectorizing document', ['document_index' => $i, 'document_id' => $document->id]); |
35 | 45 | $results[] = $this->platform->invoke($this->model, $document->content); |
36 | 46 | } |
37 | 47 |
|
38 | 48 | $vectors = []; |
39 | 49 | foreach ($results as $result) { |
40 | 50 | $vectors = array_merge($vectors, $result->asVectors()); |
41 | 51 | } |
| 52 | + $this->logger->debug('Sequential vectorization completed', ['vector_count' => \count($vectors)]); |
42 | 53 | } |
43 | 54 |
|
44 | 55 | $vectorDocuments = []; |
45 | 56 | foreach ($documents as $i => $document) { |
46 | 57 | $vectorDocuments[] = new VectorDocument($document->id, $vectors[$i], $document->metadata); |
47 | 58 | } |
48 | 59 |
|
| 60 | + $this->logger->info('Vectorization process completed', [ |
| 61 | + 'document_count' => $documentCount, |
| 62 | + 'vector_document_count' => \count($vectorDocuments), |
| 63 | + ]); |
| 64 | + |
49 | 65 | return $vectorDocuments; |
50 | 66 | } |
51 | 67 | } |
0 commit comments