11package com .sap .ai .sdk .foundationmodels .openai ;
22
33import static com .sap .ai .sdk .foundationmodels .openai .OpenAiClient .JACKSON ;
4- import static com .sap .ai .sdk .foundationmodels .openai .OpenAiResponseHandler .buildExceptionAndThrow ;
5- import static com .sap .ai .sdk .foundationmodels .openai .OpenAiResponseHandler .parseErrorAndThrow ;
64
5+ import com .sap .ai .sdk .core .commons .ClientResponseHandler ;
6+ import com .sap .ai .sdk .foundationmodels .openai .model .OpenAiError ;
77import com .sap .ai .sdk .foundationmodels .openai .model .StreamedDelta ;
88import java .io .IOException ;
99import java .util .stream .Stream ;
1717class OpenAiStreamingHandler <D extends StreamedDelta > {
1818
1919 @ Nonnull private final Class <D > deltaType ;
20+ private static final ClientResponseHandler <OpenAiError , OpenAiClientException > HANDLER =
21+ new ClientResponseHandler <>(OpenAiError .class , OpenAiError .class , OpenAiClientException ::new );
22+
23+ static {
24+ HANDLER .JACKSON = JACKSON ;
25+ }
2026
2127 /**
2228 * @param response The response to process
@@ -27,7 +33,7 @@ class OpenAiStreamingHandler<D extends StreamedDelta> {
2733 Stream <D > handleResponse (@ Nonnull final ClassicHttpResponse response )
2834 throws OpenAiClientException {
2935 if (response .getCode () >= 300 ) {
30- buildExceptionAndThrow (response );
36+ HANDLER . buildExceptionAndThrow (response );
3137 }
3238 return IterableStreamConverter .lines (response .getEntity ())
3339 // half of the lines are empty newlines, the last line is "data: [DONE]"
@@ -36,7 +42,7 @@ Stream<D> handleResponse(@Nonnull final ClassicHttpResponse response)
3642 line -> {
3743 if (!line .startsWith ("data: " )) {
3844 final String msg = "Failed to parse response from OpenAI model" ;
39- parseErrorAndThrow (line , new OpenAiClientException (msg ));
45+ HANDLER . parseErrorAndThrow (line , new OpenAiClientException (msg ));
4046 }
4147 })
4248 .map (
0 commit comments