aient 1.1.93__tar.gz → 1.1.94__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.1.93 → aient-1.1.94}/PKG-INFO +1 -1
- {aient-1.1.93 → aient-1.1.94}/aient/architext/architext/core.py +7 -3
- {aient-1.1.93 → aient-1.1.94}/aient/architext/test/test.py +27 -0
- {aient-1.1.93 → aient-1.1.94}/aient.egg-info/PKG-INFO +1 -1
- {aient-1.1.93 → aient-1.1.94}/pyproject.toml +1 -1
- {aient-1.1.93 → aient-1.1.94}/LICENSE +0 -0
- {aient-1.1.93 → aient-1.1.94}/README.md +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/__init__.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/architext/architext/__init__.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/architext/test/openai_client.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/architext/test/test_save_load.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/core/__init__.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/core/log_config.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/core/models.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/core/request.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/core/response.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/core/test/test_base_api.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/core/test/test_geminimask.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/core/test/test_image.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/core/test/test_payload.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/core/utils.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/models/__init__.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/models/audio.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/models/base.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/models/chatgpt.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/plugins/__init__.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/plugins/arXiv.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/plugins/config.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/plugins/excute_command.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/plugins/get_time.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/plugins/image.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/plugins/list_directory.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/plugins/read_file.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/plugins/read_image.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/plugins/readonly.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/plugins/registry.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/plugins/run_python.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/plugins/websearch.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/plugins/write_file.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/utils/__init__.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/utils/prompt.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient/utils/scripts.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient.egg-info/SOURCES.txt +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient.egg-info/dependency_links.txt +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient.egg-info/requires.txt +0 -0
- {aient-1.1.93 → aient-1.1.94}/aient.egg-info/top_level.txt +0 -0
- {aient-1.1.93 → aient-1.1.94}/setup.cfg +0 -0
- {aient-1.1.93 → aient-1.1.94}/test/test_Web_crawler.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/test/test_ddg_search.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/test/test_google_search.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/test/test_ollama.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/test/test_plugin.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/test/test_search.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/test/test_url.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/test/test_whisper.py +0 -0
- {aient-1.1.93 → aient-1.1.94}/test/test_yjh.py +0 -0
@@ -32,7 +32,10 @@ class ContextProvider(ABC):
|
|
32
32
|
return None
|
33
33
|
|
34
34
|
class Texts(ContextProvider):
|
35
|
-
def __init__(self, text: Union[str, Callable[[], str]], name: Optional[str] = None):
|
35
|
+
def __init__(self, text: Optional[Union[str, Callable[[], str]]] = None, name: Optional[str] = None):
|
36
|
+
if text is None and name is None:
|
37
|
+
raise ValueError("Either 'text' or 'name' must be provided.")
|
38
|
+
|
36
39
|
self._text = text
|
37
40
|
self._is_dynamic = callable(self._text)
|
38
41
|
|
@@ -41,7 +44,8 @@ class Texts(ContextProvider):
|
|
41
44
|
import uuid
|
42
45
|
_name = f"dynamic_text_{uuid.uuid4().hex[:8]}"
|
43
46
|
else:
|
44
|
-
|
47
|
+
# Handle the case where text is None during initialization
|
48
|
+
h = hashlib.sha1(self._text.encode() if self._text else b'').hexdigest()
|
45
49
|
_name = f"text_{h[:8]}"
|
46
50
|
else:
|
47
51
|
_name = name
|
@@ -57,7 +61,7 @@ class Texts(ContextProvider):
|
|
57
61
|
self._is_dynamic = callable(self._text)
|
58
62
|
self.mark_stale()
|
59
63
|
|
60
|
-
async def render(self) -> str:
|
64
|
+
async def render(self) -> Optional[str]:
|
61
65
|
if self._is_dynamic:
|
62
66
|
return self._text()
|
63
67
|
return self._text
|
@@ -872,6 +872,33 @@ class TestContextManagement(unittest.IsolatedAsyncioTestCase):
|
|
872
872
|
# 5. 验证两次内容不同(因为时间戳变了)
|
873
873
|
self.assertNotEqual(content1, content2, "包含静态前缀的动态 provider 内容应该更新")
|
874
874
|
|
875
|
+
async def test_z3_deferred_text_update_via_provider(self):
|
876
|
+
"""测试 Texts(name=...) 初始化, 然后通过 provider 更新内容"""
|
877
|
+
# This test is expected to fail with a TypeError on the next line
|
878
|
+
# because the current Texts.__init__ requires 'text'.
|
879
|
+
deferred_text_provider = Texts(name="deferred_content")
|
880
|
+
|
881
|
+
messages = Messages(UserMessage(deferred_text_provider))
|
882
|
+
|
883
|
+
# Initial render: with no text, it should probably render to an empty string.
|
884
|
+
# If there's no content, the message itself might not be rendered.
|
885
|
+
# Let's assume an empty provider results in the message not rendering.
|
886
|
+
await deferred_text_provider.refresh()
|
887
|
+
self.assertIsNone(deferred_text_provider.get_content_block())
|
888
|
+
|
889
|
+
rendered_initial = await messages.render_latest()
|
890
|
+
self.assertEqual(len(rendered_initial), 0)
|
891
|
+
|
892
|
+
# 3. Get provider and update content
|
893
|
+
provider = messages.provider("deferred_content")
|
894
|
+
self.assertIsNotNone(provider)
|
895
|
+
provider.update("This is the new content.")
|
896
|
+
|
897
|
+
# 4. Re-render and validate
|
898
|
+
rendered_updated = await messages.render_latest()
|
899
|
+
self.assertEqual(len(rendered_updated), 1)
|
900
|
+
self.assertEqual(rendered_updated[0]['content'], "This is the new content.")
|
901
|
+
|
875
902
|
|
876
903
|
# ==============================================================================
|
877
904
|
# 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
|