@@ -156,10 +156,7 @@ public Supplier<EmbeddingModel> embeddingModel(LangChain4jWatsonxConfig runtimeC
156156 throw new ConfigValidationException (configProblems .toArray (EMPTY_PROBLEMS ));
157157 }
158158
159- String iamUrl = watsonConfig .iam ().baseUrl ().toExternalForm ();
160- WatsonxTokenGenerator tokenGenerator = tokenGeneratorCache .computeIfAbsent (iamUrl ,
161- createTokenGenerator (watsonConfig .iam (),
162- firstOrDefault (null , watsonConfig .apiKey (), runtimeConfig .defaultConfig ().apiKey ())));
159+ String apiKey = firstOrDefault (null , watsonConfig .apiKey (), runtimeConfig .defaultConfig ().apiKey ());
163160
164161 URL url ;
165162 try {
@@ -170,7 +167,7 @@ public Supplier<EmbeddingModel> embeddingModel(LangChain4jWatsonxConfig runtimeC
170167
171168 EmbeddingModelConfig embeddingModelConfig = watsonConfig .embeddingModel ();
172169 var builder = WatsonxEmbeddingModel .builder ()
173- .tokenGenerator (tokenGenerator )
170+ .tokenGenerator (createTokenGenerator ( watsonConfig . iam (), apiKey ) )
174171 .url (url )
175172 .timeout (watsonConfig .timeout ().orElse (Duration .ofSeconds (10 )))
176173 .logRequests (firstOrDefault (false , embeddingModelConfig .logRequests (), watsonConfig .logRequests ()))
@@ -209,10 +206,7 @@ public Supplier<ScoringModel> scoringModel(LangChain4jWatsonxConfig runtimeConfi
209206 throw new ConfigValidationException (configProblems .toArray (EMPTY_PROBLEMS ));
210207 }
211208
212- String iamUrl = watsonConfig .iam ().baseUrl ().toExternalForm ();
213- WatsonxTokenGenerator tokenGenerator = tokenGeneratorCache .computeIfAbsent (iamUrl ,
214- createTokenGenerator (watsonConfig .iam (),
215- firstOrDefault (null , watsonConfig .apiKey (), runtimeConfig .defaultConfig ().apiKey ())));
209+ String apiKey = firstOrDefault (null , watsonConfig .apiKey (), runtimeConfig .defaultConfig ().apiKey ());
216210
217211 URL url ;
218212 try {
@@ -223,7 +217,7 @@ public Supplier<ScoringModel> scoringModel(LangChain4jWatsonxConfig runtimeConfi
223217
224218 ScoringModelConfig rerankModelConfig = watsonConfig .scoringModel ();
225219 var builder = WatsonxScoringModel .builder ()
226- .tokenGenerator (tokenGenerator )
220+ .tokenGenerator (createTokenGenerator ( watsonConfig . iam (), apiKey ) )
227221 .url (url )
228222 .timeout (watsonConfig .timeout ().orElse (Duration .ofSeconds (10 )))
229223 .logRequests (firstOrDefault (false , rerankModelConfig .logRequests (), watsonConfig .logRequests ()))
@@ -242,17 +236,6 @@ public WatsonxScoringModel get() {
242236 };
243237 }
244238
245- private Function <? super String , ? extends WatsonxTokenGenerator > createTokenGenerator (IAMConfig iamConfig , String apiKey ) {
246- return new Function <String , WatsonxTokenGenerator >() {
247-
248- @ Override
249- public WatsonxTokenGenerator apply (String iamUrl ) {
250- return new WatsonxTokenGenerator (iamConfig .baseUrl (), iamConfig .timeout ().orElse (Duration .ofSeconds (10 )),
251- iamConfig .grantType (), apiKey );
252- }
253- };
254- }
255-
256239 private WatsonxChatModel .Builder chatBuilder (LangChain4jWatsonxConfig runtimeConfig , String configName ) {
257240 LangChain4jWatsonxConfig .WatsonConfig watsonConfig = correspondingWatsonRuntimeConfig (runtimeConfig , configName );
258241
@@ -263,10 +246,7 @@ private WatsonxChatModel.Builder chatBuilder(LangChain4jWatsonxConfig runtimeCon
263246 }
264247
265248 ChatModelConfig chatModelConfig = watsonConfig .chatModel ();
266- String iamUrl = watsonConfig .iam ().baseUrl ().toExternalForm ();
267- WatsonxTokenGenerator tokenGenerator = tokenGeneratorCache .computeIfAbsent (iamUrl ,
268- createTokenGenerator (watsonConfig .iam (),
269- firstOrDefault (null , watsonConfig .apiKey (), runtimeConfig .defaultConfig ().apiKey ())));
249+ String apiKey = firstOrDefault (null , watsonConfig .apiKey (), runtimeConfig .defaultConfig ().apiKey ());
270250
271251 URL url ;
272252 try {
@@ -276,7 +256,7 @@ private WatsonxChatModel.Builder chatBuilder(LangChain4jWatsonxConfig runtimeCon
276256 }
277257
278258 return WatsonxChatModel .builder ()
279- .tokenGenerator (tokenGenerator )
259+ .tokenGenerator (createTokenGenerator ( watsonConfig . iam (), apiKey ) )
280260 .url (url )
281261 .timeout (watsonConfig .timeout ().orElse (Duration .ofSeconds (10 )))
282262 .logRequests (firstOrDefault (false , chatModelConfig .logRequests (), watsonConfig .logRequests ()))
@@ -306,10 +286,7 @@ private WatsonxGenerationModel.Builder generationBuilder(LangChain4jWatsonxConfi
306286 }
307287
308288 GenerationModelConfig generationModelConfig = watsonConfig .generationModel ();
309- String iamUrl = watsonConfig .iam ().baseUrl ().toExternalForm ();
310- WatsonxTokenGenerator tokenGenerator = tokenGeneratorCache .computeIfAbsent (iamUrl ,
311- createTokenGenerator (watsonConfig .iam (),
312- firstOrDefault (null , watsonConfig .apiKey (), runtimeConfig .defaultConfig ().apiKey ())));
289+ String apiKey = firstOrDefault (null , watsonConfig .apiKey (), runtimeConfig .defaultConfig ().apiKey ());
313290
314291 URL url ;
315292 try {
@@ -323,7 +300,7 @@ private WatsonxGenerationModel.Builder generationBuilder(LangChain4jWatsonxConfi
323300 String promptJoiner = generationModelConfig .promptJoiner ();
324301
325302 return WatsonxGenerationModel .builder ()
326- .tokenGenerator (tokenGenerator )
303+ .tokenGenerator (createTokenGenerator ( watsonConfig . iam (), apiKey ) )
327304 .url (url )
328305 .timeout (watsonConfig .timeout ().orElse (Duration .ofSeconds (10 )))
329306 .logRequests (firstOrDefault (false , generationModelConfig .logRequests (), watsonConfig .logRequests ()))
@@ -348,6 +325,18 @@ private WatsonxGenerationModel.Builder generationBuilder(LangChain4jWatsonxConfi
348325 .promptJoiner (promptJoiner );
349326 }
350327
328+ private WatsonxTokenGenerator createTokenGenerator (IAMConfig iamConfig , String apiKey ) {
329+ return tokenGeneratorCache .computeIfAbsent (apiKey ,
330+ new Function <String , WatsonxTokenGenerator >() {
331+ @ Override
332+ public WatsonxTokenGenerator apply (String iamUrl ) {
333+ return new WatsonxTokenGenerator (iamConfig .baseUrl (),
334+ iamConfig .timeout ().orElse (Duration .ofSeconds (10 )),
335+ iamConfig .grantType (), apiKey );
336+ }
337+ });
338+ }
339+
351340 private LangChain4jWatsonxConfig .WatsonConfig correspondingWatsonRuntimeConfig (LangChain4jWatsonxConfig runtimeConfig ,
352341 String configName ) {
353342 LangChain4jWatsonxConfig .WatsonConfig watsonConfig ;
0 commit comments