18
18
use PHPUnit \Framework \Attributes \UsesClass ;
19
19
use PHPUnit \Framework \TestCase ;
20
20
use Symfony \AI \AiBundle \AiBundle ;
21
+ use Symfony \AI \Platform \Bridge \OpenAi \Embeddings ;
22
+ use Symfony \AI \Store \Document \Vectorizer ;
21
23
use Symfony \Component \Config \Definition \Exception \InvalidConfigurationException ;
22
24
use Symfony \Component \DependencyInjection \ContainerBuilder ;
23
25
use Symfony \Component \DependencyInjection \Definition ;
@@ -591,6 +593,77 @@ public function testOpenAiPlatformWithInvalidRegion()
591
593
]);
592
594
}
593
595
596
+ public function testVectorizerConfiguration ()
597
+ {
598
+ $ container = $ this ->buildContainer ([
599
+ 'ai ' => [
600
+ 'vectorizer ' => [
601
+ 'my_vectorizer ' => [
602
+ 'platform ' => 'my_platform_service_id ' ,
603
+ 'model ' => [
604
+ 'class ' => 'Symfony\AI\Platform\Bridge\OpenAi\Embeddings ' ,
605
+ 'name ' => 'text-embedding-3-small ' ,
606
+ 'options ' => ['dimension ' => 512 ],
607
+ ],
608
+ ],
609
+ ],
610
+ ],
611
+ ]);
612
+
613
+ $ this ->assertTrue ($ container ->hasDefinition ('ai.vectorizer.my_vectorizer ' ));
614
+ $ this ->assertTrue ($ container ->hasDefinition ('ai.vectorizer.my_vectorizer.model ' ));
615
+
616
+ $ vectorizerDefinition = $ container ->getDefinition ('ai.vectorizer.my_vectorizer ' );
617
+ $ this ->assertSame (Vectorizer::class, $ vectorizerDefinition ->getClass ());
618
+ $ this ->assertTrue ($ vectorizerDefinition ->hasTag ('ai.vectorizer ' ));
619
+
620
+ $ modelDefinition = $ container ->getDefinition ('ai.vectorizer.my_vectorizer.model ' );
621
+ $ this ->assertSame (Embeddings::class, $ modelDefinition ->getClass ());
622
+ $ this ->assertTrue ($ modelDefinition ->hasTag ('ai.model.embeddings_model ' ));
623
+ }
624
+
625
+ public function testIndexerWithConfiguredVectorizer ()
626
+ {
627
+ $ container = $ this ->buildContainer ([
628
+ 'ai ' => [
629
+ 'store ' => [
630
+ 'memory ' => [
631
+ 'my_store ' => [],
632
+ ],
633
+ ],
634
+ 'vectorizer ' => [
635
+ 'my_vectorizer ' => [
636
+ 'platform ' => 'my_platform_service_id ' ,
637
+ 'model ' => [
638
+ 'class ' => 'Symfony\AI\Platform\Bridge\OpenAi\Embeddings ' ,
639
+ 'name ' => 'text-embedding-3-small ' ,
640
+ ],
641
+ ],
642
+ ],
643
+ 'indexer ' => [
644
+ 'my_indexer ' => [
645
+ 'vectorizer ' => 'ai.vectorizer.my_vectorizer ' ,
646
+ 'store ' => 'ai.store.memory.my_store ' ,
647
+ ],
648
+ ],
649
+ ],
650
+ ]);
651
+
652
+ $ this ->assertTrue ($ container ->hasDefinition ('ai.indexer.my_indexer ' ));
653
+ $ this ->assertTrue ($ container ->hasDefinition ('ai.vectorizer.my_vectorizer ' ));
654
+
655
+ $ indexerDefinition = $ container ->getDefinition ('ai.indexer.my_indexer ' );
656
+ $ arguments = $ indexerDefinition ->getArguments ();
657
+
658
+ // First argument should be a reference to the vectorizer
659
+ $ this ->assertInstanceOf (Reference::class, $ arguments [0 ]);
660
+ $ this ->assertSame ('ai.vectorizer.my_vectorizer ' , (string ) $ arguments [0 ]);
661
+
662
+ // Should not create model-specific vectorizer when using configured one
663
+ $ this ->assertFalse ($ container ->hasDefinition ('ai.indexer.my_indexer.vectorizer ' ));
664
+ $ this ->assertFalse ($ container ->hasDefinition ('ai.indexer.my_indexer.model ' ));
665
+ }
666
+
594
667
private function buildContainer (array $ configuration ): ContainerBuilder
595
668
{
596
669
$ container = new ContainerBuilder ();
@@ -838,9 +911,8 @@ private function getFullConfig(): array
838
911
],
839
912
],
840
913
],
841
- 'indexer ' => [
842
- 'my_text_indexer ' => [
843
- 'store ' => 'my_azure_search_store_service_id ' ,
914
+ 'vectorizer ' => [
915
+ 'test_vectorizer ' => [
844
916
'platform ' => 'mistral_platform_service_id ' ,
845
917
'model ' => [
846
918
'class ' => 'Symfony\AI\Platform\Bridge\Mistral\Embeddings ' ,
@@ -849,6 +921,12 @@ private function getFullConfig(): array
849
921
],
850
922
],
851
923
],
924
+ 'indexer ' => [
925
+ 'my_text_indexer ' => [
926
+ 'vectorizer ' => 'ai.vectorizer.test_vectorizer ' ,
927
+ 'store ' => 'my_azure_search_store_service_id ' ,
928
+ ],
929
+ ],
852
930
],
853
931
];
854
932
}
0 commit comments