4
4
import com .fasterxml .jackson .databind .ObjectMapper ;
5
5
import ee .carlrobert .codegpt .events .CodeGPTEvent ;
6
6
import ee .carlrobert .codegpt .settings .GeneralSettings ;
7
- import ee .carlrobert .codegpt .settings .GeneralSettingsState ;
8
7
import ee .carlrobert .codegpt .telemetry .TelemetryAction ;
9
8
import ee .carlrobert .llm .client .openai .completion .ErrorDetails ;
10
9
import ee .carlrobert .llm .completion .CompletionEventListener ;
11
- import java .util .List ;
12
- import javax .swing .SwingWorker ;
13
10
import okhttp3 .sse .EventSource ;
14
11
15
12
public class CompletionRequestHandler {
16
13
17
14
private final StringBuilder messageBuilder = new StringBuilder ();
18
15
private final CompletionResponseEventListener completionResponseEventListener ;
19
- private SwingWorker <Void , String > swingWorker ;
20
16
private EventSource eventSource ;
21
17
22
18
public CompletionRequestHandler (CompletionResponseEventListener completionResponseEventListener ) {
23
19
this .completionResponseEventListener = completionResponseEventListener ;
24
20
}
25
21
26
22
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
+ }
29
32
}
30
33
31
34
public void cancel () {
32
35
if (eventSource != null ) {
33
36
eventSource .cancel ();
34
37
}
35
- swingWorker .cancel (true );
36
38
}
37
39
38
40
private EventSource startCall (
@@ -57,79 +59,48 @@ private void handleCallException(Throwable ex) {
57
59
completionResponseEventListener .handleError (new ErrorDetails (errorMessage ), ex );
58
60
}
59
61
60
- private class CompletionRequestWorker extends SwingWorker < Void , String > {
62
+ class RequestCompletionEventListener implements CompletionEventListener < String > {
61
63
62
64
private final CallParameters callParameters ;
63
65
64
- public CompletionRequestWorker (CallParameters callParameters ) {
66
+ public RequestCompletionEventListener (CallParameters callParameters ) {
65
67
this .callParameters = callParameters ;
66
68
}
67
69
68
- protected Void doInBackground () {
69
- var settings = GeneralSettings . getCurrentState ();
70
+ @ Override
71
+ public void onEvent ( String data ) {
70
72
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
78
77
}
79
- return null ;
80
78
}
81
79
82
- protected void process (List <String > chunks ) {
80
+ @ Override
81
+ public void onMessage (String message , EventSource eventSource ) {
82
+ messageBuilder .append (message );
83
83
callParameters .getMessage ().setResponse (messageBuilder .toString ());
84
- for (String text : chunks ) {
85
- messageBuilder .append (text );
86
- completionResponseEventListener .handleMessage (text );
87
- }
84
+ completionResponseEventListener .handleMessage (message );
88
85
}
89
86
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
+ }
116
91
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 );
125
95
}
126
96
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
+ }
133
104
}
134
105
135
106
private void sendError (ErrorDetails error , Throwable ex ) {
@@ -147,4 +118,12 @@ private void sendError(ErrorDetails error, Throwable ex) {
147
118
telemetryMessage .send ();
148
119
}
149
120
}
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
+ }
150
129
}
0 commit comments