waldiez 0.4.2__tar.gz → 0.4.4__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.

Potentially problematic release.


This version of waldiez might be problematic. Click here for more details.

Files changed (148) hide show
  1. {waldiez-0.4.2 → waldiez-0.4.4}/PKG-INFO +60 -33
  2. {waldiez-0.4.2 → waldiez-0.4.4}/pyproject.toml +66 -33
  3. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/_version.py +1 -1
  4. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/captain_agent.py +17 -8
  5. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/models/utils.py +4 -0
  6. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/model/model.py +1 -1
  7. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/runner.py +8 -4
  8. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/running/environment.py +3 -2
  9. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/running/running.py +48 -24
  10. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/utils/cli_extras/__init__.py +2 -0
  11. waldiez-0.4.4/waldiez/utils/cli_extras/runner.py +37 -0
  12. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/utils/pysqlite3_checker.py +6 -2
  13. {waldiez-0.4.2 → waldiez-0.4.4}/.gitignore +0 -0
  14. {waldiez-0.4.2 → waldiez-0.4.4}/LICENSE +0 -0
  15. {waldiez-0.4.2 → waldiez-0.4.4}/NOTICE.md +0 -0
  16. {waldiez-0.4.2 → waldiez-0.4.4}/README.md +0 -0
  17. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/__init__.py +0 -0
  18. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/__main__.py +0 -0
  19. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/cli.py +0 -0
  20. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporter.py +0 -0
  21. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/__init__.py +0 -0
  22. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/__init__.py +0 -0
  23. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/agent_exporter.py +0 -0
  24. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/__init__.py +0 -0
  25. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/code_execution.py +0 -0
  26. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/group_manager.py +0 -0
  27. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/rag_user/__init__.py +0 -0
  28. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/rag_user/chroma_utils.py +0 -0
  29. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/rag_user/mongo_utils.py +0 -0
  30. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/rag_user/pgvector_utils.py +0 -0
  31. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/rag_user/qdrant_utils.py +0 -0
  32. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/rag_user/rag_user.py +0 -0
  33. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/rag_user/vector_db.py +0 -0
  34. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/reasoning.py +0 -0
  35. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/swarm_agent.py +0 -0
  36. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/teachability.py +0 -0
  37. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/agent/utils/termination_message.py +0 -0
  38. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/base/__init__.py +0 -0
  39. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/base/agent_position.py +0 -0
  40. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/base/base_exporter.py +0 -0
  41. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/base/export_position.py +0 -0
  42. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/base/import_position.py +0 -0
  43. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/base/mixin.py +0 -0
  44. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/base/utils/__init__.py +0 -0
  45. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/base/utils/comments.py +0 -0
  46. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/base/utils/naming.py +0 -0
  47. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/base/utils/path_check.py +0 -0
  48. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/base/utils/to_string.py +0 -0
  49. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/chats/__init__.py +0 -0
  50. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/chats/chats_exporter.py +0 -0
  51. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/chats/utils/__init__.py +0 -0
  52. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/chats/utils/common.py +0 -0
  53. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/chats/utils/nested.py +0 -0
  54. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/chats/utils/sequential.py +0 -0
  55. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/chats/utils/single_chat.py +0 -0
  56. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/chats/utils/swarm.py +0 -0
  57. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/flow/__init__.py +0 -0
  58. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/flow/flow_exporter.py +0 -0
  59. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/flow/utils/__init__.py +0 -0
  60. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/flow/utils/agent_utils.py +0 -0
  61. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/flow/utils/chat_utils.py +0 -0
  62. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/flow/utils/def_main.py +0 -0
  63. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/flow/utils/flow_content.py +0 -0
  64. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/flow/utils/flow_names.py +0 -0
  65. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/flow/utils/importing_utils.py +0 -0
  66. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/flow/utils/logging_utils.py +0 -0
  67. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/models/__init__.py +0 -0
  68. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/models/models_exporter.py +0 -0
  69. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/skills/__init__.py +0 -0
  70. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/skills/skills_exporter.py +0 -0
  71. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/exporting/skills/utils.py +0 -0
  72. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/__init__.py +0 -0
  73. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/__init__.py +0 -0
  74. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/agent/__init__.py +0 -0
  75. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/agent/agent.py +0 -0
  76. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/agent/agent_data.py +0 -0
  77. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/agent/agent_type.py +0 -0
  78. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/agent/code_execution.py +0 -0
  79. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/agent/linked_skill.py +0 -0
  80. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/agent/nested_chat.py +0 -0
  81. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/agent/teachability.py +0 -0
  82. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/agent/termination_message.py +0 -0
  83. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/agents.py +0 -0
  84. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/assistant/__init__.py +0 -0
  85. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/assistant/assistant.py +0 -0
  86. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/assistant/assistant_data.py +0 -0
  87. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/captain_agent/__init__.py +0 -0
  88. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/captain_agent/captain_agent.py +0 -0
  89. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/captain_agent/captain_agent_data.py +0 -0
  90. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/captain_agent/captain_agent_lib_entry.py +0 -0
  91. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/extra_requirements.py +0 -0
  92. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/group_manager/__init__.py +0 -0
  93. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/group_manager/group_manager.py +0 -0
  94. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/group_manager/group_manager_data.py +0 -0
  95. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/group_manager/speakers.py +0 -0
  96. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/rag_user/__init__.py +0 -0
  97. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/rag_user/rag_user.py +0 -0
  98. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/rag_user/rag_user_data.py +0 -0
  99. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/rag_user/retrieve_config.py +0 -0
  100. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/rag_user/vector_db_config.py +0 -0
  101. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/reasoning/__init__.py +0 -0
  102. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/reasoning/reasoning_agent.py +0 -0
  103. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/reasoning/reasoning_agent_data.py +0 -0
  104. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/reasoning/reasoning_agent_reason_config.py +0 -0
  105. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/swarm_agent/__init__.py +0 -0
  106. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/swarm_agent/after_work.py +0 -0
  107. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/swarm_agent/on_condition.py +0 -0
  108. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/swarm_agent/on_condition_available.py +0 -0
  109. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/swarm_agent/on_condition_target.py +0 -0
  110. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/swarm_agent/swarm_agent.py +0 -0
  111. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/swarm_agent/swarm_agent_data.py +0 -0
  112. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/swarm_agent/update_system_message.py +0 -0
  113. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/user_proxy/__init__.py +0 -0
  114. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/user_proxy/user_proxy.py +0 -0
  115. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/agents/user_proxy/user_proxy_data.py +0 -0
  116. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/chat/__init__.py +0 -0
  117. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/chat/chat.py +0 -0
  118. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/chat/chat_data.py +0 -0
  119. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/chat/chat_message.py +0 -0
  120. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/chat/chat_nested.py +0 -0
  121. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/chat/chat_summary.py +0 -0
  122. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/common/__init__.py +0 -0
  123. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/common/ag2_version.py +0 -0
  124. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/common/base.py +0 -0
  125. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/common/date_utils.py +0 -0
  126. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/common/dict_utils.py +0 -0
  127. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/common/method_utils.py +0 -0
  128. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/flow/__init__.py +0 -0
  129. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/flow/flow.py +0 -0
  130. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/flow/flow_data.py +0 -0
  131. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/flow/utils.py +0 -0
  132. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/model/__init__.py +0 -0
  133. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/model/extra_requirements.py +0 -0
  134. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/model/model_data.py +0 -0
  135. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/skill/__init__.py +0 -0
  136. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/skill/extra_requirements.py +0 -0
  137. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/skill/skill.py +0 -0
  138. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/skill/skill_data.py +0 -0
  139. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/skill/skill_type.py +0 -0
  140. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/models/waldiez.py +0 -0
  141. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/py.typed +0 -0
  142. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/running/__init__.py +0 -0
  143. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/running/gen_seq_diagram.py +0 -0
  144. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/utils/__init__.py +0 -0
  145. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/utils/cli_extras/jupyter.py +0 -0
  146. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/utils/cli_extras/studio.py +0 -0
  147. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/utils/conflict_checker.py +0 -0
  148. {waldiez-0.4.2 → waldiez-0.4.4}/waldiez/utils/flaml_warnings.py +0 -0
@@ -1,9 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: waldiez
3
- Version: 0.4.2
4
- Summary: waldiez
5
- Project-URL: homepage, https://waldiez.github.io/waldiez/python
3
+ Version: 0.4.4
4
+ Summary: Make AI Agents Collaborate: Drag, Drop, and Orchestrate with Waldiez.
5
+ Project-URL: homepage, https://waldiez.io
6
6
  Project-URL: repository, https://github.com/waldiez/python.git
7
+ Project-URL: documentation, https://waldiez.github.io/python/
8
+ Project-URL: issues, https://github.com/waldiez/python/issues
7
9
  Author-email: Panagiotis Kasnesis <pkasnesis@waldiez.io>, Lazaros Toumanidis <laztoum@waldiez.io>, Stella Ioannidou <stella@humancentered.gr>
8
10
  License-File: LICENSE
9
11
  License-File: NOTICE.md
@@ -26,56 +28,78 @@ Requires-Dist: asyncer==0.0.8
26
28
  Requires-Dist: graphviz==0.20.3
27
29
  Requires-Dist: httpx<1
28
30
  Requires-Dist: jupytext
29
- Requires-Dist: numpy<2.2.0
31
+ Requires-Dist: nest-asyncio==1.6.0
32
+ Requires-Dist: numpy<=2.2.5
30
33
  Requires-Dist: pandas>=2
31
34
  Requires-Dist: parso==0.8.4
32
- Requires-Dist: pyautogen[openai]==0.8.4
35
+ Requires-Dist: pyautogen[openai]==0.8.7
33
36
  Requires-Dist: pydantic<3,>=2.10.2
34
37
  Requires-Dist: typer<0.16,>=0.9
35
38
  Provides-Extra: ag2-extras
36
39
  Requires-Dist: beautifulsoup4; extra == 'ag2-extras'
37
- Requires-Dist: chromadb>=0.5.10; extra == 'ag2-extras'
38
- Requires-Dist: embedchain; extra == 'ag2-extras'
40
+ Requires-Dist: chromadb>=0.5.10; (sys_platform != 'win32') and extra == 'ag2-extras'
41
+ Requires-Dist: chromadb>=0.5.10; (sys_platform == 'win32' and platform_machine != 'arm64' and platform_machine != 'aarch64' and platform_machine != 'ARM64' and platform_machine != 'AARCH64') and extra == 'ag2-extras'
42
+ Requires-Dist: embedchain; (sys_platform != 'win32') and extra == 'ag2-extras'
43
+ Requires-Dist: embedchain; (sys_platform == 'win32' and platform_machine != 'arm64' and platform_machine != 'aarch64' and platform_machine != 'ARM64' and platform_machine != 'AARCH64') and extra == 'ag2-extras'
44
+ Requires-Dist: google-api-python-client<3.0,>=2.163.0; extra == 'ag2-extras'
45
+ Requires-Dist: google-auth-httplib2<0.3,>=0.2.0; extra == 'ag2-extras'
46
+ Requires-Dist: google-auth-oauthlib<2.0,>=1.2.1; extra == 'ag2-extras'
39
47
  Requires-Dist: huggingface-hub; extra == 'ag2-extras'
40
48
  Requires-Dist: ipython; extra == 'ag2-extras'
41
49
  Requires-Dist: langchain-community<1,>=0.3.12; extra == 'ag2-extras'
42
50
  Requires-Dist: markdownify; extra == 'ag2-extras'
51
+ Requires-Dist: mcp<1.6,>=1.4.0; extra == 'ag2-extras'
43
52
  Requires-Dist: pgvector>=0.4.0; extra == 'ag2-extras'
44
53
  Requires-Dist: protobuf>=4.25.3; extra == 'ag2-extras'
45
- Requires-Dist: psycopg[binary]>=3.2.6; extra == 'ag2-extras'
46
- Requires-Dist: pyautogen[anthropic]==0.8.4; extra == 'ag2-extras'
47
- Requires-Dist: pyautogen[bedrock]==0.8.4; extra == 'ag2-extras'
48
- Requires-Dist: pyautogen[cohere]==0.8.4; extra == 'ag2-extras'
49
- Requires-Dist: pyautogen[gemini]==0.8.4; extra == 'ag2-extras'
50
- Requires-Dist: pyautogen[groq]==0.8.4; extra == 'ag2-extras'
51
- Requires-Dist: pyautogen[interop-crewai]==0.8.4; extra == 'ag2-extras'
52
- Requires-Dist: pyautogen[interop-langchain]==0.8.4; extra == 'ag2-extras'
53
- Requires-Dist: pyautogen[lmm]==0.8.4; extra == 'ag2-extras'
54
- Requires-Dist: pyautogen[mistral]==0.8.4; extra == 'ag2-extras'
55
- Requires-Dist: pyautogen[neo4j]==0.8.4; extra == 'ag2-extras'
56
- Requires-Dist: pyautogen[ollama]==0.8.4; extra == 'ag2-extras'
57
- Requires-Dist: pyautogen[together]==0.8.4; extra == 'ag2-extras'
58
- Requires-Dist: pyautogen[websurfer]==0.8.4; extra == 'ag2-extras'
54
+ Requires-Dist: psycopg==3.2.6; (sys_platform == 'linux') and extra == 'ag2-extras'
55
+ Requires-Dist: psycopg==3.2.6; (sys_platform == 'win32' and platform_machine == 'AARCH64') and extra == 'ag2-extras'
56
+ Requires-Dist: psycopg==3.2.6; (sys_platform == 'win32' and platform_machine == 'ARM64') and extra == 'ag2-extras'
57
+ Requires-Dist: psycopg==3.2.6; (sys_platform == 'win32' and platform_machine == 'aarch64') and extra == 'ag2-extras'
58
+ Requires-Dist: psycopg==3.2.6; (sys_platform == 'win32' and platform_machine == 'arm64') and extra == 'ag2-extras'
59
+ Requires-Dist: psycopg>=3.2.6; (sys_platform == 'win32') and extra == 'ag2-extras'
60
+ Requires-Dist: psycopg[binary]==3.2.6; (sys_platform != 'linux' and platform_machine != 'arm64' and platform_machine != 'ARM64' and platform_machine != 'aarch64' and platform_machine != 'AARCH64') and extra == 'ag2-extras'
61
+ Requires-Dist: psycopg[binary]>=3.2.6; (sys_platform != 'win32') and extra == 'ag2-extras'
62
+ Requires-Dist: pyautogen[anthropic]==0.8.7; extra == 'ag2-extras'
63
+ Requires-Dist: pyautogen[bedrock]==0.8.7; extra == 'ag2-extras'
64
+ Requires-Dist: pyautogen[cohere]==0.8.7; extra == 'ag2-extras'
65
+ Requires-Dist: pyautogen[gemini]==0.8.7; (sys_platform != 'win32') and extra == 'ag2-extras'
66
+ Requires-Dist: pyautogen[gemini]==0.8.7; (sys_platform == 'win32' and platform_machine != 'arm64' and platform_machine != 'aarch64' and platform_machine != 'ARM64' and platform_machine != 'AARCH64') and extra == 'ag2-extras'
67
+ Requires-Dist: pyautogen[groq]==0.8.7; extra == 'ag2-extras'
68
+ Requires-Dist: pyautogen[interop-crewai]==0.8.7; extra == 'ag2-extras'
69
+ Requires-Dist: pyautogen[interop-langchain]==0.8.7; extra == 'ag2-extras'
70
+ Requires-Dist: pyautogen[lmm]==0.8.7; extra == 'ag2-extras'
71
+ Requires-Dist: pyautogen[mistral]==0.8.7; extra == 'ag2-extras'
72
+ Requires-Dist: pyautogen[neo4j]==0.8.7; (sys_platform != 'win32') and extra == 'ag2-extras'
73
+ Requires-Dist: pyautogen[neo4j]==0.8.7; (sys_platform == 'win32' and platform_machine != 'arm64' and platform_machine != 'aarch64' and platform_machine != 'ARM64' and platform_machine != 'AARCH64') and extra == 'ag2-extras'
74
+ Requires-Dist: pyautogen[ollama]==0.8.7; extra == 'ag2-extras'
75
+ Requires-Dist: pyautogen[together]==0.8.7; (sys_platform != 'win32') and extra == 'ag2-extras'
76
+ Requires-Dist: pyautogen[together]==0.8.7; (sys_platform == 'win32' and platform_machine != 'arm64' and platform_machine != 'aarch64' and platform_machine != 'ARM64' and platform_machine != 'AARCH64') and extra == 'ag2-extras'
77
+ Requires-Dist: pyautogen[websurfer]==0.8.7; extra == 'ag2-extras'
59
78
  Requires-Dist: pydantic-ai>=0.0.21; extra == 'ag2-extras'
60
79
  Requires-Dist: pymongo>=4.11; extra == 'ag2-extras'
61
80
  Requires-Dist: pypdf; extra == 'ag2-extras'
62
- Requires-Dist: qdrant-client[fastembed]; extra == 'ag2-extras'
63
- Requires-Dist: sentence-transformers; extra == 'ag2-extras'
81
+ Requires-Dist: pysqlite3-binary==0.5.4; (sys_platform == 'linux' and platform_machine != 'arm64' and platform_machine != 'aarch64' and platform_machine != 'ARM64' and platform_machine != 'AARCH64') and extra == 'ag2-extras'
82
+ Requires-Dist: qdrant-client[fastembed]; (sys_platform != 'win32') and extra == 'ag2-extras'
83
+ Requires-Dist: qdrant-client[fastembed]; (sys_platform == 'win32' and platform_machine != 'arm64' and platform_machine != 'aarch64' and platform_machine != 'ARM64' and platform_machine != 'AARCH64') and extra == 'ag2-extras'
84
+ Requires-Dist: sentence-transformers; (sys_platform == 'linux') and extra == 'ag2-extras'
85
+ Requires-Dist: wikipedia-api<1.0,>=0.8.1; extra == 'ag2-extras'
64
86
  Provides-Extra: dev
65
87
  Requires-Dist: autoflake==2.3.1; extra == 'dev'
66
88
  Requires-Dist: bandit==1.8.3; extra == 'dev'
67
89
  Requires-Dist: black[jupyter]==25.1.0; extra == 'dev'
68
90
  Requires-Dist: flake8==7.2.0; extra == 'dev'
69
91
  Requires-Dist: isort==6.0.1; extra == 'dev'
92
+ Requires-Dist: jupyter-server==2.15.0; extra == 'dev'
93
+ Requires-Dist: jupyterlab>=4.3.0; extra == 'dev'
70
94
  Requires-Dist: mypy==1.15.0; extra == 'dev'
71
- Requires-Dist: pandas-stubs; extra == 'dev'
95
+ Requires-Dist: pandas-stubs==2.2.3.250308; extra == 'dev'
72
96
  Requires-Dist: pre-commit==4.2.0; extra == 'dev'
73
97
  Requires-Dist: pydocstyle==6.3.0; extra == 'dev'
74
98
  Requires-Dist: pylint==3.3.6; extra == 'dev'
75
99
  Requires-Dist: python-dotenv==1.1.0; extra == 'dev'
76
- Requires-Dist: ruff==0.11.2; extra == 'dev'
77
- Requires-Dist: toml; (python_version <= '3.10') and extra == 'dev'
78
- Requires-Dist: types-pyyaml==6.0.12.20250326; extra == 'dev'
100
+ Requires-Dist: ruff==0.11.7; extra == 'dev'
101
+ Requires-Dist: toml==0.10.2; (python_version <= '3.10') and extra == 'dev'
102
+ Requires-Dist: types-pyyaml==6.0.12.20250402; extra == 'dev'
79
103
  Requires-Dist: types-toml==0.10.8.20240310; extra == 'dev'
80
104
  Requires-Dist: yamllint==1.37.0; extra == 'dev'
81
105
  Provides-Extra: docs
@@ -83,19 +107,22 @@ Requires-Dist: mdx-include==1.4.2; extra == 'docs'
83
107
  Requires-Dist: mdx-truly-sane-lists==1.3; extra == 'docs'
84
108
  Requires-Dist: mkdocs-jupyter==0.25.1; extra == 'docs'
85
109
  Requires-Dist: mkdocs-macros-plugin==1.3.7; extra == 'docs'
86
- Requires-Dist: mkdocs-material==9.6.9; extra == 'docs'
110
+ Requires-Dist: mkdocs-material==9.6.12; extra == 'docs'
87
111
  Requires-Dist: mkdocs-minify-html-plugin==0.3.1; extra == 'docs'
88
112
  Requires-Dist: mkdocs==1.6.1; extra == 'docs'
89
- Requires-Dist: mkdocstrings-python==1.16.8; extra == 'docs'
90
- Requires-Dist: mkdocstrings[crystal,python]==0.29.0; extra == 'docs'
113
+ Requires-Dist: mkdocstrings-python==1.16.10; extra == 'docs'
114
+ Requires-Dist: mkdocstrings[crystal,python]==0.29.1; extra == 'docs'
91
115
  Provides-Extra: jupyter
116
+ Requires-Dist: jupyter-server==2.15.0; extra == 'jupyter'
92
117
  Requires-Dist: jupyterlab>=4.3.0; extra == 'jupyter'
93
- Requires-Dist: waldiez-jupyter==0.4.2; extra == 'jupyter'
118
+ Requires-Dist: waldiez-jupyter==0.4.4; extra == 'jupyter'
119
+ Provides-Extra: runner
120
+ Requires-Dist: waldiez-runner==0.4.4; extra == 'runner'
94
121
  Provides-Extra: studio
95
- Requires-Dist: waldiez-studio==0.4.2; extra == 'studio'
122
+ Requires-Dist: waldiez-studio==0.4.4; extra == 'studio'
96
123
  Provides-Extra: test
97
124
  Requires-Dist: pytest-asyncio==0.26.0; extra == 'test'
98
- Requires-Dist: pytest-cov==6.0.0; extra == 'test'
125
+ Requires-Dist: pytest-cov==6.1.1; extra == 'test'
99
126
  Requires-Dist: pytest-html==4.1.1; extra == 'test'
100
127
  Requires-Dist: pytest-sugar==1.0.0; extra == 'test'
101
128
  Requires-Dist: pytest-timeout==2.3.1; extra == 'test'
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "waldiez"
3
- description = 'waldiez'
3
+ description = 'Make AI Agents Collaborate: Drag, Drop, and Orchestrate with Waldiez.'
4
4
  authors = [
5
5
  { name = 'Panagiotis Kasnesis', email = 'pkasnesis@waldiez.io' },
6
6
  { name= 'Lazaros Toumanidis', email= 'laztoum@waldiez.io' },
@@ -27,11 +27,16 @@ dependencies =[
27
27
  "aiofiles==24.1.0",
28
28
  "aiosqlite==0.21.0",
29
29
  "asyncer==0.0.8",
30
- "numpy<2.2.0",
30
+ "numpy<=2.2.5",
31
+ "nest_asyncio==1.6.0",
31
32
  "graphviz==0.20.3",
32
33
  "pandas>=2",
33
- "pyautogen[openai]==0.8.4",
34
+ "pyautogen[openai]==0.8.7",
34
35
  "jupytext",
36
+ # "rpds-py @ git+https://github.com/crate-py/rpds.git@v0.24.0 ;sys_platform == 'win32' and platform_machine == 'arm64'",
37
+ # "rpds-py @ git+https://github.com/crate-py/rpds.git@v0.24.0 ;sys_platform == 'win32' and platform_machine == 'ARM64'",
38
+ # "rpds-py @ git+https://github.com/crate-py/rpds.git@v0.24.0 ;sys_platform == 'win32' and platform_machine == 'aarch64'",
39
+ # "rpds-py @ git+https://github.com/crate-py/rpds.git@v0.24.0 ;sys_platform == 'win32' and platform_machine == 'AARCH64'",
35
40
  "parso==0.8.4",
36
41
  "pydantic>=2.10.2,<3",
37
42
  "typer>=0.9,<0.16",
@@ -39,9 +44,13 @@ dependencies =[
39
44
  ]
40
45
 
41
46
  [project.urls]
42
- homepage = 'https://waldiez.github.io/waldiez/python'
47
+ homepage = 'https://waldiez.io'
43
48
  repository = 'https://github.com/waldiez/python.git'
49
+ documentation = "https://waldiez.github.io/python/"
50
+ issues = "https://github.com/waldiez/python/issues"
44
51
 
52
+ [tool.hatch.metadata]
53
+ allow-direct-references = true
45
54
 
46
55
  [tool.hatch.build.targets.sdist]
47
56
  packages = ["waldiez", "waldiez.*"]
@@ -53,68 +62,92 @@ exclude = [ "**/example.py" ]
53
62
 
54
63
  [project.optional-dependencies]
55
64
  studio = [
56
- 'waldiez_studio==0.4.2',
65
+ "waldiez_studio==0.4.4",
66
+ ]
67
+ runner = [
68
+ "waldiez_runner==0.4.4",
57
69
  ]
58
70
  jupyter = [
59
- 'waldiez_jupyter==0.4.2',
71
+ "waldiez_jupyter==0.4.4",
60
72
  'jupyterlab>=4.3.0',
73
+ "jupyter_server==2.15.0",
61
74
  ]
62
75
  dev = [
63
76
  'autoflake==2.3.1',
64
77
  'bandit==1.8.3',
65
78
  'black[jupyter]==25.1.0',
66
79
  'flake8==7.2.0',
80
+ 'jupyterlab>=4.3.0',
81
+ "jupyter_server==2.15.0",
67
82
  'isort==6.0.1',
68
83
  'mypy==1.15.0',
69
- 'pandas-stubs',
84
+ 'pandas-stubs==2.2.3.250308',
70
85
  'pre-commit==4.2.0',
71
86
  'pydocstyle==6.3.0',
72
87
  'pylint==3.3.6',
73
88
  'python-dotenv==1.1.0',
74
- 'ruff==0.11.2',
75
- 'types-pyyaml==6.0.12.20250326',
89
+ 'ruff==0.11.7',
90
+ 'types-pyyaml==6.0.12.20250402',
76
91
  'yamllint==1.37.0',
77
- 'toml; python_version <= "3.10"',
92
+ 'toml==0.10.2; python_version <= "3.10"',
78
93
  'types-toml==0.10.8.20240310',
79
94
  ]
80
95
  ag2_extras =[
81
96
  # models
82
- 'pyautogen[anthropic]==0.8.4',
83
- 'pyautogen[bedrock]==0.8.4',
84
- 'pyautogen[cohere]==0.8.4',
85
- 'pyautogen[gemini]==0.8.4',
86
- 'pyautogen[groq]==0.8.4',
87
- 'pyautogen[lmm]==0.8.4',
88
- 'pyautogen[mistral]==0.8.4',
89
- 'pyautogen[ollama]==0.8.4',
90
- 'pyautogen[together]==0.8.4',
97
+ 'pyautogen[anthropic]==0.8.7',
98
+ 'pyautogen[bedrock]==0.8.7',
99
+ 'pyautogen[cohere]==0.8.7',
100
+ 'pyautogen[gemini]==0.8.7 ;sys_platform != "win32"',
101
+ 'pyautogen[gemini]==0.8.7 ;sys_platform == "win32" and platform_machine != "arm64" and platform_machine != "aarch64" and platform_machine != "ARM64" and platform_machine != "AARCH64"',
102
+ 'pyautogen[groq]==0.8.7',
103
+ 'pyautogen[lmm]==0.8.7',
104
+ 'pyautogen[mistral]==0.8.7',
105
+ 'pyautogen[ollama]==0.8.7',
106
+ 'pyautogen[together]==0.8.7 ;sys_platform != "win32"',
107
+ 'pyautogen[together]==0.8.7 ;sys_platform == "win32" and platform_machine != "arm64" and platform_machine != "aarch64" and platform_machine != "ARM64" and platform_machine != "AARCH64"',
91
108
  # utils
92
- 'pyautogen[interop-crewai]==0.8.4',
93
- 'pyautogen[interop-langchain]==0.8.4',
94
- 'pyautogen[neo4j]==0.8.4',
95
- 'pyautogen[websurfer]==0.8.4',
96
- 'chromadb>=0.5.10',
109
+ 'pyautogen[interop-crewai]==0.8.7',
110
+ 'pyautogen[interop-langchain]==0.8.7',
111
+ "pyautogen[neo4j]==0.8.7 ;sys_platform != 'win32'",
112
+ "pyautogen[neo4j]==0.8.7 ;sys_platform == 'win32' and platform_machine != 'arm64' and platform_machine != 'aarch64' and platform_machine != 'ARM64' and platform_machine != 'AARCH64'",
113
+ 'pyautogen[websurfer]==0.8.7',
114
+ "chromadb>=0.5.10 ;sys_platform != 'win32'",
115
+ "chromadb>=0.5.10 ;sys_platform == 'win32' and platform_machine != 'arm64' and platform_machine != 'aarch64' and platform_machine != 'ARM64' and platform_machine != 'AARCH64'",
97
116
  'pgvector>=0.4.0',
98
- 'psycopg[binary]>=3.2.6',
117
+ "psycopg==3.2.6 ;sys_platform == 'linux'",
118
+ "psycopg==3.2.6 ;sys_platform == 'win32' and platform_machine == 'arm64'",
119
+ "psycopg==3.2.6 ;sys_platform == 'win32' and platform_machine == 'ARM64'",
120
+ "psycopg==3.2.6 ;sys_platform == 'win32' and platform_machine == 'aarch64'",
121
+ "psycopg==3.2.6 ;sys_platform == 'win32' and platform_machine == 'AARCH64'",
122
+ "psycopg[binary]==3.2.6 ;sys_platform != 'linux' and platform_machine != 'arm64' and platform_machine != 'ARM64' and platform_machine != 'aarch64' and platform_machine != 'AARCH64'",
99
123
  'protobuf>=4.25.3',
100
124
  'pypdf',
125
+ "pysqlite3-binary==0.5.4 ;sys_platform == 'linux' and platform_machine != 'arm64' and platform_machine != 'aarch64' and platform_machine != 'ARM64' and platform_machine != 'AARCH64'",
101
126
  'ipython',
102
127
  'markdownify',
103
128
  'beautifulsoup4',
104
- 'sentence-transformers',
129
+ "sentence-transformers ;sys_platform == 'linux'",
105
130
  'huggingface-hub',
106
- 'qdrant-client[fastembed]',
131
+ "qdrant-client[fastembed] ;sys_platform != 'win32'",
132
+ "qdrant-client[fastembed] ;sys_platform == 'win32' and platform_machine != 'arm64' and platform_machine != 'aarch64' and platform_machine != 'ARM64' and platform_machine != 'AARCH64'",
107
133
  'pgvector>=0.4.0',
108
- 'psycopg[binary]>=3.2.6',
109
- 'embedchain',
134
+ "psycopg[binary]>=3.2.6 ;sys_platform != 'win32'",
135
+ "psycopg>=3.2.6 ;sys_platform == 'win32'",
136
+ "embedchain ;sys_platform != 'win32'",
137
+ "embedchain ;sys_platform == 'win32' and platform_machine != 'arm64' and platform_machine != 'aarch64' and platform_machine != 'ARM64' and platform_machine != 'AARCH64'",
110
138
  'langchain-community>=0.3.12,<1',
111
139
  'pydantic-ai>=0.0.21',
112
140
  'pymongo>=4.11',
141
+ 'wikipedia-api>=0.8.1, <1.0',
142
+ 'google-api-python-client>=2.163.0,<3.0',
143
+ 'google-auth-httplib2>=0.2.0,<0.3',
144
+ 'google-auth-oauthlib>=1.2.1,<2.0',
145
+ 'mcp>=1.4.0,<1.6',
113
146
  ]
114
147
  test = [
115
148
  'pytest==8.3.5',
116
149
  'pytest-asyncio==0.26.0',
117
- 'pytest-cov==6.0.0',
150
+ 'pytest-cov==6.1.1',
118
151
  'pytest-html==4.1.1',
119
152
  'pytest-sugar==1.0.0',
120
153
  'pytest-timeout==2.3.1',
@@ -126,10 +159,10 @@ docs = [
126
159
  'mkdocs==1.6.1',
127
160
  'mkdocs-jupyter==0.25.1',
128
161
  'mkdocs-macros-plugin==1.3.7',
129
- 'mkdocs-material==9.6.9',
162
+ 'mkdocs-material==9.6.12',
130
163
  'mkdocs-minify-html-plugin==0.3.1',
131
- 'mkdocstrings[crystal,python]==0.29.0',
132
- 'mkdocstrings-python==1.16.8'
164
+ 'mkdocstrings[crystal,python]==0.29.1',
165
+ 'mkdocstrings-python==1.16.10'
133
166
  ]
134
167
 
135
168
  [project.scripts]
@@ -2,4 +2,4 @@
2
2
  # Copyright (c) 2024 - 2025 Waldiez and contributors.
3
3
  """Version information for Waldiez."""
4
4
 
5
- __version__ = "0.4.2"
5
+ __version__ = "0.4.4"
@@ -102,12 +102,12 @@ def generate_nested_config(
102
102
  with open(
103
103
  config_file_or_env_path, "w", encoding="utf-8", newline="\n"
104
104
  ) as f:
105
- json.dump([llm_config], f, ensure_ascii=False, indent=4)
105
+ json.dump(llm_config, f, ensure_ascii=False, indent=4)
106
106
  nested_config = {
107
107
  "autobuild_init_config": {
108
108
  "config_file_or_env": config_file_or_env_name,
109
- "builder_model": llm_config["model"],
110
- "agent_model": llm_config["model"],
109
+ "builder_model": llm_config["config_list"][0]["model"],
110
+ "agent_model": llm_config["config_list"][0]["model"],
111
111
  },
112
112
  "autobuild_build_config": get_auto_build_build_config(
113
113
  agent, llm_config
@@ -140,20 +140,29 @@ def get_llm_config(
140
140
  temperature: Optional[float] = 1
141
141
  top_p: Optional[float] = 0.95
142
142
  max_tokens: Optional[int] = 2048
143
+ config_dict: Dict[str, Any] = {}
143
144
  if agent.data.model_ids:
144
145
  waldiez_model = get_waldiez_model(agent.data.model_ids[0], all_models)
145
146
  llm_config = waldiez_model.get_llm_config(skip_price=True)
146
147
  for key in ["temperature", "top_p", "max_tokens"]:
147
148
  if key not in llm_config:
148
149
  llm_config[key] = None
149
- return llm_config
150
+ temp = llm_config.pop("temperature", None)
151
+ config_dict = {
152
+ "config_list": [llm_config],
153
+ }
154
+ if temp is not None:
155
+ config_dict["temperature"] = temp
156
+ return config_dict
150
157
  config_dict = {
151
158
  "model": model_name,
152
- "temperature": temperature,
153
159
  "top_p": top_p,
154
160
  "max_tokens": max_tokens,
155
161
  }
156
- return config_dict
162
+ return {
163
+ "config_list": [config_dict],
164
+ "temperature": temperature,
165
+ }
157
166
 
158
167
 
159
168
  def get_auto_build_build_config(
@@ -195,8 +204,8 @@ def get_auto_build_build_config(
195
204
  return {
196
205
  "default_llm_config": {
197
206
  "temperature": llm_config["temperature"],
198
- "top_p": llm_config["top_p"],
199
- "max_tokens": llm_config["max_tokens"],
207
+ "top_p": llm_config["config_list"][0]["top_p"],
208
+ "max_tokens": llm_config["config_list"][0]["max_tokens"],
200
209
  },
201
210
  "code_execution_config": code_execution_config,
202
211
  "coding": coding,
@@ -92,9 +92,11 @@ def get_agent_llm_config_arg(
92
92
  content = f"{tab}llm_config=" + "{\n"
93
93
  content += f'{tab} "config_list": ['
94
94
  got_at_least_one_model = False
95
+ temperature: Optional[float] = None
95
96
  for model_id in agent.data.model_ids:
96
97
  model = next((m for m in all_models if m.id == model_id), None)
97
98
  if model is not None:
99
+ temperature = model.data.temperature
98
100
  model_name = model_names[model_id]
99
101
  content += "\n" + f"{tab} {model_name}_llm_config,"
100
102
  got_at_least_one_model = True
@@ -102,6 +104,8 @@ def get_agent_llm_config_arg(
102
104
  return f"{tab}llm_config=False," + "\n"
103
105
  content += "\n" + f"{tab} ]," + "\n"
104
106
  content += f'{tab} "cache_seed": {cache_seed},' + "\n"
107
+ if temperature is not None:
108
+ content += f'{tab} "temperature": {temperature},' + "\n"
105
109
  content += tab + "},\n"
106
110
  return content
107
111
 
@@ -206,7 +206,7 @@ class WaldiezModel(WaldiezBase):
206
206
  for attr, atr_type in [
207
207
  ("base_url", str),
208
208
  ("max_tokens", int),
209
- ("temperature", float),
209
+ # ("temperature", float),
210
210
  ("top_p", float),
211
211
  ("api_version", str),
212
212
  ("default_headers", dict),
@@ -203,7 +203,9 @@ class WaldiezRunner:
203
203
  "NOTE: If new packages were added and you are using Jupyter, "
204
204
  "you might need to restart the kernel."
205
205
  )
206
- results: Union["ChatResult", List["ChatResult"]] = []
206
+ results: Union[
207
+ "ChatResult", List["ChatResult"], Dict[int, "ChatResult"]
208
+ ] = []
207
209
  with chdir(to=temp_dir):
208
210
  self._exporter.export(Path(file_name))
209
211
  spec = importlib.util.spec_from_file_location(
@@ -249,7 +251,9 @@ class WaldiezRunner:
249
251
  "NOTE: If new packages were added and you are using Jupyter, "
250
252
  "you might need to restart the kernel."
251
253
  )
252
- results: Union["ChatResult", List["ChatResult"]] = []
254
+ results: Union[
255
+ "ChatResult", List["ChatResult"], Dict[int, "ChatResult"]
256
+ ] = []
253
257
  async with a_chdir(to=temp_dir):
254
258
  self._exporter.export(Path(file_name))
255
259
  spec = importlib.util.spec_from_file_location(
@@ -279,7 +283,7 @@ class WaldiezRunner:
279
283
  output_path: Optional[Union[str, Path]] = None,
280
284
  uploads_root: Optional[Union[str, Path]] = None,
281
285
  skip_mmd: bool = False,
282
- ) -> Union["ChatResult", List["ChatResult"]]:
286
+ ) -> Union["ChatResult", List["ChatResult"], Dict[int, "ChatResult"]]:
283
287
  """Run the Waldiez workflow.
284
288
 
285
289
  Parameters
@@ -293,7 +297,7 @@ class WaldiezRunner:
293
297
 
294
298
  Returns
295
299
  -------
296
- Union[ChatResult, List[ChatResult]]
300
+ Union["ChatResult", List["ChatResult"], Dict[int, "ChatResult"]]
297
301
  The result(s) of the chat(s).
298
302
 
299
303
  Raises
@@ -3,7 +3,7 @@
3
3
  # pylint: disable=import-outside-toplevel,reimported
4
4
  """Environment related utilities."""
5
5
 
6
- import importlib.util
6
+ import importlib
7
7
  import os
8
8
  import site
9
9
  import sys
@@ -20,7 +20,8 @@ def in_virtualenv() -> bool:
20
20
  True if inside a virtualenv, False otherwise.
21
21
  """
22
22
  return hasattr(sys, "real_prefix") or (
23
- hasattr(sys, "base_prefix") and sys.base_prefix != sys.prefix
23
+ hasattr(sys, "base_prefix")
24
+ and os.path.realpath(sys.base_prefix) != os.path.realpath(sys.prefix)
24
25
  )
25
26
 
26
27
 
@@ -120,20 +120,34 @@ def install_requirements(
120
120
  requirements_string = ", ".join(extra_requirements)
121
121
  printer(f"Installing requirements: {requirements_string}")
122
122
  pip_install = [sys.executable, "-m", "pip", "install"]
123
- if not in_virtualenv():
123
+ if not in_virtualenv(): # it should
124
+ # if not, let's try to install as user
125
+ # not sure if --break-system-packages is safe
126
+ # but it might fail if we don't
127
+ break_system_packages = os.environ.get("PIP_BREAK_SYSTEM_PACKAGES", "")
128
+ os.environ["PIP_BREAK_SYSTEM_PACKAGES"] = "1"
124
129
  pip_install.append("--user")
125
130
  pip_install.extend(extra_requirements)
126
- with subprocess.Popen(
127
- pip_install,
128
- stdout=subprocess.PIPE,
129
- stderr=subprocess.PIPE,
130
- ) as proc:
131
- if proc.stdout:
132
- for line in io.TextIOWrapper(proc.stdout, encoding="utf-8"):
133
- printer(line.strip())
134
- if proc.stderr:
135
- for line in io.TextIOWrapper(proc.stderr, encoding="utf-8"):
136
- printer(line.strip())
131
+ # pylint: disable=too-many-try-statements
132
+ try:
133
+ with subprocess.Popen(
134
+ pip_install,
135
+ stdout=subprocess.PIPE,
136
+ stderr=subprocess.PIPE,
137
+ ) as proc:
138
+ if proc.stdout:
139
+ for line in io.TextIOWrapper(proc.stdout, encoding="utf-8"):
140
+ printer(line.strip())
141
+ if proc.stderr:
142
+ for line in io.TextIOWrapper(proc.stderr, encoding="utf-8"):
143
+ printer(line.strip())
144
+ finally:
145
+ if not in_virtualenv():
146
+ # restore the old env var
147
+ if break_system_packages:
148
+ os.environ["PIP_BREAK_SYSTEM_PACKAGES"] = break_system_packages
149
+ else:
150
+ del os.environ["PIP_BREAK_SYSTEM_PACKAGES"]
137
151
 
138
152
 
139
153
  async def a_install_requirements(
@@ -152,19 +166,29 @@ async def a_install_requirements(
152
166
  printer(f"Installing requirements: {requirements_string}")
153
167
  pip_install = [sys.executable, "-m", "pip", "install"]
154
168
  if not in_virtualenv():
155
- pip_install.extend(["--user", "--break-system-packages"])
169
+ break_system_packages = os.environ.get("PIP_BREAK_SYSTEM_PACKAGES", "")
170
+ os.environ["PIP_BREAK_SYSTEM_PACKAGES"] = "1"
171
+ pip_install.extend(["--user"])
156
172
  pip_install.extend(extra_requirements)
157
- proc = await asyncio.create_subprocess_exec(
158
- *pip_install,
159
- stdout=asyncio.subprocess.PIPE,
160
- stderr=asyncio.subprocess.PIPE,
161
- )
162
- if proc.stdout:
163
- async for line in proc.stdout:
164
- printer(line.decode().strip())
165
- if proc.stderr:
166
- async for line in proc.stderr:
167
- printer(line.decode().strip())
173
+ # pylint: disable=too-many-try-statements
174
+ try:
175
+ proc = await asyncio.create_subprocess_exec(
176
+ *pip_install,
177
+ stdout=asyncio.subprocess.PIPE,
178
+ stderr=asyncio.subprocess.PIPE,
179
+ )
180
+ if proc.stdout:
181
+ async for line in proc.stdout:
182
+ printer(line.decode().strip())
183
+ if proc.stderr:
184
+ async for line in proc.stderr:
185
+ printer(line.decode().strip())
186
+ finally:
187
+ if not in_virtualenv():
188
+ if break_system_packages:
189
+ os.environ["PIP_BREAK_SYSTEM_PACKAGES"] = break_system_packages
190
+ else:
191
+ del os.environ["PIP_BREAK_SYSTEM_PACKAGES"]
168
192
 
169
193
 
170
194
  def after_run(
@@ -7,6 +7,7 @@
7
7
  import typer
8
8
 
9
9
  from .jupyter import add_jupyter_cli
10
+ from .runner import add_runner_cli
10
11
  from .studio import add_studio_cli
11
12
 
12
13
 
@@ -24,6 +25,7 @@ def add_cli_extras(app: typer.Typer) -> None:
24
25
  The app with the extra commands added
25
26
  """
26
27
  add_jupyter_cli(app)
28
+ add_runner_cli(app)
27
29
  add_studio_cli(app)
28
30
 
29
31
 
@@ -0,0 +1,37 @@
1
+ # SPDX-License-Identifier: Apache-2.0.
2
+ # Copyright (c) 2024 - 2025 Waldiez and contributors.
3
+ # pylint: skip-file
4
+ # isort: skip_file
5
+ # flake8: noqa: E501,E402
6
+ """Waldiez-runner extra typer commands for CLI."""
7
+
8
+ from typing import Any, Callable
9
+
10
+ import typer
11
+ from typer.models import CommandInfo
12
+
13
+ HAVE_RUNNER = False
14
+ runner_app: Callable[..., Any] | None = None
15
+
16
+ try:
17
+ from waldiez_runner.cli import run # type: ignore[unused-ignore, import-not-found, import-untyped]
18
+
19
+ runner_app = run
20
+
21
+ HAVE_RUNNER = True
22
+ except BaseException:
23
+ pass
24
+
25
+
26
+ def add_runner_cli(app: typer.Typer) -> None:
27
+ """Add runner command to the app if available.
28
+
29
+ Parameters
30
+ ----------
31
+ app : typer.Typer
32
+ The Typer app to add the runner command to.
33
+ """
34
+ if HAVE_RUNNER:
35
+ app.registered_commands.append(
36
+ CommandInfo(name="serve", callback=runner_app)
37
+ )
@@ -9,6 +9,7 @@ Highly recommended to be run in a virtual environment.
9
9
  """
10
10
 
11
11
  import os
12
+ import platform
12
13
  import shutil
13
14
  import site
14
15
  import subprocess
@@ -121,7 +122,8 @@ def download_sqlite_amalgamation() -> str:
121
122
  os.remove(zip_path)
122
123
 
123
124
  # Return the path to the extracted source code
124
- return os.path.join(extract_path, "sqlite-amalgamation-3480000")
125
+ folder_name = SQLITE_URL.rsplit("/", 1)[-1].split(".")[0]
126
+ return os.path.join(extract_path, folder_name)
125
127
 
126
128
 
127
129
  def rename_package_name(pysqlite3_dir: str) -> None:
@@ -206,7 +208,9 @@ def check_pysqlite3() -> None:
206
208
  import pysqlite3 # type: ignore[unused-ignore, import-untyped, import-not-found] # noqa
207
209
  except ImportError:
208
210
  print("pysqlite3 not found or cannot be imported.")
209
- if sys.platform.lower() == "linux":
211
+ # and not arm64
212
+ is_arm = "arm" in platform.machine().lower()
213
+ if not is_arm and platform.system() == "Linux":
210
214
  pip_install("pysqlite3-binary")
211
215
  else:
212
216
  # Uninstall pysqlite3-binary if it is already installed
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