44import com .fasterxml .jackson .databind .ObjectMapper ;
55import ee .carlrobert .codegpt .events .CodeGPTEvent ;
66import ee .carlrobert .codegpt .settings .GeneralSettings ;
7- import ee .carlrobert .codegpt .settings .GeneralSettingsState ;
87import ee .carlrobert .codegpt .telemetry .TelemetryAction ;
98import ee .carlrobert .llm .client .openai .completion .ErrorDetails ;
109import ee .carlrobert .llm .completion .CompletionEventListener ;
11- import java .util .List ;
12- import javax .swing .SwingWorker ;
1310import okhttp3 .sse .EventSource ;
1411
1512public class CompletionRequestHandler {
1613
1714 private final StringBuilder messageBuilder = new StringBuilder ();
1815 private final CompletionResponseEventListener completionResponseEventListener ;
19- private SwingWorker <Void , String > swingWorker ;
2016 private EventSource eventSource ;
2117
2218 public CompletionRequestHandler (CompletionResponseEventListener completionResponseEventListener ) {
2319 this .completionResponseEventListener = completionResponseEventListener ;
2420 }
2521
2622 public void call (CallParameters callParameters ) {
27- swingWorker = new CompletionRequestWorker (callParameters );
28- swingWorker .execute ();
23+ try {
24+ eventSource = startCall (callParameters , new RequestCompletionEventListener (callParameters ));
25+ } catch (TotalUsageExceededException e ) {
26+ completionResponseEventListener .handleTokensExceeded (
27+ callParameters .getConversation (),
28+ callParameters .getMessage ());
29+ } finally {
30+ sendInfo (callParameters );
31+ }
2932 }
3033
3134 public void cancel () {
3235 if (eventSource != null ) {
3336 eventSource .cancel ();
3437 }
35- swingWorker .cancel (true );
3638 }
3739
3840 private EventSource startCall (
@@ -57,79 +59,48 @@ private void handleCallException(Throwable ex) {
5759 completionResponseEventListener .handleError (new ErrorDetails (errorMessage ), ex );
5860 }
5961
60- private class CompletionRequestWorker extends SwingWorker < Void , String > {
62+ class RequestCompletionEventListener implements CompletionEventListener < String > {
6163
6264 private final CallParameters callParameters ;
6365
64- public CompletionRequestWorker (CallParameters callParameters ) {
66+ public RequestCompletionEventListener (CallParameters callParameters ) {
6567 this .callParameters = callParameters ;
6668 }
6769
68- protected Void doInBackground () {
69- var settings = GeneralSettings . getCurrentState ();
70+ @ Override
71+ public void onEvent ( String data ) {
7072 try {
71- eventSource = startCall (callParameters , new RequestCompletionEventListener ());
72- } catch (TotalUsageExceededException e ) {
73- completionResponseEventListener .handleTokensExceeded (
74- callParameters .getConversation (),
75- callParameters .getMessage ());
76- } finally {
77- sendInfo (settings );
73+ var event = new ObjectMapper ().readValue (data , CodeGPTEvent .class );
74+ completionResponseEventListener .handleCodeGPTEvent (event );
75+ } catch (JsonProcessingException e ) {
76+ // ignore
7877 }
79- return null ;
8078 }
8179
82- protected void process (List <String > chunks ) {
80+ @ Override
81+ public void onMessage (String message , EventSource eventSource ) {
82+ messageBuilder .append (message );
8383 callParameters .getMessage ().setResponse (messageBuilder .toString ());
84- for (String text : chunks ) {
85- messageBuilder .append (text );
86- completionResponseEventListener .handleMessage (text );
87- }
84+ completionResponseEventListener .handleMessage (message );
8885 }
8986
90- class RequestCompletionEventListener implements CompletionEventListener <String > {
91-
92- @ Override
93- public void onEvent (String data ) {
94- try {
95- var event = new ObjectMapper ().readValue (data , CodeGPTEvent .class );
96- completionResponseEventListener .handleCodeGPTEvent (event );
97- } catch (JsonProcessingException e ) {
98- // ignore
99- }
100- }
101-
102- @ Override
103- public void onMessage (String message , EventSource eventSource ) {
104- publish (message );
105- }
106-
107- @ Override
108- public void onComplete (StringBuilder messageBuilder ) {
109- completionResponseEventListener .handleCompleted (messageBuilder .toString (), callParameters );
110- }
111-
112- @ Override
113- public void onCancelled (StringBuilder messageBuilder ) {
114- completionResponseEventListener .handleCompleted (messageBuilder .toString (), callParameters );
115- }
87+ @ Override
88+ public void onComplete (StringBuilder messageBuilder ) {
89+ completionResponseEventListener .handleCompleted (messageBuilder .toString (), callParameters );
90+ }
11691
117- @ Override
118- public void onError (ErrorDetails error , Throwable ex ) {
119- try {
120- completionResponseEventListener .handleError (error , ex );
121- } finally {
122- sendError (error , ex );
123- }
124- }
92+ @ Override
93+ public void onCancelled (StringBuilder messageBuilder ) {
94+ completionResponseEventListener .handleCompleted (messageBuilder .toString (), callParameters );
12595 }
12696
127- private void sendInfo (GeneralSettingsState settings ) {
128- TelemetryAction .COMPLETION .createActionMessage ()
129- .property ("conversationId" , callParameters .getConversation ().getId ().toString ())
130- .property ("model" , callParameters .getConversation ().getModel ())
131- .property ("service" , settings .getSelectedService ().getCode ().toLowerCase ())
132- .send ();
97+ @ Override
98+ public void onError (ErrorDetails error , Throwable ex ) {
99+ try {
100+ completionResponseEventListener .handleError (error , ex );
101+ } finally {
102+ sendError (error , ex );
103+ }
133104 }
134105
135106 private void sendError (ErrorDetails error , Throwable ex ) {
@@ -147,4 +118,12 @@ private void sendError(ErrorDetails error, Throwable ex) {
147118 telemetryMessage .send ();
148119 }
149120 }
121+
122+ private void sendInfo (CallParameters callParameters ) {
123+ TelemetryAction .COMPLETION .createActionMessage ()
124+ .property ("conversationId" , callParameters .getConversation ().getId ().toString ())
125+ .property ("model" , callParameters .getConversation ().getModel ())
126+ .property ("service" , GeneralSettings .getSelectedService ().getCode ().toLowerCase ())
127+ .send ();
128+ }
150129}
0 commit comments