waldiez
Project description
Waldiez
Translate a Waldiez flow:
To a python script or a jupyter notebook with the corresponding ag2 agents and chats.
Features
- Export .waldiez flows to .py or .ipynb
- Run a .waldiez flow
- Include a
logs
folder with the logs of the flow in csv format - Provide a custom IOSStream to handle input and output.
Installation
On PyPI:
python -m pip install waldiez
From the repository:
python -m pip install git+https://github.com/waldiez/waldiez.git
Usage
CLI
# Export a Waldiez flow to a python script or a jupyter notebook
waldiez --export /path/to/a/flow.waldiez --output /path/to/an/output/flow[.py|.ipynb]
# Export and run the script, optionally force generation if the output file already exists
waldiez /path/to/a/flow.waldiez --output /path/to/an/output/flow[.py] [--force]
Using docker/podman
CONTAINER_COMMAND=docker # or podman
# pull the image
$CONTAINER_COMMAND pull waldiez/waldiez
# Export a Waldiez flow to a python script or a jupyter notebook
$CONTAINER_COMMAND run \
--rm \
-v /path/to/a/flow.waldiez:/flow.waldiez \
-v /path/to/an/output:/output \
waldiez/waldiez --export /flow.waldiez --output /output/flow[.py|.ipynb]
# with selinux and/or podman, you might get permission (or file not found) errors, so you can try:
$CONTAINER_COMMAND run \
--rm \
-v /path/to/a/flow.waldiez:/flow.waldiez \
-v /path/to/an/output:/output \
--userns=keep-id \
--security-opt label=disable \
waldiez/waldiez --export /flow.waldiez --output /output/flow[.py|.ipynb]
# Export and run the script
$CONTAINER_COMMAND run --rm -v /path/to/a/flow.waldiez:/flow.waldiez -v /path/to/an/output:/output waldiez/waldiez /flow.waldiez --output /output/output[.py]
As a library
Export a flow
# Export a Waldiez flow to a python script or a jupyter notebook
from waldiez import WaldiezExporter
flow_path = "/path/to/a/flow.waldiez"
output_path = "/path/to/an/output.py" # or .ipynb
exporter = WaldiezExporter.load(flow_path)
exporter.export(output_path)
Run a flow
# Run a flow
from waldiez import WaldiezRunner
flow_path = "/path/to/a/flow.waldiez"
output_path = "/path/to/an/output.py"
runner = WaldiezRunner.load(flow_path)
runner.run(output_path=output_path)
Run a flow with a custom IOStream
# Run the flow with a custom IOStream
# In case the standard 'input' and 'print' functions cannot be used
import time
import threading
from typing import Any
from waldiez import WaldiezRunner
from waldiez.io import WaldiezIOStream
flow_path = "/path/to/a/flow.waldiez"
output_path = "/path/to/an/output.py"
def custom_print_function(*args: Any, sep: str = " ", **kwargs: Any) -> None:
"""Custom print function."""
print(*args, sep=sep, **kwargs)
# Custom input handler
class InputProcessorWrapper:
"""Wrapper input processor.
To manage the interaction between the custom input processor and IOStream.
"""
def __init__(self):
self.stream = None # Placeholder for the WaldiezIOStream instance
self.lock = threading.Lock() # Ensure thread-safe operations
def custom_input_processor(self, prompt: str) -> None:
"""Simulate external input and send it back to the IOStream."""
def external_input_simulation():
with self.lock: # Ensure thread-safe access
time.sleep(2) # Simulate delay for network input
if self.stream:
self.stream.set_input("Simulated external input")
else:
raise RuntimeError("Stream reference not set!")
threading.Thread(target=external_input_simulation, daemon=True).start()
def set_stream(self, stream: "WaldiezIOStream"):
"""Set the WaldiezIOStream instance."""
with self.lock: # Ensure thread-safe setting of the stream
self.stream = stream
processor_wrapper = InputProcessorWrapper()
stream = WaldiezIOStream(
input_timeout=30,
print_function=
on_prompt_input=processor_wrapper.custom_input_processor,
)
# Link the processor wrapper to the WaldiezIOStream instance
processor_wrapper.set_stream(custom_stream)
with WaldiezIOStream.set_default(io_stream):
runner = WaldiezRunner.load(flow_path)
runner.run(stream=io_stream, output_path=output_path)
Tools
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
waldiez-0.1.10.tar.gz
(61.6 kB
view details)
Built Distribution
waldiez-0.1.10-py3-none-any.whl
(97.2 kB
view details)
File details
Details for the file waldiez-0.1.10.tar.gz
.
File metadata
- Download URL: waldiez-0.1.10.tar.gz
- Upload date:
- Size: 61.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 85bd79188464a615a49115344609cd64f6b637832fd4b1bf3c3350a8f80bb3da |
|
MD5 | d0fcd0f985fc439808256160bcc55afe |
|
BLAKE2b-256 | eef5f1ff1fc2034942967502c96497d92e741836af3abb1894ac97f64caa2f9f |
Provenance
The following attestation bundles were made for waldiez-0.1.10.tar.gz
:
Publisher:
release.yaml
on waldiez/waldiez
-
Statement type:
https://in-toto.io/Statement/v1
- Predicate type:
https://docs.pypi.org/attestations/publish/v1
- Subject name:
waldiez-0.1.10.tar.gz
- Subject digest:
85bd79188464a615a49115344609cd64f6b637832fd4b1bf3c3350a8f80bb3da
- Sigstore transparency entry: 150178590
- Sigstore integration time:
- Predicate type:
File details
Details for the file waldiez-0.1.10-py3-none-any.whl
.
File metadata
- Download URL: waldiez-0.1.10-py3-none-any.whl
- Upload date:
- Size: 97.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6b3c85e228841be73ecc7a2e08b1a977a4192f64e3ac702b38dc924deee58d2d |
|
MD5 | d5e786a4161c4385cf458f5535a46814 |
|
BLAKE2b-256 | 679309b0bddb7759fe23908881953bee0ebf3216c0b3c09a27c7466ee587584a |
Provenance
The following attestation bundles were made for waldiez-0.1.10-py3-none-any.whl
:
Publisher:
release.yaml
on waldiez/waldiez
-
Statement type:
https://in-toto.io/Statement/v1
- Predicate type:
https://docs.pypi.org/attestations/publish/v1
- Subject name:
waldiez-0.1.10-py3-none-any.whl
- Subject digest:
6b3c85e228841be73ecc7a2e08b1a977a4192f64e3ac702b38dc924deee58d2d
- Sigstore transparency entry: 150178591
- Sigstore integration time:
- Predicate type: