aient 1.2.25__py3-none-any.whl → 1.2.27__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.
@@ -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. 演示
aient/models/chatgpt.py CHANGED
@@ -6,6 +6,7 @@ import httpx
6
6
  import asyncio
7
7
  import logging
8
8
  import inspect
9
+ from collections import defaultdict
9
10
  from typing import Union, Optional, Callable
10
11
 
11
12
  from .base import BaseLLM
@@ -97,9 +98,7 @@ class chatgpt(BaseLLM):
97
98
  Initialize Chatbot with API key (from https://platform.openai.com/account/api-keys)
98
99
  """
99
100
  super().__init__(api_key, engine, api_url, system_prompt, proxy, timeout, max_tokens, temperature, top_p, presence_penalty, frequency_penalty, reply_count, truncate_limit, use_plugins=use_plugins, print_log=print_log)
100
- self.conversation: dict[str, Messages] = {
101
- "default": Messages(SystemMessage(self.system_prompt)),
102
- }
101
+ self.conversation: dict[str, Messages] = defaultdict(lambda: Messages(SystemMessage(self.system_prompt)))
103
102
  if cache_messages:
104
103
  self.conversation["default"] = cache_messages
105
104
  self.function_calls_counter = {}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aient
3
- Version: 1.2.25
3
+ Version: 1.2.27
4
4
  Summary: Aient: The Awakening of Agent.
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -1,8 +1,8 @@
1
1
  aient/__init__.py,sha256=SRfF7oDVlOOAi6nGKiJIUK6B_arqYLO9iSMp-2IZZps,21
2
2
  aient/architext/architext/__init__.py,sha256=79Ih1151rfcqZdr7F8HSZSTs_iT2SKd1xCkehMsXeXs,19
3
- aient/architext/architext/core.py,sha256=_o5gI5XF6e4kQo4L4x8Q1Tb7C1U0GANm24gJmvAgoXE,30546
3
+ aient/architext/architext/core.py,sha256=tfaAwdVN0Q1LK9Dz91Yyc83UJeVba-9LYgQ8cyp6xHQ,30887
4
4
  aient/architext/test/openai_client.py,sha256=Dqtbmubv6vwF8uBqcayG0kbsiO65of7sgU2-DRBi-UM,4590
5
- aient/architext/test/test.py,sha256=G64knZR1rSo0hr8lZPaWWJizEq1A8RGCzcN0e9uhZEM,66729
5
+ aient/architext/test/test.py,sha256=uo1hSFnzV-8DeuPE0K3R0-K-cotitLEMidFj7SQn3UQ,67633
6
6
  aient/architext/test/test_save_load.py,sha256=o8DqH6gDYZkFkQy-a7blqLtJTRj5e4a-Lil48pJ0V3g,3260
7
7
  aient/core/__init__.py,sha256=NxjebTlku35S4Dzr16rdSqSTWUvvwEeACe8KvHJnjPg,34
8
8
  aient/core/log_config.py,sha256=kz2_yJv1p-o3lUQOwA3qh-LSc3wMHv13iCQclw44W9c,274
@@ -17,7 +17,7 @@ aient/core/test/test_payload.py,sha256=8jBiJY1uidm1jzL-EiK0s6UGmW9XkdsuuKFGrwFhF
17
17
  aient/models/__init__.py,sha256=ZTiZgbfBPTjIPSKURE7t6hlFBVLRS9lluGbmqc1WjxQ,43
18
18
  aient/models/audio.py,sha256=kRd-8-WXzv4vwvsTGwnstK-WR8--vr9CdfCZzu8y9LA,1934
19
19
  aient/models/base.py,sha256=-nnihYnx-vHZMqeVO9ljjt3k4FcD3n-iMk4tT-10nRQ,7232
20
- aient/models/chatgpt.py,sha256=TWU-uPGL2WfGP7CdT2IkfNh3JYYJhV00fhr2mplISp4,42899
20
+ aient/models/chatgpt.py,sha256=oIFhSTqmFNG4KYJd1xdEui6l5EbHSaxOne0sSwNP4aM,42920
21
21
  aient/plugins/__init__.py,sha256=p3KO6Aa3Lupos4i2SjzLQw1hzQTigOAfEHngsldrsyk,986
22
22
  aient/plugins/arXiv.py,sha256=yHjb6PS3GUWazpOYRMKMzghKJlxnZ5TX8z9F6UtUVow,1461
23
23
  aient/plugins/config.py,sha256=TGgZ5SnNKZ8MmdznrZ-TEq7s2ulhAAwTSKH89bci3dA,7079
@@ -35,8 +35,8 @@ aient/plugins/write_file.py,sha256=Jt8fOEwqhYiSWpCbwfAr1xoi_BmFnx3076GMhuL06uI,3
35
35
  aient/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  aient/utils/prompt.py,sha256=UcSzKkFE4-h_1b6NofI6xgk3GoleqALRKY8VBaXLjmI,11311
37
37
  aient/utils/scripts.py,sha256=VqtK4RFEx7KxkmcqG3lFDS1DxoNlFFGErEjopVcc8IE,40974
38
- aient-1.2.25.dist-info/licenses/LICENSE,sha256=XNdbcWldt0yaNXXWB_Bakoqnxb3OVhUft4MgMA_71ds,1051
39
- aient-1.2.25.dist-info/METADATA,sha256=hEeMcMnWHTNcdHHwTU4QFfkzSWfOZL_vu59xEMuXp4M,4842
40
- aient-1.2.25.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
41
- aient-1.2.25.dist-info/top_level.txt,sha256=3oXzrP5sAVvyyqabpeq8A2_vfMtY554r4bVE-OHBrZk,6
42
- aient-1.2.25.dist-info/RECORD,,
38
+ aient-1.2.27.dist-info/licenses/LICENSE,sha256=XNdbcWldt0yaNXXWB_Bakoqnxb3OVhUft4MgMA_71ds,1051
39
+ aient-1.2.27.dist-info/METADATA,sha256=DpjEPqdiZ_lYC_V0v5Z8tJGjOYKbL1onqcfBVG4Gedc,4842
40
+ aient-1.2.27.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
41
+ aient-1.2.27.dist-info/top_level.txt,sha256=3oXzrP5sAVvyyqabpeq8A2_vfMtY554r4bVE-OHBrZk,6
42
+ aient-1.2.27.dist-info/RECORD,,
File without changes