auto-coder 0.1.249__py3-none-any.whl → 0.1.251__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.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.249
3
+ Version: 0.1.251
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -1,22 +1,22 @@
1
1
  autocoder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- autocoder/auto_coder.py,sha256=J4X7KfkYS_3NmcLejg9SlROrIJfk4HzFLj8KKrAGtTM,62887
2
+ autocoder/auto_coder.py,sha256=Rg5NveoL9m1BiWon_62EwtWUolbHqNTzi_ZXvmh89ns,63357
3
3
  autocoder/auto_coder_lang.py,sha256=Rtupq6N3_HT7JRhDKdgCBcwRaiAnyCOR_Gsp4jUomrI,3229
4
4
  autocoder/auto_coder_rag.py,sha256=illKgzP2bv-Tq50ujsofJnOHdI4pzr0ALtfR8NHHWdQ,22351
5
5
  autocoder/auto_coder_rag_client_mcp.py,sha256=WV7j5JUiQge0x4-B7Hp5-pSAFXLbvLpzQMcCovbauIM,6276
6
6
  autocoder/auto_coder_rag_mcp.py,sha256=-RrjNwFaS2e5v8XDIrKR-zlUNUE8UBaeOtojffBrvJo,8521
7
7
  autocoder/auto_coder_server.py,sha256=XU9b4SBH7zjPPXaTWWHV4_zJm-XYa6njuLQaplYJH_c,20290
8
8
  autocoder/benchmark.py,sha256=Ypomkdzd1T3GE6dRICY3Hj547dZ6_inqJbBJIp5QMco,4423
9
- autocoder/chat_auto_coder.py,sha256=H83C0FW5q51-Iq0MBAO-9xbr2tCfbF-LVRZddFhmOhM,104869
9
+ autocoder/chat_auto_coder.py,sha256=Z3CgocPCOTkcqUJ8w0ttw7S9v0K45z9BUWQLH1PM3x0,104877
10
10
  autocoder/chat_auto_coder_lang.py,sha256=ffLIVhOrODHamiy4csir-1TD7q7P9NeuZoZ9VaHeuic,15880
11
11
  autocoder/command_args.py,sha256=9aYJ-AmPxP1sQh6ciw04FWHjSn31f2W9afXFwo8wgx4,30441
12
12
  autocoder/lang.py,sha256=U6AjVV8Rs1uLyjFCZ8sT6WWuNUxMBqkXXIOs4S120uk,14511
13
13
  autocoder/models.py,sha256=_9Kc8oS_tnnqKzRGnybgOfn1NOey7OXZ8y9qhBmgiB4,5517
14
- autocoder/version.py,sha256=qmVWj6FADq79FGrBV3amzjQGJ-kj4-b3hupW0TuXamY,23
14
+ autocoder/version.py,sha256=-Gpqn1vE4FhgKFlZinRqJ2gdrAvVcUNbvB5efKuhuyk,23
15
15
  autocoder/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  autocoder/agent/auto_demand_organizer.py,sha256=NWSAEsEk94vT3lGjfo25kKLMwYdPcpy9e-i21txPasQ,6942
17
17
  autocoder/agent/auto_filegroup.py,sha256=CW7bqp0FW1GIEMnl-blyAc2UGT7O9Mom0q66ITz1ckM,6635
18
18
  autocoder/agent/auto_guess_query.py,sha256=rDSdhpPHcOGE5MuDXvIrhCXAPR4ARS1LqpyoLsx2Jhw,11374
19
- autocoder/agent/auto_review_commit.py,sha256=3_XgcOGNbpOnwq9WMj66rceZFEa4lEQvs9OZdKQi7co,7663
19
+ autocoder/agent/auto_review_commit.py,sha256=7na6LiMg9jxtdX5hplJ2m-9tx2HzRBAEZ6h8lcsmasw,7591
20
20
  autocoder/agent/auto_tool.py,sha256=DBzip-P_T6ZtT2eHexPcusmKYD0h7ufzp7TLwXAY10E,11554
21
21
  autocoder/agent/coder.py,sha256=x6bdJwDuETGg9ebQnYlUWCxCtQcDGg73LtI6McpWslQ,72034
22
22
  autocoder/agent/designer.py,sha256=EpRbzO58Xym3GrnppIT1Z8ZFAlnNfgzHbIzZ3PX-Yv8,27037
@@ -25,26 +25,26 @@ autocoder/agent/project_reader.py,sha256=tWLaPoLw1gI6kO_NzivQj28KbobU2ceOLuppHMb
25
25
  autocoder/chat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  autocoder/common/JupyterClient.py,sha256=O-wi6pXeAEYhAY24kDa0BINrLYvKS6rKyWe98pDClS0,2816
27
27
  autocoder/common/ShellClient.py,sha256=fM1q8t_XMSbLBl2zkCNC2J9xuyKN3eXzGm6hHhqL2WY,2286
28
- autocoder/common/__init__.py,sha256=fdXgU4PPTmb6enpLOOowMaU6gNmLgy2f6ViXO6jmBm8,11839
28
+ autocoder/common/__init__.py,sha256=JSCoAH7NvKuYhHFmiUwFG4OCBXWHlnxMm0Bu-Fy_Ar8,11891
29
29
  autocoder/common/anything2images.py,sha256=0ILBbWzY02M-CiWB-vzuomb_J1hVdxRcenAfIrAXq9M,25283
30
30
  autocoder/common/anything2img.py,sha256=4TREa-sOA-iargieUy7MpyCYVUE-9Mmq0wJtwomPqnE,7662
31
31
  autocoder/common/audio.py,sha256=Kn9nWKQddWnUrAz0a_ZUgjcu4VUU_IcZBigT7n3N3qc,7439
32
- autocoder/common/auto_coder_lang.py,sha256=ljREsdH6VuAeV9cPHPFsQWGxDKIVW8-oFLb8yC4lMQ0,15525
32
+ autocoder/common/auto_coder_lang.py,sha256=i7KN5VxbozvfJR5weCA3uAXwautAgq1YLapUhOWEYmo,16006
33
33
  autocoder/common/buildin_tokenizer.py,sha256=L7d5t39ZFvUd6EoMPXUhYK1toD0FHlRH1jtjKRGokWU,1236
34
34
  autocoder/common/chunk_validation.py,sha256=BrR_ZWavW8IANuueEE7hS8NFAwEvm8TX34WnPx_1hs8,3030
35
35
  autocoder/common/cleaner.py,sha256=NU72i8C6o9m0vXExab7nao5bstBUsfJFcj11cXa9l4U,1089
36
36
  autocoder/common/code_auto_execute.py,sha256=4KXGmiGObr_B1d6tzV9dwS6MifCSc3Gm4j2d6ildBXQ,6867
37
- autocoder/common/code_auto_generate.py,sha256=6rrtdEz8JhlKNutEqlWbgKUlACk90Lcm0UebtuAKEQ0,10320
38
- autocoder/common/code_auto_generate_diff.py,sha256=o5yeqpc3WXSRWlcLzhlwJNosKo7dcj0CeIsFh6Aibus,16248
39
- autocoder/common/code_auto_generate_editblock.py,sha256=QdUHUkGaervvQNCY8T2vQ_tfnQX_2kxxu4qq_QW_Nn8,17828
40
- autocoder/common/code_auto_generate_strict_diff.py,sha256=uteWDEHfIbrnVgwKgqC7qwrIeW0enJCXcHzZGa48yY8,14774
37
+ autocoder/common/code_auto_generate.py,sha256=N_kENWW4eVPKmihpIQ4Q2ivYkugAuCWIPLDCKiarRWg,10818
38
+ autocoder/common/code_auto_generate_diff.py,sha256=QAm-BVJgGl_wbw0VjY2RZigVCwOBO-l1W-90PrYDdOQ,16741
39
+ autocoder/common/code_auto_generate_editblock.py,sha256=FuVH-sP4_Ys2MJk9SkWgHHLAKp51bKSxTwFzd7voilg,18356
40
+ autocoder/common/code_auto_generate_strict_diff.py,sha256=kieVUx2KuR0BGtQHE0Ll7i8e_3Lb4xfFXHIXDttQACE,15274
41
41
  autocoder/common/code_auto_merge.py,sha256=8dtnz61l0B5gNbQmx26TZ4_jD825dsnnWtAFD_zs6es,7335
42
42
  autocoder/common/code_auto_merge_diff.py,sha256=yocfe8s3Pz6hTGDUl9wRIewY3NcTize_gEla64lsGT0,15331
43
43
  autocoder/common/code_auto_merge_editblock.py,sha256=sp7C0fZJMVcNgI8uWy43CKDk7gGXFTkMB9kbP2VdY8k,17485
44
44
  autocoder/common/code_auto_merge_strict_diff.py,sha256=9rm0NJ_n6M3LohEX7xl1Jym0xmm8UEYqj_ZTSO3oSlM,9519
45
45
  autocoder/common/code_modification_ranker.py,sha256=TycYdtxfNfde2N9-9jEB-9IL2Q3PoHS-k-r9JqZYD6s,6545
46
46
  autocoder/common/command_completer.py,sha256=SSeb8MDH0JPvfdyW-S2uaHnui4VBDfSQvQPLbv3ORPA,9314
47
- autocoder/common/command_generator.py,sha256=R4TNUMHQtZWCvDZ-jB6hCpxYMWc5qTeJ9GP3EjwxXrU,2107
47
+ autocoder/common/command_generator.py,sha256=-hmbD_AnCa5HxL4BznuEfYAf_l8AxU5fAG5F0sM_fuE,2116
48
48
  autocoder/common/command_templates.py,sha256=mnB3n8i0yjH1mqzyClEg8Wpr9VbZV44kxky66Zu6OJY,8557
49
49
  autocoder/common/const.py,sha256=eTjhjh4Aj4CUzviJ81jaf3Y5cwqsLATySn2wJxaS6RQ,2911
50
50
  autocoder/common/files.py,sha256=CguxG9digkWBJpRaILErZmL_G5ryPRahPmPFWGB7X18,1973
@@ -56,7 +56,7 @@ autocoder/common/mcp_hub.py,sha256=2ZyJv3Aiv4Y97UHut49oYhIFcu7ICR-mptDEBSgT3uE,1
56
56
  autocoder/common/mcp_server.py,sha256=QCFa-15kx7rbNsinwdGFFX2y47pww0fVdI-ldKFSSWI,12267
57
57
  autocoder/common/mcp_tools.py,sha256=KsLvRrB6pvmebqd-lDaSH6IBJR0AIxWRE-dtCEG_w9k,12485
58
58
  autocoder/common/memory_manager.py,sha256=2ZjYG7BPyvbYalZBF6AM_G5e10Qkw_zrqtD4Zd7GSsQ,3663
59
- autocoder/common/printer.py,sha256=TIqgGOq5YdWqH4_776QHwHmwfVpubZ9zzUq8rstNxuM,1911
59
+ autocoder/common/printer.py,sha256=P1WU0QjlfnjqTP5uA55GkHZCpFzRPFkc34DMMandreg,2023
60
60
  autocoder/common/recall_validation.py,sha256=Avt9Q9dX3kG6Pf2zsdlOHmsjd-OeSj7U1PFBDp_Cve0,1700
61
61
  autocoder/common/screenshots.py,sha256=_gA-z1HxGjPShBrtgkdideq58MG6rqFB2qMUJKjrycs,3769
62
62
  autocoder/common/search.py,sha256=245iPFgWhMldoUK3CqCP89ltaxZiNPK73evoG6Fp1h8,16518
@@ -81,12 +81,12 @@ autocoder/dispacher/actions/plugins/action_translate.py,sha256=nVAtRSQpdGNmZxg1R
81
81
  autocoder/index/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
82
  autocoder/index/entry.py,sha256=hXSOi-jPgRBKQB55eqWkT95vxvWrbVHDuIMtDkqjNNw,12232
83
83
  autocoder/index/for_command.py,sha256=BFvljE4t6VaMBGboZAuhUCzVK0EitCy_n5D_7FEnihw,3204
84
- autocoder/index/index.py,sha256=xwh22nY0TtEJMJwYjOUd6xdRZozYXBt47YSwheZSP-4,20679
84
+ autocoder/index/index.py,sha256=YJqMeysyF0FPXABMqS0Q2bQIXkE4VNMtrHcH0YfeYyA,20948
85
85
  autocoder/index/symbols_utils.py,sha256=CjcjUVajmJZB75Ty3a7kMv1BZphrm-tIBAdOJv6uo-0,2037
86
86
  autocoder/index/types.py,sha256=a2s_KV5FJlq7jqA2ELSo9E1sjuLwDB-JJYMhSpzBAhU,596
87
87
  autocoder/index/filter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
88
  autocoder/index/filter/normal_filter.py,sha256=APu34iSvWhtlLtWgkj8N3Vo4oW1TegtZQq2bwDX_cs4,8031
89
- autocoder/index/filter/quick_filter.py,sha256=MQqoSsUKX8VcfEmyHAnHbX-RTsMRCoFSX9WyotETC9I,9450
89
+ autocoder/index/filter/quick_filter.py,sha256=rkRmDOxT2ZF2f2d-xOPtpzVxkSYiw2KWW7g7FY40A0E,9522
90
90
  autocoder/pyproject/__init__.py,sha256=dQ2_7YZ7guybT9BhfxSGn43eLQJGQN2zgeKa6--JlaQ,14403
91
91
  autocoder/rag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
92
  autocoder/rag/api_server.py,sha256=dRbhAZVRAOlZ64Cnxf4_rKb4iJwHnrWS9Zr67IVORw0,7288
@@ -140,11 +140,11 @@ autocoder/utils/rest.py,sha256=hLBhr78y-WVnV0oQf9Rxc22EwqF78KINkScvYa1MuYA,6435
140
140
  autocoder/utils/tests.py,sha256=BqphrwyycGAvs-5mhH8pKtMZdObwhFtJ5MC_ZAOiLq8,1340
141
141
  autocoder/utils/types.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
142
  autocoder/utils/auto_coder_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
143
- autocoder/utils/auto_coder_utils/chat_stream_out.py,sha256=5MCtQwQDttvr0pRcYlYERFQpQAdi1Yvyf5Hm6F-_jvQ,9433
143
+ autocoder/utils/auto_coder_utils/chat_stream_out.py,sha256=5kKOrPy1GWZ6qHjni-YNJJb2x0rD7_3Idl2M9sWxVfU,10481
144
144
  autocoder/utils/chat_auto_coder_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
145
- auto_coder-0.1.249.dist-info/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
146
- auto_coder-0.1.249.dist-info/METADATA,sha256=RBwD1697yXW-whqe9SCtmlpuVKQo5mz8sotyxiLFILQ,2616
147
- auto_coder-0.1.249.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
148
- auto_coder-0.1.249.dist-info/entry_points.txt,sha256=0nzHtHH4pNcM7xq4EBA2toS28Qelrvcbrr59GqD_0Ak,350
149
- auto_coder-0.1.249.dist-info/top_level.txt,sha256=Jqc0_uJSw2GwoFQAa9iJxYns-2mWla-9ok_Y3Gcznjk,10
150
- auto_coder-0.1.249.dist-info/RECORD,,
145
+ auto_coder-0.1.251.dist-info/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
146
+ auto_coder-0.1.251.dist-info/METADATA,sha256=uvvt_OokvDoJt_FiYaaYtbmirw7mjFZ86bQBW2TGCbs,2616
147
+ auto_coder-0.1.251.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
148
+ auto_coder-0.1.251.dist-info/entry_points.txt,sha256=0nzHtHH4pNcM7xq4EBA2toS28Qelrvcbrr59GqD_0Ak,350
149
+ auto_coder-0.1.251.dist-info/top_level.txt,sha256=Jqc0_uJSw2GwoFQAa9iJxYns-2mWla-9ok_Y3Gcznjk,10
150
+ auto_coder-0.1.251.dist-info/RECORD,,
@@ -5,7 +5,6 @@ import byzerllm
5
5
  import pydantic
6
6
  import git
7
7
  from rich.console import Console
8
- from autocoder.utils.auto_coder_utils.chat_stream_out import stream_out
9
8
  from autocoder.common.printer import Printer
10
9
  from autocoder.common import AutoCoderArgs
11
10
  from autocoder.common.utils_code_auto_generate import stream_chat_with_continue
autocoder/auto_coder.py CHANGED
@@ -45,6 +45,7 @@ from autocoder import models as models_module
45
45
  from autocoder.common.utils_code_auto_generate import stream_chat_with_continue
46
46
  from autocoder.utils.auto_coder_utils.chat_stream_out import stream_out
47
47
  from autocoder.common.printer import Printer
48
+ from autocoder.rag.token_counter import count_tokens
48
49
  console = Console()
49
50
 
50
51
 
@@ -1333,6 +1334,13 @@ def main(input_args: Optional[List[str]] = None):
1333
1334
  reviewer = AutoReviewCommit(llm=chat_llm, args=args)
1334
1335
  v = reviewer.review_commit(query=args.query,conversations=loaded_conversations)
1335
1336
  else:
1337
+ # 预估token数量
1338
+ estimated_input_tokens = count_tokens(json.dumps(loaded_conversations, ensure_ascii=False))
1339
+ printer = Printer()
1340
+ printer.print_in_terminal("estimated_chat_input_tokens", style="yellow",
1341
+ estimated_input_tokens=estimated_input_tokens
1342
+ )
1343
+
1336
1344
  v = stream_chat_with_continue(
1337
1345
  llm=chat_llm,
1338
1346
  conversations=loaded_conversations,
@@ -1348,7 +1356,8 @@ def main(input_args: Optional[List[str]] = None):
1348
1356
  v,
1349
1357
  request_id=args.request_id,
1350
1358
  console=console,
1351
- model_name=model_name
1359
+ model_name=model_name,
1360
+ args=args
1352
1361
  )
1353
1362
 
1354
1363
  # 打印耗时和token统计
@@ -2796,8 +2796,8 @@ def main():
2796
2796
  command = user_input[len("/shell"):].strip()
2797
2797
  if not command:
2798
2798
  print("Please enter a shell command to execute.")
2799
- else:
2800
- execute_shell_command(command)
2799
+ else:
2800
+ execute_shell_command(command)
2801
2801
 
2802
2802
  except KeyboardInterrupt:
2803
2803
  continue
@@ -357,6 +357,8 @@ class AutoCoderArgs(pydantic.BaseModel):
357
357
  enable_global_memory: Optional[bool] = True
358
358
  product_mode: Optional[str] = "lite"
359
359
 
360
+ keep_reasoning_content: Optional[bool] = False
361
+
360
362
  in_code_apply: bool = False
361
363
 
362
364
  class Config:
@@ -86,7 +86,9 @@ MESSAGES = {
86
86
  "git_init_required": "⚠️ auto_merge only applies to git repositories.\n\nPlease try using git init in the source directory:\n\n```shell\ncd {{ source_dir }}\ngit init.\n```\n\nThen run auto - coder again.\nError: {{ error }}",
87
87
  "quick_filter_reason": "Auto get(quick_filter mode)",
88
88
  "quick_filter_too_long": "⚠️ index file is too large ({{ tokens_len }}/{{ max_tokens }}). The query will be split into {{ split_size }} chunks.",
89
- "quick_filter_tokens_len": "📊 Current index size: {{ tokens_len }} tokens"
89
+ "quick_filter_tokens_len": "📊 Current index size: {{ tokens_len }} tokens",
90
+ "estimated_chat_input_tokens": "Estimated chat input tokens: {{ estimated_input_tokens }}",
91
+ "estimated_input_tokens_in_generate": "Estimated input tokens in generate ({{ generate_mode }}): {{ estimated_input_tokens }}",
90
92
  },
91
93
  "zh": {
92
94
  "model_not_found": "未找到模型: {{model_name}}",
@@ -173,6 +175,8 @@ MESSAGES = {
173
175
  "quick_filter_stats": "Quick filter completed in {{ elapsed_time }} seconds, input tokens: {{ input_tokens }}, output tokens: {{ output_tokens }}",
174
176
  "quick_filter_title": "{{ model_name }} 正在分析如何筛选上下文...",
175
177
  "quick_filter_failed": "❌ 快速过滤器失败: {{ error }}. ",
178
+ "estimated_chat_input_tokens": "对话输入token预估为: {{ estimated_input_tokens }}",
179
+ "estimated_input_tokens_in_generate": "生成代码({{ generate_mode }})预计输入token数: {{ estimated_input_tokens_in_generate }}",
176
180
  },
177
181
  }
178
182
 
@@ -8,6 +8,8 @@ from concurrent.futures import ThreadPoolExecutor
8
8
  from autocoder.common.types import CodeGenerateResult
9
9
  from autocoder.common.utils_code_auto_generate import chat_with_continue
10
10
  import json
11
+ from autocoder.common.printer import Printer
12
+ from autocoder.rag.token_counter import count_tokens
11
13
 
12
14
 
13
15
  class CodeAutoGenerate:
@@ -191,6 +193,14 @@ class CodeAutoGenerate:
191
193
  results = []
192
194
  input_tokens_count = 0
193
195
  generated_tokens_count = 0
196
+
197
+ printer = Printer()
198
+ estimated_input_tokens = count_tokens(json.dumps(conversations, ensure_ascii=False))
199
+ printer.print_in_terminal("estimated_input_tokens_in_generate", style="yellow",
200
+ estimated_input_tokens_in_generate=estimated_input_tokens,
201
+ generate_mode="wholefile"
202
+ )
203
+
194
204
  if not self.args.human_as_model:
195
205
  with ThreadPoolExecutor(max_workers=len(self.llms) * self.generate_times_same_model) as executor:
196
206
  futures = []
@@ -7,6 +7,8 @@ from autocoder.common import sys_prompt
7
7
  from concurrent.futures import ThreadPoolExecutor
8
8
  import json
9
9
  from autocoder.common.utils_code_auto_generate import chat_with_continue
10
+ from autocoder.common.printer import Printer
11
+ from autocoder.rag.token_counter import count_tokens
10
12
 
11
13
 
12
14
  class CodeAutoGenerateDiff:
@@ -339,6 +341,14 @@ class CodeAutoGenerateDiff:
339
341
  results = []
340
342
  input_tokens_count = 0
341
343
  generated_tokens_count = 0
344
+
345
+ printer = Printer()
346
+ estimated_input_tokens = count_tokens(json.dumps(conversations, ensure_ascii=False))
347
+ printer.print_in_terminal("estimated_input_tokens_in_generate", style="yellow",
348
+ estimated_input_tokens_in_generate=estimated_input_tokens,
349
+ generate_mode="diff"
350
+ )
351
+
342
352
  if not self.args.human_as_model:
343
353
  with ThreadPoolExecutor(max_workers=len(self.llms) * self.generate_times_same_model) as executor:
344
354
  futures = []
@@ -11,6 +11,8 @@ from autocoder.utils.queue_communicate import (
11
11
  import json
12
12
  from concurrent.futures import ThreadPoolExecutor
13
13
  from autocoder.common.utils_code_auto_generate import chat_with_continue
14
+ from autocoder.common.printer import Printer
15
+ from autocoder.rag.token_counter import count_tokens
14
16
 
15
17
 
16
18
  class CodeAutoGenerateEditBlock:
@@ -421,35 +423,47 @@ class CodeAutoGenerateEditBlock:
421
423
  results = []
422
424
  input_tokens_count = 0
423
425
  generated_tokens_count = 0
426
+
427
+ printer = Printer()
428
+ estimated_input_tokens = count_tokens(
429
+ json.dumps(conversations, ensure_ascii=False))
430
+ printer.print_in_terminal("estimated_input_tokens_in_generate",
431
+ style="yellow",
432
+ estimated_input_tokens_in_generate=estimated_input_tokens,
433
+ generate_mode="editblock"
434
+ )
435
+
424
436
  if not self.args.human_as_model:
425
437
  with ThreadPoolExecutor(max_workers=len(self.llms) * self.generate_times_same_model) as executor:
426
438
  futures = []
427
439
  for llm in self.llms:
428
440
  for _ in range(self.generate_times_same_model):
429
441
  futures.append(executor.submit(
430
- chat_with_continue,llm=llm, conversations=conversations, llm_config=llm_config))
442
+ chat_with_continue, llm=llm, conversations=conversations, llm_config=llm_config))
431
443
  temp_results = [future.result() for future in futures]
432
444
  for result in temp_results:
433
445
  results.append(result.content)
434
446
  input_tokens_count += result.input_tokens_count
435
447
  generated_tokens_count += result.generated_tokens_count
436
-
448
+
437
449
  for result in results:
438
450
  conversations_list.append(
439
451
  conversations + [{"role": "assistant", "content": result}])
440
- else:
452
+ else:
441
453
  for _ in range(self.args.human_model_num):
442
- single_result = chat_with_continue(llm=self.llms[0], conversations=conversations, llm_config=llm_config)
454
+ single_result = chat_with_continue(
455
+ llm=self.llms[0], conversations=conversations, llm_config=llm_config)
443
456
  results.append(single_result.content)
444
457
  input_tokens_count += single_result.input_tokens_count
445
458
  generated_tokens_count += single_result.generated_tokens_count
446
- conversations_list.append(conversations + [{"role": "assistant", "content": single_result.content}])
447
-
459
+ conversations_list.append(
460
+ conversations + [{"role": "assistant", "content": single_result.content}])
461
+
448
462
  statistics = {
449
463
  "input_tokens_count": input_tokens_count,
450
464
  "generated_tokens_count": generated_tokens_count
451
- }
452
-
465
+ }
466
+
453
467
  if self.args.request_id and not self.args.skip_events:
454
468
  _ = queue_communicate.send_event(
455
469
  request_id=self.args.request_id,
@@ -7,6 +7,8 @@ from autocoder.common import sys_prompt
7
7
  from concurrent.futures import ThreadPoolExecutor
8
8
  import json
9
9
  from autocoder.common.utils_code_auto_generate import chat_with_continue
10
+ from autocoder.common.printer import Printer
11
+ from autocoder.rag.token_counter import count_tokens
10
12
 
11
13
  class CodeAutoGenerateStrictDiff:
12
14
  def __init__(
@@ -309,6 +311,14 @@ class CodeAutoGenerateStrictDiff:
309
311
  results = []
310
312
  input_tokens_count = 0
311
313
  generated_tokens_count = 0
314
+
315
+ printer = Printer()
316
+ estimated_input_tokens = count_tokens(json.dumps(conversations, ensure_ascii=False))
317
+ printer.print_in_terminal("estimated_input_tokens_in_generate", style="yellow",
318
+ estimated_input_tokens_in_generate=estimated_input_tokens,
319
+ generate_mode="strict_diff"
320
+ )
321
+
312
322
  if not self.args.human_as_model:
313
323
  with ThreadPoolExecutor(max_workers=len(self.llms) * self.generate_times_same_model) as executor:
314
324
  futures = []
@@ -54,9 +54,9 @@ def generate_shell_script(user_input: str, llm: byzerllm.ByzerLLM) -> str:
54
54
  result, _ = stream_out(
55
55
  llm.stream_chat_oai(conversations=conversations, delta_mode=True),
56
56
  model_name=llm.default_model_name,
57
- title=title
57
+ title=title
58
58
  )
59
59
 
60
60
  # 提取代码块
61
- code = code_utils.extract_code(result)[0][1]
61
+ code = code_utils.extract_code(result)[-1][1]
62
62
  return code
@@ -32,7 +32,10 @@ class Printer:
32
32
  else:
33
33
  self.console.print(format_str_jinja2(self.get_message_from_key(msg_key),**kwargs))
34
34
  except Exception as e:
35
- print(self.get_message_from_key(msg_key))
35
+ try:
36
+ print(self.get_message_from_key(msg_key))
37
+ except Exception as e:
38
+ print(f"text key: {msg_key} not found")
36
39
 
37
40
 
38
41
  def print_str_in_terminal(self, content: str, style: str = None):
@@ -84,7 +84,8 @@ class QuickFilter():
84
84
  full_response, _ = stream_out(
85
85
  stream_generator,
86
86
  model_name=model_name,
87
- title=self.printer.get_message_from_key_with_format("quick_filter_title", model_name=model_name)
87
+ title=self.printer.get_message_from_key_with_format("quick_filter_title", model_name=model_name),
88
+ args=self.args
88
89
  )
89
90
  file_number_list = to_model(full_response, FileNumberList)
90
91
  else:
@@ -197,7 +198,8 @@ class QuickFilter():
197
198
  full_response, last_meta = stream_out(
198
199
  stream_generator,
199
200
  model_name=model_name,
200
- title=self.printer.get_message_from_key_with_format("quick_filter_title", model_name=model_name)
201
+ title=self.printer.get_message_from_key_with_format("quick_filter_title", model_name=model_name),
202
+ args=self.args
201
203
  )
202
204
  # 解析结果
203
205
  file_number_list = to_model(full_response, FileNumberList)
autocoder/index/index.py CHANGED
@@ -341,7 +341,11 @@ class IndexManager:
341
341
  module_name = result["module_name"]
342
342
  index_data[module_name] = result
343
343
  updated_sources.append(module_name)
344
-
344
+ if len(updated_sources) > 5:
345
+ with open(self.index_file, "w") as file:
346
+ json.dump(index_data, file, ensure_ascii=False, indent=2)
347
+ updated_sources = []
348
+
345
349
  # 如果 updated_sources 或 keys_to_remove 有值,则保存索引文件
346
350
  if updated_sources or keys_to_remove:
347
351
  with open(self.index_file, "w") as file:
@@ -10,6 +10,7 @@ from autocoder.utils.request_queue import RequestValue, RequestOption, StreamVal
10
10
  from autocoder.utils.request_queue import request_queue
11
11
  import time
12
12
  from byzerllm.utils.types import SingleOutputMeta
13
+ from autocoder.common import AutoCoderArgs
13
14
 
14
15
  MAX_HISTORY_LINES = 40 # 最大保留历史行数
15
16
 
@@ -144,7 +145,8 @@ def stream_out(
144
145
  request_id: Optional[str] = None,
145
146
  console: Optional[Console] = None,
146
147
  model_name: Optional[str] = None,
147
- title: Optional[str] = None
148
+ title: Optional[str] = None,
149
+ args: Optional[AutoCoderArgs] = None
148
150
  ) -> Tuple[str, Optional[SingleOutputMeta]]:
149
151
  """
150
152
  处理流式输出事件并在终端中展示
@@ -155,17 +157,22 @@ def stream_out(
155
157
  console: Rich Console对象
156
158
  model_name: 模型名称
157
159
  title: 面板标题,如果没有提供则使用默认值
160
+ args: AutoCoderArgs对象
158
161
  Returns:
159
- Tuple[str, Dict[str, Any]]: 返回完整的响应内容和最后的元数据
162
+ Tuple[str, Dict[SingleOutputMeta]]: 返回完整的响应内容和最后的元数据
160
163
  """
161
164
  if console is None:
162
165
  console = Console(force_terminal=True, color_system="auto", height=None)
163
-
166
+
167
+ keep_reasoning_content = True
168
+ if args:
169
+ keep_reasoning_content = args.keep_reasoning_content
170
+
164
171
  lines_buffer = [] # 存储历史行
165
172
  current_line = "" # 当前行
166
173
  assistant_response = ""
167
174
  last_meta = None
168
- panel_title = title if title is not None else f"Response[ {model_name} ]"
175
+ panel_title = title if title is not None else f"Response[ {model_name} ]"
169
176
  try:
170
177
  with Live(
171
178
  Panel("", title=panel_title, border_style="green"),
@@ -179,8 +186,22 @@ def stream_out(
179
186
 
180
187
  if reasoning_content == "" and content == "":
181
188
  continue
182
-
183
- assistant_response += content
189
+
190
+ if keep_reasoning_content:
191
+ # 处理思考内容
192
+ if reasoning_content:
193
+ if assistant_response == "": # 首次遇到思考内容时添加开标签
194
+ assistant_response = "<thinking>"
195
+ assistant_response += reasoning_content
196
+
197
+ # 处理正式内容
198
+ if content:
199
+ # 如果之前有思考内容,需要先关闭thinking标签
200
+ if "</thinking>" not in assistant_response and "<thinking>" in assistant_response:
201
+ assistant_response += "</thinking>"
202
+ assistant_response += content
203
+ else:
204
+ assistant_response += content
184
205
 
185
206
  display_delta = reasoning_content if reasoning_content else content
186
207
 
@@ -230,7 +251,7 @@ def stream_out(
230
251
  title=f"Final {panel_title}",
231
252
  border_style="blue"
232
253
  )
233
- )
254
+ )
234
255
 
235
256
  except Exception as e:
236
257
  console.print(Panel(
autocoder/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.1.249"
1
+ __version__ = "0.1.251"