aient 1.2.7__py3-none-any.whl → 1.2.8__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.
@@ -636,5 +636,31 @@ class Messages:
636
636
  if isinstance(index, slice):
637
637
  return Messages(*self._messages[index])
638
638
  return self._messages[index]
639
+
640
+ def __setitem__(self, index: slice, value: 'Messages'):
641
+ if not isinstance(index, slice) or not isinstance(value, Messages):
642
+ raise TypeError("Unsupported operand type(s) for slice assignment")
643
+
644
+ # Basic slice assignment logic.
645
+ # A more robust implementation would handle step and negative indices.
646
+ start, stop, step = index.indices(len(self._messages))
647
+
648
+ if step != 1:
649
+ raise ValueError("Slice assignment with step is not supported.")
650
+
651
+ # Remove old providers from the index
652
+ for i in range(start, stop):
653
+ for provider in self._messages[i].provider():
654
+ self._notify_provider_removed(provider)
655
+
656
+ # Replace the slice in the list
657
+ self._messages[start:stop] = value._messages
658
+
659
+ # Add new providers to the index and set parent
660
+ for msg in value:
661
+ msg._parent_messages = self
662
+ for provider in msg.provider():
663
+ self._notify_provider_added(provider, msg)
664
+
639
665
  def __len__(self) -> int: return len(self._messages)
640
666
  def __iter__(self): return iter(self._messages)
@@ -1217,6 +1217,48 @@ Current time: {Texts(lambda: datetime.now().strftime("%Y-%m-%d %H:%M:%S"))}
1217
1217
  self.assertEqual(len(sliced_single), 1)
1218
1218
  self.assertIs(sliced_single[0], m3)
1219
1219
 
1220
+ async def test_zd_slice_assignment(self):
1221
+ """测试 Messages 对象的切片赋值功能"""
1222
+ # 1. Setup initial Messages objects
1223
+ m1 = SystemMessage("1")
1224
+ m2 = UserMessage("2")
1225
+ m3 = AssistantMessage("3")
1226
+ m4 = UserMessage("4")
1227
+ messages1 = Messages(m1, m2, m3, m4)
1228
+
1229
+ m5 = SystemMessage("5")
1230
+ m6 = UserMessage("6")
1231
+ messages2 = Messages(m5, m6)
1232
+
1233
+ # 2. Perform slice assignment
1234
+ # This should replace elements from index 1 onwards in messages1
1235
+ # with all elements from messages2
1236
+ messages1[1:] = messages2
1237
+
1238
+ # 3. Verify the result
1239
+ self.assertEqual(len(messages1), 3) # Should be m1, m5, m6
1240
+ self.assertIs(messages1[0], m1)
1241
+ self.assertIs(messages1[1], m5)
1242
+ self.assertIs(messages1[2], m6)
1243
+
1244
+ # 4. Test assigning from a slice, with different roles to prevent merging
1245
+ messages3 = Messages(UserMessage("A"), AssistantMessage("B"), UserMessage("C"))
1246
+ messages4 = Messages(SystemMessage("X"), AssistantMessage("Y"))
1247
+
1248
+ self.assertEqual(len(messages3), 3) # Verify length before assignment
1249
+
1250
+ messages3[1:2] = messages4[1:] # Replace AssistantMessage("B") with AssistantMessage("Y")
1251
+
1252
+ # We need to refresh to access .content property correctly
1253
+ await messages3.refresh()
1254
+
1255
+ self.assertEqual(len(messages3), 3)
1256
+ self.assertEqual(messages3[0].content, "A")
1257
+ self.assertEqual(messages3[1].content, "Y")
1258
+ self.assertEqual(messages3[2].content, "C")
1259
+ self.assertIsInstance(messages3[1], AssistantMessage)
1260
+
1261
+
1220
1262
  # ==============================================================================
1221
1263
  # 6. 演示
1222
1264
  # ==============================================================================
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aient
3
- Version: 1.2.7
3
+ Version: 1.2.8
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=xYGi5UXUuuHL3DVkvSWNo9g8OZ6gR3yuc_6uBquxRT8,26145
3
+ aient/architext/architext/core.py,sha256=83eouPWfZt9G6TGCQguoOxOZM_-HRfXIUwjGzbxPoxw,27164
4
4
  aient/architext/test/openai_client.py,sha256=Dqtbmubv6vwF8uBqcayG0kbsiO65of7sgU2-DRBi-UM,4590
5
- aient/architext/test/test.py,sha256=ny94SceUuYU7CguxSMdO1i8L9zrV07tCoPFlPwZ105k,57772
5
+ aient/architext/test/test.py,sha256=26cQXXwCcCAVruM-ouM7ng8BQcE-glgmfkGa_EhPDU4,59388
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
@@ -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.7.dist-info/licenses/LICENSE,sha256=XNdbcWldt0yaNXXWB_Bakoqnxb3OVhUft4MgMA_71ds,1051
39
- aient-1.2.7.dist-info/METADATA,sha256=OJpx3PePcfKrK0SCPxE7BKMYnGtbs6yvllAKWEuZwzI,4841
40
- aient-1.2.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
41
- aient-1.2.7.dist-info/top_level.txt,sha256=3oXzrP5sAVvyyqabpeq8A2_vfMtY554r4bVE-OHBrZk,6
42
- aient-1.2.7.dist-info/RECORD,,
38
+ aient-1.2.8.dist-info/licenses/LICENSE,sha256=XNdbcWldt0yaNXXWB_Bakoqnxb3OVhUft4MgMA_71ds,1051
39
+ aient-1.2.8.dist-info/METADATA,sha256=d-gqNwZ00IPMuuqj3sKECwiC1BS1H-M9hUaKi6I74aA,4841
40
+ aient-1.2.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
41
+ aient-1.2.8.dist-info/top_level.txt,sha256=3oXzrP5sAVvyyqabpeq8A2_vfMtY554r4bVE-OHBrZk,6
42
+ aient-1.2.8.dist-info/RECORD,,
File without changes