auto-coder 0.1.301__py3-none-any.whl → 0.1.303__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of auto-coder might be problematic. Click here for more details.
- {auto_coder-0.1.301.dist-info → auto_coder-0.1.303.dist-info}/METADATA +2 -1
- {auto_coder-0.1.301.dist-info → auto_coder-0.1.303.dist-info}/RECORD +33 -25
- autocoder/auto_coder.py +6 -7
- autocoder/auto_coder_runner.py +9 -9
- autocoder/chat_auto_coder.py +6 -1
- autocoder/commands/auto_command.py +313 -205
- autocoder/commands/tools.py +123 -85
- autocoder/common/__init__.py +2 -0
- autocoder/common/action_yml_file_manager.py +28 -6
- autocoder/common/auto_coder_lang.py +2 -2
- autocoder/common/auto_configure.py +9 -4
- autocoder/common/code_auto_merge.py +1 -1
- autocoder/common/code_auto_merge_diff.py +1 -1
- autocoder/common/code_auto_merge_editblock.py +1 -1
- autocoder/common/code_auto_merge_strict_diff.py +1 -1
- autocoder/common/stream_out_type.py +7 -0
- autocoder/dispacher/actions/action.py +221 -101
- autocoder/dispacher/actions/plugins/action_regex_project.py +18 -0
- autocoder/events/__init__.py +57 -0
- autocoder/events/event_content.py +423 -0
- autocoder/events/event_manager.py +327 -0
- autocoder/events/event_manager_singleton.py +245 -0
- autocoder/events/event_store.py +376 -0
- autocoder/events/event_types.py +103 -0
- autocoder/index/entry.py +88 -60
- autocoder/index/filter/quick_filter.py +71 -3
- autocoder/run_context.py +62 -0
- autocoder/utils/auto_coder_utils/chat_stream_out.py +32 -1
- autocoder/version.py +1 -1
- {auto_coder-0.1.301.dist-info → auto_coder-0.1.303.dist-info}/LICENSE +0 -0
- {auto_coder-0.1.301.dist-info → auto_coder-0.1.303.dist-info}/WHEEL +0 -0
- {auto_coder-0.1.301.dist-info → auto_coder-0.1.303.dist-info}/entry_points.txt +0 -0
- {auto_coder-0.1.301.dist-info → auto_coder-0.1.303.dist-info}/top_level.txt +0 -0
|
@@ -156,13 +156,18 @@ def config_readme() -> str:
|
|
|
156
156
|
2. py
|
|
157
157
|
3. 代码文件后缀名列表(比如.java,.py,.go,.js,.ts),多个按逗号分割
|
|
158
158
|
|
|
159
|
-
推荐使用 3 选项,因为项目类型通常为多种后缀名混合。
|
|
160
|
-
|
|
161
|
-
## include_project_structure: 是否包含项目结构
|
|
162
|
-
是否包含项目结构。推荐设置为 true。默认为true,但是项目结构也可能很大,如果项目结构很大,那么可以设置为 false。
|
|
159
|
+
推荐使用 3 选项,因为项目类型通常为多种后缀名混合。
|
|
163
160
|
|
|
164
161
|
## conversation_prune_safe_zone_tokens: 对话剪枝安全区token数量
|
|
165
162
|
在对话剪枝时,会根据对话的token数量,如果token数量超过该值,那么会剪枝掉一部分对话。
|
|
163
|
+
|
|
164
|
+
## enable_task_history
|
|
165
|
+
该参数对 /auto 指令有效, 当你使用 /auto 指令的时候,系统会自动将近期对项目的变更(commit) 信息给到大模型,方便大模型对用户的需求有更好的理解。
|
|
166
|
+
默认为 false
|
|
167
|
+
|
|
168
|
+
## include_project_structure
|
|
169
|
+
使用 /chat , /coding 等指令时,是否将项目的目录结构也放到上下文中。
|
|
170
|
+
默认为true, 如果你项目很大,请设置为 false
|
|
166
171
|
"""
|
|
167
172
|
|
|
168
173
|
class ConfigAutoTuner:
|
|
@@ -197,7 +197,7 @@ class CodeAutoMerge:
|
|
|
197
197
|
|
|
198
198
|
self.printer.print_in_terminal("files_merged", total=total)
|
|
199
199
|
if not force_skip_git and not self.args.skip_commit:
|
|
200
|
-
commit_result = git_utils.commit_changes(self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}
|
|
200
|
+
commit_result = git_utils.commit_changes(self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}")
|
|
201
201
|
|
|
202
202
|
action_yml_file_manager = ActionYmlFileManager(self.args.source_dir)
|
|
203
203
|
action_file_name = os.path.basename(self.args.file)
|
|
@@ -580,7 +580,7 @@ class CodeAutoMergeDiff:
|
|
|
580
580
|
|
|
581
581
|
self.printer.print_in_terminal("files_merged_total", total=total)
|
|
582
582
|
if not force_skip_git and not self.args.skip_commit:
|
|
583
|
-
commit_result = git_utils.commit_changes(self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}
|
|
583
|
+
commit_result = git_utils.commit_changes(self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}")
|
|
584
584
|
|
|
585
585
|
action_yml_file_manager = ActionYmlFileManager(self.args.source_dir)
|
|
586
586
|
action_file_name = os.path.basename(self.args.file)
|
|
@@ -427,7 +427,7 @@ class CodeAutoMergeEditBlock:
|
|
|
427
427
|
try:
|
|
428
428
|
commit_result = git_utils.commit_changes(
|
|
429
429
|
self.args.source_dir,
|
|
430
|
-
f"{self.args.query}\nauto_coder_{file_name}
|
|
430
|
+
f"{self.args.query}\nauto_coder_{file_name}",
|
|
431
431
|
)
|
|
432
432
|
|
|
433
433
|
action_yml_file_manager = ActionYmlFileManager(self.args.source_dir)
|
|
@@ -287,7 +287,7 @@ class CodeAutoMergeStrictDiff:
|
|
|
287
287
|
self.printer.print_in_terminal("files_merged_total", total=total)
|
|
288
288
|
if not force_skip_git and not self.args.skip_commit:
|
|
289
289
|
commit_result = git_utils.commit_changes(
|
|
290
|
-
self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}
|
|
290
|
+
self.args.source_dir, f"{self.args.query}\nauto_coder_{file_name}"
|
|
291
291
|
)
|
|
292
292
|
action_yml_file_manager = ActionYmlFileManager(self.args.source_dir)
|
|
293
293
|
action_file_name = os.path.basename(self.args.file)
|
|
@@ -30,17 +30,22 @@ from autocoder.utils.llms import get_llm_names
|
|
|
30
30
|
from autocoder.privacy.model_filter import ModelPathFilter
|
|
31
31
|
from autocoder.common import SourceCodeList
|
|
32
32
|
from autocoder.common.global_cancel import global_cancel
|
|
33
|
+
from autocoder.events.event_manager_singleton import get_event_manager
|
|
34
|
+
from autocoder.events import event_content as EventContentCreator
|
|
35
|
+
from autocoder.events.event_types import EventMetadata
|
|
33
36
|
|
|
34
37
|
|
|
35
|
-
class BaseAction:
|
|
38
|
+
class BaseAction:
|
|
36
39
|
def _get_content_length(self, content: str) -> int:
|
|
37
40
|
try:
|
|
38
41
|
tokenizer = BuildinTokenizer()
|
|
39
42
|
return tokenizer.count_tokens(content)
|
|
40
43
|
except Exception as e:
|
|
41
|
-
logger.warning(
|
|
44
|
+
logger.warning(
|
|
45
|
+
f"Failed to use tokenizer to count tokens, fallback to len(): {e}")
|
|
42
46
|
return len(content)
|
|
43
47
|
|
|
48
|
+
|
|
44
49
|
class ActionTSProject(BaseAction):
|
|
45
50
|
def __init__(
|
|
46
51
|
self, args: AutoCoderArgs, llm: Optional[byzerllm.ByzerLLM] = None
|
|
@@ -66,7 +71,7 @@ class ActionTSProject(BaseAction):
|
|
|
66
71
|
args.query = (args.context or "") + "\n\n" + args.query
|
|
67
72
|
source_code_list = build_index_and_filter_files(
|
|
68
73
|
llm=self.llm, args=args, sources=pp.sources
|
|
69
|
-
)
|
|
74
|
+
)
|
|
70
75
|
if args.in_code_apply:
|
|
71
76
|
args.query = old_query
|
|
72
77
|
|
|
@@ -86,13 +91,13 @@ class ActionTSProject(BaseAction):
|
|
|
86
91
|
max_iter=self.args.image_max_iter,
|
|
87
92
|
)
|
|
88
93
|
html_code = ""
|
|
89
|
-
with open(html_path, "r",encoding="utf-8") as f:
|
|
94
|
+
with open(html_path, "r", encoding="utf-8") as f:
|
|
90
95
|
html_code = f.read()
|
|
91
|
-
|
|
92
|
-
source_code_list.sources.append(SourceCode(
|
|
96
|
+
|
|
97
|
+
source_code_list.sources.append(SourceCode(
|
|
93
98
|
module_name=html_path,
|
|
94
99
|
source_code=html_code,
|
|
95
|
-
tag="IMAGE"))
|
|
100
|
+
tag="IMAGE"))
|
|
96
101
|
|
|
97
102
|
self.process_content(source_code_list)
|
|
98
103
|
return True
|
|
@@ -105,13 +110,14 @@ class ActionTSProject(BaseAction):
|
|
|
105
110
|
if content_length > self.args.model_max_input_length:
|
|
106
111
|
logger.warning(
|
|
107
112
|
f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
|
|
108
|
-
)
|
|
113
|
+
)
|
|
109
114
|
|
|
110
115
|
if global_cancel.requested:
|
|
111
|
-
printer = Printer()
|
|
112
|
-
raise Exception(printer.get_message_from_key(
|
|
113
|
-
|
|
114
|
-
|
|
116
|
+
printer = Printer()
|
|
117
|
+
raise Exception(printer.get_message_from_key(
|
|
118
|
+
"generation_cancelled"))
|
|
119
|
+
|
|
120
|
+
if args.execute:
|
|
115
121
|
self.printer.print_in_terminal("code_generation_start")
|
|
116
122
|
start_time = time.time()
|
|
117
123
|
if args.auto_merge == "diff":
|
|
@@ -127,8 +133,9 @@ class ActionTSProject(BaseAction):
|
|
|
127
133
|
llm=self.llm, args=self.args, action=self
|
|
128
134
|
)
|
|
129
135
|
else:
|
|
130
|
-
generate = CodeAutoGenerate(
|
|
131
|
-
|
|
136
|
+
generate = CodeAutoGenerate(
|
|
137
|
+
llm=self.llm, args=self.args, action=self)
|
|
138
|
+
|
|
132
139
|
if self.args.enable_multi_round_generate:
|
|
133
140
|
generate_result = generate.multi_round_run(
|
|
134
141
|
query=args.query, source_code_list=source_code_list
|
|
@@ -138,41 +145,69 @@ class ActionTSProject(BaseAction):
|
|
|
138
145
|
query=args.query, source_code_list=source_code_list
|
|
139
146
|
)
|
|
140
147
|
elapsed_time = time.time() - start_time
|
|
141
|
-
speed = generate_result.metadata.get(
|
|
142
|
-
|
|
143
|
-
|
|
148
|
+
speed = generate_result.metadata.get(
|
|
149
|
+
'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
|
|
150
|
+
input_tokens_cost = generate_result.metadata.get(
|
|
151
|
+
'input_tokens_cost', 0)
|
|
152
|
+
generated_tokens_cost = generate_result.metadata.get(
|
|
153
|
+
'generated_tokens_cost', 0)
|
|
144
154
|
model_names = ",".join(get_llm_names(generate.llms))
|
|
145
155
|
self.printer.print_in_terminal(
|
|
146
156
|
"code_generation_complete",
|
|
147
157
|
duration=elapsed_time,
|
|
148
|
-
input_tokens=generate_result.metadata.get(
|
|
149
|
-
|
|
158
|
+
input_tokens=generate_result.metadata.get(
|
|
159
|
+
'input_tokens_count', 0),
|
|
160
|
+
output_tokens=generate_result.metadata.get(
|
|
161
|
+
'generated_tokens_count', 0),
|
|
150
162
|
input_cost=input_tokens_cost,
|
|
151
163
|
output_cost=generated_tokens_cost,
|
|
152
164
|
speed=round(speed, 2),
|
|
153
165
|
model_names=model_names,
|
|
154
166
|
sampling_count=len(generate_result.contents)
|
|
155
167
|
)
|
|
156
|
-
|
|
168
|
+
|
|
169
|
+
get_event_manager(self.args.event_file).write_result(
|
|
170
|
+
EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
|
|
171
|
+
model_name=model_names,
|
|
172
|
+
elapsed_time=elapsed_time,
|
|
173
|
+
input_tokens=generate_result.metadata.get(
|
|
174
|
+
'input_tokens_count', 0),
|
|
175
|
+
output_tokens=generate_result.metadata.get(
|
|
176
|
+
'generated_tokens_count', 0),
|
|
177
|
+
input_cost=input_tokens_cost,
|
|
178
|
+
output_cost=generated_tokens_cost,
|
|
179
|
+
speed=round(speed, 2)
|
|
180
|
+
)).to_dict(),metadata=EventMetadata(
|
|
181
|
+
action_file=self.args.file
|
|
182
|
+
).to_dict())
|
|
183
|
+
|
|
157
184
|
if global_cancel.requested:
|
|
158
|
-
printer = Printer()
|
|
159
|
-
raise Exception(printer.get_message_from_key(
|
|
160
|
-
|
|
185
|
+
printer = Printer()
|
|
186
|
+
raise Exception(printer.get_message_from_key(
|
|
187
|
+
"generation_cancelled"))
|
|
188
|
+
|
|
161
189
|
merge_result = None
|
|
162
190
|
if args.execute and args.auto_merge:
|
|
163
191
|
self.printer.print_in_terminal("code_merge_start")
|
|
164
192
|
if args.auto_merge == "diff":
|
|
165
|
-
code_merge = CodeAutoMergeDiff(
|
|
166
|
-
|
|
193
|
+
code_merge = CodeAutoMergeDiff(
|
|
194
|
+
llm=self.llm, args=self.args)
|
|
195
|
+
merge_result = code_merge.merge_code(
|
|
196
|
+
generate_result=generate_result)
|
|
167
197
|
elif args.auto_merge == "strict_diff":
|
|
168
|
-
code_merge = CodeAutoMergeStrictDiff(
|
|
169
|
-
|
|
198
|
+
code_merge = CodeAutoMergeStrictDiff(
|
|
199
|
+
llm=self.llm, args=self.args)
|
|
200
|
+
merge_result = code_merge.merge_code(
|
|
201
|
+
generate_result=generate_result)
|
|
170
202
|
elif args.auto_merge == "editblock":
|
|
171
|
-
code_merge = CodeAutoMergeEditBlock(
|
|
172
|
-
|
|
203
|
+
code_merge = CodeAutoMergeEditBlock(
|
|
204
|
+
llm=self.llm, args=self.args)
|
|
205
|
+
merge_result = code_merge.merge_code(
|
|
206
|
+
generate_result=generate_result)
|
|
173
207
|
else:
|
|
174
208
|
code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
|
|
175
|
-
merge_result = code_merge.merge_code(
|
|
209
|
+
merge_result = code_merge.merge_code(
|
|
210
|
+
generate_result=generate_result)
|
|
176
211
|
|
|
177
212
|
if merge_result is not None:
|
|
178
213
|
content = merge_result.contents[0]
|
|
@@ -190,7 +225,6 @@ class ActionTSProject(BaseAction):
|
|
|
190
225
|
conversations=generate_result.conversations[0],
|
|
191
226
|
model=self.llm.default_model_name,
|
|
192
227
|
)
|
|
193
|
-
|
|
194
228
|
|
|
195
229
|
|
|
196
230
|
class ActionPyScriptProject(BaseAction):
|
|
@@ -216,9 +250,10 @@ class ActionPyScriptProject(BaseAction):
|
|
|
216
250
|
def process_content(self, source_code_list: SourceCodeList):
|
|
217
251
|
args = self.args
|
|
218
252
|
if global_cancel.requested:
|
|
219
|
-
printer = Printer()
|
|
220
|
-
raise Exception(printer.get_message_from_key(
|
|
221
|
-
|
|
253
|
+
printer = Printer()
|
|
254
|
+
raise Exception(printer.get_message_from_key(
|
|
255
|
+
"generation_cancelled"))
|
|
256
|
+
|
|
222
257
|
if args.execute:
|
|
223
258
|
self.printer.print_in_terminal("code_generation_start")
|
|
224
259
|
start_time = time.time()
|
|
@@ -235,7 +270,8 @@ class ActionPyScriptProject(BaseAction):
|
|
|
235
270
|
llm=self.llm, args=self.args, action=self
|
|
236
271
|
)
|
|
237
272
|
else:
|
|
238
|
-
generate = CodeAutoGenerate(
|
|
273
|
+
generate = CodeAutoGenerate(
|
|
274
|
+
llm=self.llm, args=self.args, action=self)
|
|
239
275
|
if self.args.enable_multi_round_generate:
|
|
240
276
|
generate_result = generate.multi_round_run(
|
|
241
277
|
query=args.query, source_code_list=source_code_list
|
|
@@ -246,15 +282,20 @@ class ActionPyScriptProject(BaseAction):
|
|
|
246
282
|
)
|
|
247
283
|
|
|
248
284
|
elapsed_time = time.time() - start_time
|
|
249
|
-
speed = generate_result.metadata.get(
|
|
285
|
+
speed = generate_result.metadata.get(
|
|
286
|
+
'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
|
|
250
287
|
model_names = ",".join(get_llm_names(generate.llms))
|
|
251
|
-
input_tokens_cost = generate_result.metadata.get(
|
|
252
|
-
|
|
288
|
+
input_tokens_cost = generate_result.metadata.get(
|
|
289
|
+
'input_tokens_cost', 0)
|
|
290
|
+
generated_tokens_cost = generate_result.metadata.get(
|
|
291
|
+
'generated_tokens_cost', 0)
|
|
253
292
|
self.printer.print_in_terminal(
|
|
254
293
|
"code_generation_complete",
|
|
255
294
|
duration=elapsed_time,
|
|
256
|
-
input_tokens=generate_result.metadata.get(
|
|
257
|
-
|
|
295
|
+
input_tokens=generate_result.metadata.get(
|
|
296
|
+
'input_tokens_count', 0),
|
|
297
|
+
output_tokens=generate_result.metadata.get(
|
|
298
|
+
'generated_tokens_count', 0),
|
|
258
299
|
input_cost=input_tokens_cost,
|
|
259
300
|
output_cost=generated_tokens_cost,
|
|
260
301
|
speed=round(speed, 2),
|
|
@@ -262,25 +303,48 @@ class ActionPyScriptProject(BaseAction):
|
|
|
262
303
|
sampling_count=len(generate_result.contents)
|
|
263
304
|
)
|
|
264
305
|
|
|
306
|
+
get_event_manager(self.args.event_file).write_result(
|
|
307
|
+
EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
|
|
308
|
+
model_name=model_names,
|
|
309
|
+
elapsed_time=elapsed_time,
|
|
310
|
+
input_tokens=generate_result.metadata.get(
|
|
311
|
+
'input_tokens_count', 0),
|
|
312
|
+
output_tokens=generate_result.metadata.get(
|
|
313
|
+
'generated_tokens_count', 0),
|
|
314
|
+
input_cost=input_tokens_cost,
|
|
315
|
+
output_cost=generated_tokens_cost,
|
|
316
|
+
speed=round(speed, 2)
|
|
317
|
+
)).to_dict(),metadata=EventMetadata(
|
|
318
|
+
action_file=self.args.file
|
|
319
|
+
).to_dict())
|
|
320
|
+
|
|
265
321
|
if global_cancel.requested:
|
|
266
|
-
printer = Printer()
|
|
267
|
-
raise Exception(printer.get_message_from_key(
|
|
268
|
-
|
|
322
|
+
printer = Printer()
|
|
323
|
+
raise Exception(printer.get_message_from_key(
|
|
324
|
+
"generation_cancelled"))
|
|
325
|
+
|
|
269
326
|
merge_result = None
|
|
270
327
|
if args.execute and args.auto_merge:
|
|
271
328
|
self.printer.print_in_terminal("code_merge_start")
|
|
272
329
|
if args.auto_merge == "diff":
|
|
273
|
-
code_merge = CodeAutoMergeDiff(
|
|
274
|
-
|
|
330
|
+
code_merge = CodeAutoMergeDiff(
|
|
331
|
+
llm=self.llm, args=self.args)
|
|
332
|
+
merge_result = code_merge.merge_code(
|
|
333
|
+
generate_result=generate_result)
|
|
275
334
|
elif args.auto_merge == "strict_diff":
|
|
276
|
-
code_merge = CodeAutoMergeStrictDiff(
|
|
277
|
-
|
|
335
|
+
code_merge = CodeAutoMergeStrictDiff(
|
|
336
|
+
llm=self.llm, args=self.args)
|
|
337
|
+
merge_result = code_merge.merge_code(
|
|
338
|
+
generate_result=generate_result)
|
|
278
339
|
elif args.auto_merge == "editblock":
|
|
279
|
-
code_merge = CodeAutoMergeEditBlock(
|
|
280
|
-
|
|
340
|
+
code_merge = CodeAutoMergeEditBlock(
|
|
341
|
+
llm=self.llm, args=self.args)
|
|
342
|
+
merge_result = code_merge.merge_code(
|
|
343
|
+
generate_result=generate_result)
|
|
281
344
|
else:
|
|
282
345
|
code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
|
|
283
|
-
merge_result = code_merge.merge_code(
|
|
346
|
+
merge_result = code_merge.merge_code(
|
|
347
|
+
generate_result=generate_result)
|
|
284
348
|
|
|
285
349
|
content = merge_result.contents[0]
|
|
286
350
|
|
|
@@ -298,7 +362,7 @@ class ActionPyScriptProject(BaseAction):
|
|
|
298
362
|
instruction=self.args.query,
|
|
299
363
|
conversations=generate_result.conversations[0],
|
|
300
364
|
model=self.llm.default_model_name,
|
|
301
|
-
)
|
|
365
|
+
)
|
|
302
366
|
|
|
303
367
|
|
|
304
368
|
class ActionPyProject(BaseAction):
|
|
@@ -316,8 +380,9 @@ class ActionPyProject(BaseAction):
|
|
|
316
380
|
return False
|
|
317
381
|
pp = PyProject(args=self.args, llm=self.llm)
|
|
318
382
|
self.pp = pp
|
|
319
|
-
pp.run(packages=args.py_packages.split(
|
|
320
|
-
|
|
383
|
+
pp.run(packages=args.py_packages.split(
|
|
384
|
+
",") if args.py_packages else [])
|
|
385
|
+
source_code_list = SourceCodeList(pp.sources)
|
|
321
386
|
|
|
322
387
|
if self.llm:
|
|
323
388
|
old_query = args.query
|
|
@@ -339,15 +404,16 @@ class ActionPyProject(BaseAction):
|
|
|
339
404
|
content_length = self._get_content_length(content)
|
|
340
405
|
if content_length > self.args.model_max_input_length:
|
|
341
406
|
self.printer.print_in_terminal(
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
407
|
+
"code_execution_warning",
|
|
408
|
+
style="yellow",
|
|
409
|
+
content_length=content_length,
|
|
410
|
+
max_length=self.args.model_max_input_length
|
|
411
|
+
)
|
|
412
|
+
|
|
348
413
|
if global_cancel.requested:
|
|
349
|
-
printer = Printer()
|
|
350
|
-
raise Exception(printer.get_message_from_key(
|
|
414
|
+
printer = Printer()
|
|
415
|
+
raise Exception(printer.get_message_from_key(
|
|
416
|
+
"generation_cancelled"))
|
|
351
417
|
|
|
352
418
|
if args.execute:
|
|
353
419
|
self.printer.print_in_terminal("code_generation_start")
|
|
@@ -365,8 +431,8 @@ class ActionPyProject(BaseAction):
|
|
|
365
431
|
llm=self.llm, args=self.args, action=self
|
|
366
432
|
)
|
|
367
433
|
else:
|
|
368
|
-
generate = CodeAutoGenerate(
|
|
369
|
-
|
|
434
|
+
generate = CodeAutoGenerate(
|
|
435
|
+
llm=self.llm, args=self.args, action=self)
|
|
370
436
|
|
|
371
437
|
if self.args.enable_multi_round_generate:
|
|
372
438
|
generate_result = generate.multi_round_run(
|
|
@@ -377,15 +443,20 @@ class ActionPyProject(BaseAction):
|
|
|
377
443
|
query=args.query, source_code_list=source_code_list
|
|
378
444
|
)
|
|
379
445
|
elapsed_time = time.time() - start_time
|
|
380
|
-
speed = generate_result.metadata.get(
|
|
446
|
+
speed = generate_result.metadata.get(
|
|
447
|
+
'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
|
|
381
448
|
model_names = ",".join(get_llm_names(generate.llms))
|
|
382
|
-
input_tokens_cost = generate_result.metadata.get(
|
|
383
|
-
|
|
449
|
+
input_tokens_cost = generate_result.metadata.get(
|
|
450
|
+
'input_tokens_cost', 0)
|
|
451
|
+
generated_tokens_cost = generate_result.metadata.get(
|
|
452
|
+
'generated_tokens_cost', 0)
|
|
384
453
|
self.printer.print_in_terminal(
|
|
385
454
|
"code_generation_complete",
|
|
386
455
|
duration=elapsed_time,
|
|
387
|
-
input_tokens=generate_result.metadata.get(
|
|
388
|
-
|
|
456
|
+
input_tokens=generate_result.metadata.get(
|
|
457
|
+
'input_tokens_count', 0),
|
|
458
|
+
output_tokens=generate_result.metadata.get(
|
|
459
|
+
'generated_tokens_count', 0),
|
|
389
460
|
input_cost=input_tokens_cost,
|
|
390
461
|
output_cost=generated_tokens_cost,
|
|
391
462
|
speed=round(speed, 2),
|
|
@@ -393,25 +464,48 @@ class ActionPyProject(BaseAction):
|
|
|
393
464
|
sampling_count=len(generate_result.contents)
|
|
394
465
|
)
|
|
395
466
|
|
|
467
|
+
get_event_manager(self.args.event_file).write_result(
|
|
468
|
+
EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
|
|
469
|
+
model_name=model_names,
|
|
470
|
+
elapsed_time=elapsed_time,
|
|
471
|
+
input_tokens=generate_result.metadata.get(
|
|
472
|
+
'input_tokens_count', 0),
|
|
473
|
+
output_tokens=generate_result.metadata.get(
|
|
474
|
+
'generated_tokens_count', 0),
|
|
475
|
+
input_cost=input_tokens_cost,
|
|
476
|
+
output_cost=generated_tokens_cost,
|
|
477
|
+
speed=round(speed, 2)
|
|
478
|
+
)).to_dict(), metadata=EventMetadata(
|
|
479
|
+
action_file=self.args.file
|
|
480
|
+
).to_dict())
|
|
481
|
+
|
|
396
482
|
if global_cancel.requested:
|
|
397
|
-
printer = Printer()
|
|
398
|
-
raise Exception(printer.get_message_from_key(
|
|
399
|
-
|
|
483
|
+
printer = Printer()
|
|
484
|
+
raise Exception(printer.get_message_from_key(
|
|
485
|
+
"generation_cancelled"))
|
|
486
|
+
|
|
400
487
|
merge_result = None
|
|
401
488
|
if args.execute and args.auto_merge:
|
|
402
489
|
self.printer.print_in_terminal("code_merge_start")
|
|
403
490
|
if args.auto_merge == "diff":
|
|
404
|
-
code_merge = CodeAutoMergeDiff(
|
|
405
|
-
|
|
491
|
+
code_merge = CodeAutoMergeDiff(
|
|
492
|
+
llm=self.llm, args=self.args)
|
|
493
|
+
merge_result = code_merge.merge_code(
|
|
494
|
+
generate_result=generate_result)
|
|
406
495
|
elif args.auto_merge == "strict_diff":
|
|
407
|
-
code_merge = CodeAutoMergeStrictDiff(
|
|
408
|
-
|
|
496
|
+
code_merge = CodeAutoMergeStrictDiff(
|
|
497
|
+
llm=self.llm, args=self.args)
|
|
498
|
+
merge_result = code_merge.merge_code(
|
|
499
|
+
generate_result=generate_result)
|
|
409
500
|
elif args.auto_merge == "editblock":
|
|
410
|
-
code_merge = CodeAutoMergeEditBlock(
|
|
411
|
-
|
|
501
|
+
code_merge = CodeAutoMergeEditBlock(
|
|
502
|
+
llm=self.llm, args=self.args)
|
|
503
|
+
merge_result = code_merge.merge_code(
|
|
504
|
+
generate_result=generate_result)
|
|
412
505
|
else:
|
|
413
506
|
code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
|
|
414
|
-
merge_result = code_merge.merge_code(
|
|
507
|
+
merge_result = code_merge.merge_code(
|
|
508
|
+
generate_result=generate_result)
|
|
415
509
|
|
|
416
510
|
content = merge_result.contents[0]
|
|
417
511
|
|
|
@@ -429,7 +523,7 @@ class ActionPyProject(BaseAction):
|
|
|
429
523
|
instruction=self.args.query,
|
|
430
524
|
conversations=generate_result.conversations[0],
|
|
431
525
|
model=self.llm.default_model_name,
|
|
432
|
-
)
|
|
526
|
+
)
|
|
433
527
|
|
|
434
528
|
|
|
435
529
|
class ActionSuffixProject(BaseAction):
|
|
@@ -467,11 +561,12 @@ class ActionSuffixProject(BaseAction):
|
|
|
467
561
|
if content_length > self.args.model_max_input_length:
|
|
468
562
|
logger.warning(
|
|
469
563
|
f"Content(send to model) is {content_length} tokens, which is larger than the maximum input length {self.args.model_max_input_length}"
|
|
470
|
-
)
|
|
564
|
+
)
|
|
471
565
|
|
|
472
566
|
if global_cancel.requested:
|
|
473
|
-
printer = Printer()
|
|
474
|
-
raise Exception(printer.get_message_from_key(
|
|
567
|
+
printer = Printer()
|
|
568
|
+
raise Exception(printer.get_message_from_key(
|
|
569
|
+
"generation_cancelled"))
|
|
475
570
|
|
|
476
571
|
if args.execute:
|
|
477
572
|
self.printer.print_in_terminal("code_generation_start")
|
|
@@ -489,7 +584,8 @@ class ActionSuffixProject(BaseAction):
|
|
|
489
584
|
llm=self.llm, args=self.args, action=self
|
|
490
585
|
)
|
|
491
586
|
else:
|
|
492
|
-
generate = CodeAutoGenerate(
|
|
587
|
+
generate = CodeAutoGenerate(
|
|
588
|
+
llm=self.llm, args=self.args, action=self)
|
|
493
589
|
if self.args.enable_multi_round_generate:
|
|
494
590
|
generate_result = generate.multi_round_run(
|
|
495
591
|
query=args.query, source_code_list=source_code_list
|
|
@@ -498,43 +594,69 @@ class ActionSuffixProject(BaseAction):
|
|
|
498
594
|
generate_result = generate.single_round_run(
|
|
499
595
|
query=args.query, source_code_list=source_code_list
|
|
500
596
|
)
|
|
501
|
-
|
|
597
|
+
|
|
502
598
|
elapsed_time = time.time() - start_time
|
|
503
|
-
speed = generate_result.metadata.get(
|
|
599
|
+
speed = generate_result.metadata.get(
|
|
600
|
+
'generated_tokens_count', 0) / elapsed_time if elapsed_time > 0 else 0
|
|
504
601
|
model_names = ",".join(get_llm_names(generate.llms))
|
|
505
|
-
input_tokens_cost = generate_result.metadata.get(
|
|
506
|
-
|
|
602
|
+
input_tokens_cost = generate_result.metadata.get(
|
|
603
|
+
'input_tokens_cost', 0)
|
|
604
|
+
generated_tokens_cost = generate_result.metadata.get(
|
|
605
|
+
'generated_tokens_cost', 0)
|
|
507
606
|
self.printer.print_in_terminal(
|
|
508
607
|
"code_generation_complete",
|
|
509
608
|
duration=elapsed_time,
|
|
510
609
|
input_tokens=generate_result.metadata.get('input_tokens_count', 0),
|
|
511
|
-
output_tokens=generate_result.metadata.get(
|
|
610
|
+
output_tokens=generate_result.metadata.get(
|
|
611
|
+
'generated_tokens_count', 0),
|
|
512
612
|
input_cost=input_tokens_cost,
|
|
513
613
|
output_cost=generated_tokens_cost,
|
|
514
614
|
speed=round(speed, 2),
|
|
515
615
|
model_names=model_names,
|
|
516
616
|
sampling_count=len(generate_result.contents)
|
|
517
617
|
)
|
|
518
|
-
|
|
618
|
+
|
|
619
|
+
get_event_manager(self.args.event_file).write_result(
|
|
620
|
+
EventContentCreator.create_result(content=EventContentCreator.ResultTokenStatContent(
|
|
621
|
+
model_name=model_names,
|
|
622
|
+
elapsed_time=elapsed_time,
|
|
623
|
+
input_tokens=generate_result.metadata.get(
|
|
624
|
+
'input_tokens_count', 0),
|
|
625
|
+
output_tokens=generate_result.metadata.get(
|
|
626
|
+
'generated_tokens_count', 0),
|
|
627
|
+
input_cost=input_tokens_cost,
|
|
628
|
+
output_cost=generated_tokens_cost,
|
|
629
|
+
speed=round(speed, 2)
|
|
630
|
+
)).to_dict(), metadata=EventMetadata(
|
|
631
|
+
action_file=self.args.file
|
|
632
|
+
).to_dict())
|
|
633
|
+
|
|
519
634
|
if global_cancel.requested:
|
|
520
|
-
printer = Printer()
|
|
521
|
-
raise Exception(printer.get_message_from_key(
|
|
522
|
-
|
|
635
|
+
printer = Printer()
|
|
636
|
+
raise Exception(printer.get_message_from_key(
|
|
637
|
+
"generation_cancelled"))
|
|
638
|
+
|
|
523
639
|
merge_result = None
|
|
524
640
|
if args.execute and args.auto_merge:
|
|
525
641
|
self.printer.print_in_terminal("code_merge_start")
|
|
526
642
|
if args.auto_merge == "diff":
|
|
527
643
|
code_merge = CodeAutoMergeDiff(llm=self.llm, args=self.args)
|
|
528
|
-
merge_result = code_merge.merge_code(
|
|
644
|
+
merge_result = code_merge.merge_code(
|
|
645
|
+
generate_result=generate_result)
|
|
529
646
|
elif args.auto_merge == "strict_diff":
|
|
530
|
-
code_merge = CodeAutoMergeStrictDiff(
|
|
531
|
-
|
|
647
|
+
code_merge = CodeAutoMergeStrictDiff(
|
|
648
|
+
llm=self.llm, args=self.args)
|
|
649
|
+
merge_result = code_merge.merge_code(
|
|
650
|
+
generate_result=generate_result)
|
|
532
651
|
elif args.auto_merge == "editblock":
|
|
533
|
-
code_merge = CodeAutoMergeEditBlock(
|
|
534
|
-
|
|
652
|
+
code_merge = CodeAutoMergeEditBlock(
|
|
653
|
+
llm=self.llm, args=self.args)
|
|
654
|
+
merge_result = code_merge.merge_code(
|
|
655
|
+
generate_result=generate_result)
|
|
535
656
|
else:
|
|
536
657
|
code_merge = CodeAutoMerge(llm=self.llm, args=self.args)
|
|
537
|
-
merge_result = code_merge.merge_code(
|
|
658
|
+
merge_result = code_merge.merge_code(
|
|
659
|
+
generate_result=generate_result)
|
|
538
660
|
|
|
539
661
|
if merge_result is not None:
|
|
540
662
|
content = merge_result.contents[0]
|
|
@@ -543,7 +665,7 @@ class ActionSuffixProject(BaseAction):
|
|
|
543
665
|
instruction=self.args.query,
|
|
544
666
|
conversations=merge_result.conversations[0],
|
|
545
667
|
model=self.llm.default_model_name,
|
|
546
|
-
)
|
|
668
|
+
)
|
|
547
669
|
else:
|
|
548
670
|
content = generate_result.contents[0]
|
|
549
671
|
|
|
@@ -553,5 +675,3 @@ class ActionSuffixProject(BaseAction):
|
|
|
553
675
|
conversations=generate_result.conversations[0],
|
|
554
676
|
model=self.llm.default_model_name,
|
|
555
677
|
)
|
|
556
|
-
|
|
557
|
-
|