beswarm 0.3.2__tar.gz → 0.3.3__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 (138) hide show
  1. {beswarm-0.3.2 → beswarm-0.3.3}/PKG-INFO +1 -1
  2. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/architext/architext/core.py +12 -0
  3. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/architext/test/test.py +20 -0
  4. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/models/chatgpt.py +8 -4
  5. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm.egg-info/PKG-INFO +1 -1
  6. {beswarm-0.3.2 → beswarm-0.3.3}/pyproject.toml +1 -1
  7. {beswarm-0.3.2 → beswarm-0.3.3}/MANIFEST.in +0 -0
  8. {beswarm-0.3.2 → beswarm-0.3.3}/README.md +0 -0
  9. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/__init__.py +0 -0
  10. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/agents/chatgroup.py +0 -0
  11. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/agents/planact.py +0 -0
  12. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/__init__.py +0 -0
  13. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/architext/architext/__init__.py +0 -0
  14. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/architext/test/openai_client.py +0 -0
  15. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/architext/test/test_save_load.py +0 -0
  16. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/core/__init__.py +0 -0
  17. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/core/log_config.py +0 -0
  18. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/core/models.py +0 -0
  19. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/core/request.py +0 -0
  20. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/core/response.py +0 -0
  21. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/core/test/test_base_api.py +0 -0
  22. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/core/test/test_geminimask.py +0 -0
  23. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/core/test/test_image.py +0 -0
  24. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/core/test/test_payload.py +0 -0
  25. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/core/utils.py +0 -0
  26. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/models/__init__.py +0 -0
  27. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/models/audio.py +0 -0
  28. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/models/base.py +0 -0
  29. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/plugins/__init__.py +0 -0
  30. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/plugins/arXiv.py +0 -0
  31. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/plugins/config.py +0 -0
  32. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/plugins/excute_command.py +0 -0
  33. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/plugins/get_time.py +0 -0
  34. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/plugins/image.py +0 -0
  35. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/plugins/list_directory.py +0 -0
  36. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/plugins/read_file.py +0 -0
  37. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/plugins/read_image.py +0 -0
  38. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/plugins/readonly.py +0 -0
  39. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/plugins/registry.py +0 -0
  40. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/plugins/run_python.py +0 -0
  41. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/plugins/websearch.py +0 -0
  42. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/plugins/write_file.py +0 -0
  43. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/utils/__init__.py +0 -0
  44. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/utils/prompt.py +0 -0
  45. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/aient/utils/scripts.py +0 -0
  46. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/test/test_Web_crawler.py +0 -0
  47. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/test/test_ddg_search.py +0 -0
  48. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/test/test_google_search.py +0 -0
  49. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/test/test_ollama.py +0 -0
  50. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/test/test_plugin.py +0 -0
  51. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/test/test_url.py +0 -0
  52. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/aient/test/test_whisper.py +0 -0
  53. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/bemcp/bemcp/__init__.py +0 -0
  54. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/bemcp/bemcp/decorator.py +0 -0
  55. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/bemcp/bemcp/main.py +0 -0
  56. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/bemcp/bemcp/utils.py +0 -0
  57. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/bemcp/test/client.py +0 -0
  58. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/bemcp/test/server.py +0 -0
  59. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/broker.py +0 -0
  60. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/cli.py +0 -0
  61. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/core.py +0 -0
  62. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/knowledge_graph.py +0 -0
  63. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/prompt.py +0 -0
  64. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/README.md +0 -0
  65. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  66. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  67. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  68. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  69. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  70. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  71. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  72. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  73. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  74. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  75. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  76. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  77. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  78. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  79. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  80. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  81. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  82. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  83. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  84. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  85. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  86. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  87. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  88. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  89. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  90. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  91. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/README.md +0 -0
  92. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/c-tags.scm +0 -0
  93. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  94. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  95. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/dart-tags.scm +0 -0
  96. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  97. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  98. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/elm-tags.scm +0 -0
  99. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/go-tags.scm +0 -0
  100. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  101. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/java-tags.scm +0 -0
  102. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  103. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  104. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  105. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/php-tags.scm +0 -0
  106. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/python-tags.scm +0 -0
  107. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/ql-tags.scm +0 -0
  108. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  109. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/rust-tags.scm +0 -0
  110. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/scala-tags.scm +0 -0
  111. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  112. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/taskmanager.py +0 -0
  113. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/__init__.py +0 -0
  114. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/click.py +0 -0
  115. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/completion.py +0 -0
  116. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/deep_search.py +0 -0
  117. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/edit_file.py +0 -0
  118. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/graph.py +0 -0
  119. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/planner.py +0 -0
  120. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/repomap.py +0 -0
  121. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/request_input.py +0 -0
  122. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/screenshot.py +0 -0
  123. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/search_arxiv.py +0 -0
  124. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/search_web.py +0 -0
  125. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/subtasks.py +0 -0
  126. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/worker.py +0 -0
  127. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/tools/write_csv.py +0 -0
  128. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm/utils.py +0 -0
  129. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm.egg-info/SOURCES.txt +0 -0
  130. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm.egg-info/dependency_links.txt +0 -0
  131. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm.egg-info/entry_points.txt +0 -0
  132. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm.egg-info/requires.txt +0 -0
  133. {beswarm-0.3.2 → beswarm-0.3.3}/beswarm.egg-info/top_level.txt +0 -0
  134. {beswarm-0.3.2 → beswarm-0.3.3}/setup.cfg +0 -0
  135. {beswarm-0.3.2 → beswarm-0.3.3}/test/test_TaskManager.py +0 -0
  136. {beswarm-0.3.2 → beswarm-0.3.3}/test/test_broker.py +0 -0
  137. {beswarm-0.3.2 → beswarm-0.3.3}/test/test_graph.py +0 -0
  138. {beswarm-0.3.2 → beswarm-0.3.3}/test/test_new_TaskManager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: beswarm
3
- Version: 0.3.2
3
+ Version: 0.3.3
4
4
  Summary: MAS
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -128,6 +128,11 @@ class Texts(ContextProvider):
128
128
  else:
129
129
  _name = name
130
130
  super().__init__(_name, visible=visible)
131
+ if not self._is_dynamic:
132
+ self._cached_content = self.content
133
+ # The content is cached, but it's still "stale" from the perspective
134
+ # of the async refresh cycle. Let the first refresh formalize it.
135
+ self._is_stale = True
131
136
 
132
137
  async def refresh(self):
133
138
  if self._is_dynamic:
@@ -191,6 +196,10 @@ class Tools(ContextProvider):
191
196
  def __init__(self, tools_json: Optional[List[Dict]] = None, name: str = "tools", visible: bool = True):
192
197
  super().__init__(name, visible=visible)
193
198
  self._tools_json = tools_json or []
199
+ # Pre-render and cache the content, but leave it stale for the first refresh
200
+ if self._tools_json:
201
+ self._cached_content = f"<tools>{str(self._tools_json)}</tools>"
202
+ self._is_stale = True
194
203
  def update(self, tools_json: List[Dict]):
195
204
  self._tools_json = tools_json
196
205
  self.mark_stale()
@@ -289,6 +298,9 @@ class Images(ContextProvider):
289
298
  def __init__(self, url: str, name: Optional[str] = None, visible: bool = True):
290
299
  super().__init__(name or url, visible=visible)
291
300
  self.url = url
301
+ if self.url.startswith("data:"):
302
+ self._cached_content = self.url
303
+ self._is_stale = True
292
304
  def update(self, url: str):
293
305
  self.url = url
294
306
  self.mark_stale()
@@ -1578,6 +1578,26 @@ Files: {Files(visible=True, name="files")}
1578
1578
  rendered_single = await message_single.render_latest()
1579
1579
  self.assertEqual(rendered_single['content'], "Only one.")
1580
1580
 
1581
+ async def test_zad_simple_render_without_refresh(self):
1582
+ """测试 Messages(UserMessage('hi')).render() 是否能直接同步渲染"""
1583
+ # This test checks if a simple message can be rendered synchronously
1584
+ # without an explicit `await refresh()` or `await render_latest()`.
1585
+ # Calling the synchronous render method directly on a new instance
1586
+ rendered = Messages(UserMessage("hi", Images(url="data:image/png;base64,FAKE"))).render()
1587
+
1588
+ # The current implementation will likely fail here, returning []
1589
+ self.assertEqual(len(rendered), 1)
1590
+ self.assertEqual(rendered[0]['role'], 'user')
1591
+
1592
+ # Now we expect a list for multimodal content
1593
+ content = rendered[0]['content']
1594
+ self.assertIsInstance(content, list)
1595
+ self.assertEqual(len(content), 2)
1596
+ self.assertEqual(content[0]['type'], 'text')
1597
+ self.assertEqual(content[0]['text'], 'hi')
1598
+ self.assertEqual(content[1]['type'], 'image_url')
1599
+ self.assertEqual(content[1]['image_url']['url'], "data:image/png;base64,FAKE")
1600
+
1581
1601
 
1582
1602
  # ==============================================================================
1583
1603
  # 6. 演示
@@ -125,8 +125,12 @@ class chatgpt(BaseLLM):
125
125
  else:
126
126
  # 如果没有提供 logger,创建一个默认的,它只会打印到控制台
127
127
  self.logger = logging.getLogger("chatgpt_default")
128
+ self.logger.propagate = False
128
129
  if not self.logger.handlers: # 防止重复添加 handler
129
- self.logger.addHandler(logging.StreamHandler())
130
+ handler = logging.StreamHandler()
131
+ formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
132
+ handler.setFormatter(formatter)
133
+ self.logger.addHandler(handler)
130
134
  self.logger.setLevel(logging.INFO if print_log else logging.WARNING)
131
135
 
132
136
  # 注册和处理传入的工具
@@ -282,7 +286,7 @@ class chatgpt(BaseLLM):
282
286
  "messages": await self.conversation[convo_id].render_latest() if pass_history else Messages(
283
287
  SystemMessage(self.system_prompt, self.conversation[convo_id].provider("files")),
284
288
  UserMessage(prompt)
285
- ),
289
+ ).render(),
286
290
  "stream": stream,
287
291
  "temperature": kwargs.get("temperature", self.temperature)
288
292
  }
@@ -688,7 +692,7 @@ class chatgpt(BaseLLM):
688
692
  # 准备会话
689
693
  self.system_prompt = system_prompt or self.system_prompt
690
694
  if convo_id not in self.conversation or pass_history <= 2:
691
- self.reset(convo_id=convo_id, system_prompt=system_prompt)
695
+ self.reset(convo_id=convo_id, system_prompt=self.system_prompt)
692
696
  self.add_to_conversation(prompt, role, convo_id=convo_id, function_name=function_name, total_tokens=total_tokens, function_arguments=function_arguments, pass_history=pass_history, function_call_id=function_call_id)
693
697
 
694
698
  # 获取请求体
@@ -945,7 +949,7 @@ class chatgpt(BaseLLM):
945
949
  """
946
950
  self.system_prompt = system_prompt or self.system_prompt
947
951
  self.conversation[convo_id] = Messages(
948
- SystemMessage(Texts("system_prompt", self.system_prompt), self.conversation[convo_id].provider("files")),
952
+ SystemMessage(self.system_prompt, self.conversation[convo_id].provider("files")),
949
953
  )
950
954
  self.tokens_usage[convo_id] = 0
951
955
  self.current_tokens[convo_id] = 0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: beswarm
3
- Version: 0.3.2
3
+ Version: 0.3.3
4
4
  Summary: MAS
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "beswarm"
3
- version = "0.3.2"
3
+ version = "0.3.3"
4
4
  description = "MAS"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
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