aient 1.2.7__py3-none-any.whl → 1.2.9__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.
- aient/architext/architext/core.py +32 -1
- aient/architext/test/test.py +42 -0
- {aient-1.2.7.dist-info → aient-1.2.9.dist-info}/METADATA +1 -1
- {aient-1.2.7.dist-info → aient-1.2.9.dist-info}/RECORD +7 -7
- {aient-1.2.7.dist-info → aient-1.2.9.dist-info}/WHEEL +0 -0
- {aient-1.2.7.dist-info → aient-1.2.9.dist-info}/licenses/LICENSE +0 -0
- {aient-1.2.7.dist-info → aient-1.2.9.dist-info}/top_level.txt +0 -0
@@ -101,7 +101,12 @@ class Texts(ContextProvider):
|
|
101
101
|
if text is None and name is None:
|
102
102
|
raise ValueError("Either 'text' or 'name' must be provided.")
|
103
103
|
|
104
|
-
|
104
|
+
# Ensure that non-callable inputs are treated as strings
|
105
|
+
if not callable(text):
|
106
|
+
self._text = str(text) if text is not None else None
|
107
|
+
else:
|
108
|
+
self._text = text
|
109
|
+
|
105
110
|
self._is_dynamic = callable(self._text)
|
106
111
|
|
107
112
|
if name is None:
|
@@ -636,5 +641,31 @@ class Messages:
|
|
636
641
|
if isinstance(index, slice):
|
637
642
|
return Messages(*self._messages[index])
|
638
643
|
return self._messages[index]
|
644
|
+
|
645
|
+
def __setitem__(self, index: slice, value: 'Messages'):
|
646
|
+
if not isinstance(index, slice) or not isinstance(value, Messages):
|
647
|
+
raise TypeError("Unsupported operand type(s) for slice assignment")
|
648
|
+
|
649
|
+
# Basic slice assignment logic.
|
650
|
+
# A more robust implementation would handle step and negative indices.
|
651
|
+
start, stop, step = index.indices(len(self._messages))
|
652
|
+
|
653
|
+
if step != 1:
|
654
|
+
raise ValueError("Slice assignment with step is not supported.")
|
655
|
+
|
656
|
+
# Remove old providers from the index
|
657
|
+
for i in range(start, stop):
|
658
|
+
for provider in self._messages[i].provider():
|
659
|
+
self._notify_provider_removed(provider)
|
660
|
+
|
661
|
+
# Replace the slice in the list
|
662
|
+
self._messages[start:stop] = value._messages
|
663
|
+
|
664
|
+
# Add new providers to the index and set parent
|
665
|
+
for msg in value:
|
666
|
+
msg._parent_messages = self
|
667
|
+
for provider in msg.provider():
|
668
|
+
self._notify_provider_added(provider, msg)
|
669
|
+
|
639
670
|
def __len__(self) -> int: return len(self._messages)
|
640
671
|
def __iter__(self): return iter(self._messages)
|
aient/architext/test/test.py
CHANGED
@@ -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,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=
|
3
|
+
aient/architext/architext/core.py,sha256=fZzP8_Kk8-o5Bji8Prfh8d0SXN9eQnA24OMCAVgcXKM,27344
|
4
4
|
aient/architext/test/openai_client.py,sha256=Dqtbmubv6vwF8uBqcayG0kbsiO65of7sgU2-DRBi-UM,4590
|
5
|
-
aient/architext/test/test.py,sha256=
|
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.
|
39
|
-
aient-1.2.
|
40
|
-
aient-1.2.
|
41
|
-
aient-1.2.
|
42
|
-
aient-1.2.
|
38
|
+
aient-1.2.9.dist-info/licenses/LICENSE,sha256=XNdbcWldt0yaNXXWB_Bakoqnxb3OVhUft4MgMA_71ds,1051
|
39
|
+
aient-1.2.9.dist-info/METADATA,sha256=Ul3tz50m3BEFUQA-8q5ZT_1MeTh6ozi2rPwmlNnRUgA,4841
|
40
|
+
aient-1.2.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
41
|
+
aient-1.2.9.dist-info/top_level.txt,sha256=3oXzrP5sAVvyyqabpeq8A2_vfMtY554r4bVE-OHBrZk,6
|
42
|
+
aient-1.2.9.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|