File tree Expand file tree Collapse file tree 3 files changed +51
-0
lines changed
contracts/Search/Embedding
tests/lib/Search/Embedding Expand file tree Collapse file tree 3 files changed +51
-0
lines changed Original file line number Diff line number Diff line change @@ -14,4 +14,9 @@ interface EmbeddingProviderResolverInterface
1414 * @throws \Ibexa\Contracts\Core\Search\Embedding\EmbeddingResolverNotFoundException
1515 */
1616 public function resolve (): EmbeddingProviderInterface ;
17+
18+ /**
19+ * @throws \Ibexa\Contracts\Core\Search\Embedding\EmbeddingResolverNotFoundException
20+ */
21+ public function resolveByModelIdentifier (string $ modelIdentifier ): EmbeddingProviderInterface ;
1722}
Original file line number Diff line number Diff line change @@ -40,4 +40,18 @@ public function resolve(): EmbeddingProviderInterface
4040
4141 return $ this ->registry ->getEmbeddingProvider ($ defaultEmbeddingProvider );
4242 }
43+
44+ public function resolveByModelIdentifier (string $ modelIdentifier ): EmbeddingProviderInterface
45+ {
46+ $ model = $ this ->embeddingConfiguration ->getModel ($ modelIdentifier );
47+ $ providerIdentifier = $ model ['embedding_provider ' ];
48+
49+ if (!$ this ->registry ->hasEmbeddingProvider ($ providerIdentifier )) {
50+ throw new EmbeddingResolverNotFoundException (
51+ $ providerIdentifier
52+ );
53+ }
54+
55+ return $ this ->registry ->getEmbeddingProvider ($ providerIdentifier );
56+ }
4357}
Original file line number Diff line number Diff line change @@ -79,4 +79,36 @@ public function testResolveThrowsWhenProviderMissing(): void
7979
8080 $ this ->resolver ->resolve ();
8181 }
82+
83+ public function testResolveByModelIdentifierReturnsProviderConfiguredForModel (): void
84+ {
85+ $ modelIdentifier = 'gemini_embedding_001_1536 ' ;
86+ $ embeddingProviderIdentifier = 'ibexa_gemini ' ;
87+ $ mockProvider = $ this ->createMock (EmbeddingProviderInterface::class);
88+
89+ $ this ->configuration
90+ ->expects (self ::once ())
91+ ->method ('getModel ' )
92+ ->with ($ modelIdentifier )
93+ ->willReturn ([
94+ 'name ' => 'models/gemini-embedding-001 ' ,
95+ 'dimensions ' => 1536 ,
96+ 'field_suffix ' => 'gemini_1536 ' ,
97+ 'embedding_provider ' => $ embeddingProviderIdentifier ,
98+ ]);
99+
100+ $ this ->registry
101+ ->expects (self ::once ())
102+ ->method ('hasEmbeddingProvider ' )
103+ ->with ($ embeddingProviderIdentifier )
104+ ->willReturn (true );
105+
106+ $ this ->registry
107+ ->expects (self ::once ())
108+ ->method ('getEmbeddingProvider ' )
109+ ->with ($ embeddingProviderIdentifier )
110+ ->willReturn ($ mockProvider );
111+
112+ self ::assertSame ($ mockProvider , $ this ->resolver ->resolveByModelIdentifier ($ modelIdentifier ));
113+ }
82114}
You can’t perform that action at this time.
0 commit comments