aient 1.1.61__tar.gz → 1.1.62__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.
Files changed (51) hide show
  1. {aient-1.1.61 → aient-1.1.62}/PKG-INFO +1 -1
  2. {aient-1.1.61 → aient-1.1.62}/aient/models/base.py +31 -15
  3. {aient-1.1.61 → aient-1.1.62}/aient/models/chatgpt.py +7 -4
  4. {aient-1.1.61 → aient-1.1.62}/aient/utils/scripts.py +2 -0
  5. {aient-1.1.61 → aient-1.1.62}/aient.egg-info/PKG-INFO +1 -1
  6. {aient-1.1.61 → aient-1.1.62}/pyproject.toml +1 -1
  7. {aient-1.1.61 → aient-1.1.62}/LICENSE +0 -0
  8. {aient-1.1.61 → aient-1.1.62}/README.md +0 -0
  9. {aient-1.1.61 → aient-1.1.62}/aient/__init__.py +0 -0
  10. {aient-1.1.61 → aient-1.1.62}/aient/core/__init__.py +0 -0
  11. {aient-1.1.61 → aient-1.1.62}/aient/core/log_config.py +0 -0
  12. {aient-1.1.61 → aient-1.1.62}/aient/core/models.py +0 -0
  13. {aient-1.1.61 → aient-1.1.62}/aient/core/request.py +0 -0
  14. {aient-1.1.61 → aient-1.1.62}/aient/core/response.py +0 -0
  15. {aient-1.1.61 → aient-1.1.62}/aient/core/test/test_base_api.py +0 -0
  16. {aient-1.1.61 → aient-1.1.62}/aient/core/test/test_geminimask.py +0 -0
  17. {aient-1.1.61 → aient-1.1.62}/aient/core/test/test_image.py +0 -0
  18. {aient-1.1.61 → aient-1.1.62}/aient/core/test/test_payload.py +0 -0
  19. {aient-1.1.61 → aient-1.1.62}/aient/core/utils.py +0 -0
  20. {aient-1.1.61 → aient-1.1.62}/aient/models/__init__.py +0 -0
  21. {aient-1.1.61 → aient-1.1.62}/aient/models/audio.py +0 -0
  22. {aient-1.1.61 → aient-1.1.62}/aient/plugins/__init__.py +0 -0
  23. {aient-1.1.61 → aient-1.1.62}/aient/plugins/arXiv.py +0 -0
  24. {aient-1.1.61 → aient-1.1.62}/aient/plugins/config.py +0 -0
  25. {aient-1.1.61 → aient-1.1.62}/aient/plugins/excute_command.py +0 -0
  26. {aient-1.1.61 → aient-1.1.62}/aient/plugins/get_time.py +0 -0
  27. {aient-1.1.61 → aient-1.1.62}/aient/plugins/image.py +0 -0
  28. {aient-1.1.61 → aient-1.1.62}/aient/plugins/list_directory.py +0 -0
  29. {aient-1.1.61 → aient-1.1.62}/aient/plugins/read_file.py +0 -0
  30. {aient-1.1.61 → aient-1.1.62}/aient/plugins/read_image.py +0 -0
  31. {aient-1.1.61 → aient-1.1.62}/aient/plugins/readonly.py +0 -0
  32. {aient-1.1.61 → aient-1.1.62}/aient/plugins/registry.py +0 -0
  33. {aient-1.1.61 → aient-1.1.62}/aient/plugins/run_python.py +0 -0
  34. {aient-1.1.61 → aient-1.1.62}/aient/plugins/websearch.py +0 -0
  35. {aient-1.1.61 → aient-1.1.62}/aient/plugins/write_file.py +0 -0
  36. {aient-1.1.61 → aient-1.1.62}/aient/utils/__init__.py +0 -0
  37. {aient-1.1.61 → aient-1.1.62}/aient/utils/prompt.py +0 -0
  38. {aient-1.1.61 → aient-1.1.62}/aient.egg-info/SOURCES.txt +0 -0
  39. {aient-1.1.61 → aient-1.1.62}/aient.egg-info/dependency_links.txt +0 -0
  40. {aient-1.1.61 → aient-1.1.62}/aient.egg-info/requires.txt +0 -0
  41. {aient-1.1.61 → aient-1.1.62}/aient.egg-info/top_level.txt +0 -0
  42. {aient-1.1.61 → aient-1.1.62}/setup.cfg +0 -0
  43. {aient-1.1.61 → aient-1.1.62}/test/test_Web_crawler.py +0 -0
  44. {aient-1.1.61 → aient-1.1.62}/test/test_ddg_search.py +0 -0
  45. {aient-1.1.61 → aient-1.1.62}/test/test_google_search.py +0 -0
  46. {aient-1.1.61 → aient-1.1.62}/test/test_ollama.py +0 -0
  47. {aient-1.1.61 → aient-1.1.62}/test/test_plugin.py +0 -0
  48. {aient-1.1.61 → aient-1.1.62}/test/test_search.py +0 -0
  49. {aient-1.1.61 → aient-1.1.62}/test/test_url.py +0 -0
  50. {aient-1.1.61 → aient-1.1.62}/test/test_whisper.py +0 -0
  51. {aient-1.1.61 → aient-1.1.62}/test/test_yjh.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aient
3
- Version: 1.1.61
3
+ Version: 1.1.62
4
4
  Summary: Aient: The Awakening of Agent.
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -53,20 +53,10 @@ class BaseLLM:
53
53
  "https": proxy,
54
54
  },
55
55
  )
56
- if proxy := (
57
- proxy or os.environ.get("all_proxy") or os.environ.get("ALL_PROXY") or None
58
- ):
59
- if "socks5h" not in proxy:
60
- self.aclient = httpx.AsyncClient(
61
- follow_redirects=True,
62
- proxies=proxy,
63
- timeout=timeout,
64
- )
65
- else:
66
- self.aclient = httpx.AsyncClient(
67
- follow_redirects=True,
68
- timeout=timeout,
69
- )
56
+ self._aclient = None
57
+ self._proxy = proxy
58
+ self._timeout = timeout
59
+ self._loop = None
70
60
 
71
61
  self.conversation: dict[str, list[dict]] = {
72
62
  "default": [
@@ -83,6 +73,33 @@ class BaseLLM:
83
73
  self.use_plugins = use_plugins
84
74
  self.print_log: bool = print_log
85
75
 
76
+ def _get_aclient(self):
77
+ """
78
+ Lazily initialize and return the httpx.AsyncClient.
79
+ This method ensures the client is always bound to a running event loop.
80
+ """
81
+ import asyncio
82
+ try:
83
+ loop = asyncio.get_running_loop()
84
+ except RuntimeError:
85
+ loop = asyncio.new_event_loop()
86
+ asyncio.set_event_loop(loop)
87
+
88
+ if self._aclient is None or self._aclient.is_closed or self._loop is not loop:
89
+ self._loop = loop
90
+ proxy = self._proxy or os.environ.get("all_proxy") or os.environ.get("ALL_PROXY") or None
91
+ proxies = proxy if proxy and "socks5h" not in proxy else None
92
+ self._aclient = httpx.AsyncClient(
93
+ follow_redirects=True,
94
+ proxy=proxies,
95
+ timeout=self._timeout,
96
+ )
97
+ return self._aclient
98
+
99
+ @property
100
+ def aclient(self):
101
+ return self._get_aclient()
102
+
86
103
  def add_to_conversation(
87
104
  self,
88
105
  message: list,
@@ -196,7 +213,6 @@ class BaseLLM:
196
213
  **kwargs,
197
214
  ):
198
215
  response += chunk
199
- # full_response: str = "".join([r async for r in response])
200
216
  full_response: str = "".join(response)
201
217
  return full_response
202
218
 
@@ -711,11 +711,14 @@ class chatgpt(BaseLLM):
711
711
  # 替换原来的获取请求体的代码
712
712
  # json_post = next(async_generator_to_sync(get_post_body_async()))
713
713
  try:
714
- url, headers, json_post, engine_type = asyncio.run(get_post_body_async())
715
- except RuntimeError:
716
- # 如果已经在事件循环中,则使用不同的方法
717
714
  loop = asyncio.get_event_loop()
718
- url, headers, json_post, engine_type = loop.run_until_complete(get_post_body_async())
715
+ if loop.is_closed():
716
+ loop = asyncio.new_event_loop()
717
+ asyncio.set_event_loop(loop)
718
+ except RuntimeError:
719
+ loop = asyncio.new_event_loop()
720
+ asyncio.set_event_loop(loop)
721
+ url, headers, json_post, engine_type = loop.run_until_complete(get_post_body_async())
719
722
 
720
723
  self.truncate_conversation(convo_id=convo_id)
721
724
 
@@ -212,6 +212,8 @@ def async_generator_to_sync(async_gen):
212
212
  # 清理所有待处理的任务
213
213
  tasks = [t for t in asyncio.all_tasks(loop) if not t.done()]
214
214
  if tasks:
215
+ for task in tasks:
216
+ task.cancel()
215
217
  loop.run_until_complete(asyncio.gather(*tasks, return_exceptions=True))
216
218
  loop.run_until_complete(loop.shutdown_asyncgens())
217
219
  loop.close()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aient
3
- Version: 1.1.61
3
+ Version: 1.1.62
4
4
  Summary: Aient: The Awakening of Agent.
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "aient"
3
- version = "1.1.61"
3
+ version = "1.1.62"
4
4
  description = "Aient: The Awakening of Agent."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
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