Declarative and Distributed Benchmarking for AI Agents.
Project description
pySunshower
Declarative and Distributed Benchmarking for AI Agents
pySunshower is a Python library for evaluating AI agents during the design phase of system development. It allows you to pit AI agents against each other in parallel environments to find the best architecture for your specific agent-driven task.
Overview
Not all AI agents are created equal. In the design phase of system development, choosing the right harness and model is critical. pySunshower automates this decision-making process by running trials in parallel and using an LLM to score the results.
Features
- Declarative: Define your entire experiment (teams, models, harnesses, and metrics) in YAML
- Efficient: Uses Ray to run multiple trials in parallel across available CPU/GPU cores
- Automated Judging: Implements a LLM-as-a-Judge approach to evaluate outputs based on custom rubrics like
accuracy,cost,trajectory, andspeed
Installation
Step 1. Create a Python virtual environment.
python -m venv .venv
Step 2. Activate the Python virtual environment you just created. This step assumes you're working in a Linux-based environment. If you're using another operating system, adjust accordingly.
source .venv/bin/activate
Step 3. Install pySunshower.
pip install pysunshower
The Experiment Schema
pySunshower uses Kubernetes-inspired YAML to define experiments. The example below defines an experiment that will run two different AI agents three times (in parallel).
---
apiVersion: v1
kind: ExperimentSet
metadata:
name: Experiment Set 1
description: The purpose of this experiment is to determine which team is the best at achieving the task.
spec:
task: Generate a report that summarized the top 3 trending topics in cyber-related news.
trials: 3
teams:
- name: Team 1
agents:
- name: Alpha
model:
provider: openai
name: gpt-4.1
prompt: You are a helpful assistant.
harness:
tools:
- serper
- name: Team 2
agents:
- name: Bravo
model:
provider: openai
name: gpt-4.1
prompt: You are a Cyber Threat Intelligence analyst assigned to support a Cyber Security Service Provider (CSSP) within the Department of Defense.
harness:
tools:
- serper
judges:
- name: Judge 1
model:
provider: openai
name: gpt-4.1
prompt: You are a judge responsible for evaluating the output of AI agents.
harness:
tools:
- serper
metricsToEvaluate:
- metric: cost
prompt: The total cost for the agent's execution must not exceed $0.05 USD, calculated from total token usage for all LLM calls.
- metric: speed
prompt: The agent's total execution time must remain under 3.0 seconds.
- metric: trajectory
prompt: Penalize the team 1 point for every unnecessary tool call made during the workflow.
teamsToEvaluate: [ all ]
Usage
Step 1. Create a .env file in your current working directory to contain your API keys.
OPENAI_API_KEY=your_key_here
SERPER_API_KEY=your_key_here
Step 2. Run an experiment using a Python script or Jupyter Notebook. Below is a code block example.
from sunshower import engine
# This will:
# 1. Spin up a local Ray cluster
# 2. Run your agents in parallel
# 3. Generate a 'results.md' scorecard
engine.start(experiments.yaml)
Step 3. After the run finishes, pySunshower will produce a results.md containing a detailed breakdown of which team "won" based on the criteria defined in your experiment file.
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
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 pysunshower-0.0.4.tar.gz.
File metadata
- Download URL: pysunshower-0.0.4.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8360e971f3085a17c4d6b48eb1c45fb7bba9ae84ce0771fb0c96dad61455690
|
|
| MD5 |
04cbdc1a6c0c4ac4b7347c1cc508aa7c
|
|
| BLAKE2b-256 |
cc869f1cd2c82abf69eb2627929b7c1ee0c18905fb32d6f6dc091ed908ddaab9
|
Provenance
The following attestation bundles were made for pysunshower-0.0.4.tar.gz:
Publisher:
publish.yaml on deathlabs/pySunshower
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pysunshower-0.0.4.tar.gz -
Subject digest:
d8360e971f3085a17c4d6b48eb1c45fb7bba9ae84ce0771fb0c96dad61455690 - Sigstore transparency entry: 857197255
- Sigstore integration time:
-
Permalink:
deathlabs/pySunshower@f4c749e1fc68b8c2fe5011ac1e8e192fc921a3b0 -
Branch / Tag:
refs/tags/v0.0.4 - Owner: https://github.com/deathlabs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@f4c749e1fc68b8c2fe5011ac1e8e192fc921a3b0 -
Trigger Event:
release
-
Statement type:
File details
Details for the file pysunshower-0.0.4-py3-none-any.whl.
File metadata
- Download URL: pysunshower-0.0.4-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
548a9ca486571468c976d31b9ee882210d91f695ac0fd4c9616716dc4beee502
|
|
| MD5 |
a6bec7bf114ebed0ffdf63980fb50994
|
|
| BLAKE2b-256 |
9dce88a6e4d56e5312b0209d055379dd38da947de0be5ea2b915f1078e69108e
|
Provenance
The following attestation bundles were made for pysunshower-0.0.4-py3-none-any.whl:
Publisher:
publish.yaml on deathlabs/pySunshower
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pysunshower-0.0.4-py3-none-any.whl -
Subject digest:
548a9ca486571468c976d31b9ee882210d91f695ac0fd4c9616716dc4beee502 - Sigstore transparency entry: 857197258
- Sigstore integration time:
-
Permalink:
deathlabs/pySunshower@f4c749e1fc68b8c2fe5011ac1e8e192fc921a3b0 -
Branch / Tag:
refs/tags/v0.0.4 - Owner: https://github.com/deathlabs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@f4c749e1fc68b8c2fe5011ac1e8e192fc921a3b0 -
Trigger Event:
release
-
Statement type: