aient 1.2.5__tar.gz → 1.2.7__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.5 → aient-1.2.7}/PKG-INFO +1 -1
- {aient-1.2.5 → aient-1.2.7}/aient/architext/architext/core.py +15 -2
- {aient-1.2.5 → aient-1.2.7}/aient/architext/test/test.py +59 -0
- {aient-1.2.5 → aient-1.2.7}/aient.egg-info/PKG-INFO +1 -1
- {aient-1.2.5 → aient-1.2.7}/pyproject.toml +1 -1
- {aient-1.2.5 → aient-1.2.7}/LICENSE +0 -0
- {aient-1.2.5 → aient-1.2.7}/README.md +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/__init__.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/architext/architext/__init__.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/architext/test/openai_client.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/architext/test/test_save_load.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/core/__init__.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/core/log_config.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/core/models.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/core/request.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/core/response.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/core/test/test_base_api.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/core/test/test_geminimask.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/core/test/test_image.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/core/test/test_payload.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/core/utils.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/models/__init__.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/models/audio.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/models/base.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/models/chatgpt.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/plugins/__init__.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/plugins/arXiv.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/plugins/config.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/plugins/excute_command.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/plugins/get_time.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/plugins/image.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/plugins/list_directory.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/plugins/read_file.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/plugins/read_image.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/plugins/readonly.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/plugins/registry.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/plugins/run_python.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/plugins/websearch.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/plugins/write_file.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/utils/__init__.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/utils/prompt.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient/utils/scripts.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient.egg-info/SOURCES.txt +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient.egg-info/dependency_links.txt +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient.egg-info/requires.txt +0 -0
- {aient-1.2.5 → aient-1.2.7}/aient.egg-info/top_level.txt +0 -0
- {aient-1.2.5 → aient-1.2.7}/setup.cfg +0 -0
- {aient-1.2.5 → aient-1.2.7}/test/test_Web_crawler.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/test/test_ddg_search.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/test/test_google_search.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/test/test_ollama.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/test/test_plugin.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/test/test_search.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/test/test_url.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/test/test_whisper.py +0 -0
- {aient-1.2.5 → aient-1.2.7}/test/test_yjh.py +0 -0
@@ -360,7 +360,17 @@ class Message(ABC):
|
|
360
360
|
if self._parent_messages:
|
361
361
|
self._parent_messages._notify_provider_added(item, self)
|
362
362
|
|
363
|
-
def provider(self) -> List[ContextProvider]:
|
363
|
+
def provider(self, name: Optional[str] = None) -> Optional[Union[ContextProvider, ProviderGroup, List[ContextProvider]]]:
|
364
|
+
if name is None:
|
365
|
+
return self._items
|
366
|
+
|
367
|
+
named_providers = [p for p in self._items if hasattr(p, 'name') and p.name == name]
|
368
|
+
|
369
|
+
if not named_providers:
|
370
|
+
return None
|
371
|
+
if len(named_providers) == 1:
|
372
|
+
return named_providers[0]
|
373
|
+
return ProviderGroup(named_providers)
|
364
374
|
|
365
375
|
def __add__(self, other):
|
366
376
|
if isinstance(other, str):
|
@@ -622,6 +632,9 @@ class Messages:
|
|
622
632
|
logging.error(f"Could not deserialize file {file_path}: {e}")
|
623
633
|
return cls()
|
624
634
|
|
625
|
-
def __getitem__(self, index: int) -> Message
|
635
|
+
def __getitem__(self, index: Union[int, slice]) -> Union[Message, 'Messages']:
|
636
|
+
if isinstance(index, slice):
|
637
|
+
return Messages(*self._messages[index])
|
638
|
+
return self._messages[index]
|
626
639
|
def __len__(self) -> int: return len(self._messages)
|
627
640
|
def __iter__(self): return iter(self._messages)
|
@@ -1158,6 +1158,65 @@ Current time: {Texts(lambda: datetime.now().strftime("%Y-%m-%d %H:%M:%S"))}
|
|
1158
1158
|
with self.assertRaises(IndexError):
|
1159
1159
|
_ = mess[2]
|
1160
1160
|
|
1161
|
+
async def test_zb_message_provider_by_name(self):
|
1162
|
+
"""测试是否可以通过名称从 Message 对象中获取 provider"""
|
1163
|
+
# 1. 创建一个包含命名 provider 的 Message
|
1164
|
+
message = UserMessage(
|
1165
|
+
Texts("Some instruction", name="instruction"),
|
1166
|
+
Tools([{"name": "a_tool"}], name="tools"),
|
1167
|
+
Texts("Another instruction", name="instruction")
|
1168
|
+
)
|
1169
|
+
|
1170
|
+
# 2. 测试获取单个 provider
|
1171
|
+
tools_provider = message.provider("tools")
|
1172
|
+
self.assertIsInstance(tools_provider, Tools)
|
1173
|
+
self.assertEqual(tools_provider.name, "tools")
|
1174
|
+
|
1175
|
+
# 3. 测试获取多个同名 provider
|
1176
|
+
instruction_providers = message.provider("instruction")
|
1177
|
+
self.assertIsInstance(instruction_providers, ProviderGroup)
|
1178
|
+
self.assertEqual(len(instruction_providers), 2)
|
1179
|
+
self.assertTrue(all(isinstance(p, Texts) for p in instruction_providers))
|
1180
|
+
|
1181
|
+
# 4. 测试获取不存在的 provider
|
1182
|
+
non_existent_provider = message.provider("non_existent")
|
1183
|
+
self.assertIsNone(non_existent_provider)
|
1184
|
+
|
1185
|
+
async def test_zc_slicing_support(self):
|
1186
|
+
"""测试 Messages 对象是否支持切片操作"""
|
1187
|
+
m1 = SystemMessage("1")
|
1188
|
+
m2 = UserMessage("2")
|
1189
|
+
m3 = AssistantMessage("3")
|
1190
|
+
m4 = UserMessage("4")
|
1191
|
+
messages = Messages(m1, m2, m3, m4)
|
1192
|
+
|
1193
|
+
# 1. Test basic slicing
|
1194
|
+
sliced_messages = messages[1:3]
|
1195
|
+
self.assertIsInstance(sliced_messages, Messages)
|
1196
|
+
self.assertEqual(len(sliced_messages), 2)
|
1197
|
+
self.assertIs(sliced_messages[0], m2)
|
1198
|
+
self.assertIs(sliced_messages[1], m3)
|
1199
|
+
|
1200
|
+
# 2. Test slicing with open end
|
1201
|
+
sliced_messages_open = messages[2:]
|
1202
|
+
self.assertIsInstance(sliced_messages_open, Messages)
|
1203
|
+
self.assertEqual(len(sliced_messages_open), 2)
|
1204
|
+
self.assertIs(sliced_messages_open[0], m3)
|
1205
|
+
self.assertIs(sliced_messages_open[1], m4)
|
1206
|
+
|
1207
|
+
# 3. Test slicing with open start
|
1208
|
+
sliced_messages_start = messages[:2]
|
1209
|
+
self.assertIsInstance(sliced_messages_start, Messages)
|
1210
|
+
self.assertEqual(len(sliced_messages_start), 2)
|
1211
|
+
self.assertIs(sliced_messages_start[0], m1)
|
1212
|
+
self.assertIs(sliced_messages_start[1], m2)
|
1213
|
+
|
1214
|
+
# 4. Test slicing a single element
|
1215
|
+
sliced_single = messages[2:3]
|
1216
|
+
self.assertIsInstance(sliced_single, Messages)
|
1217
|
+
self.assertEqual(len(sliced_single), 1)
|
1218
|
+
self.assertIs(sliced_single[0], m3)
|
1219
|
+
|
1161
1220
|
# ==============================================================================
|
1162
1221
|
# 6. 演示
|
1163
1222
|
# ==============================================================================
|
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
|