waldiez 0.4.5__py3-none-any.whl → 0.4.6__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.

Potentially problematic release.


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

waldiez/__init__.py CHANGED
@@ -5,41 +5,30 @@
5
5
  from .exporter import WaldiezExporter
6
6
  from .models import Waldiez
7
7
  from .runner import WaldiezRunner
8
- from .utils import check_conflicts, check_flaml_warnings
8
+ from .utils import check_conflicts, check_flaml_warnings, check_rpds_py
9
9
 
10
10
  # flake8: noqa: F401
11
11
  # pylint: disable=import-error,line-too-long
12
12
  # pyright: reportMissingImports=false
13
13
  try:
14
- from ._version import ( # type: ignore[unused-ignore, unused-import, import-not-found, import-untyped] # noqa
15
- __version__,
16
- )
14
+ # noqa: I001
15
+ from ._version import __version__ # type: ignore[unused-ignore, unused-import, import-not-found, import-untyped] # noqa
17
16
  except ImportError: # pragma: no cover
18
- # Fallback when using the package in dev mode without installing
19
- # in editable mode with pip. It is highly recommended to install
20
- # the package from a stable release or in editable mode:
21
- # https://pip.pypa.io/en/stable/topics/local-project-installs/#editable-installs
22
17
  import warnings
23
18
 
24
19
  warnings.warn(
25
- "Importing __version__ failed. Using 'dev' as version.", stacklevel=2
20
+ "Importing __version__ failed. Using 'dev' as version.",
21
+ stacklevel=2,
26
22
  )
27
23
  __version__ = "dev"
28
24
 
29
-
30
25
  __WALDIEZ_INITIALIZED = False
31
26
 
32
27
  if not __WALDIEZ_INITIALIZED:
33
28
  __WALDIEZ_INITIALIZED = True
34
29
  check_conflicts()
35
30
  check_flaml_warnings()
36
- # let's skip the one below
37
- # check_pysqlite3()
38
- # and use it only if needed:
39
- # captain_agent dependency:
40
- # before calling pip install pyautogen[captainagent]
41
- # we should have pysqlite3 installed (at least on windows)
42
- # before running a flow
31
+ check_rpds_py()
43
32
 
44
33
  __all__ = [
45
34
  "Waldiez",
waldiez/_version.py CHANGED
@@ -5,4 +5,4 @@
5
5
  This file is automatically generated by Hatchling.
6
6
  Do not edit this file directly.
7
7
  """
8
- __version__ = VERSION = "0.4.5"
8
+ __version__ = VERSION = "0.4.6"
@@ -18,7 +18,7 @@ def get_autogen_version() -> str:
18
18
  Raises
19
19
  ------
20
20
  ValueError
21
- If pyautogen is not installed.
21
+ If ag2 is not installed.
22
22
  """
23
23
  # pylint: disable=import-outside-toplevel
24
24
  with warnings.catch_warnings():
@@ -26,5 +26,5 @@ def get_autogen_version() -> str:
26
26
  try:
27
27
  from autogen.version import __version__ as ag2 # type: ignore
28
28
  except ImportError as error: # pragma: no cover
29
- raise ValueError("pyautogen is not installed.") from error
29
+ raise ValueError("ag2 is not installed.") from error
30
30
  return ag2
@@ -39,11 +39,11 @@ def get_models_extra_requirements(
39
39
  for requirement in model.requirements:
40
40
  model_requirements.add(requirement)
41
41
  if model.data.api_type == "google":
42
- model_requirements.add(f"pyautogen[gemini]=={autogen_version}")
42
+ model_requirements.add(f"ag2[gemini]=={autogen_version}")
43
43
  continue
44
44
  if model.data.api_type in models_with_additional_requirements:
45
45
  model_requirements.add(
46
- f"pyautogen[{model.data.api_type}]=={autogen_version}"
46
+ f"ag2[{model.data.api_type}]=={autogen_version}"
47
47
  )
48
48
  return model_requirements
49
49
 
@@ -28,13 +28,9 @@ def get_skills_extra_requirements(
28
28
  skill_requirements: Set[str] = set()
29
29
  for skill in skills:
30
30
  if skill.skill_type == "langchain":
31
- skill_requirements.add(
32
- f"pyautogen[interop-langchain]=={autogen_version}"
33
- )
31
+ skill_requirements.add(f"ag2[interop-langchain]=={autogen_version}")
34
32
  if skill.skill_type == "crewai":
35
- skill_requirements.add(
36
- f"pyautogen[interop-crewai]=={autogen_version}"
37
- )
33
+ skill_requirements.add(f"ag2[interop-crewai]=={autogen_version}")
38
34
  for requirement in skill.requirements:
39
35
  skill_requirements.add(requirement)
40
36
  return skill_requirements
waldiez/models/waldiez.py CHANGED
@@ -230,8 +230,9 @@ class Waldiez:
230
230
  """Get the flow requirements."""
231
231
  autogen_version = get_autogen_version()
232
232
  requirements_list = filter(
233
- # we use the fixed "pyautogen=={autogen_version}" below
233
+ # we use the fixed "ag2=={autogen_version}" below
234
234
  lambda requirement: not (
235
+ # cspell:disable-next-line
235
236
  requirement.startswith("pyautogen")
236
237
  or requirement.startswith("ag2")
237
238
  or requirement.startswith("autogen")
@@ -239,12 +240,12 @@ class Waldiez:
239
240
  self.flow.requirements,
240
241
  )
241
242
  requirements = set(requirements_list)
242
- requirements.add(f"pyautogen[openai]=={autogen_version}")
243
+ requirements.add(f"ag2[openai]=={autogen_version}")
243
244
  if self.has_rag_agents:
244
245
  rag_extras = get_retrievechat_extra_requirements(self.agents)
245
246
  requirements.update(rag_extras)
246
247
  if self.has_multimodal_agents:
247
- requirements.add(f"pyautogen[lmm]=={autogen_version}")
248
+ requirements.add(f"ag2[lmm]=={autogen_version}")
248
249
  if self.has_captain_agents:
249
250
  # pysqlite3-binary might not get installed on windows
250
251
  captain_extras = [
@@ -4,6 +4,7 @@
4
4
 
5
5
  from .environment import (
6
6
  in_virtualenv,
7
+ is_root,
7
8
  refresh_environment,
8
9
  reset_env_vars,
9
10
  set_env_vars,
@@ -26,6 +27,7 @@ __all__ = [
26
27
  "chdir",
27
28
  "get_printer",
28
29
  "in_virtualenv",
30
+ "is_root",
29
31
  "install_requirements",
30
32
  "refresh_environment",
31
33
  "reset_env_vars",
@@ -25,6 +25,26 @@ def in_virtualenv() -> bool:
25
25
  )
26
26
 
27
27
 
28
+ def is_root() -> bool:
29
+ """Check if the script is running as root/administrator.
30
+
31
+ Returns
32
+ -------
33
+ bool
34
+ True if running as root/administrator, False otherwise.
35
+ """
36
+ # pylint: disable=import-outside-toplevel,line-too-long
37
+ if os.name == "nt":
38
+ try:
39
+ import ctypes
40
+
41
+ return ctypes.windll.shell32.IsUserAnAdmin() != 0 # type: ignore[unused-ignore,attr-defined] # noqa: E501
42
+ except Exception: # pylint: disable=broad-exception-caught
43
+ return False
44
+ else:
45
+ return os.getuid() == 0
46
+
47
+
28
48
  def refresh_environment() -> None:
29
49
  """Refresh the environment."""
30
50
  with warnings.catch_warnings():
@@ -23,7 +23,7 @@ from typing import (
23
23
  Union,
24
24
  )
25
25
 
26
- from .environment import in_virtualenv
26
+ from .environment import in_virtualenv, is_root
27
27
  from .gen_seq_diagram import generate_sequence_diagram
28
28
 
29
29
  # pylint: disable=import-outside-toplevel
@@ -126,7 +126,8 @@ def install_requirements(
126
126
  # but it might fail if we don't
127
127
  break_system_packages = os.environ.get("PIP_BREAK_SYSTEM_PACKAGES", "")
128
128
  os.environ["PIP_BREAK_SYSTEM_PACKAGES"] = "1"
129
- pip_install.append("--user")
129
+ if not is_root():
130
+ pip_install.append("--user")
130
131
  pip_install.extend(extra_requirements)
131
132
  # pylint: disable=too-many-try-statements
132
133
  try:
waldiez/utils/__init__.py CHANGED
@@ -6,10 +6,12 @@ from .cli_extras import add_cli_extras
6
6
  from .conflict_checker import check_conflicts
7
7
  from .flaml_warnings import check_flaml_warnings
8
8
  from .pysqlite3_checker import check_pysqlite3
9
+ from .rdps_checker import check_rpds_py
9
10
 
10
11
  __all__ = [
11
12
  "check_conflicts",
12
13
  "check_flaml_warnings",
13
14
  "add_cli_extras",
14
15
  "check_pysqlite3",
16
+ "check_rpds_py",
15
17
  ]
@@ -17,11 +17,11 @@ def _check_conflicts() -> None: # pragma: no cover
17
17
  print(
18
18
  "Conflict detected: 'autogen-agentchat' is installed "
19
19
  "in the current environment, \n"
20
- "which conflicts with 'ag2' / 'pyautogen'.\n"
20
+ "which conflicts with 'ag2'.\n"
21
21
  "Please uninstall 'autogen-agentchat': \n"
22
22
  f"{sys.executable} -m pip uninstall -y autogen-agentchat" + "\n"
23
- "And install 'pyautogen' (and/or 'waldiez') again: \n"
24
- f"{sys.executable} -m pip install --force pyautogen waldiez",
23
+ "And install 'ag2' (and/or 'waldiez') again: \n"
24
+ f"{sys.executable} -m pip install --force ag2 waldiez",
25
25
  file=sys.stderr,
26
26
  )
27
27
  sys.exit(1)
@@ -8,6 +8,7 @@ Highly recommended to be run in a virtual environment.
8
8
  'setuptools' and 'wheel' will also be installed if not already installed.
9
9
  """
10
10
 
11
+ import contextlib
11
12
  import os
12
13
  import platform
13
14
  import shutil
@@ -22,10 +23,10 @@ PYSQLITE3_VERSION = "0.5.4"
22
23
  SQLITE_URL = "https://www.sqlite.org/2025/sqlite-amalgamation-3480000.zip"
23
24
  PYSQLITE3_URL = f"https://github.com/coleifer/pysqlite3/archive/refs/tags/{PYSQLITE3_VERSION}.zip" # pylint: disable=line-too-long
24
25
 
25
- PIP = f"{sys.executable} -m pip"
26
+ PIP = [sys.executable, "-m", "pip"]
26
27
 
27
28
 
28
- def run_command(command: str, cwd: str = ".") -> None:
29
+ def run_command(command: list[str], cwd: str = ".") -> None:
29
30
  """Run a command.
30
31
 
31
32
  Parameters
@@ -35,12 +36,11 @@ def run_command(command: str, cwd: str = ".") -> None:
35
36
  cwd : str
36
37
  The current working directory.
37
38
  """
38
- cmd_parts = command.split(" ")
39
39
  if cwd == ".":
40
40
  cwd = os.getcwd()
41
41
  try:
42
42
  subprocess.run( # nosemgrep # nosec
43
- cmd_parts,
43
+ command,
44
44
  check=True,
45
45
  cwd=cwd,
46
46
  env=os.environ,
@@ -64,6 +64,26 @@ def in_virtualenv() -> bool:
64
64
  )
65
65
 
66
66
 
67
+ def is_root() -> bool:
68
+ """Check if the script is running as root/administrator.
69
+
70
+ Returns
71
+ -------
72
+ bool
73
+ True if running as root/administrator, False otherwise.
74
+ """
75
+ # pylint: disable=import-outside-toplevel,line-too-long
76
+ if os.name == "nt":
77
+ try:
78
+ import ctypes
79
+
80
+ return ctypes.windll.shell32.IsUserAnAdmin() != 0 # type: ignore[unused-ignore,attr-defined] # noqa: E501
81
+ except Exception: # pylint: disable=broad-exception-caught
82
+ return False
83
+ else:
84
+ return os.getuid() == 0
85
+
86
+
67
87
  def pip_install(*package_names: str, cwd: str = ".") -> None:
68
88
  """Install packages using pip.
69
89
 
@@ -74,11 +94,19 @@ def pip_install(*package_names: str, cwd: str = ".") -> None:
74
94
  cwd : str
75
95
  The current working directory.
76
96
  """
77
- args = "-qq"
97
+ args = ["install", "-qq"]
98
+ break_system_packages = ""
99
+ if not in_virtualenv():
100
+ break_system_packages = os.environ.get("PIP_BREAK_SYSTEM_PACKAGES", "")
101
+ os.environ["PIP_BREAK_SYSTEM_PACKAGES"] = "1"
102
+ if not is_root():
103
+ args.append("--user")
104
+ run_command(PIP + args + list(package_names), cwd)
78
105
  if not in_virtualenv():
79
- args += " --user --break-system-packages"
80
- package_names_str = " ".join(package_names)
81
- run_command(f"{PIP} install {args} {package_names_str}", cwd)
106
+ if break_system_packages:
107
+ os.environ["PIP_BREAK_SYSTEM_PACKAGES"] = break_system_packages
108
+ else:
109
+ os.environ.pop("PIP_BREAK_SYSTEM_PACKAGES", None)
82
110
 
83
111
 
84
112
  def pip_uninstall(*package_names: str, cwd: str = ".") -> None:
@@ -91,11 +119,17 @@ def pip_uninstall(*package_names: str, cwd: str = ".") -> None:
91
119
  cwd : str
92
120
  The current working directory.
93
121
  """
94
- args = "-qq --yes"
122
+ args = ["uninstall", "-qq", "--yes"]
123
+ break_system_packages = ""
95
124
  if not in_virtualenv():
96
- args += " --break-system-packages"
97
- package_names_str = " ".join(package_names)
98
- run_command(f"{PIP} uninstall {args} {package_names_str}", cwd)
125
+ break_system_packages = os.environ.get("PIP_BREAK_SYSTEM_PACKAGES", "")
126
+ os.environ["PIP_BREAK_SYSTEM_PACKAGES"] = "1"
127
+ run_command(PIP + args + list(package_names), cwd)
128
+ if not in_virtualenv():
129
+ if break_system_packages:
130
+ os.environ["PIP_BREAK_SYSTEM_PACKAGES"] = break_system_packages
131
+ else:
132
+ os.environ.pop("PIP_BREAK_SYSTEM_PACKAGES", None)
99
133
 
100
134
 
101
135
  def download_sqlite_amalgamation() -> str:
@@ -187,15 +221,23 @@ def install_pysqlite3(sqlite_amalgamation_path: str) -> None:
187
221
  try:
188
222
  pysqlite3_dir = prepare_pysqlite3(sqlite_amalgamation_path)
189
223
  pip_install("setuptools")
190
- run_command(f"{sys.executable} setup.py build_static", pysqlite3_dir)
191
- pip_install("wheel")
192
- run_command(
193
- f"{PIP} wheel . -w dist",
194
- pysqlite3_dir,
195
- )
196
- wheel_file = os.listdir(os.path.join(pysqlite3_dir, "dist"))[0]
197
- wheel_path = os.path.join("dist", wheel_file)
198
- pip_install(wheel_path, cwd=pysqlite3_dir)
224
+ # let's suppress logs
225
+ with open(os.devnull, "w", encoding="utf-8") as devnull:
226
+ with (
227
+ contextlib.redirect_stdout(devnull),
228
+ contextlib.redirect_stderr(devnull),
229
+ ):
230
+ run_command(
231
+ [sys.executable, "setup.py", "build_static"], pysqlite3_dir
232
+ )
233
+ pip_install("wheel")
234
+ run_command(
235
+ PIP + ["wheel", ".", "-w", "dist"],
236
+ pysqlite3_dir,
237
+ )
238
+ wheel_file = os.listdir(os.path.join(pysqlite3_dir, "dist"))[0]
239
+ wheel_path = os.path.join("dist", wheel_file)
240
+ pip_install(wheel_path, cwd=pysqlite3_dir)
199
241
  except BaseException as e: # pylint: disable=broad-except
200
242
  print(f"Failed to install pysqlite3: {e}")
201
243
  sys.exit(1)
@@ -0,0 +1,122 @@
1
+ # SPDX-License-Identifier: Apache-2.0.
2
+ # Copyright (c) 2024 - 2025 Waldiez and contributors.
3
+ """
4
+ Check for rpds-py on Windows ARM64.
5
+
6
+ Since we cannot use direct git dependency for `rpds-py` in `pyproject.toml`,
7
+ let's check it here.
8
+
9
+ NOTE: We should regularly check if this is still needed.
10
+ """
11
+ # pylint: disable=import-outside-toplevel,unused-import
12
+
13
+ # "rpds-py @ git+https://github.com/crate-py/rpds.git@v0.24.0 ;
14
+ # sys_platform == "win32" and platform_machine == "AARCH64"",
15
+
16
+ import os
17
+ import platform
18
+ import subprocess
19
+ import sys
20
+
21
+ PIP = [sys.executable, "-m", "pip"]
22
+ RDPS_PY_VERSION = "0.24.0"
23
+ RDPS_PY_URL = f"git+https://github.com/crate-py/rpds.git@{RDPS_PY_VERSION}"
24
+
25
+
26
+ def is_windows_arm64() -> bool:
27
+ """Check if the current platform is Windows ARM64.
28
+
29
+ Returns
30
+ -------
31
+ bool
32
+ True if the platform is Windows ARM64, False otherwise.
33
+ """
34
+ return sys.platform == "win32" and platform.machine().lower() in [
35
+ "arm64",
36
+ "aarch64",
37
+ ]
38
+
39
+
40
+ def is_rpds_py_installed() -> bool:
41
+ """Check if `rpds-py` is installed.
42
+
43
+ Returns
44
+ -------
45
+ bool
46
+ True if `rpds-py` is installed, False otherwise.
47
+ """
48
+ try:
49
+ import rpds # noqa: F401
50
+
51
+ return True
52
+ except ImportError:
53
+ return False
54
+
55
+
56
+ def is_root() -> bool:
57
+ """Check if the script is running as root/administrator.
58
+
59
+ Returns
60
+ -------
61
+ bool
62
+ True if running as root/administrator, False otherwise.
63
+ """
64
+ # pylint: disable=import-outside-toplevel,line-too-long
65
+ if os.name == "nt":
66
+ try:
67
+ import ctypes
68
+
69
+ return ctypes.windll.shell32.IsUserAnAdmin() != 0 # type: ignore[unused-ignore,attr-defined] # noqa: E501
70
+ except Exception: # pylint: disable=broad-exception-caught
71
+ return False
72
+ else:
73
+ return os.getuid() == 0
74
+
75
+
76
+ def in_virtualenv() -> bool:
77
+ """Check if the current environment is a virtual environment.
78
+
79
+ Returns
80
+ -------
81
+ bool
82
+ True if in a virtual environment, False otherwise.
83
+ """
84
+ return hasattr(sys, "real_prefix") or (
85
+ hasattr(sys, "base_prefix")
86
+ and os.path.realpath(sys.base_prefix) != os.path.realpath(sys.prefix)
87
+ )
88
+
89
+
90
+ def install_rpds_py() -> None:
91
+ """Install `rpds-py`."""
92
+ command = PIP + ["install", "-qq"]
93
+ if not in_virtualenv():
94
+ break_system_packages = os.environ.get("PIP_BREAK_SYSTEM_PACKAGES", "")
95
+ os.environ["PIP_BREAK_SYSTEM_PACKAGES"] = "1"
96
+ if not is_root():
97
+ command.append("--user")
98
+ command.append(RDPS_PY_URL)
99
+ try:
100
+ subprocess.check_call(command)
101
+ except subprocess.CalledProcessError as e:
102
+ print(f"Failed to install rpds-py: {e}")
103
+ finally:
104
+ if not in_virtualenv():
105
+ # restore the old env var
106
+ if break_system_packages:
107
+ os.environ["PIP_BREAK_SYSTEM_PACKAGES"] = break_system_packages
108
+ else:
109
+ del os.environ["PIP_BREAK_SYSTEM_PACKAGES"]
110
+
111
+
112
+ def check_rpds_py() -> None:
113
+ """Check if `rpds-py` is installed on Windows ARM64."""
114
+ if not is_windows_arm64():
115
+ return
116
+ if is_rpds_py_installed():
117
+ return
118
+ install_rpds_py()
119
+
120
+
121
+ if __name__ == "__main__":
122
+ check_rpds_py()
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: waldiez
3
- Version: 0.4.5
3
+ Version: 0.4.6
4
4
  Dynamic: Keywords
5
- Summary: Make AI Agents Collaborate: Drag, Drop, and Orchestrate with Waldiez.
5
+ Summary: Make AG2 Agents Collaborate: Drag, Drop, and Orchestrate with Waldiez.
6
6
  Project-URL: Homepage, https://waldiez.io
7
7
  Project-URL: Bug Tracker, https://github.com/waldiez/waldiez/issues
8
8
  Project-URL: Repository, https://github.com/waldiez/waldiez.git
@@ -21,6 +21,7 @@ Classifier: Programming Language :: Python :: 3.11
21
21
  Classifier: Programming Language :: Python :: 3.12
22
22
  Classifier: Programming Language :: Python :: 3.13
23
23
  Requires-Python: <3.14,>=3.10
24
+ Requires-Dist: ag2[openai]==0.8.7
24
25
  Requires-Dist: aiocsv==1.3.2
25
26
  Requires-Dist: aiofiles==24.1.0
26
27
  Requires-Dist: aiosqlite==0.21.0
@@ -32,10 +33,26 @@ Requires-Dist: nest-asyncio==1.6.0
32
33
  Requires-Dist: numpy<=2.2.5
33
34
  Requires-Dist: pandas>=2
34
35
  Requires-Dist: parso==0.8.4
35
- Requires-Dist: pyautogen[openai]==0.8.7
36
+ Requires-Dist: pillow>=10.0.0
36
37
  Requires-Dist: pydantic<3,>=2.10.2
37
38
  Requires-Dist: typer<0.16,>=0.9
38
39
  Provides-Extra: ag2-extras
40
+ Requires-Dist: ag2[anthropic]==0.8.7; extra == 'ag2-extras'
41
+ Requires-Dist: ag2[bedrock]==0.8.7; extra == 'ag2-extras'
42
+ Requires-Dist: ag2[cohere]==0.8.7; extra == 'ag2-extras'
43
+ Requires-Dist: ag2[gemini]==0.8.7; (sys_platform != 'win32') and extra == 'ag2-extras'
44
+ Requires-Dist: ag2[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'
45
+ Requires-Dist: ag2[groq]==0.8.7; extra == 'ag2-extras'
46
+ Requires-Dist: ag2[interop-crewai]==0.8.7; extra == 'ag2-extras'
47
+ Requires-Dist: ag2[interop-langchain]==0.8.7; extra == 'ag2-extras'
48
+ Requires-Dist: ag2[lmm]==0.8.7; extra == 'ag2-extras'
49
+ Requires-Dist: ag2[mistral]==0.8.7; extra == 'ag2-extras'
50
+ Requires-Dist: ag2[neo4j]==0.8.7; (sys_platform != 'win32') and extra == 'ag2-extras'
51
+ Requires-Dist: ag2[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'
52
+ Requires-Dist: ag2[ollama]==0.8.7; extra == 'ag2-extras'
53
+ Requires-Dist: ag2[together]==0.8.7; (sys_platform != 'win32') and extra == 'ag2-extras'
54
+ Requires-Dist: ag2[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'
55
+ Requires-Dist: ag2[websurfer]==0.8.7; extra == 'ag2-extras'
39
56
  Requires-Dist: beautifulsoup4; extra == 'ag2-extras'
40
57
  Requires-Dist: chromadb>=0.5.10; (sys_platform != 'win32') and extra == 'ag2-extras'
41
58
  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'
@@ -59,22 +76,6 @@ Requires-Dist: psycopg==3.2.6; (sys_platform == 'win32' and platform_machine ==
59
76
  Requires-Dist: psycopg>=3.2.6; (sys_platform == 'win32') and extra == 'ag2-extras'
60
77
  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
78
  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'
78
79
  Requires-Dist: pydantic-ai>=0.0.21; extra == 'ag2-extras'
79
80
  Requires-Dist: pymongo>=4.11; extra == 'ag2-extras'
80
81
  Requires-Dist: pypdf; extra == 'ag2-extras'
@@ -97,12 +98,12 @@ Requires-Dist: pre-commit==4.2.0; extra == 'dev'
97
98
  Requires-Dist: pydocstyle==6.3.0; extra == 'dev'
98
99
  Requires-Dist: pylint==3.3.6; extra == 'dev'
99
100
  Requires-Dist: python-dotenv==1.1.0; extra == 'dev'
100
- Requires-Dist: ruff==0.11.7; extra == 'dev'
101
+ Requires-Dist: ruff==0.11.8; extra == 'dev'
101
102
  Requires-Dist: toml==0.10.2; (python_version <= '3.10') and extra == 'dev'
102
103
  Requires-Dist: types-pyyaml==6.0.12.20250402; extra == 'dev'
103
104
  Requires-Dist: types-requests==2.32.0.20250328; extra == 'dev'
104
105
  Requires-Dist: types-toml==0.10.8.20240310; extra == 'dev'
105
- Requires-Dist: yamllint==1.37.0; extra == 'dev'
106
+ Requires-Dist: yamllint==1.37.1; extra == 'dev'
106
107
  Provides-Extra: docs
107
108
  Requires-Dist: mdx-include==1.4.2; extra == 'docs'
108
109
  Requires-Dist: mdx-truly-sane-lists==1.3; extra == 'docs'
@@ -118,28 +119,31 @@ Requires-Dist: mkdocstrings[crystal,python]==0.29.1; extra == 'docs'
118
119
  Provides-Extra: jupyter
119
120
  Requires-Dist: jupyter-server==2.15.0; extra == 'jupyter'
120
121
  Requires-Dist: jupyterlab>=4.3.0; extra == 'jupyter'
121
- Requires-Dist: waldiez-jupyter==0.4.5; extra == 'jupyter'
122
+ Requires-Dist: waldiez-jupyter==0.4.6; extra == 'jupyter'
122
123
  Provides-Extra: runner
123
- Requires-Dist: waldiez-runner==0.4.5; (python_version >= '3.11') and extra == 'runner'
124
+ Requires-Dist: waldiez-runner==0.4.6; (python_version >= '3.11') and extra == 'runner'
124
125
  Provides-Extra: studio
125
- Requires-Dist: waldiez-studio==0.4.5; extra == 'studio'
126
+ Requires-Dist: waldiez-studio==0.4.6; extra == 'studio'
126
127
  Provides-Extra: test
127
128
  Requires-Dist: pytest-asyncio==0.26.0; extra == 'test'
128
129
  Requires-Dist: pytest-cov==6.1.1; extra == 'test'
129
130
  Requires-Dist: pytest-html==4.1.1; extra == 'test'
130
131
  Requires-Dist: pytest-sugar==1.0.0; extra == 'test'
131
- Requires-Dist: pytest-timeout==2.3.1; extra == 'test'
132
+ Requires-Dist: pytest-timeout==2.4.0; extra == 'test'
132
133
  Requires-Dist: pytest-xdist==3.6.1; extra == 'test'
133
134
  Requires-Dist: pytest==8.3.5; extra == 'test'
134
135
  Description-Content-Type: text/markdown
135
136
 
136
137
  # Waldiez
137
138
 
138
- ![CI Build](https://github.com/waldiez/python/actions/workflows/main.yaml/badge.svg) [![Coverage Status](https://coveralls.io/repos/github/waldiez/python/badge.svg)](https://coveralls.io/github/waldiez/python) [![PyPI version](https://badge.fury.io/py/waldiez.svg?icon=si%3Apython)](https://badge.fury.io/py/waldiez) [![npm version](https://badge.fury.io/js/@waldiez%2Freact.svg)](https://badge.fury.io/js/@waldiez%2Freact)
139
+ ![CI Build](https://github.com/waldiez/python/actions/workflows/main.yaml/badge.svg) [![Coverage Status](https://coveralls.io/repos/github/waldiez/python/badge.svg)](https://coveralls.io/github/waldiez/python) [![PyPI Downloads](https://static.pepy.tech/badge/waldiez)](https://pepy.tech/projects/waldiez) [![PyPI version](https://badge.fury.io/py/waldiez.svg?icon=si%3Apython)](https://badge.fury.io/py/waldiez) [![npm version](https://badge.fury.io/js/@waldiez%2Freact.svg)](https://badge.fury.io/js/@waldiez%2Freact)
139
140
 
140
- Translate a Waldiez flow:
141
+ ## Make AG2 Agents Collaborate: Drag, Drop, and Orchestrate with Waldiez
141
142
 
142
- ![Flow](https://raw.githubusercontent.com/waldiez/python/refs/heads/main/docs/static/images/overview.webp)
143
+ Design AI Agents and translate a Waldiez flow to AG2:
144
+
145
+
146
+ https://github.com/user-attachments/assets/71d4b8d1-a24b-45ab-ab53-dfc193e8fcaa
143
147
 
144
148
  To a python script or a jupyter notebook with the corresponding [ag2](https://github.com/ag2ai/ag2/) agents and chats.
145
149
 
@@ -278,7 +282,7 @@ runner.run(output_path=output_path)
278
282
 
279
283
  ## Known Conflicts
280
284
 
281
- - **autogen-agentchat**: This package conflicts with `ag2` / `pyautogen`. Ensure that `autogen-agentchat` is uninstalled before installing `waldiez`. If you have already installed `autogen-agentchat`, you can uninstall it with the following command:
285
+ - **autogen-agentchat**: This package conflicts with `ag2`. Ensure that `autogen-agentchat` is uninstalled before installing `waldiez`. If you have already installed `autogen-agentchat`, you can uninstall it with the following command:
282
286
 
283
287
  ```shell
284
288
  pip uninstall autogen-agentchat -y
@@ -287,7 +291,7 @@ runner.run(output_path=output_path)
287
291
  If already installed waldiez you might need to reinstall it after uninstalling `autogen-agentchat`:
288
292
 
289
293
  ```shell
290
- pip install --force --no-cache waldiez pyautogen
294
+ pip install --force --no-cache waldiez ag2
291
295
  ```
292
296
 
293
297
  ## See also
@@ -295,7 +299,7 @@ runner.run(output_path=output_path)
295
299
  - [Waldiez Playground](https://waldiez.github.io)
296
300
  - [React Component](https://github.com/waldiez/waldiez/blob/main/README.npm.md)
297
301
  - [Waldiez Studio](https://github.com/waldiez/studio)
298
- - [Waldiez JupyterLab Extension](htttps://github.com/waldiez/jupyter)
302
+ - [Waldiez JupyterLab Extension](https://github.com/waldiez/jupyter)
299
303
  - [Waldiez VSCode Extension](https://github.com/waldiez/vscode)
300
304
 
301
305
  ## Contributors ✨
@@ -311,6 +315,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
311
315
  <td align="center" valign="top" width="14.28%"><a href="https://scholar.google.com/citations?user=JmW9DwkAAAAJ"><img src="https://avatars.githubusercontent.com/u/29335277?v=4?s=100" width="100px;" alt="Panagiotis Kasnesis"/><br /><sub><b>Panagiotis Kasnesis</b></sub></a><br /><a href="#projectManagement-ounospanas" title="Project Management">📆</a> <a href="#research-ounospanas" title="Research">🔬</a></td>
312
316
  <td align="center" valign="top" width="14.28%"><a href="https://humancentered.gr/"><img src="https://avatars.githubusercontent.com/u/3456066?v=4?s=100" width="100px;" alt="Stella Ioannidou"/><br /><sub><b>Stella Ioannidou</b></sub></a><br /><a href="#promotion-siioannidou" title="Promotion">📣</a> <a href="#design-siioannidou" title="Design">🎨</a></td>
313
317
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/lazToum"><img src="https://avatars.githubusercontent.com/u/4764837?v=4?s=100" width="100px;" alt="Lazaros Toumanidis"/><br /><sub><b>Lazaros Toumanidis</b></sub></a><br /><a href="https://github.com/waldiez/react/commits?author=lazToum" title="Code">💻</a></td>
318
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/amaliacontiero"><img src="https://avatars.githubusercontent.com/u/29499343?v=4?s=100" width="100px;" alt="Amalia Contiero"/><br /><sub><b>Amalia Contiero</b></sub></a><br /><a href="https://github.com/waldiez/vscode/commits?author=amaliacontiero" title="Code">💻</a> <a href="https://github.com/waldiez/vscode/issues?q=author%3Aamaliacontiero" title="Bug reports">🐛</a></td>
314
319
  </tr>
315
320
  </tbody>
316
321
  <tfoot>
@@ -1,6 +1,6 @@
1
- waldiez/__init__.py,sha256=cEGX_g8FqjARFFA2sqC7EYTVLcSyCb_ucE5bhyoOb-w,1511
1
+ waldiez/__init__.py,sha256=U4oGMa1KiTlafBOPqYbayCpK_h9qEcNaU_duRJF8a7c,996
2
2
  waldiez/__main__.py,sha256=0dYzNrQbovRwQQvmZC6_1FDR1m71SUIOkTleO5tBnBw,203
3
- waldiez/_version.py,sha256=s0suKwPVndA8w6l7zwbIHM9ef1zobcGA4f_4nqo6Jm4,249
3
+ waldiez/_version.py,sha256=_rd8sjuq-MtGCE23TFqErBW5w6XPiQoRfmuRYWY-zE0,249
4
4
  waldiez/cli.py,sha256=OpC9ySHlKIJv61JQ1jlv9Ukbtp9A_QQeCMLiqReX53M,7434
5
5
  waldiez/exporter.py,sha256=43XJzMEBiTmGb3gSvOSPsyZOKBdY_Mc69T3vK4ITAZU,4822
6
6
  waldiez/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -59,7 +59,7 @@ waldiez/exporting/skills/__init__.py,sha256=sJm4ZnN3haldxRBgNlLK0qMK5YtydF2XnSaq
59
59
  waldiez/exporting/skills/skills_exporter.py,sha256=ANQASe2r4Je9FaYduO4YtT4O7nD9u2z31W47keENZog,5604
60
60
  waldiez/exporting/skills/utils.py,sha256=0AiNr0GmLp7jHG8eZgKqaMhBUvnNkNzVgvZwckr8hgQ,10966
61
61
  waldiez/models/__init__.py,sha256=JbEOjg1EwTJeG1OdX_rttqSIEC_t8g5OSIENJvz2Cvc,3997
62
- waldiez/models/waldiez.py,sha256=lFGoLXdTnlxdWCE0pddiPGCUWALByt8imsNCCLwaGnw,9987
62
+ waldiez/models/waldiez.py,sha256=5681bSgPD1c56CHgftbx_XwWi6udf0LoXdbLmtncTRo,10012
63
63
  waldiez/models/agents/__init__.py,sha256=bB1TKT8rqb_-SfCIIdjNi3Xkof4IVBtuhCubg2UEmXI,4970
64
64
  waldiez/models/agents/agents.py,sha256=kwUOlV4VJIgqhYBQHbAZhWzx3iENOvYilN3nDonZTIU,4605
65
65
  waldiez/models/agents/extra_requirements.py,sha256=6v61EsAUCKAiUi52_p4kanB9EgwGN9nRy7qV-f13tyc,2681
@@ -110,7 +110,7 @@ waldiez/models/chat/chat_message.py,sha256=X70P8ytqVt6wbwWUvl-8ANBOBGnaEm5s9yJxX
110
110
  waldiez/models/chat/chat_nested.py,sha256=C1ygS7TeB5emRIIIs_xFabKgXzze0HTEO4CIexedGKw,4132
111
111
  waldiez/models/chat/chat_summary.py,sha256=O7mHkIVpoB1Mqzf585qqemjmB1ojj8-jlK6x8TGWQcA,2960
112
112
  waldiez/models/common/__init__.py,sha256=dOocZwZn8OHMNHK1WyiKXboi5BkB3zIoGkJErA6orWg,617
113
- waldiez/models/common/ag2_version.py,sha256=p9EF8N2zsb14YXrbZtMIWYLUGFB_Jnjbm4o6tODCw-Q,744
113
+ waldiez/models/common/ag2_version.py,sha256=AYJEFEd_x24rhUn-Vfi56HoqcD6jEFLG96UtvJLN29E,732
114
114
  waldiez/models/common/base.py,sha256=caFhCnUH41OYyx19Zl2gHXzhlZbl8Ewmpc5t7LpYhjY,1961
115
115
  waldiez/models/common/date_utils.py,sha256=NdVmShZjvhDVT-Y5rT8FgwQTHcDoljBJQauTsE7gwbE,437
116
116
  waldiez/models/common/dict_utils.py,sha256=xfZ6fFJXGyW2yiPiBcGO7WKqhAlCH1sMRp_Z4__xyr0,1143
@@ -120,30 +120,30 @@ waldiez/models/flow/flow.py,sha256=nySjYauy8A5GQTyYx8QIonrPin3L172fWS_htTw5M04,1
120
120
  waldiez/models/flow/flow_data.py,sha256=afD97Ff9Yd7QSXE4DphaENY7wqrq4QIl4EVgI8O4ZFk,5464
121
121
  waldiez/models/flow/utils.py,sha256=X_jelP5lHuQt1OZE6sxLlhEKbkkt8jZgbkF79e9rQig,7140
122
122
  waldiez/models/model/__init__.py,sha256=jyJHJWzqNxnmDHAhpXWMnMK_4VF2olPIE3k7KV7_xVg,532
123
- waldiez/models/model/extra_requirements.py,sha256=KgqzixbsvzM6Ec8rdQEVoWtyNusqW33ukdRoBHS5LAg,1690
123
+ waldiez/models/model/extra_requirements.py,sha256=UskYG8CkzUoV-lMK1IDkbfpNHoJnBJX6adSqn2ixEDY,1678
124
124
  waldiez/models/model/model.py,sha256=kvF1LdcIUfAEoBgfVC-nVbib9k5mma2hSGNDvf0vMaQ,7745
125
125
  waldiez/models/model/model_data.py,sha256=xB6ovuB5Rvz9Jc3A_K8CEI55E4EPLofGuVcN4ehxkvE,3794
126
126
  waldiez/models/skill/__init__.py,sha256=EMkjfsMUU-2H5cZ4NhzHJWuyaSp605whT-zf7Gxt4aA,470
127
- waldiez/models/skill/extra_requirements.py,sha256=mB7kqhhK8y2ACJwLjrpxY51F53ET50HfWX92Ccv9Vkc,1083
127
+ waldiez/models/skill/extra_requirements.py,sha256=dpvcZFo8Sabu8cO6uhGnF6Lkei93rCcWtL9Lmnz-80Q,1011
128
128
  waldiez/models/skill/skill.py,sha256=Dw7sqxj78i430eTIOrkH8OFBJVLefgyJkoBn11foOx0,9083
129
129
  waldiez/models/skill/skill_data.py,sha256=22ZrXHmjOy-7WAr8_QmmfW9RNIQiMUEBI8smucVC0hQ,1347
130
130
  waldiez/models/skill/skill_type.py,sha256=TUL5MADIwZRxODoViDWC65AmRLpi7ofqW-X90hm2XhA,271
131
- waldiez/running/__init__.py,sha256=hptO_sDFv0Alg-YJmLN-A49SeQ4YyWUMP8nBH21qO-o,633
132
- waldiez/running/environment.py,sha256=NyCA-CnHSLR_ctP2y4OLT7-CyVs3c9005WPYc5R-2co,3706
131
+ waldiez/running/__init__.py,sha256=YwFm4LZueb3GPK5NE6nFpUrXx1kCDVD-iq_ytFZPCy4,661
132
+ waldiez/running/environment.py,sha256=W_2vhDwDXuw4JkcfVsm0W5r4IEWFT1kOxTOja_HVpRw,4277
133
133
  waldiez/running/gen_seq_diagram.py,sha256=eK4Lw53FQGxsFw5cgvDiYoHgOuEOBpmkMXujn1KM4zo,5700
134
- waldiez/running/running.py,sha256=zlHdCUhIVkzA4fYpW9oRJwLEm-gHLz_4cpPWeUafK98,11002
135
- waldiez/utils/__init__.py,sha256=M7ZqIInj2371ojAO73OuEPZ3fF17WZVbGE-37oyJwl0,415
136
- waldiez/utils/check_rdps.py,sha256=f7B3BWKuPch0arwYAGDzVeHYGJV78xQhvCWTJ_UnzuE,793
137
- waldiez/utils/conflict_checker.py,sha256=v7BNDenJSHfPBfqb4PnxaVZwjPqzWlh5w31WC9uOJL4,1369
134
+ waldiez/running/running.py,sha256=BiyKps4a2algca1iEtUJZTsDiq_y2YIlaxCzgD77C60,11041
135
+ waldiez/utils/__init__.py,sha256=eXTOaK9bP7IEEJaFT2_WtiEl-eBfk8G-VoQC_pURoCA,476
136
+ waldiez/utils/conflict_checker.py,sha256=wJTMTbRP06BwBMYPUxkyOCNTTG745c13iBlmhwyaMMI,1343
138
137
  waldiez/utils/flaml_warnings.py,sha256=jgdS8zwzuWPodTgm9nnx3wO5MrOUbR7P7IRj9-aq2qk,601
139
- waldiez/utils/pysqlite3_checker.py,sha256=v6_0XRCSe_gSVHK-7pLyFPTCSnh2KYjWs0_pWcS4Y6c,8277
138
+ waldiez/utils/pysqlite3_checker.py,sha256=kZNcb2LhMNVGHN_hwndo3O7zWL9LquQQFuAWT43Kfxk,9832
139
+ waldiez/utils/rdps_checker.py,sha256=WePaKG0eKsWmqD-ELw_1bK95C3llSrvo6Zq4ct0CDBU,3235
140
140
  waldiez/utils/cli_extras/__init__.py,sha256=ZvuLaN3IGuffWMh7mladTGkJxx3kn5IepUF3jk4ZAWY,684
141
141
  waldiez/utils/cli_extras/jupyter.py,sha256=C4fOiS_PbU15X-6HUZBPHvfgEjOrY39e07mClKvswPI,2971
142
142
  waldiez/utils/cli_extras/runner.py,sha256=VZB3H1etwmacCVHEEZhOkhfNUMDuAErUXgnuHzrwMRY,888
143
143
  waldiez/utils/cli_extras/studio.py,sha256=JTlkLuXgqDC0z79hT-LNiSqniXcql7jyz1nQ517-xKI,889
144
- waldiez-0.4.5.dist-info/METADATA,sha256=89SsaH8n6eUx6sx87RZTcevm-I_L8g1_c6oWTwToET8,16177
145
- waldiez-0.4.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
146
- waldiez-0.4.5.dist-info/entry_points.txt,sha256=9MQ8Y1rD19CU7UwjNPwoyTRpQsPs2QimjrtwTD0bD6k,44
147
- waldiez-0.4.5.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
148
- waldiez-0.4.5.dist-info/licenses/NOTICE.md,sha256=L7xtckFRYvYJjhjQNtFpURWCiAvEuq4ePvxJsC-XAdk,785
149
- waldiez-0.4.5.dist-info/RECORD,,
144
+ waldiez-0.4.6.dist-info/METADATA,sha256=HRhMbeJusyhpQtAA7e52B7QdgaaaeybdGIH-39-Km2U,16718
145
+ waldiez-0.4.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
146
+ waldiez-0.4.6.dist-info/entry_points.txt,sha256=9MQ8Y1rD19CU7UwjNPwoyTRpQsPs2QimjrtwTD0bD6k,44
147
+ waldiez-0.4.6.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
148
+ waldiez-0.4.6.dist-info/licenses/NOTICE.md,sha256=L7xtckFRYvYJjhjQNtFpURWCiAvEuq4ePvxJsC-XAdk,785
149
+ waldiez-0.4.6.dist-info/RECORD,,
@@ -1,18 +0,0 @@
1
- # SPDX-License-Identifier: Apache-2.0.
2
- # Copyright (c) 2024 - 2025 Waldiez and contributors.
3
- """
4
- Check for rpds-py on Windows ARM64.
5
-
6
- Since we cannot use direct git dependency on `rpds-py` in `pyproject.toml`,
7
- let's check it here.
8
-
9
- NOTE: We should regularly check if this is still needed.
10
- """
11
- # "rpds-py @ git+https://github.com/crate-py/rpds.git@v0.24.0 ;
12
- # sys_platform == "win32" and platform_machine == "arm64"",
13
- # "rpds-py @ git+https://github.com/crate-py/rpds.git@v0.24.0 ;
14
- # sys_platform == "win32" and platform_machine == "ARM64"",
15
- # "rpds-py @ git+https://github.com/crate-py/rpds.git@v0.24.0 ;
16
- # sys_platform == "win32" and platform_machine == "aarch64"",
17
- # "rpds-py @ git+https://github.com/crate-py/rpds.git@v0.24.0 ;
18
- # sys_platform == "win32" and platform_machine == "AARCH64"",