aient 1.1.6__tar.gz → 1.1.8__tar.gz

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.
Files changed (80) hide show
  1. {aient-1.1.6/src/aient.egg-info → aient-1.1.8}/PKG-INFO +1 -1
  2. {aient-1.1.6 → aient-1.1.8}/setup.py +1 -1
  3. {aient-1.1.6 → aient-1.1.8}/src/aient/plugins/excute_command.py +35 -12
  4. aient-1.1.8/src/aient/plugins/write_file.py +91 -0
  5. {aient-1.1.6 → aient-1.1.8/src/aient.egg-info}/PKG-INFO +1 -1
  6. aient-1.1.6/src/aient/plugins/write_file.py +0 -54
  7. {aient-1.1.6 → aient-1.1.8}/LICENSE +0 -0
  8. {aient-1.1.6 → aient-1.1.8}/MANIFEST.in +0 -0
  9. {aient-1.1.6 → aient-1.1.8}/README.md +0 -0
  10. {aient-1.1.6 → aient-1.1.8}/setup.cfg +0 -0
  11. {aient-1.1.6 → aient-1.1.8}/src/aient/__init__.py +0 -0
  12. {aient-1.1.6 → aient-1.1.8}/src/aient/core/.git +0 -0
  13. {aient-1.1.6 → aient-1.1.8}/src/aient/core/.gitignore +0 -0
  14. {aient-1.1.6 → aient-1.1.8}/src/aient/core/__init__.py +0 -0
  15. {aient-1.1.6 → aient-1.1.8}/src/aient/core/log_config.py +0 -0
  16. {aient-1.1.6 → aient-1.1.8}/src/aient/core/models.py +0 -0
  17. {aient-1.1.6 → aient-1.1.8}/src/aient/core/request.py +0 -0
  18. {aient-1.1.6 → aient-1.1.8}/src/aient/core/response.py +0 -0
  19. {aient-1.1.6 → aient-1.1.8}/src/aient/core/test/test_base_api.py +0 -0
  20. {aient-1.1.6 → aient-1.1.8}/src/aient/core/test/test_geminimask.py +0 -0
  21. {aient-1.1.6 → aient-1.1.8}/src/aient/core/test/test_image.py +0 -0
  22. {aient-1.1.6 → aient-1.1.8}/src/aient/core/test/test_payload.py +0 -0
  23. {aient-1.1.6 → aient-1.1.8}/src/aient/core/utils.py +0 -0
  24. {aient-1.1.6 → aient-1.1.8}/src/aient/models/__init__.py +0 -0
  25. {aient-1.1.6 → aient-1.1.8}/src/aient/models/audio.py +0 -0
  26. {aient-1.1.6 → aient-1.1.8}/src/aient/models/base.py +0 -0
  27. {aient-1.1.6 → aient-1.1.8}/src/aient/models/chatgpt.py +0 -0
  28. {aient-1.1.6 → aient-1.1.8}/src/aient/models/claude.py +0 -0
  29. {aient-1.1.6 → aient-1.1.8}/src/aient/models/duckduckgo.py +0 -0
  30. {aient-1.1.6 → aient-1.1.8}/src/aient/models/gemini.py +0 -0
  31. {aient-1.1.6 → aient-1.1.8}/src/aient/models/groq.py +0 -0
  32. {aient-1.1.6 → aient-1.1.8}/src/aient/models/vertex.py +0 -0
  33. {aient-1.1.6 → aient-1.1.8}/src/aient/plugins/__init__.py +0 -0
  34. {aient-1.1.6 → aient-1.1.8}/src/aient/plugins/arXiv.py +0 -0
  35. {aient-1.1.6 → aient-1.1.8}/src/aient/plugins/config.py +0 -0
  36. {aient-1.1.6 → aient-1.1.8}/src/aient/plugins/get_time.py +0 -0
  37. {aient-1.1.6 → aient-1.1.8}/src/aient/plugins/image.py +0 -0
  38. {aient-1.1.6 → aient-1.1.8}/src/aient/plugins/list_directory.py +0 -0
  39. {aient-1.1.6 → aient-1.1.8}/src/aient/plugins/read_file.py +0 -0
  40. {aient-1.1.6 → aient-1.1.8}/src/aient/plugins/registry.py +0 -0
  41. {aient-1.1.6 → aient-1.1.8}/src/aient/plugins/run_python.py +0 -0
  42. {aient-1.1.6 → aient-1.1.8}/src/aient/plugins/websearch.py +0 -0
  43. {aient-1.1.6 → aient-1.1.8}/src/aient/prompt/__init__.py +0 -0
  44. {aient-1.1.6 → aient-1.1.8}/src/aient/prompt/agent.py +0 -0
  45. {aient-1.1.6 → aient-1.1.8}/src/aient/utils/__init__.py +0 -0
  46. {aient-1.1.6 → aient-1.1.8}/src/aient/utils/prompt.py +0 -0
  47. {aient-1.1.6 → aient-1.1.8}/src/aient/utils/scripts.py +0 -0
  48. {aient-1.1.6 → aient-1.1.8}/src/aient.egg-info/SOURCES.txt +0 -0
  49. {aient-1.1.6 → aient-1.1.8}/src/aient.egg-info/dependency_links.txt +0 -0
  50. {aient-1.1.6 → aient-1.1.8}/src/aient.egg-info/requires.txt +0 -0
  51. {aient-1.1.6 → aient-1.1.8}/src/aient.egg-info/top_level.txt +0 -0
  52. {aient-1.1.6 → aient-1.1.8}/test/test.py +0 -0
  53. {aient-1.1.6 → aient-1.1.8}/test/test_API.py +0 -0
  54. {aient-1.1.6 → aient-1.1.8}/test/test_Deepbricks.py +0 -0
  55. {aient-1.1.6 → aient-1.1.8}/test/test_Web_crawler.py +0 -0
  56. {aient-1.1.6 → aient-1.1.8}/test/test_aiwaves.py +0 -0
  57. {aient-1.1.6 → aient-1.1.8}/test/test_aiwaves_arxiv.py +0 -0
  58. {aient-1.1.6 → aient-1.1.8}/test/test_ask_gemini.py +0 -0
  59. {aient-1.1.6 → aient-1.1.8}/test/test_class.py +0 -0
  60. {aient-1.1.6 → aient-1.1.8}/test/test_claude.py +0 -0
  61. {aient-1.1.6 → aient-1.1.8}/test/test_claude_zh_char.py +0 -0
  62. {aient-1.1.6 → aient-1.1.8}/test/test_ddg_search.py +0 -0
  63. {aient-1.1.6 → aient-1.1.8}/test/test_download_pdf.py +0 -0
  64. {aient-1.1.6 → aient-1.1.8}/test/test_gemini.py +0 -0
  65. {aient-1.1.6 → aient-1.1.8}/test/test_get_token_dict.py +0 -0
  66. {aient-1.1.6 → aient-1.1.8}/test/test_google_search.py +0 -0
  67. {aient-1.1.6 → aient-1.1.8}/test/test_jieba.py +0 -0
  68. {aient-1.1.6 → aient-1.1.8}/test/test_json.py +0 -0
  69. {aient-1.1.6 → aient-1.1.8}/test/test_logging.py +0 -0
  70. {aient-1.1.6 → aient-1.1.8}/test/test_ollama.py +0 -0
  71. {aient-1.1.6 → aient-1.1.8}/test/test_plugin.py +0 -0
  72. {aient-1.1.6 → aient-1.1.8}/test/test_py_run.py +0 -0
  73. {aient-1.1.6 → aient-1.1.8}/test/test_requests.py +0 -0
  74. {aient-1.1.6 → aient-1.1.8}/test/test_search.py +0 -0
  75. {aient-1.1.6 → aient-1.1.8}/test/test_tikitoken.py +0 -0
  76. {aient-1.1.6 → aient-1.1.8}/test/test_token.py +0 -0
  77. {aient-1.1.6 → aient-1.1.8}/test/test_url.py +0 -0
  78. {aient-1.1.6 → aient-1.1.8}/test/test_whisper.py +0 -0
  79. {aient-1.1.6 → aient-1.1.8}/test/test_wildcard.py +0 -0
  80. {aient-1.1.6 → aient-1.1.8}/test/test_yjh.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aient
3
- Version: 1.1.6
3
+ Version: 1.1.8
4
4
  Summary: Aient: The Awakening of Agent.
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -4,7 +4,7 @@ from setuptools import setup, find_packages
4
4
 
5
5
  setup(
6
6
  name="aient",
7
- version="1.1.6",
7
+ version="1.1.8",
8
8
  description="Aient: The Awakening of Agent.",
9
9
  long_description=Path.open(Path("README.md"), encoding="utf-8").read(),
10
10
  long_description_content_type="text/markdown",
@@ -35,7 +35,8 @@ def compare_line(line: str) -> bool:
35
35
  return False
36
36
  similarity = calculate_similarity(line, last_line)
37
37
  last_line = line
38
- return similarity > 0.9
38
+ # print(f"similarity: {similarity}")
39
+ return similarity > 0.89
39
40
 
40
41
  def unescape_html(input_string: str) -> str:
41
42
  """
@@ -130,8 +131,6 @@ def excute_command(command):
130
131
  continue
131
132
  if "git clone" in command and ('Counting objects' in data_str or 'Resolving deltas' in data_str or 'Receiving objects' in data_str or 'Compressing objects' in data_str):
132
133
  continue
133
- if compare_line(data_str):
134
- continue
135
134
  output_lines.append(data_str)
136
135
  # 检查进程是否已结束,避免在进程已退出后 select 仍然阻塞
137
136
  if process.poll() is not None and not r:
@@ -160,8 +159,6 @@ def excute_command(command):
160
159
  continue
161
160
  if "git clone" in command and ('Counting objects' in line or 'Resolving deltas' in line or 'Receiving objects' in line or 'Compressing objects' in line):
162
161
  continue
163
- if compare_line(line):
164
- continue
165
162
  output_lines.append(line)
166
163
  process.stdout.close()
167
164
  # print(f"\n--- 命令实时输出结束 (PIPE) ---")
@@ -174,8 +171,21 @@ def excute_command(command):
174
171
  stderr_output = process.stderr.read()
175
172
  process.stderr.close()
176
173
 
177
- output_lines.append(last_line)
178
- final_output_log = "".join(output_lines)
174
+ new_output_lines = []
175
+ output_lines = "".join(output_lines).strip().replace("\\u001b[A", "").replace("\\r", "\r").replace("\\\\", "").replace("\\n", "\n").replace("\r", "+++").replace("\n", "+++")
176
+ for line in output_lines.split("+++"):
177
+ if line.strip() == "":
178
+ continue
179
+ # aaa = last_line.strip()
180
+ is_same = compare_line(repr(line.strip()))
181
+ if not is_same:
182
+ # print(f"{repr(aaa)}", flush=True)
183
+ # print(f"{repr(line.strip())}", flush=True)
184
+ # print(f"is_same: {is_same}", flush=True)
185
+ # print(f"\n\n\n", flush=True)
186
+ new_output_lines.append(line)
187
+ final_output_log = "\n".join(new_output_lines)
188
+ # print(f"output_lines: {len(new_output_lines)}")
179
189
 
180
190
  if process.returncode == 0:
181
191
  return f"执行命令成功:\n{final_output_log}"
@@ -205,18 +215,31 @@ if __name__ == "__main__":
205
215
  # print('\\n-------TQDM 任务完成.')
206
216
  # """
207
217
 
218
+ # tqdm_script = """
219
+ # import time
220
+ # print("Hello, World!1")
221
+ # print("Hello, World!2")
222
+ # for i in range(10):
223
+ # print(f"TQDM 进度条测试: {i}")
224
+ # time.sleep(1)
225
+ # """
226
+ # processed_tqdm_script = tqdm_script.replace('"', '\\"')
227
+ # tqdm_command = f"python -c \"{processed_tqdm_script}\""
228
+ # # print(f"执行: {tqdm_command}")
229
+ # print(excute_command(tqdm_command))
230
+
208
231
  tqdm_script = """
209
232
  import time
210
- print("Hello, World!1")
211
- print("Hello, World!2")
212
- for i in range(10):
213
- print(f"TQDM 进度条测试: {i}")
214
- time.sleep(1)
233
+ with open("/Users/yanyuming/Downloads/GitHub/beswarm/1.txt", "r") as f:
234
+ content = f.read()
235
+ for i in content.split("\\n"):
236
+ print(i)
215
237
  """
216
238
  processed_tqdm_script = tqdm_script.replace('"', '\\"')
217
239
  tqdm_command = f"python -c \"{processed_tqdm_script}\""
218
240
  # print(f"执行: {tqdm_command}")
219
241
  print(excute_command(tqdm_command))
242
+
220
243
  # tqdm_script = """
221
244
  # import time
222
245
  # from tqdm import tqdm
@@ -0,0 +1,91 @@
1
+ from .registry import register_tool
2
+
3
+ import os
4
+ import html
5
+
6
+ def unescape_html(input_string: str) -> str:
7
+ """
8
+ 将字符串中的 HTML 实体(例如 &)转换回其原始字符(例如 &)。
9
+
10
+ Args:
11
+ input_string: 包含 HTML 实体的输入字符串。
12
+
13
+ Returns:
14
+ 转换后的字符串。
15
+ """
16
+ return html.unescape(input_string)
17
+
18
+ @register_tool()
19
+ def write_to_file(path, content, mode='w'):
20
+ """
21
+ ## write_to_file
22
+ Description: Request to write full content to a file at the specified path. If the file exists, it will be overwritten with the provided content. If the file doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.
23
+ Parameters:
24
+ - path: (required) The path of the file to write to (relative to the current working directory ${args.cwd})
25
+ - content: (required) The content to write to the file. ALWAYS provide the COMPLETE intended content of the file, without any truncation or omissions. You MUST include ALL parts of the file, even if they haven't been modified. Do NOT include the line numbers in the content though, just the actual content of the file.
26
+ - mode: (optional) The mode to write to the file. Default is 'w'. 'w' for write, 'a' for append.
27
+ Usage:
28
+ <write_to_file>
29
+ <path>File path here</path>
30
+ <content>
31
+ Your file content here
32
+ </content>
33
+ <mode>w</mode>
34
+ </write_to_file>
35
+
36
+ Example: Requesting to write to frontend-config.json
37
+ <write_to_file>
38
+ <path>frontend-config.json</path>
39
+ <content>
40
+ {
41
+ "apiEndpoint": "https://api.example.com",
42
+ "theme": {
43
+ "primaryColor": "#007bff",
44
+ "secondaryColor": "#6c757d",
45
+ "fontFamily": "Arial, sans-serif"
46
+ },
47
+ "features": {
48
+ "darkMode": true,
49
+ "notifications": true,
50
+ "analytics": false
51
+ },
52
+ "version": "1.0.0"
53
+ }
54
+ </content>
55
+ </write_to_file>
56
+ """
57
+ # 确保目录存在
58
+ os.makedirs(os.path.dirname(path) or '.', exist_ok=True)
59
+
60
+ if content.startswith("##") and (path.endswith(".md") or path.endswith(".txt")):
61
+ content = "\n\n" + content
62
+
63
+ # 写入文件
64
+ with open(path, mode, encoding='utf-8') as file:
65
+ file.write(unescape_html(content))
66
+
67
+ return f"已成功写入文件:{path}"
68
+
69
+
70
+ if __name__ == "__main__":
71
+ text = """
72
+ &lt;!DOCTYPE html&gt;
73
+ &lt;html lang=&quot;zh-CN&quot;&gt;
74
+ &lt;head&gt;
75
+ &lt;meta charset=&quot;UTF-8&quot;&gt;
76
+ &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
77
+ &lt;title&gt;Continuous Thought Machines (CTM) 原理解读&lt;/title&gt;
78
+ &lt;script&gt;MathJax={chtml:{fontURL:'https://cdn.jsdelivr.net/npm/mathjax@3/es5/output/chtml/fonts/woff-v2'}}&lt;/script&gt;
79
+ &lt;script src=&quot;https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js&quot; id=&quot;MathJax-script&quot; async&gt;&lt;/script&gt;
80
+ &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/viz.js/2.1.2/viz.js&quot; defer&gt;&lt;/script&gt;
81
+ &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/viz.js/2.1.2/full.render.js&quot; defer&gt;&lt;/script&gt;
82
+ &lt;script src=&quot;https://unpkg.com/@panzoom/panzoom@4.5.1/dist/panzoom.min.js&quot; defer&gt;&lt;/script&gt;
83
+ &lt;link href=&quot;https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-okaidia.min.css&quot; rel=&quot;stylesheet&quot;/&gt;
84
+ &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;family=Fira+Code:wght@400;500&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
85
+ &lt;link href=&quot;https://fonts.googleapis.com/icon?family=Material+Icons+Outlined&quot; rel=&quot;stylesheet&quot;&gt;
86
+ &lt;style&gt;
87
+ """
88
+ with open("test.txt", "r", encoding="utf-8") as file:
89
+ content = file.read()
90
+ print(write_to_file("test.txt", content))
91
+ # python -m beswarm.aient.src.aient.plugins.write_file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aient
3
- Version: 1.1.6
3
+ Version: 1.1.8
4
4
  Summary: Aient: The Awakening of Agent.
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -1,54 +0,0 @@
1
- from .registry import register_tool
2
-
3
- import os
4
-
5
- @register_tool()
6
- def write_to_file(path, content, mode='w'):
7
- """
8
- ## write_to_file
9
- Description: Request to write full content to a file at the specified path. If the file exists, it will be overwritten with the provided content. If the file doesn't exist, it will be created. This tool will automatically create any directories needed to write the file.
10
- Parameters:
11
- - path: (required) The path of the file to write to (relative to the current working directory ${args.cwd})
12
- - content: (required) The content to write to the file. ALWAYS provide the COMPLETE intended content of the file, without any truncation or omissions. You MUST include ALL parts of the file, even if they haven't been modified. Do NOT include the line numbers in the content though, just the actual content of the file.
13
- - mode: (optional) The mode to write to the file. Default is 'w'. 'w' for write, 'a' for append.
14
- Usage:
15
- <write_to_file>
16
- <path>File path here</path>
17
- <content>
18
- Your file content here
19
- </content>
20
- <mode>w</mode>
21
- </write_to_file>
22
-
23
- Example: Requesting to write to frontend-config.json
24
- <write_to_file>
25
- <path>frontend-config.json</path>
26
- <content>
27
- {
28
- "apiEndpoint": "https://api.example.com",
29
- "theme": {
30
- "primaryColor": "#007bff",
31
- "secondaryColor": "#6c757d",
32
- "fontFamily": "Arial, sans-serif"
33
- },
34
- "features": {
35
- "darkMode": true,
36
- "notifications": true,
37
- "analytics": false
38
- },
39
- "version": "1.0.0"
40
- }
41
- </content>
42
- </write_to_file>
43
- """
44
- # 确保目录存在
45
- os.makedirs(os.path.dirname(path) or '.', exist_ok=True)
46
-
47
- if content.startswith("##") and (path.endswith(".md") or path.endswith(".txt")):
48
- content = "\n\n" + content
49
-
50
- # 写入文件
51
- with open(path, mode, encoding='utf-8') as file:
52
- file.write(content)
53
-
54
- return f"已成功写入文件:{path}"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes