🕺 Groovy
Hello! This is groovy, a Python library that makes it easy to build, debug, and share workflows (flows), e.g. autonomous applications that perform actions using your browser or desktop.
✨ Build flows with a simple high-level Flow class that can wrap any kind of application. Since groovy comes "batteries-included", you can write your first Flow to control a browser in just a single line.
🔎 Debug flows with an intuitive Gradio user interface, that exposes agent thought while it runs and allows users to "step-in" and intervene at any point.
🤗 Share flows on Hugging Face Spaces publicly (or with specific collaborators) and reuse flows from the community
Installation
$ pip install groovy[full]
Key Features
1. Get started immediately ✨
Run browser automations with a single terminal command. No need for complex setup or boilerplate code:
$ groovy flow "Use Wikipedia to tell me the birth date of George Washington. Return the final answer in this format: MM-DD-YYYY."
Note: by default, Groovy uses a web-browsing agent built using the excellent smolagents library. The web-browsing agent works best when provided detailed, step-by-step instructions.
2. Customize Flows
Create interactive automation apps using the Flow class. You can define input parameters that users can customize before running the flow:
from groovy import Flow
import gradio as gr
flow = Flow(
task="Find the next upcoming meetup in {} related to {}",
inputs=[
gr.Textbox(label="Location", value="San Francisco")
gr.Textbox(label="Activity", value="board games"),
]
)
flow.launch()
Run Flows Programmatically
The Flow class can also be run programmatically so that it can be used as part of larger programs. Here's an example:
from groovy import Flow
import csv
flow = Flow(task="Find the next upcoming meetup in {} related to {}")
cities = [
"San Francisco", "New York", "Chicago", "Los Angeles", "Seattle",
"Austin", "Boston", "Denver", "Portland", "Miami"
]
results = []
for city in cities:
event_info = flow.run(city, "board games")
results.append({"city": city, "event": event_info})
with open("board_game_events.csv", "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["city", "event"])
writer.writeheader()
writer.writerows(results)
3. Easy Sharing via Hugging Face Spaces
Share your automation workflows with others by publishing to Hugging Face Spaces. Just navigate to your project folder and run:
$ groovy publish
This will create a public (you can change visibility to private) Hugging Face Space where others can access and use your automation.
4. Use Community Workflows
Take advantage of existing workflows created by the community. Run any published workflow locally, e.g.:
$ groovy flow https://huggingface.co/spaces/abidlabs/Activity_Finder
The Python equivalent to load a Flow from Spaces is:
import groovy as gv
flow = gv.Flow.from_space("https://huggingface.co/spaces/abidlabs/Activity_Finder")
Roadmap aka leftover TODOs
- Support structured generation in
.run()-- how would this work? - Support
max_steps/max_timein.run() - Make it easier to modify the default agent
- Allow
taskto be an arbitrary function of inputs, not just a format string - Add
Flow.run(**input)which runs the flow programmatically without the Gradio UI - Add support for
browser-useand desktop apps - Make screen recording more robust
- Generally improve troubleshooting
- Add support for using the user's default browser
- Add better examples in readme / Spaces (twitter explorer find tweets about a particular topic), research presidents' wife. Chain Flows together
- Autogenerated docs
- Better cleanup of gradio ui and browsing windows when script is terminated
- Allow pausing / stopping from gradio ui
- Improve default BrowserAgent tool as it gives lookup errors way too often.
- Warn before using OPENAI_API_KEY / HF_TOKEN
Contributing
Contributions are welcome! Feel free to submit bug reports and feature requests or submit pull requests. Star this repo if you find it interesting ⭐
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file groovy-0.0.14.tar.gz.
File metadata
- Download URL: groovy-0.0.14.tar.gz
- Upload date:
- Size: 19.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ad2cef9349df7cde675e1b9b7bf7015f3a1adb041e9080c15db9363f61fa7a5
|
|
| MD5 |
2a860a643a66d19a057ba8d3bf96e343
|
|
| BLAKE2b-256 |
5dc2d6415c77475718d9c15149bdeddaf90fe5462479254bf616b395f5b6f3cf
|
File details
Details for the file groovy-0.0.14-py3-none-any.whl.
File metadata
- Download URL: groovy-0.0.14-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.1.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7bed0d443f1fdc1632833b82c866646937f01d7dc8140a07a266f0a9deb6bda
|
|
| MD5 |
28696392eebd75f2383b9810ff3065d9
|
|
| BLAKE2b-256 |
2ab06615c7d6fb75a9be0a9108e949f4f35c4c891a426c16453d42d10b7679dd
|