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.8.tar.gz
(60.9 kB
view details)
Built Distribution
waldiez-0.1.8-py3-none-any.whl
(96.6 kB
view details)
File details
Details for the file waldiez-0.1.8.tar.gz
.
File metadata
- Download URL: waldiez-0.1.8.tar.gz
- Upload date:
- Size: 60.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 59b5b2f7e8c516297c3e40b7a986609878ed1d08a5dac1866ee9af610a896547 |
|
MD5 | 6ee1f4c050cfd9372d82c63d6f28cfa4 |
|
BLAKE2b-256 | 6218fdca57984196fb1c9103b90bbb37dce0837b12653372a40270cb59af699a |
Provenance
The following attestation bundles were made for waldiez-0.1.8.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.8.tar.gz
- Subject digest:
59b5b2f7e8c516297c3e40b7a986609878ed1d08a5dac1866ee9af610a896547
- Sigstore transparency entry: 149952656
- Sigstore integration time:
- Predicate type:
File details
Details for the file waldiez-0.1.8-py3-none-any.whl
.
File metadata
- Download URL: waldiez-0.1.8-py3-none-any.whl
- Upload date:
- Size: 96.6 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 | 54133f158fa29f076b5820cf3759023d1bc335aef76f00478a198dd15114c5b8 |
|
MD5 | 7c3402e7d9ce161ef0fa2f8846fd8f3b |
|
BLAKE2b-256 | f88c6dd0d660e81e1f3a3df1b9541b81b50948ab2dcc80c52087f5b1931800c6 |
Provenance
The following attestation bundles were made for waldiez-0.1.8-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.8-py3-none-any.whl
- Subject digest:
54133f158fa29f076b5820cf3759023d1bc335aef76f00478a198dd15114c5b8
- Sigstore transparency entry: 149952657
- Sigstore integration time:
- Predicate type: