aient 1.2.26__tar.gz → 1.2.27__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.
- {aient-1.2.26 → aient-1.2.27}/PKG-INFO +1 -1
- {aient-1.2.26 → aient-1.2.27}/aient/architext/architext/core.py +9 -0
- {aient-1.2.26 → aient-1.2.27}/aient/architext/test/test.py +20 -0
- {aient-1.2.26 → aient-1.2.27}/aient.egg-info/PKG-INFO +1 -1
- {aient-1.2.26 → aient-1.2.27}/pyproject.toml +1 -1
- {aient-1.2.26 → aient-1.2.27}/LICENSE +0 -0
- {aient-1.2.26 → aient-1.2.27}/README.md +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/__init__.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/architext/architext/__init__.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/architext/test/openai_client.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/architext/test/test_save_load.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/core/__init__.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/core/log_config.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/core/models.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/core/request.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/core/response.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/core/test/test_base_api.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/core/test/test_geminimask.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/core/test/test_image.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/core/test/test_payload.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/core/utils.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/models/__init__.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/models/audio.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/models/base.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/models/chatgpt.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/plugins/__init__.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/plugins/arXiv.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/plugins/config.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/plugins/excute_command.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/plugins/get_time.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/plugins/image.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/plugins/list_directory.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/plugins/read_file.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/plugins/read_image.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/plugins/readonly.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/plugins/registry.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/plugins/run_python.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/plugins/websearch.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/plugins/write_file.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/utils/__init__.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/utils/prompt.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient/utils/scripts.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient.egg-info/SOURCES.txt +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient.egg-info/dependency_links.txt +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient.egg-info/requires.txt +0 -0
- {aient-1.2.26 → aient-1.2.27}/aient.egg-info/top_level.txt +0 -0
- {aient-1.2.26 → aient-1.2.27}/setup.cfg +0 -0
- {aient-1.2.26 → aient-1.2.27}/test/test_Web_crawler.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/test/test_ddg_search.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/test/test_google_search.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/test/test_ollama.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/test/test_plugin.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/test/test_search.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/test/test_url.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/test/test_whisper.py +0 -0
- {aient-1.2.26 → aient-1.2.27}/test/test_yjh.py +0 -0
@@ -315,6 +315,8 @@ class Message(ABC):
|
|
315
315
|
self.role = role
|
316
316
|
processed_items = []
|
317
317
|
for item in initial_items:
|
318
|
+
if item is None:
|
319
|
+
continue
|
318
320
|
if isinstance(item, str):
|
319
321
|
# Check if the string contains placeholders from f-string rendering
|
320
322
|
import re
|
@@ -471,6 +473,13 @@ class Message(ABC):
|
|
471
473
|
def get(self, key: str, default: Any = None) -> Any:
|
472
474
|
"""提供类似字典的 .get() 方法来访问属性。"""
|
473
475
|
return getattr(self, key, default)
|
476
|
+
|
477
|
+
async def render_latest(self) -> Optional[Dict[str, Any]]:
|
478
|
+
"""Refreshes all providers in the message and returns the rendered dictionary."""
|
479
|
+
tasks = [provider.refresh() for provider in self._items]
|
480
|
+
await asyncio.gather(*tasks)
|
481
|
+
return self.to_dict()
|
482
|
+
|
474
483
|
def to_dict(self) -> Optional[Dict[str, Any]]:
|
475
484
|
is_multimodal = any(isinstance(p, Images) for p in self._items)
|
476
485
|
|
@@ -1434,6 +1434,26 @@ Files: {Files(visible=True, name="files")}
|
|
1434
1434
|
self.assertTrue(message in messages_collection)
|
1435
1435
|
self.assertFalse(UserMessage("not in collection") in messages_collection)
|
1436
1436
|
|
1437
|
+
async def test_zz_none_input_ignored(self):
|
1438
|
+
"""测试在Message初始化时,None值是否被自动忽略"""
|
1439
|
+
# 1. 在初始化列表中包含 None
|
1440
|
+
message = UserMessage("Hello", None, "World")
|
1441
|
+
self.assertEqual(len(message.provider()), 2)
|
1442
|
+
self.assertIsInstance(message.provider()[0], Texts)
|
1443
|
+
self.assertIsInstance(message.provider()[1], Texts)
|
1444
|
+
rendered = await message.render_latest()
|
1445
|
+
self.assertEqual(rendered['content'], "HelloWorld")
|
1446
|
+
|
1447
|
+
# 2. 测试只有 None
|
1448
|
+
message_none = SystemMessage(None)
|
1449
|
+
self.assertEqual(len(message_none.provider()), 0)
|
1450
|
+
self.assertFalse(message_none)
|
1451
|
+
|
1452
|
+
# 3. 测试混合 provider 和 None
|
1453
|
+
message_mixed = SystemMessage(Texts("hi"), None)
|
1454
|
+
self.assertEqual(len(message_mixed.provider()), 1)
|
1455
|
+
self.assertIsInstance(message_mixed.provider()[0], Texts)
|
1456
|
+
|
1437
1457
|
|
1438
1458
|
# ==============================================================================
|
1439
1459
|
# 6. 演示
|
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
|