@@ -170,52 +170,51 @@ private Flowable<LlmResponse> callLlm(
170170 LlmRequest .Builder llmRequestBuilder = llmRequest .toBuilder ();
171171
172172 return handleBeforeModelCallback (context , llmRequestBuilder , eventForCallbackUsage )
173- .flatMapPublisher (
174- beforeResponse -> {
175- if (beforeResponse .isPresent ()) {
176- return Flowable .just (beforeResponse .get ());
177- }
178- BaseLlm llm =
179- agent .resolvedModel ().model ().isPresent ()
180- ? agent .resolvedModel ().model ().get ()
181- : LlmRegistry .getLlm (agent .resolvedModel ().modelName ().get ());
182- return llm .generateContent (
183- llmRequestBuilder .build (),
184- context .runConfig ().streamingMode () == StreamingMode .SSE )
185- .onErrorResumeNext (
186- exception ->
187- handleOnModelErrorCallback (
188- context , llmRequestBuilder , eventForCallbackUsage , exception )
189- .switchIfEmpty (Single .error (exception ))
190- .toFlowable ())
191- .doOnNext (
192- llmResp ->
193- Tracing .traceCallLlm (
194- context ,
195- eventForCallbackUsage .id (),
196- llmRequestBuilder .build (),
197- llmResp ))
198- .doOnError (
199- error -> {
200- Span span = Span .current ();
201- span .setStatus (StatusCode .ERROR , error .getMessage ());
202- span .recordException (error );
203- })
204- .compose (Tracing .trace ("call_llm" ))
205- .concatMap (
206- llmResp ->
207- handleAfterModelCallback (context , llmResp , eventForCallbackUsage )
208- .toFlowable ());
209- });
173+ .toFlowable ()
174+ .switchIfEmpty (
175+ Flowable .defer (
176+ () -> {
177+ BaseLlm llm =
178+ agent .resolvedModel ().model ().isPresent ()
179+ ? agent .resolvedModel ().model ().get ()
180+ : LlmRegistry .getLlm (agent .resolvedModel ().modelName ().get ());
181+ return llm .generateContent (
182+ llmRequestBuilder .build (),
183+ context .runConfig ().streamingMode () == StreamingMode .SSE )
184+ .onErrorResumeNext (
185+ exception ->
186+ handleOnModelErrorCallback (
187+ context , llmRequestBuilder , eventForCallbackUsage , exception )
188+ .switchIfEmpty (Single .error (exception ))
189+ .toFlowable ())
190+ .doOnNext (
191+ llmResp ->
192+ Tracing .traceCallLlm (
193+ context ,
194+ eventForCallbackUsage .id (),
195+ llmRequestBuilder .build (),
196+ llmResp ))
197+ .doOnError (
198+ error -> {
199+ Span span = Span .current ();
200+ span .setStatus (StatusCode .ERROR , error .getMessage ());
201+ span .recordException (error );
202+ })
203+ .compose (Tracing .trace ("call_llm" ))
204+ .concatMap (
205+ llmResp ->
206+ handleAfterModelCallback (context , llmResp , eventForCallbackUsage )
207+ .toFlowable ());
208+ }));
210209 }
211210
212211 /**
213212 * Invokes {@link BeforeModelCallback}s. If any returns a response, it's used instead of calling
214213 * the LLM.
215214 *
216- * @return A {@link Single } with the callback result or {@link Optional#empty()} .
215+ * @return A {@link Maybe } with the callback result.
217216 */
218- private Single < Optional < LlmResponse > > handleBeforeModelCallback (
217+ private Maybe < LlmResponse > handleBeforeModelCallback (
219218 InvocationContext context , LlmRequest .Builder llmRequestBuilder , Event modelResponseEvent ) {
220219 Event callbackEvent = modelResponseEvent .toBuilder ().build ();
221220 CallbackContext callbackContext =
@@ -228,7 +227,7 @@ private Single<Optional<LlmResponse>> handleBeforeModelCallback(
228227
229228 List <? extends BeforeModelCallback > callbacks = agent .canonicalBeforeModelCallbacks ();
230229 if (callbacks .isEmpty ()) {
231- return pluginResult . map ( Optional :: of ). defaultIfEmpty ( Optional . empty ()) ;
230+ return pluginResult ;
232231 }
233232
234233 Maybe <LlmResponse > callbackResult =
@@ -238,10 +237,7 @@ private Single<Optional<LlmResponse>> handleBeforeModelCallback(
238237 .concatMapMaybe (callback -> callback .call (callbackContext , llmRequestBuilder ))
239238 .firstElement ());
240239
241- return pluginResult
242- .switchIfEmpty (callbackResult )
243- .map (Optional ::of )
244- .defaultIfEmpty (Optional .empty ());
240+ return pluginResult .switchIfEmpty (callbackResult );
245241 }
246242
247243 /**
0 commit comments