1
1
using System ;
2
2
using System . Collections . Generic ;
3
3
using System . Text ;
4
- using System . Text . RegularExpressions ;
5
4
using System . Threading ;
6
5
7
6
using Avalonia . Threading ;
@@ -36,6 +35,8 @@ public void Exec()
36
35
{
37
36
try
38
37
{
38
+ _onResponse ? . Invoke ( "Waiting for pre-file analyzing to completed...\n \n " ) ;
39
+
39
40
var responseBuilder = new StringBuilder ( ) ;
40
41
var summaryBuilder = new StringBuilder ( ) ;
41
42
foreach ( var change in _changes )
@@ -49,18 +50,17 @@ public void Exec()
49
50
var rs = new GetDiffContent ( _repo , new Models . DiffOption ( change , false ) ) . ReadToEnd ( ) ;
50
51
if ( rs . IsSuccess )
51
52
{
52
- var hasFirstValidChar = false ;
53
- var thinkingBuffer = new StringBuilder ( ) ;
54
53
_service . Chat (
55
54
_service . AnalyzeDiffPrompt ,
56
55
$ "Here is the `git diff` output: { rs . StdOut } ",
57
56
_cancelToken ,
58
57
update =>
59
- ProcessChatResponse ( update , ref hasFirstValidChar , thinkingBuffer ,
60
- ( responseBuilder , text =>
61
- _onResponse ? . Invoke (
62
- $ "Waiting for pre-file analyzing to completed...\n \n { text } ") ) ,
63
- ( summaryBuilder , null ) ) ) ;
58
+ {
59
+ responseBuilder . Append ( update ) ;
60
+ summaryBuilder . Append ( update ) ;
61
+
62
+ _onResponse ? . Invoke ( $ "Waiting for pre-file analyzing to completed...\n \n { responseBuilder } ") ;
63
+ } ) ;
64
64
}
65
65
66
66
responseBuilder . Append ( "\n " ) ;
@@ -74,83 +74,26 @@ public void Exec()
74
74
75
75
var responseBody = responseBuilder . ToString ( ) ;
76
76
var subjectBuilder = new StringBuilder ( ) ;
77
- var hasSubjectFirstValidChar = false ;
78
- var subjectThinkingBuffer = new StringBuilder ( ) ;
79
77
_service . Chat (
80
78
_service . GenerateSubjectPrompt ,
81
79
$ "Here are the summaries changes:\n { summaryBuilder } ",
82
80
_cancelToken ,
83
81
update =>
84
- ProcessChatResponse ( update , ref hasSubjectFirstValidChar , subjectThinkingBuffer ,
85
- ( subjectBuilder , text => _onResponse ? . Invoke ( $ "{ text } \n \n { responseBody } ") ) ) ) ;
82
+ {
83
+ subjectBuilder . Append ( update ) ;
84
+ _onResponse ? . Invoke ( $ "{ subjectBuilder } \n \n { responseBody } ") ;
85
+ } ) ;
86
86
}
87
87
catch ( Exception e )
88
88
{
89
89
Dispatcher . UIThread . Post ( ( ) => App . RaiseException ( _repo , $ "Failed to generate commit message: { e } ") ) ;
90
90
}
91
91
}
92
92
93
- private void ProcessChatResponse (
94
- string update ,
95
- ref bool hasFirstValidChar ,
96
- StringBuilder thinkingBuffer ,
97
- params ( StringBuilder builder , Action < string > callback ) [ ] outputs )
98
- {
99
- if ( ! hasFirstValidChar )
100
- {
101
- update = update . TrimStart ( ) ;
102
- if ( string . IsNullOrEmpty ( update ) )
103
- return ;
104
- if ( update . StartsWith ( "<" , StringComparison . Ordinal ) )
105
- thinkingBuffer . Append ( update ) ;
106
- hasFirstValidChar = true ;
107
- }
108
-
109
- if ( thinkingBuffer . Length > 0 )
110
- thinkingBuffer . Append ( update ) ;
111
-
112
- if ( thinkingBuffer . Length > 15 )
113
- {
114
- var match = REG_COT . Match ( thinkingBuffer . ToString ( ) ) ;
115
- if ( match . Success )
116
- {
117
- update = REG_COT . Replace ( thinkingBuffer . ToString ( ) , "" ) . TrimStart ( ) ;
118
- if ( update . Length > 0 )
119
- {
120
- foreach ( var output in outputs )
121
- output . builder . Append ( update ) ;
122
- thinkingBuffer . Clear ( ) ;
123
- }
124
- return ;
125
- }
126
-
127
- match = REG_THINK_START . Match ( thinkingBuffer . ToString ( ) ) ;
128
- if ( ! match . Success )
129
- {
130
- foreach ( var output in outputs )
131
- output . builder . Append ( thinkingBuffer ) ;
132
- thinkingBuffer . Clear ( ) ;
133
- return ;
134
- }
135
- }
136
-
137
- if ( thinkingBuffer . Length == 0 )
138
- {
139
- foreach ( var output in outputs )
140
- {
141
- output . builder . Append ( update ) ;
142
- output . callback ? . Invoke ( output . builder . ToString ( ) ) ;
143
- }
144
- }
145
- }
146
-
147
93
private Models . OpenAIService _service ;
148
94
private string _repo ;
149
95
private List < Models . Change > _changes ;
150
96
private CancellationToken _cancelToken ;
151
97
private Action < string > _onResponse ;
152
-
153
- private static readonly Regex REG_COT = new ( @"^<(think|thought|thinking|thought_chain)>(.*?)</\1>" , RegexOptions . Singleline ) ;
154
- private static readonly Regex REG_THINK_START = new ( @"^<(think|thought|thinking|thought_chain)>" , RegexOptions . Singleline ) ;
155
98
}
156
99
}
0 commit comments