|
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