SidraMiconi commited on
Commit
f63162c
·
verified ·
1 Parent(s): 378cf8e

Upload folder using huggingface_hub

Browse files
README.md CHANGED
@@ -1,6 +1,6 @@
1
  ---
2
  title: Exec Assistant Arena Environment Server
3
- emoji: 🎣
4
  colorFrom: gray
5
  colorTo: green
6
  sdk: docker
@@ -11,245 +11,102 @@ tags:
11
  - openenv
12
  ---
13
 
14
- # Exec Assistant Arena Environment
15
 
16
- A simple test environment that echoes back messages. Perfect for testing the env APIs as well as demonstrating environment usage patterns.
17
 
18
- ## Quick Start
19
-
20
- The simplest way to use the Exec Assistant Arena environment is through the `ExecAssistantArenaEnv` class:
21
-
22
- ```python
23
- from exec_assistant_arena import ExecAssistantArenaAction, ExecAssistantArenaEnv
24
-
25
- try:
26
- # Create environment from Docker image
27
- exec_assistant_arenaenv = ExecAssistantArenaEnv.from_docker_image("exec_assistant_arena-env:latest")
28
-
29
- # Reset
30
- result = exec_assistant_arenaenv.reset()
31
- print(f"Reset: {result.observation.echoed_message}")
32
-
33
- # Send multiple messages
34
- messages = ["Hello, World!", "Testing echo", "Final message"]
35
-
36
- for msg in messages:
37
- result = exec_assistant_arenaenv.step(ExecAssistantArenaAction(message=msg))
38
- print(f"Sent: '{msg}'")
39
- print(f" → Echoed: '{result.observation.echoed_message}'")
40
- print(f" → Length: {result.observation.message_length}")
41
- print(f" → Reward: {result.reward}")
42
-
43
- finally:
44
- # Always clean up
45
- exec_assistant_arenaenv.close()
46
- ```
47
-
48
- That's it! The `ExecAssistantArenaEnv.from_docker_image()` method handles:
49
- - Starting the Docker container
50
- - Waiting for the server to be ready
51
- - Connecting to the environment
52
- - Container cleanup when you call `close()`
53
-
54
- ## Building the Docker Image
55
-
56
- Before using the environment, you need to build the Docker image:
57
-
58
- ```bash
59
- # From project root
60
- docker build -t exec_assistant_arena-env:latest -f server/Dockerfile .
61
- ```
62
-
63
- ## Deploying to Hugging Face Spaces
64
 
65
- You can easily deploy your OpenEnv environment to Hugging Face Spaces using the `openenv push` command:
66
 
67
- ```bash
68
- # From the environment directory (where openenv.yaml is located)
69
- openenv push
70
-
71
- # Or specify options
72
- openenv push --namespace my-org --private
73
- ```
74
-
75
- The `openenv push` command will:
76
- 1. Validate that the directory is an OpenEnv environment (checks for `openenv.yaml`)
77
- 2. Prepare a custom build for Hugging Face Docker space (enables web interface)
78
- 3. Upload to Hugging Face (ensuring you're logged in)
79
-
80
- ### Prerequisites
81
-
82
- - Authenticate with Hugging Face: The command will prompt for login if not already authenticated
83
-
84
- ### Options
85
-
86
- - `--directory`, `-d`: Directory containing the OpenEnv environment (defaults to current directory)
87
- - `--repo-id`, `-r`: Repository ID in format 'username/repo-name' (defaults to 'username/env-name' from openenv.yaml)
88
- - `--base-image`, `-b`: Base Docker image to use (overrides Dockerfile FROM)
89
- - `--private`: Deploy the space as private (default: public)
90
-
91
- ### Examples
92
-
93
- ```bash
94
- # Push to your personal namespace (defaults to username/env-name from openenv.yaml)
95
- openenv push
96
-
97
- # Push to a specific repository
98
- openenv push --repo-id my-org/my-env
99
-
100
- # Push with a custom base image
101
- openenv push --base-image ghcr.io/meta-pytorch/openenv-base:latest
102
-
103
- # Push as a private space
104
- openenv push --private
105
-
106
- # Combine options
107
- openenv push --repo-id my-org/my-env --base-image custom-base:latest --private
108
- ```
109
 
110
- After deployment, your space will be available at:
111
- `https://huggingface.co/spaces/<repo-id>`
112
 
113
- The deployed space includes:
114
- - **Web Interface** at `/web` - Interactive UI for exploring the environment
115
- - **API Documentation** at `/docs` - Full OpenAPI/Swagger interface
116
- - **Health Check** at `/health` - Container health monitoring
117
- - **WebSocket** at `/ws` - Persistent session endpoint for low-latency interactions
118
 
119
- ## Environment Details
120
-
121
- ### Action
122
- **ExecAssistantArenaAction**: Contains a single field
123
- - `message` (str) - The message to echo back
124
-
125
- ### Observation
126
- **ExecAssistantArenaObservation**: Contains the echo response and metadata
127
- - `echoed_message` (str) - The message echoed back
128
- - `message_length` (int) - Length of the message
129
- - `reward` (float) - Reward based on message length (length × 0.1)
130
- - `done` (bool) - Always False for echo environment
131
- - `metadata` (dict) - Additional info like step count
132
-
133
- ### Reward
134
- The reward is calculated as: `message_length × 0.1`
135
- - "Hi" → reward: 0.2
136
- - "Hello, World!" → reward: 1.3
137
- - Empty message → reward: 0.0
138
-
139
- ## Advanced Usage
140
-
141
- ### Connecting to an Existing Server
142
-
143
- If you already have a Exec Assistant Arena environment server running, you can connect directly:
144
-
145
- ```python
146
- from exec_assistant_arena import ExecAssistantArenaEnv
147
-
148
- # Connect to existing server
149
- exec_assistant_arenaenv = ExecAssistantArenaEnv(base_url="<ENV_HTTP_URL_HERE>")
150
-
151
- # Use as normal
152
- result = exec_assistant_arenaenv.reset()
153
- result = exec_assistant_arenaenv.step(ExecAssistantArenaAction(message="Hello!"))
154
- ```
155
-
156
- Note: When connecting to an existing server, `exec_assistant_arenaenv.close()` will NOT stop the server.
157
-
158
- ### Using the Context Manager
159
-
160
- The client supports context manager usage for automatic connection management:
161
-
162
- ```python
163
- from exec_assistant_arena import ExecAssistantArenaAction, ExecAssistantArenaEnv
164
-
165
- # Connect with context manager (auto-connects and closes)
166
- with ExecAssistantArenaEnv(base_url="http://localhost:8000") as env:
167
- result = env.reset()
168
- print(f"Reset: {result.observation.echoed_message}")
169
- # Multiple steps with low latency
170
- for msg in ["Hello", "World", "!"]:
171
- result = env.step(ExecAssistantArenaAction(message=msg))
172
- print(f"Echoed: {result.observation.echoed_message}")
173
- ```
174
-
175
- The client uses WebSocket connections for:
176
- - **Lower latency**: No HTTP connection overhead per request
177
- - **Persistent session**: Server maintains your environment state
178
- - **Efficient for episodes**: Better for many sequential steps
179
-
180
- ### Concurrent WebSocket Sessions
181
-
182
- The server supports multiple concurrent WebSocket connections. To enable this,
183
- modify `server/app.py` to use factory mode:
184
 
185
  ```python
186
- # In server/app.py - use factory mode for concurrent sessions
187
- app = create_app(
188
- ExecAssistantArenaEnvironment, # Pass class, not instance
189
- ExecAssistantArenaAction,
190
- ExecAssistantArenaObservation,
191
- max_concurrent_envs=4, # Allow 4 concurrent sessions
192
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  ```
194
 
195
- Then multiple clients can connect simultaneously:
196
-
197
- ```python
198
- from exec_assistant_arena import ExecAssistantArenaAction, ExecAssistantArenaEnv
199
- from concurrent.futures import ThreadPoolExecutor
200
-
201
- def run_episode(client_id: int):
202
- with ExecAssistantArenaEnv(base_url="http://localhost:8000") as env:
203
- result = env.reset()
204
- for i in range(10):
205
- result = env.step(ExecAssistantArenaAction(message=f"Client {client_id}, step {i}"))
206
- return client_id, result.observation.message_length
207
-
208
- # Run 4 episodes concurrently
209
- with ThreadPoolExecutor(max_workers=4) as executor:
210
- results = list(executor.map(run_episode, range(4)))
211
- ```
212
 
213
- ## Development & Testing
 
 
 
 
 
 
 
214
 
215
- ### Direct Environment Testing
216
 
217
- Test the environment logic directly without starting the HTTP server:
218
 
219
  ```bash
220
- # From the server directory
221
- python3 server/exec_assistant_arena_environment.py
 
 
222
  ```
223
 
224
- This verifies that:
225
- - Environment resets correctly
226
- - Step executes actions properly
227
- - State tracking works
228
- - Rewards are calculated correctly
229
-
230
- ### Running Locally
231
-
232
- Run the server locally for development:
233
-
234
- ```bash
235
- uvicorn server.app:app --reload
236
- ```
237
 
238
  ## Project Structure
239
 
240
  ```
241
  exec_assistant_arena/
242
- ├── .dockerignore # Docker build exclusions
243
- ├── __init__.py # Module exports
244
- ├── README.md # This file
245
- ├── openenv.yaml # OpenEnv manifest
246
- ├── pyproject.toml # Project metadata and dependencies
247
- ├── uv.lock # Locked dependencies (generated)
248
- ── client.py # ExecAssistantArenaEnv client
249
- ── models.py # Action and Observation models
250
- ── server/
251
- ├── __init__.py # Server module exports
252
- ├── exec_assistant_arena_environment.py # Core environment logic
253
- ── app.py # FastAPI application (HTTP + WebSocket endpoints)
254
- ── Dockerfile # Container image definition
 
255
  ```
 
 
 
 
 
 
 
 
 
 
1
  ---
2
  title: Exec Assistant Arena Environment Server
3
+ emoji: 📋
4
  colorFrom: gray
5
  colorTo: green
6
  sdk: docker
 
11
  - openenv
12
  ---
13
 
14
+ # Executive Assistant Arena
15
 
16
+ An [OpenEnv](https://github.com/meta-pytorch/OpenEnv) environment that simulates a personal assistant's morning inbox. The LLM agent must resolve calendar conflicts, draft email replies, infer hidden user preferences, and handle late-breaking schedule changes.
17
 
18
+ Trained a Qwen2.5-7B model via GRPO on this environment, showing measurable improvement across 6 decomposed reward components.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
+ ## The Problem
21
 
22
+ Your AI assistant double-books you, ignores your "no mornings" preference, and can't handle it when your boss reschedules a meeting at the last minute. This environment trains LLMs to actually handle real-world scheduling chaos.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
+ ## Architecture
 
25
 
26
+ - **Environment**: Procedurally generated scenarios with calendar conflicts, emails, user preferences, and late-breaking changes
27
+ - **3 difficulty tiers**: Easy (2 conflicts), Medium (4 conflicts + late changes), Hard (6 conflicts + 2 late changes)
28
+ - **6 reward components**: conflict resolution, preference inference, email quality, deadline adherence, efficiency, late-change recovery
29
+ - **All rewards are rule-based** no LLM judges, fully deterministic and verifiable
 
30
 
31
+ ## Quick Start
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
 
33
  ```python
34
+ from exec_assistant_arena import ExecAssistantArenaEnv, AssistantAction
35
+
36
+ with ExecAssistantArenaEnv(base_url="https://SidraMiconi-exec-assistant-arena.hf.space") as env:
37
+ result = env.reset(seed=42, difficulty="medium")
38
+ print(result.observation.tool_result) # scenario description
39
+ print(result.observation.conflicts) # scheduling conflicts
40
+
41
+ # Resolve a conflict
42
+ result = env.step(AssistantAction(
43
+ tool="reschedule",
44
+ arguments={"event_id": "mtg_2", "new_time": "2:00pm"}
45
+ ))
46
+ print(f"Reward: {result.reward}") # +1.0 for resolved conflict
47
+
48
+ # Draft an email reply
49
+ result = env.step(AssistantAction(
50
+ tool="draft_reply",
51
+ arguments={
52
+ "email_id": "email_1",
53
+ "body": "Hey! Sure thing, I'll get the budget review to you by tomorrow."
54
+ }
55
+ ))
56
+
57
+ # Finish
58
+ result = env.step(AssistantAction(tool="done"))
59
  ```
60
 
61
+ ## Available Tools
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
 
63
+ | Tool | Arguments | Reward |
64
+ |------|-----------|--------|
65
+ | `check_calendar` | none | 0 (free) |
66
+ | `check_inbox` | none | 0 (free) |
67
+ | `reschedule` | `event_id`, `new_time` | +1.0 resolve, -0.5 new conflict |
68
+ | `draft_reply` | `email_id`, `body` | 0.0 to +1.0 (quality scored) |
69
+ | `delegate_task` | `task`, `to` | +0.5 if handles late change |
70
+ | `done` | none | terminal rewards |
71
 
72
+ ## Training
73
 
74
+ Trained with GRPO (Group Relative Policy Optimization) using Unsloth + TRL:
75
 
76
  ```bash
77
+ # On H100
78
+ cd exec_assistant_arena
79
+ PYTHONPATH=. uvicorn server.app:app --host 0.0.0.0 --port 8000 &
80
+ python training/train_grpo.py
81
  ```
82
 
83
+ Colab notebook available at `training/train_colab.ipynb` for reproducing on free T4 GPU.
 
 
 
 
 
 
 
 
 
 
 
 
84
 
85
  ## Project Structure
86
 
87
  ```
88
  exec_assistant_arena/
89
+ ├── models.py # Action, Observation, State
90
+ ├── client.py # WebSocket client
91
+ ├── server/
92
+ ├── app.py # FastAPI server
93
+ ├── exec_assistant_arena_environment.py # Core env logic
94
+ ├── scenario_generator.py # Procedural generation
95
+ │ └── reward.py # 6 decomposed reward components
96
+ ── training/
97
+ ── train_grpo.py # H100 training script
98
+ ├── train_colab.ipynb # Colab version
99
+ ├── eval.py # Before/after evaluation
100
+ ── scenarios/
101
+ ── train_scenarios.json # 80 training scenarios
102
+ └── eval_scenarios.json # 20 held-out scenarios
103
  ```
104
+
105
+ ## Links
106
+
107
+ - **HF Space**: https://huggingface.co/spaces/SidraMiconi/exec-assistant-arena
108
+ - **GitHub**: https://github.com/Sidra/chief-of-staff/tree/main/exec_assistant_arena
109
+ - **W&B**: https://wandb.ai/code-happy-sf/exec-assistant-arena
110
+ - **Trained Model**: https://huggingface.co/SidraMiconi/exec-assistant-arena-lora
111
+
112
+ Built for the OpenEnv Hackathon SF, March 7-8, 2026.
training/eval.py ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Evaluation script: compare base model vs trained model on held-out scenarios.
2
+
3
+ Usage:
4
+ python training/eval.py --base-model Qwen/Qwen2.5-7B --trained-model SidraMiconi/exec-assistant-arena-lora
5
+ """
6
+
7
+ import json
8
+ import os
9
+ import sys
10
+ import argparse
11
+
12
+ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
13
+
14
+ from exec_assistant_arena import ExecAssistantArenaEnv
15
+ from exec_assistant_arena.models import AssistantAction
16
+ from training.train_grpo import parse_tool_calls
17
+
18
+ ENV_URL = "http://localhost:8000"
19
+
20
+
21
+ def evaluate_model(model, tokenizer, scenarios, env_url, label="model"):
22
+ """Run model through eval scenarios and collect metrics."""
23
+ from unsloth import FastLanguageModel
24
+ FastLanguageModel.for_inference(model)
25
+
26
+ results = []
27
+
28
+ for i, scenario in enumerate(scenarios):
29
+ prompt = scenario["prompt"]
30
+ inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=2048).to("cuda")
31
+
32
+ outputs = model.generate(
33
+ **inputs,
34
+ max_new_tokens=1024,
35
+ temperature=0.7,
36
+ do_sample=True,
37
+ )
38
+ completion = tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
39
+
40
+ # Score through environment
41
+ try:
42
+ with ExecAssistantArenaEnv(base_url=env_url) as env:
43
+ seed = scenario.get("seed", i + 80)
44
+ difficulty = scenario.get("difficulty", "medium")
45
+ env.reset(seed=seed, difficulty=difficulty)
46
+
47
+ actions = parse_tool_calls(completion)
48
+ total_reward = 0.0
49
+ for action in actions:
50
+ result = env.step(action)
51
+ total_reward += (result.reward or 0.0)
52
+ if result.done:
53
+ break
54
+
55
+ if not result.done:
56
+ result = env.step(AssistantAction(tool="done"))
57
+ total_reward += (result.reward or 0.0)
58
+
59
+ state = env.state()
60
+ results.append({
61
+ "scenario_idx": i,
62
+ "seed": seed,
63
+ "difficulty": difficulty,
64
+ "total_reward": total_reward,
65
+ "conflicts_resolved": state.conflicts_resolved,
66
+ "total_conflicts": state.total_conflicts,
67
+ "conflict_rate": state.conflicts_resolved / max(1, state.total_conflicts),
68
+ "emails_drafted": state.emails_drafted,
69
+ "total_emails": state.total_emails,
70
+ "preferences_inferred": state.preferences_inferred,
71
+ "deadlines_met": state.deadlines_met,
72
+ "unnecessary_actions": state.unnecessary_actions,
73
+ "n_actions": len(actions),
74
+ "completion": completion[:500],
75
+ })
76
+ except Exception as e:
77
+ print(f" Error on scenario {i}: {e}")
78
+ results.append({"scenario_idx": i, "total_reward": -1.0, "error": str(e)})
79
+
80
+ print(f" [{label}] Scenario {i}: reward={results[-1].get('total_reward', 'err'):.2f}")
81
+
82
+ return results
83
+
84
+
85
+ def print_comparison(base_results, trained_results):
86
+ """Print side-by-side comparison."""
87
+ print("\n" + "=" * 70)
88
+ print("EVALUATION RESULTS")
89
+ print("=" * 70)
90
+
91
+ metrics = ["total_reward", "conflict_rate", "emails_drafted", "preferences_inferred", "unnecessary_actions"]
92
+
93
+ for metric in metrics:
94
+ base_vals = [r.get(metric, 0) for r in base_results if "error" not in r]
95
+ trained_vals = [r.get(metric, 0) for r in trained_results if "error" not in r]
96
+
97
+ if base_vals and trained_vals:
98
+ base_avg = sum(base_vals) / len(base_vals)
99
+ trained_avg = sum(trained_vals) / len(trained_vals)
100
+ delta = trained_avg - base_avg
101
+ print(f" {metric:25s} base={base_avg:7.2f} trained={trained_avg:7.2f} delta={delta:+.2f}")
102
+
103
+ print("=" * 70)
104
+
105
+
106
+ def main():
107
+ parser = argparse.ArgumentParser()
108
+ parser.add_argument("--base-model", default="Qwen/Qwen2.5-7B")
109
+ parser.add_argument("--trained-model", default="SidraMiconi/exec-assistant-arena-lora")
110
+ parser.add_argument("--env-url", default=ENV_URL)
111
+ parser.add_argument("--output", default="training/eval_results.json")
112
+ args = parser.parse_args()
113
+
114
+ script_dir = os.path.dirname(os.path.abspath(__file__))
115
+ with open(os.path.join(script_dir, "scenarios/eval_scenarios.json")) as f:
116
+ scenarios = json.load(f)
117
+
118
+ print(f"Evaluating on {len(scenarios)} held-out scenarios\n")
119
+
120
+ from unsloth import FastLanguageModel
121
+
122
+ # Load base model
123
+ print("Loading base model...")
124
+ base_model, base_tokenizer = FastLanguageModel.from_pretrained(
125
+ model_name=args.base_model, max_seq_length=2048, load_in_4bit=True,
126
+ )
127
+ print("Evaluating base model...")
128
+ base_results = evaluate_model(base_model, base_tokenizer, scenarios, args.env_url, "base")
129
+ del base_model
130
+
131
+ # Load trained model
132
+ print("\nLoading trained model...")
133
+ trained_model, trained_tokenizer = FastLanguageModel.from_pretrained(
134
+ model_name=args.trained_model, max_seq_length=2048, load_in_4bit=True,
135
+ )
136
+ print("Evaluating trained model...")
137
+ trained_results = evaluate_model(trained_model, trained_tokenizer, scenarios, args.env_url, "trained")
138
+
139
+ print_comparison(base_results, trained_results)
140
+
141
+ # Save results
142
+ output = {
143
+ "base_model": args.base_model,
144
+ "trained_model": args.trained_model,
145
+ "base_results": base_results,
146
+ "trained_results": trained_results,
147
+ }
148
+ with open(args.output, "w") as f:
149
+ json.dump(output, f, indent=2)
150
+ print(f"\nResults saved to {args.output}")
151
+
152
+
153
+ if __name__ == "__main__":
154
+ main()
training/scenarios/eval_scenarios.json ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 9:30am (60min) - board prep with Eve Johnson [priority: high]\n[mtg_2] 9:30am (60min) - interview with Grace Wang [priority: high]\n[mtg_3] 11:00am (30min) - all-hands with Irene Davis [priority: medium]\n[mtg_4] 11:30am (30min) - 1:1 with Carol Park [priority: high]\n\nINBOX:\n[email_1] From: Henry Brown | Subject: Performance Review Follow-up [DEADLINE: today]\n Hi, I wanted to follow up on performance review follow-up. Could you get back to me by today? Thanks, Henry Brown\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\n\nUSER PREFERENCES:\n - User avoids meetings on Fridays\n - User always blocks 12pm-1pm for lunch\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Reply to email email_1 from Henry Brown\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
4
+ "seed": 80,
5
+ "difficulty": "easy",
6
+ "n_conflicts": 1,
7
+ "n_emails": 1
8
+ },
9
+ {
10
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 9:00am (30min) - interview with Irene Davis [priority: medium]\n[mtg_2] 9:00am (60min) - lunch meeting with Henry Brown [priority: medium]\n[mtg_3] 11:00am (30min) - 1:1 with Frank Lee [priority: medium]\n[mtg_4] 1:30pm (30min) - team standup with Eve Johnson [priority: high]\n\nINBOX:\n[email_1] From: Grace Wang | Subject: Partnership Proposal\n Hi, I wanted to follow up on partnership proposal. Could you get back to me? Thanks, Grace Wang\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\n\nUSER PREFERENCES:\n - User avoids meetings on Fridays\n - User prefers informal/casual tone in emails\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Reply to email email_1 from Grace Wang\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
11
+ "seed": 81,
12
+ "difficulty": "easy",
13
+ "n_conflicts": 1,
14
+ "n_emails": 1
15
+ },
16
+ {
17
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 4:30pm (30min) - client call with Carol Park [priority: medium]\n[mtg_2] 4:30pm (30min) - sprint planning with Henry Brown [priority: high]\n[mtg_3] 10:00am (30min) - strategy session with Eve Johnson [priority: medium]\n[mtg_4] 4:30pm (60min) - interview with Grace Wang [priority: medium]\n\nINBOX:\n[email_1] From: Bob Martinez | Subject: Team Offsite Planning [DEADLINE: today]\n Hi, I wanted to follow up on team offsite planning. Could you get back to me by today? Thanks, Bob Martinez\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_1 overlaps with mtg_4\nCONFLICT: mtg_2 overlaps with mtg_4\n\nUSER PREFERENCES:\n - User prefers formal/professional tone in emails\n - User avoids meetings on Fridays\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_1 and mtg_4\n - Resolve conflict between mtg_2 and mtg_4\n - Reply to email email_1 from Bob Martinez\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
18
+ "seed": 82,
19
+ "difficulty": "easy",
20
+ "n_conflicts": 3,
21
+ "n_emails": 1
22
+ },
23
+ {
24
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 10:00am (30min) - 1:1 with Henry Brown [priority: medium]\n[mtg_2] 10:00am (30min) - strategy session with Jack Wilson [priority: medium]\n[mtg_3] 12:00pm (60min) - design review with Bob Martinez [priority: medium]\n[mtg_4] 12:30pm (60min) - team standup with Irene Davis [priority: low]\n\nINBOX:\n[email_1] From: David Kim | Subject: Hiring Update [DEADLINE: today]\n Hi, I wanted to follow up on hiring update. Could you get back to me by today? Thanks, David Kim\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_3 overlaps with mtg_4\n\nUSER PREFERENCES:\n - User prefers no meetings before 10am\n - Client meetings cannot be rescheduled\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_3 and mtg_4\n - Reply to email email_1 from David Kim\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
25
+ "seed": 83,
26
+ "difficulty": "easy",
27
+ "n_conflicts": 2,
28
+ "n_emails": 1
29
+ },
30
+ {
31
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 11:00am (60min) - all-hands with Eve Johnson [priority: low]\n[mtg_2] 11:00am (60min) - design review with Alice Chen [priority: low]\n[mtg_3] 2:00pm (60min) - lunch meeting with Henry Brown [priority: low]\n[mtg_4] 4:30pm (30min) - board prep with Irene Davis [priority: high]\n\nINBOX:\n[email_1] From: Jack Wilson | Subject: Q3 Budget Review [DEADLINE: tomorrow]\n Hi, I wanted to follow up on q3 budget review. Could you get back to me by tomorrow? Thanks, Jack Wilson\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\n\nUSER PREFERENCES:\n - User needs 15-min buffer between meetings\n - User prefers 30-min meetings over 60-min\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Reply to email email_1 from Jack Wilson\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
32
+ "seed": 84,
33
+ "difficulty": "easy",
34
+ "n_conflicts": 1,
35
+ "n_emails": 1
36
+ },
37
+ {
38
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 12:30pm (60min) - lunch meeting with David Kim [priority: low]\n[mtg_2] 12:30pm (60min) - all-hands with Bob Martinez [priority: low]\n[mtg_3] 10:00am (30min) - design review with Frank Lee [priority: high]\n[mtg_4] 4:00pm (60min) - board prep with Irene Davis [priority: medium]\n\nINBOX:\n[email_1] From: Grace Wang | Subject: Hiring Update [DEADLINE: today]\n Hi, I wanted to follow up on hiring update. Could you get back to me by today? Thanks, Grace Wang\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\n\nUSER PREFERENCES:\n - User prefers informal/casual tone in emails\n - Meetings with the boss always take priority\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Reply to email email_1 from Grace Wang\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
39
+ "seed": 85,
40
+ "difficulty": "easy",
41
+ "n_conflicts": 1,
42
+ "n_emails": 1
43
+ },
44
+ {
45
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 5:00pm (60min) - team standup with Alice Chen [priority: high]\n[mtg_2] 5:00pm (30min) - board prep with Irene Davis [priority: medium]\n[mtg_3] 12:00pm (30min) - sprint planning with Frank Lee [priority: low]\n[mtg_4] 9:30am (30min) - interview with Henry Brown [priority: medium]\n\nINBOX:\n[email_1] From: Jack Wilson | Subject: Client Demo Prep [DEADLINE: today]\n Hi, I wanted to follow up on client demo prep. Could you get back to me by today? Thanks, Jack Wilson\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\n\nUSER PREFERENCES:\n - Client meetings cannot be rescheduled\n - Meetings with the boss always take priority\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Reply to email email_1 from Jack Wilson\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
46
+ "seed": 86,
47
+ "difficulty": "easy",
48
+ "n_conflicts": 1,
49
+ "n_emails": 1
50
+ },
51
+ {
52
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 12:00pm (30min) - all-hands with Carol Park [priority: low]\n[mtg_2] 12:00pm (60min) - 1:1 with David Kim [priority: high]\n[mtg_3] 12:00pm (60min) - sprint planning with Bob Martinez [priority: high]\n[mtg_4] 12:00pm (60min) - design review with Jack Wilson [priority: medium]\n[mtg_5] 12:00pm (60min) - board prep with Grace Wang [priority: high]\n[mtg_6] 1:30pm (60min) - interview with Eve Johnson [priority: low]\n\nINBOX:\n[email_1] From: Frank Lee | Subject: Q3 Budget Review [DEADLINE: tomorrow]\n Hi, I wanted to follow up on q3 budget review. Could you get back to me by tomorrow? Thanks, Frank Lee\n\n[email_2] From: Irene Davis | Subject: Q3 Budget Review [DEADLINE: today]\n Hi, I wanted to follow up on q3 budget review. Could you get back to me by today? Thanks, Irene Davis\n\n[email_3] From: Alice Chen | Subject: Q3 Budget Review [DEADLINE: today]\n Hi, I wanted to follow up on q3 budget review. Could you get back to me by today? Thanks, Alice Chen\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_1 overlaps with mtg_3\nCONFLICT: mtg_1 overlaps with mtg_4\nCONFLICT: mtg_1 overlaps with mtg_5\nCONFLICT: mtg_2 overlaps with mtg_3\nCONFLICT: mtg_2 overlaps with mtg_4\nCONFLICT: mtg_2 overlaps with mtg_5\nCONFLICT: mtg_3 overlaps with mtg_4\nCONFLICT: mtg_3 overlaps with mtg_5\nCONFLICT: mtg_4 overlaps with mtg_5\n\nUSER PREFERENCES:\n - User prefers 30-min meetings over 60-min\n - Client meetings cannot be rescheduled\n - User prefers formal/professional tone in emails\n - User avoids meetings on Fridays\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_1 and mtg_3\n - Resolve conflict between mtg_1 and mtg_4\n - Resolve conflict between mtg_1 and mtg_5\n - Resolve conflict between mtg_2 and mtg_3\n - Resolve conflict between mtg_2 and mtg_4\n - Resolve conflict between mtg_2 and mtg_5\n - Resolve conflict between mtg_3 and mtg_4\n - Resolve conflict between mtg_3 and mtg_5\n - Resolve conflict between mtg_4 and mtg_5\n - Reply to email email_1 from Frank Lee\n - Reply to email email_2 from Irene Davis\n - Reply to email email_3 from Alice Chen\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
53
+ "seed": 87,
54
+ "difficulty": "medium",
55
+ "n_conflicts": 10,
56
+ "n_emails": 3
57
+ },
58
+ {
59
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 3:30pm (30min) - client call with Grace Wang [priority: medium]\n[mtg_2] 3:30pm (60min) - design review with David Kim [priority: low]\n[mtg_3] 3:30pm (30min) - team standup with Frank Lee [priority: medium]\n[mtg_4] 3:30pm (30min) - all-hands with Bob Martinez [priority: medium]\n[mtg_5] 12:30pm (30min) - lunch meeting with Henry Brown [priority: high]\n[mtg_6] 9:00am (60min) - sprint planning with Alice Chen [priority: high]\n\nINBOX:\n[email_1] From: Eve Johnson | Subject: Performance Review Follow-up [DEADLINE: today]\n Hi, I wanted to follow up on performance review follow-up. Could you get back to me by today? Thanks, Eve Johnson\n\n[email_2] From: Jack Wilson | Subject: Hiring Update [DEADLINE: tomorrow]\n Hi, I wanted to follow up on hiring update. Could you get back to me by tomorrow? Thanks, Jack Wilson\n\n[email_3] From: Carol Park | Subject: Customer Escalation [DEADLINE: tomorrow]\n Hi, I wanted to follow up on customer escalation. Could you get back to me by tomorrow? Thanks, Carol Park\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_1 overlaps with mtg_3\nCONFLICT: mtg_1 overlaps with mtg_4\nCONFLICT: mtg_2 overlaps with mtg_3\nCONFLICT: mtg_2 overlaps with mtg_4\nCONFLICT: mtg_3 overlaps with mtg_4\n\nUSER PREFERENCES:\n - User prefers no meetings before 10am\n - User prefers informal/casual tone in emails\n - User needs 15-min buffer between meetings\n - User prefers formal/professional tone in emails\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_1 and mtg_3\n - Resolve conflict between mtg_1 and mtg_4\n - Resolve conflict between mtg_2 and mtg_3\n - Resolve conflict between mtg_2 and mtg_4\n - Resolve conflict between mtg_3 and mtg_4\n - Reply to email email_1 from Eve Johnson\n - Reply to email email_2 from Jack Wilson\n - Reply to email email_3 from Carol Park\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
60
+ "seed": 88,
61
+ "difficulty": "medium",
62
+ "n_conflicts": 6,
63
+ "n_emails": 3
64
+ },
65
+ {
66
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 4:00pm (30min) - sprint planning with Bob Martinez [priority: high]\n[mtg_2] 4:00pm (30min) - all-hands with Eve Johnson [priority: low]\n[mtg_3] 4:00pm (30min) - team standup with Carol Park [priority: high]\n[mtg_4] 4:00pm (60min) - strategy session with Henry Brown [priority: medium]\n[mtg_5] 11:00am (60min) - lunch meeting with Alice Chen [priority: high]\n[mtg_6] 10:00am (30min) - design review with Jack Wilson [priority: low]\n\nINBOX:\n[email_1] From: David Kim | Subject: Client Demo Prep\n Hi, I wanted to follow up on client demo prep. Could you get back to me? Thanks, David Kim\n\n[email_2] From: Irene Davis | Subject: Vendor Contract Renewal [DEADLINE: tomorrow]\n Hi, I wanted to follow up on vendor contract renewal. Could you get back to me by tomorrow? Thanks, Irene Davis\n\n[email_3] From: Frank Lee | Subject: Customer Escalation [DEADLINE: tomorrow]\n Hi, I wanted to follow up on customer escalation. Could you get back to me by tomorrow? Thanks, Frank Lee\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_1 overlaps with mtg_3\nCONFLICT: mtg_1 overlaps with mtg_4\nCONFLICT: mtg_2 overlaps with mtg_3\nCONFLICT: mtg_2 overlaps with mtg_4\nCONFLICT: mtg_3 overlaps with mtg_4\n\nUSER PREFERENCES:\n - Client meetings cannot be rescheduled\n - User avoids meetings on Fridays\n - User prefers 30-min meetings over 60-min\n - User needs 15-min buffer between meetings\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_1 and mtg_3\n - Resolve conflict between mtg_1 and mtg_4\n - Resolve conflict between mtg_2 and mtg_3\n - Resolve conflict between mtg_2 and mtg_4\n - Resolve conflict between mtg_3 and mtg_4\n - Reply to email email_1 from David Kim\n - Reply to email email_2 from Irene Davis\n - Reply to email email_3 from Frank Lee\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
67
+ "seed": 89,
68
+ "difficulty": "medium",
69
+ "n_conflicts": 6,
70
+ "n_emails": 3
71
+ },
72
+ {
73
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 11:00am (30min) - lunch meeting with David Kim [priority: low]\n[mtg_2] 11:00am (30min) - sprint planning with Bob Martinez [priority: low]\n[mtg_3] 11:00am (60min) - board prep with Henry Brown [priority: medium]\n[mtg_4] 11:00am (30min) - design review with Frank Lee [priority: low]\n[mtg_5] 9:00am (30min) - client call with Eve Johnson [priority: high]\n[mtg_6] 1:30pm (30min) - all-hands with Grace Wang [priority: low]\n\nINBOX:\n[email_1] From: Carol Park | Subject: Performance Review Follow-up [DEADLINE: tomorrow]\n Hi, I wanted to follow up on performance review follow-up. Could you get back to me by tomorrow? Thanks, Carol Park\n\n[email_2] From: Jack Wilson | Subject: Team Offsite Planning [DEADLINE: today]\n Hi, I wanted to follow up on team offsite planning. Could you get back to me by today? Thanks, Jack Wilson\n\n[email_3] From: Irene Davis | Subject: Client Demo Prep [DEADLINE: tomorrow]\n Hi, I wanted to follow up on client demo prep. Could you get back to me by tomorrow? Thanks, Irene Davis\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_1 overlaps with mtg_3\nCONFLICT: mtg_1 overlaps with mtg_4\nCONFLICT: mtg_2 overlaps with mtg_3\nCONFLICT: mtg_2 overlaps with mtg_4\nCONFLICT: mtg_3 overlaps with mtg_4\n\nUSER PREFERENCES:\n - User needs 15-min buffer between meetings\n - User always blocks 12pm-1pm for lunch\n - Client meetings cannot be rescheduled\n - User prefers informal/casual tone in emails\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_1 and mtg_3\n - Resolve conflict between mtg_1 and mtg_4\n - Resolve conflict between mtg_2 and mtg_3\n - Resolve conflict between mtg_2 and mtg_4\n - Resolve conflict between mtg_3 and mtg_4\n - Reply to email email_1 from Carol Park\n - Reply to email email_2 from Jack Wilson\n - Reply to email email_3 from Irene Davis\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
74
+ "seed": 90,
75
+ "difficulty": "medium",
76
+ "n_conflicts": 6,
77
+ "n_emails": 3
78
+ },
79
+ {
80
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 10:00am (30min) - design review with Bob Martinez [priority: medium]\n[mtg_2] 10:00am (30min) - strategy session with Carol Park [priority: low]\n[mtg_3] 10:00am (60min) - all-hands with Irene Davis [priority: medium]\n[mtg_4] 10:00am (60min) - interview with David Kim [priority: low]\n[mtg_5] 3:00pm (60min) - board prep with Grace Wang [priority: high]\n[mtg_6] 12:00pm (60min) - team standup with Frank Lee [priority: low]\n\nINBOX:\n[email_1] From: Eve Johnson | Subject: Product Launch Timeline [DEADLINE: today]\n Hi, I wanted to follow up on product launch timeline. Could you get back to me by today? Thanks, Eve Johnson\n\n[email_2] From: Jack Wilson | Subject: Board Presentation Draft [DEADLINE: today]\n Hi, I wanted to follow up on board presentation draft. Could you get back to me by today? Thanks, Jack Wilson\n\n[email_3] From: Henry Brown | Subject: Team Offsite Planning\n Hi, I wanted to follow up on team offsite planning. Could you get back to me? Thanks, Henry Brown\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_1 overlaps with mtg_3\nCONFLICT: mtg_1 overlaps with mtg_4\nCONFLICT: mtg_2 overlaps with mtg_3\nCONFLICT: mtg_2 overlaps with mtg_4\nCONFLICT: mtg_3 overlaps with mtg_4\n\nUSER PREFERENCES:\n - User prefers 30-min meetings over 60-min\n - User needs 15-min buffer between meetings\n - User avoids meetings on Fridays\n - Meetings with the boss always take priority\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_1 and mtg_3\n - Resolve conflict between mtg_1 and mtg_4\n - Resolve conflict between mtg_2 and mtg_3\n - Resolve conflict between mtg_2 and mtg_4\n - Resolve conflict between mtg_3 and mtg_4\n - Reply to email email_1 from Eve Johnson\n - Reply to email email_2 from Jack Wilson\n - Reply to email email_3 from Henry Brown\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
81
+ "seed": 91,
82
+ "difficulty": "medium",
83
+ "n_conflicts": 6,
84
+ "n_emails": 3
85
+ },
86
+ {
87
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 11:30am (30min) - strategy session with Grace Wang [priority: low]\n[mtg_2] 11:30am (60min) - all-hands with Irene Davis [priority: medium]\n[mtg_3] 11:30am (30min) - 1:1 with Eve Johnson [priority: low]\n[mtg_4] 11:30am (60min) - lunch meeting with Jack Wilson [priority: high]\n[mtg_5] 11:30am (30min) - interview with Frank Lee [priority: medium]\n[mtg_6] 12:30pm (30min) - team standup with Alice Chen [priority: high]\n\nINBOX:\n[email_1] From: David Kim | Subject: Partnership Proposal [DEADLINE: today]\n Hi, I wanted to follow up on partnership proposal. Could you get back to me by today? Thanks, David Kim\n\n[email_2] From: Henry Brown | Subject: Board Presentation Draft\n Hi, I wanted to follow up on board presentation draft. Could you get back to me? Thanks, Henry Brown\n\n[email_3] From: Carol Park | Subject: Team Offsite Planning [DEADLINE: today]\n Hi, I wanted to follow up on team offsite planning. Could you get back to me by today? Thanks, Carol Park\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_1 overlaps with mtg_3\nCONFLICT: mtg_1 overlaps with mtg_4\nCONFLICT: mtg_1 overlaps with mtg_5\nCONFLICT: mtg_2 overlaps with mtg_3\nCONFLICT: mtg_2 overlaps with mtg_4\nCONFLICT: mtg_2 overlaps with mtg_5\nCONFLICT: mtg_3 overlaps with mtg_4\nCONFLICT: mtg_3 overlaps with mtg_5\nCONFLICT: mtg_4 overlaps with mtg_5\n\nUSER PREFERENCES:\n - User dislikes back-to-back meetings\n - User prefers 30-min meetings over 60-min\n - User avoids meetings on Fridays\n - Client meetings cannot be rescheduled\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_1 and mtg_3\n - Resolve conflict between mtg_1 and mtg_4\n - Resolve conflict between mtg_1 and mtg_5\n - Resolve conflict between mtg_2 and mtg_3\n - Resolve conflict between mtg_2 and mtg_4\n - Resolve conflict between mtg_2 and mtg_5\n - Resolve conflict between mtg_3 and mtg_4\n - Resolve conflict between mtg_3 and mtg_5\n - Resolve conflict between mtg_4 and mtg_5\n - Reply to email email_1 from David Kim\n - Reply to email email_2 from Henry Brown\n - Reply to email email_3 from Carol Park\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
88
+ "seed": 92,
89
+ "difficulty": "medium",
90
+ "n_conflicts": 10,
91
+ "n_emails": 3
92
+ },
93
+ {
94
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 12:00pm (60min) - client call with Henry Brown [priority: high]\n[mtg_2] 12:00pm (30min) - 1:1 with Frank Lee [priority: low]\n[mtg_3] 12:00pm (30min) - team standup with Bob Martinez [priority: low]\n[mtg_4] 12:00pm (60min) - all-hands with Alice Chen [priority: medium]\n[mtg_5] 11:30am (60min) - sprint planning with Carol Park [priority: high]\n[mtg_6] 1:30pm (30min) - strategy session with Jack Wilson [priority: high]\n\nINBOX:\n[email_1] From: Eve Johnson | Subject: Q3 Budget Review [DEADLINE: today]\n Hi, I wanted to follow up on q3 budget review. Could you get back to me by today? Thanks, Eve Johnson\n\n[email_2] From: David Kim | Subject: Partnership Proposal [DEADLINE: tomorrow]\n Hi, I wanted to follow up on partnership proposal. Could you get back to me by tomorrow? Thanks, David Kim\n\n[email_3] From: Grace Wang | Subject: Team Offsite Planning [DEADLINE: today]\n Hi, I wanted to follow up on team offsite planning. Could you get back to me by today? Thanks, Grace Wang\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_1 overlaps with mtg_3\nCONFLICT: mtg_1 overlaps with mtg_4\nCONFLICT: mtg_1 overlaps with mtg_5\nCONFLICT: mtg_2 overlaps with mtg_3\nCONFLICT: mtg_2 overlaps with mtg_4\nCONFLICT: mtg_2 overlaps with mtg_5\nCONFLICT: mtg_3 overlaps with mtg_4\nCONFLICT: mtg_3 overlaps with mtg_5\nCONFLICT: mtg_4 overlaps with mtg_5\n\nUSER PREFERENCES:\n - User needs 15-min buffer between meetings\n - User prefers informal/casual tone in emails\n - User always blocks 12pm-1pm for lunch\n - User avoids meetings on Fridays\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_1 and mtg_3\n - Resolve conflict between mtg_1 and mtg_4\n - Resolve conflict between mtg_1 and mtg_5\n - Resolve conflict between mtg_2 and mtg_3\n - Resolve conflict between mtg_2 and mtg_4\n - Resolve conflict between mtg_2 and mtg_5\n - Resolve conflict between mtg_3 and mtg_4\n - Resolve conflict between mtg_3 and mtg_5\n - Resolve conflict between mtg_4 and mtg_5\n - Reply to email email_1 from Eve Johnson\n - Reply to email email_2 from David Kim\n - Reply to email email_3 from Grace Wang\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
95
+ "seed": 93,
96
+ "difficulty": "medium",
97
+ "n_conflicts": 10,
98
+ "n_emails": 3
99
+ },
100
+ {
101
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 9:00am (30min) - all-hands with Irene Davis [priority: medium]\n[mtg_2] 9:00am (60min) - sprint planning with Carol Park [priority: medium]\n[mtg_3] 9:00am (60min) - interview with Bob Martinez [priority: high]\n[mtg_4] 9:00am (60min) - board prep with Grace Wang [priority: medium]\n[mtg_5] 11:00am (30min) - client call with Jack Wilson [priority: medium]\n[mtg_6] 1:30pm (30min) - lunch meeting with Frank Lee [priority: low]\n\nINBOX:\n[email_1] From: David Kim | Subject: Hiring Update [DEADLINE: tomorrow]\n Hi, I wanted to follow up on hiring update. Could you get back to me by tomorrow? Thanks, David Kim\n\n[email_2] From: Alice Chen | Subject: Board Presentation Draft [DEADLINE: today]\n Hi, I wanted to follow up on board presentation draft. Could you get back to me by today? Thanks, Alice Chen\n\n[email_3] From: Henry Brown | Subject: Product Launch Timeline [DEADLINE: tomorrow]\n Hi, I wanted to follow up on product launch timeline. Could you get back to me by tomorrow? Thanks, Henry Brown\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_1 overlaps with mtg_3\nCONFLICT: mtg_1 overlaps with mtg_4\nCONFLICT: mtg_2 overlaps with mtg_3\nCONFLICT: mtg_2 overlaps with mtg_4\nCONFLICT: mtg_3 overlaps with mtg_4\n\nUSER PREFERENCES:\n - User avoids meetings on Fridays\n - User prefers formal/professional tone in emails\n - User prefers 30-min meetings over 60-min\n - User always blocks 12pm-1pm for lunch\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_1 and mtg_3\n - Resolve conflict between mtg_1 and mtg_4\n - Resolve conflict between mtg_2 and mtg_3\n - Resolve conflict between mtg_2 and mtg_4\n - Resolve conflict between mtg_3 and mtg_4\n - Reply to email email_1 from David Kim\n - Reply to email email_2 from Alice Chen\n - Reply to email email_3 from Henry Brown\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
102
+ "seed": 94,
103
+ "difficulty": "medium",
104
+ "n_conflicts": 6,
105
+ "n_emails": 3
106
+ },
107
+ {
108
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 11:00am (60min) - design review with Irene Davis [priority: medium]\n[mtg_2] 11:00am (30min) - 1:1 with Jack Wilson [priority: high]\n[mtg_3] 11:00am (30min) - strategy session with Carol Park [priority: low]\n[mtg_4] 11:00am (60min) - all-hands with David Kim [priority: low]\n[mtg_5] 11:00am (30min) - interview with Alice Chen [priority: high]\n[mtg_6] 11:00am (60min) - board prep with Bob Martinez [priority: medium]\n[mtg_7] 5:00pm (30min) - client call with Frank Lee [priority: medium]\n[mtg_8] 2:30pm (60min) - team standup with Henry Brown [priority: medium]\n\nINBOX:\n[email_1] From: Grace Wang | Subject: Performance Review Follow-up [DEADLINE: tomorrow]\n Hi, I wanted to follow up on performance review follow-up. Could you get back to me by tomorrow? Thanks, Grace Wang\n\n[email_2] From: Eve Johnson | Subject: Team Offsite Planning [DEADLINE: today]\n Hi, I wanted to follow up on team offsite planning. Could you get back to me by today? Thanks, Eve Johnson\n\n[email_3] From: Jack Wilson | Subject: Q3 Budget Review\n Hi, I wanted to follow up on q3 budget review. Could you get back to me? Thanks, Jack Wilson\n\n[email_4] From: Grace Wang | Subject: Performance Review Follow-up\n Hi, I wanted to follow up on performance review follow-up. Could you get back to me? Thanks, Grace Wang\n\n[email_5] From: Jack Wilson | Subject: Client Demo Prep\n Hi, I wanted to follow up on client demo prep. Could you get back to me? Thanks, Jack Wilson\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_1 overlaps with mtg_3\nCONFLICT: mtg_1 overlaps with mtg_4\nCONFLICT: mtg_1 overlaps with mtg_5\nCONFLICT: mtg_1 overlaps with mtg_6\nCONFLICT: mtg_2 overlaps with mtg_3\nCONFLICT: mtg_2 overlaps with mtg_4\nCONFLICT: mtg_2 overlaps with mtg_5\nCONFLICT: mtg_2 overlaps with mtg_6\nCONFLICT: mtg_3 overlaps with mtg_4\nCONFLICT: mtg_3 overlaps with mtg_5\nCONFLICT: mtg_3 overlaps with mtg_6\nCONFLICT: mtg_4 overlaps with mtg_5\nCONFLICT: mtg_4 overlaps with mtg_6\nCONFLICT: mtg_5 overlaps with mtg_6\n\nUSER PREFERENCES:\n - Client meetings cannot be rescheduled\n - User prefers informal/casual tone in emails\n - User always blocks 12pm-1pm for lunch\n - User prefers formal/professional tone in emails\n - Meetings with the boss always take priority\n - User dislikes back-to-back meetings\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_1 and mtg_3\n - Resolve conflict between mtg_1 and mtg_4\n - Resolve conflict between mtg_1 and mtg_5\n - Resolve conflict between mtg_1 and mtg_6\n - Resolve conflict between mtg_2 and mtg_3\n - Resolve conflict between mtg_2 and mtg_4\n - Resolve conflict between mtg_2 and mtg_5\n - Resolve conflict between mtg_2 and mtg_6\n - Resolve conflict between mtg_3 and mtg_4\n - Resolve conflict between mtg_3 and mtg_5\n - Resolve conflict between mtg_3 and mtg_6\n - Resolve conflict between mtg_4 and mtg_5\n - Resolve conflict between mtg_4 and mtg_6\n - Resolve conflict between mtg_5 and mtg_6\n - Reply to email email_1 from Grace Wang\n - Reply to email email_2 from Eve Johnson\n - Reply to email email_3 from Jack Wilson\n - Reply to email email_4 from Grace Wang\n - Reply to email email_5 from Jack Wilson\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
109
+ "seed": 95,
110
+ "difficulty": "hard",
111
+ "n_conflicts": 15,
112
+ "n_emails": 5
113
+ },
114
+ {
115
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 4:30pm (30min) - interview with Frank Lee [priority: low]\n[mtg_2] 4:30pm (60min) - all-hands with Jack Wilson [priority: medium]\n[mtg_3] 4:30pm (30min) - team standup with Grace Wang [priority: low]\n[mtg_4] 4:30pm (60min) - client call with Bob Martinez [priority: high]\n[mtg_5] 4:30pm (60min) - strategy session with Alice Chen [priority: low]\n[mtg_6] 4:30pm (60min) - board prep with Carol Park [priority: high]\n[mtg_7] 1:30pm (30min) - sprint planning with Irene Davis [priority: low]\n[mtg_8] 12:00pm (60min) - 1:1 with Eve Johnson [priority: medium]\n\nINBOX:\n[email_1] From: David Kim | Subject: Board Presentation Draft [DEADLINE: today]\n Hi, I wanted to follow up on board presentation draft. Could you get back to me by today? Thanks, David Kim\n\n[email_2] From: Henry Brown | Subject: Product Launch Timeline\n Hi, I wanted to follow up on product launch timeline. Could you get back to me? Thanks, Henry Brown\n\n[email_3] From: Grace Wang | Subject: Board Presentation Draft\n Hi, I wanted to follow up on board presentation draft. Could you get back to me? Thanks, Grace Wang\n\n[email_4] From: David Kim | Subject: Hiring Update\n Hi, I wanted to follow up on hiring update. Could you get back to me? Thanks, David Kim\n\n[email_5] From: Eve Johnson | Subject: Client Demo Prep [DEADLINE: tomorrow]\n Hi, I wanted to follow up on client demo prep. Could you get back to me by tomorrow? Thanks, Eve Johnson\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_1 overlaps with mtg_3\nCONFLICT: mtg_1 overlaps with mtg_4\nCONFLICT: mtg_1 overlaps with mtg_5\nCONFLICT: mtg_1 overlaps with mtg_6\nCONFLICT: mtg_2 overlaps with mtg_3\nCONFLICT: mtg_2 overlaps with mtg_4\nCONFLICT: mtg_2 overlaps with mtg_5\nCONFLICT: mtg_2 overlaps with mtg_6\nCONFLICT: mtg_3 overlaps with mtg_4\nCONFLICT: mtg_3 overlaps with mtg_5\nCONFLICT: mtg_3 overlaps with mtg_6\nCONFLICT: mtg_4 overlaps with mtg_5\nCONFLICT: mtg_4 overlaps with mtg_6\nCONFLICT: mtg_5 overlaps with mtg_6\n\nUSER PREFERENCES:\n - Meetings with the boss always take priority\n - User prefers no meetings before 10am\n - Client meetings cannot be rescheduled\n - User always blocks 12pm-1pm for lunch\n - User dislikes back-to-back meetings\n - User needs 15-min buffer between meetings\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_1 and mtg_3\n - Resolve conflict between mtg_1 and mtg_4\n - Resolve conflict between mtg_1 and mtg_5\n - Resolve conflict between mtg_1 and mtg_6\n - Resolve conflict between mtg_2 and mtg_3\n - Resolve conflict between mtg_2 and mtg_4\n - Resolve conflict between mtg_2 and mtg_5\n - Resolve conflict between mtg_2 and mtg_6\n - Resolve conflict between mtg_3 and mtg_4\n - Resolve conflict between mtg_3 and mtg_5\n - Resolve conflict between mtg_3 and mtg_6\n - Resolve conflict between mtg_4 and mtg_5\n - Resolve conflict between mtg_4 and mtg_6\n - Resolve conflict between mtg_5 and mtg_6\n - Reply to email email_1 from David Kim\n - Reply to email email_2 from Henry Brown\n - Reply to email email_3 from Grace Wang\n - Reply to email email_4 from David Kim\n - Reply to email email_5 from Eve Johnson\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
116
+ "seed": 96,
117
+ "difficulty": "hard",
118
+ "n_conflicts": 15,
119
+ "n_emails": 5
120
+ },
121
+ {
122
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 12:30pm (30min) - sprint planning with David Kim [priority: medium]\n[mtg_2] 12:30pm (60min) - all-hands with Grace Wang [priority: high]\n[mtg_3] 12:30pm (30min) - 1:1 with Frank Lee [priority: high]\n[mtg_4] 12:30pm (30min) - lunch meeting with Irene Davis [priority: high]\n[mtg_5] 12:30pm (30min) - board prep with Alice Chen [priority: high]\n[mtg_6] 12:30pm (30min) - design review with Eve Johnson [priority: low]\n[mtg_7] 12:30pm (60min) - strategy session with Henry Brown [priority: high]\n[mtg_8] 11:00am (30min) - client call with Carol Park [priority: high]\n\nINBOX:\n[email_1] From: Jack Wilson | Subject: Customer Escalation\n Hi, I wanted to follow up on customer escalation. Could you get back to me? Thanks, Jack Wilson\n\n[email_2] From: Bob Martinez | Subject: Partnership Proposal\n Hi, I wanted to follow up on partnership proposal. Could you get back to me? Thanks, Bob Martinez\n\n[email_3] From: Alice Chen | Subject: Client Demo Prep\n Hi, I wanted to follow up on client demo prep. Could you get back to me? Thanks, Alice Chen\n\n[email_4] From: Irene Davis | Subject: Hiring Update [DEADLINE: today]\n Hi, I wanted to follow up on hiring update. Could you get back to me by today? Thanks, Irene Davis\n\n[email_5] From: Irene Davis | Subject: Hiring Update [DEADLINE: today]\n Hi, I wanted to follow up on hiring update. Could you get back to me by today? Thanks, Irene Davis\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_1 overlaps with mtg_3\nCONFLICT: mtg_1 overlaps with mtg_4\nCONFLICT: mtg_1 overlaps with mtg_5\nCONFLICT: mtg_1 overlaps with mtg_6\nCONFLICT: mtg_1 overlaps with mtg_7\nCONFLICT: mtg_2 overlaps with mtg_3\nCONFLICT: mtg_2 overlaps with mtg_4\nCONFLICT: mtg_2 overlaps with mtg_5\nCONFLICT: mtg_2 overlaps with mtg_6\nCONFLICT: mtg_2 overlaps with mtg_7\nCONFLICT: mtg_3 overlaps with mtg_4\nCONFLICT: mtg_3 overlaps with mtg_5\nCONFLICT: mtg_3 overlaps with mtg_6\nCONFLICT: mtg_3 overlaps with mtg_7\nCONFLICT: mtg_4 overlaps with mtg_5\nCONFLICT: mtg_4 overlaps with mtg_6\nCONFLICT: mtg_4 overlaps with mtg_7\nCONFLICT: mtg_5 overlaps with mtg_6\nCONFLICT: mtg_5 overlaps with mtg_7\nCONFLICT: mtg_6 overlaps with mtg_7\n\nUSER PREFERENCES:\n - User needs 15-min buffer between meetings\n - User prefers no meetings before 10am\n - User dislikes back-to-back meetings\n - User prefers 30-min meetings over 60-min\n - User avoids meetings on Fridays\n - Meetings with the boss always take priority\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_1 and mtg_3\n - Resolve conflict between mtg_1 and mtg_4\n - Resolve conflict between mtg_1 and mtg_5\n - Resolve conflict between mtg_1 and mtg_6\n - Resolve conflict between mtg_1 and mtg_7\n - Resolve conflict between mtg_2 and mtg_3\n - Resolve conflict between mtg_2 and mtg_4\n - Resolve conflict between mtg_2 and mtg_5\n - Resolve conflict between mtg_2 and mtg_6\n - Resolve conflict between mtg_2 and mtg_7\n - Resolve conflict between mtg_3 and mtg_4\n - Resolve conflict between mtg_3 and mtg_5\n - Resolve conflict between mtg_3 and mtg_6\n - Resolve conflict between mtg_3 and mtg_7\n - Resolve conflict between mtg_4 and mtg_5\n - Resolve conflict between mtg_4 and mtg_6\n - Resolve conflict between mtg_4 and mtg_7\n - Resolve conflict between mtg_5 and mtg_6\n - Resolve conflict between mtg_5 and mtg_7\n - Resolve conflict between mtg_6 and mtg_7\n - Reply to email email_1 from Jack Wilson\n - Reply to email email_2 from Bob Martinez\n - Reply to email email_3 from Alice Chen\n - Reply to email email_4 from Irene Davis\n - Reply to email email_5 from Irene Davis\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
123
+ "seed": 97,
124
+ "difficulty": "hard",
125
+ "n_conflicts": 21,
126
+ "n_emails": 5
127
+ },
128
+ {
129
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 2:00pm (60min) - design review with Frank Lee [priority: medium]\n[mtg_2] 2:00pm (30min) - interview with Alice Chen [priority: low]\n[mtg_3] 2:00pm (30min) - 1:1 with Jack Wilson [priority: low]\n[mtg_4] 2:00pm (60min) - all-hands with David Kim [priority: high]\n[mtg_5] 2:00pm (60min) - board prep with Irene Davis [priority: low]\n[mtg_6] 2:00pm (30min) - client call with Grace Wang [priority: low]\n[mtg_7] 10:30am (60min) - lunch meeting with Carol Park [priority: low]\n[mtg_8] 11:30am (30min) - strategy session with Eve Johnson [priority: medium]\n\nINBOX:\n[email_1] From: Henry Brown | Subject: Vendor Contract Renewal\n Hi, I wanted to follow up on vendor contract renewal. Could you get back to me? Thanks, Henry Brown\n\n[email_2] From: Bob Martinez | Subject: Product Launch Timeline [DEADLINE: today]\n Hi, I wanted to follow up on product launch timeline. Could you get back to me by today? Thanks, Bob Martinez\n\n[email_3] From: Alice Chen | Subject: Hiring Update [DEADLINE: tomorrow]\n Hi, I wanted to follow up on hiring update. Could you get back to me by tomorrow? Thanks, Alice Chen\n\n[email_4] From: Irene Davis | Subject: Q3 Budget Review [DEADLINE: today]\n Hi, I wanted to follow up on q3 budget review. Could you get back to me by today? Thanks, Irene Davis\n\n[email_5] From: Frank Lee | Subject: Product Launch Timeline [DEADLINE: today]\n Hi, I wanted to follow up on product launch timeline. Could you get back to me by today? Thanks, Frank Lee\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_1 overlaps with mtg_3\nCONFLICT: mtg_1 overlaps with mtg_4\nCONFLICT: mtg_1 overlaps with mtg_5\nCONFLICT: mtg_1 overlaps with mtg_6\nCONFLICT: mtg_2 overlaps with mtg_3\nCONFLICT: mtg_2 overlaps with mtg_4\nCONFLICT: mtg_2 overlaps with mtg_5\nCONFLICT: mtg_2 overlaps with mtg_6\nCONFLICT: mtg_3 overlaps with mtg_4\nCONFLICT: mtg_3 overlaps with mtg_5\nCONFLICT: mtg_3 overlaps with mtg_6\nCONFLICT: mtg_4 overlaps with mtg_5\nCONFLICT: mtg_4 overlaps with mtg_6\nCONFLICT: mtg_5 overlaps with mtg_6\n\nUSER PREFERENCES:\n - User always blocks 12pm-1pm for lunch\n - User prefers no meetings before 10am\n - Client meetings cannot be rescheduled\n - User prefers formal/professional tone in emails\n - User avoids meetings on Fridays\n - Meetings with the boss always take priority\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_1 and mtg_3\n - Resolve conflict between mtg_1 and mtg_4\n - Resolve conflict between mtg_1 and mtg_5\n - Resolve conflict between mtg_1 and mtg_6\n - Resolve conflict between mtg_2 and mtg_3\n - Resolve conflict between mtg_2 and mtg_4\n - Resolve conflict between mtg_2 and mtg_5\n - Resolve conflict between mtg_2 and mtg_6\n - Resolve conflict between mtg_3 and mtg_4\n - Resolve conflict between mtg_3 and mtg_5\n - Resolve conflict between mtg_3 and mtg_6\n - Resolve conflict between mtg_4 and mtg_5\n - Resolve conflict between mtg_4 and mtg_6\n - Resolve conflict between mtg_5 and mtg_6\n - Reply to email email_1 from Henry Brown\n - Reply to email email_2 from Bob Martinez\n - Reply to email email_3 from Alice Chen\n - Reply to email email_4 from Irene Davis\n - Reply to email email_5 from Frank Lee\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
130
+ "seed": 98,
131
+ "difficulty": "hard",
132
+ "n_conflicts": 15,
133
+ "n_emails": 5
134
+ },
135
+ {
136
+ "prompt": "You are an executive assistant. Your job is to manage the user's calendar and inbox efficiently.\n\nTODAY'S CALENDAR:\n[mtg_1] 3:00pm (30min) - interview with Grace Wang [priority: medium]\n[mtg_2] 3:00pm (30min) - board prep with Jack Wilson [priority: high]\n[mtg_3] 3:00pm (60min) - team standup with David Kim [priority: high]\n[mtg_4] 3:00pm (60min) - sprint planning with Eve Johnson [priority: medium]\n[mtg_5] 3:00pm (30min) - design review with Bob Martinez [priority: medium]\n[mtg_6] 3:00pm (60min) - lunch meeting with Frank Lee [priority: high]\n[mtg_7] 5:00pm (30min) - all-hands with Irene Davis [priority: medium]\n[mtg_8] 4:00pm (30min) - client call with Alice Chen [priority: low]\n\nINBOX:\n[email_1] From: Carol Park | Subject: Q3 Budget Review\n Hi, I wanted to follow up on q3 budget review. Could you get back to me? Thanks, Carol Park\n\n[email_2] From: Henry Brown | Subject: Client Demo Prep [DEADLINE: today]\n Hi, I wanted to follow up on client demo prep. Could you get back to me by today? Thanks, Henry Brown\n\n[email_3] From: Irene Davis | Subject: Client Demo Prep [DEADLINE: today]\n Hi, I wanted to follow up on client demo prep. Could you get back to me by today? Thanks, Irene Davis\n\n[email_4] From: Henry Brown | Subject: Board Presentation Draft\n Hi, I wanted to follow up on board presentation draft. Could you get back to me? Thanks, Henry Brown\n\n[email_5] From: Bob Martinez | Subject: Client Demo Prep [DEADLINE: tomorrow]\n Hi, I wanted to follow up on client demo prep. Could you get back to me by tomorrow? Thanks, Bob Martinez\n\nSCHEDULING CONFLICTS:\nCONFLICT: mtg_1 overlaps with mtg_2\nCONFLICT: mtg_1 overlaps with mtg_3\nCONFLICT: mtg_1 overlaps with mtg_4\nCONFLICT: mtg_1 overlaps with mtg_5\nCONFLICT: mtg_1 overlaps with mtg_6\nCONFLICT: mtg_2 overlaps with mtg_3\nCONFLICT: mtg_2 overlaps with mtg_4\nCONFLICT: mtg_2 overlaps with mtg_5\nCONFLICT: mtg_2 overlaps with mtg_6\nCONFLICT: mtg_3 overlaps with mtg_4\nCONFLICT: mtg_3 overlaps with mtg_5\nCONFLICT: mtg_3 overlaps with mtg_6\nCONFLICT: mtg_4 overlaps with mtg_5\nCONFLICT: mtg_4 overlaps with mtg_6\nCONFLICT: mtg_5 overlaps with mtg_6\n\nUSER PREFERENCES:\n - User avoids meetings on Fridays\n - User prefers informal/casual tone in emails\n - Meetings with the boss always take priority\n - User always blocks 12pm-1pm for lunch\n - User prefers no meetings before 10am\n - Client meetings cannot be rescheduled\n\nPENDING TASKS:\n - Resolve conflict between mtg_1 and mtg_2\n - Resolve conflict between mtg_1 and mtg_3\n - Resolve conflict between mtg_1 and mtg_4\n - Resolve conflict between mtg_1 and mtg_5\n - Resolve conflict between mtg_1 and mtg_6\n - Resolve conflict between mtg_2 and mtg_3\n - Resolve conflict between mtg_2 and mtg_4\n - Resolve conflict between mtg_2 and mtg_5\n - Resolve conflict between mtg_2 and mtg_6\n - Resolve conflict between mtg_3 and mtg_4\n - Resolve conflict between mtg_3 and mtg_5\n - Resolve conflict between mtg_3 and mtg_6\n - Resolve conflict between mtg_4 and mtg_5\n - Resolve conflict between mtg_4 and mtg_6\n - Resolve conflict between mtg_5 and mtg_6\n - Reply to email email_1 from Carol Park\n - Reply to email email_2 from Henry Brown\n - Reply to email email_3 from Irene Davis\n - Reply to email email_4 from Henry Brown\n - Reply to email email_5 from Bob Martinez\n\nAvailable tools: check_calendar, check_inbox, reschedule, draft_reply, delegate_task, done\n\nResolve all conflicts, reply to emails respecting user preferences, and call \"done\" when finished.\nEach tool call should be formatted as: {\"tool\": \"tool_name\", \"arguments\": {...}}",
137
+ "seed": 99,
138
+ "difficulty": "hard",
139
+ "n_conflicts": 15,
140
+ "n_emails": 5
141
+ }
142
+ ]
training/scenarios/train_scenarios.json ADDED
The diff for this file is too large to render. See raw diff
 
training/train_grpo.py ADDED
@@ -0,0 +1,195 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """GRPO Training script for the Executive Assistant Arena.
2
+
3
+ Run on Northflank H100:
4
+ cd ~/chief-of-staff/exec_assistant_arena
5
+ PYTHONPATH=. uvicorn server.app:app --host 0.0.0.0 --port 8000 &
6
+ python training/train_grpo.py
7
+ """
8
+
9
+ import json
10
+ import re
11
+ import os
12
+ import sys
13
+
14
+ import wandb
15
+ import torch
16
+ from unsloth import FastLanguageModel
17
+ from trl import GRPOTrainer, GRPOConfig
18
+ from datasets import Dataset
19
+
20
+ # Add parent dir to path so we can import the env
21
+ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
22
+
23
+ from exec_assistant_arena import ExecAssistantArenaEnv
24
+ from exec_assistant_arena.models import AssistantAction
25
+
26
+ # --- Config ---
27
+ MODEL_NAME = "Qwen/Qwen2.5-7B"
28
+ MAX_SEQ_LEN = 2048
29
+ LORA_R = 16
30
+ LORA_ALPHA = 16
31
+ NUM_GENERATIONS = 6
32
+ LEARNING_RATE = 5e-6
33
+ BATCH_SIZE = 2
34
+ MAX_COMPLETION_LENGTH = 1024
35
+ NUM_EPOCHS = 3
36
+ SAVE_STEPS = 200
37
+ ENV_URL = "http://localhost:8000"
38
+ HF_PUSH_REPO = "SidraMiconi/exec-assistant-arena-lora"
39
+
40
+ # --- Load scenarios ---
41
+ script_dir = os.path.dirname(os.path.abspath(__file__))
42
+ with open(os.path.join(script_dir, "scenarios/train_scenarios.json")) as f:
43
+ scenarios = json.load(f)
44
+
45
+ dataset = Dataset.from_dict({
46
+ "prompt": [s["prompt"] for s in scenarios],
47
+ })
48
+
49
+ print(f"Loaded {len(dataset)} training scenarios")
50
+
51
+
52
+ def parse_tool_calls(completion_text: str) -> list[AssistantAction]:
53
+ """Parse model completion into a sequence of tool calls."""
54
+ actions = []
55
+
56
+ # Try to find JSON tool calls in the completion
57
+ # Pattern: {"tool": "...", "arguments": {...}}
58
+ pattern = r'\{[^{}]*"tool"\s*:\s*"([^"]+)"[^{}]*(?:"arguments"\s*:\s*(\{[^{}]*\}))?[^{}]*\}'
59
+ matches = re.finditer(pattern, completion_text)
60
+
61
+ for match in matches:
62
+ tool = match.group(1)
63
+ args_str = match.group(2)
64
+ args = {}
65
+ if args_str:
66
+ try:
67
+ args = json.loads(args_str)
68
+ except json.JSONDecodeError:
69
+ pass
70
+ actions.append(AssistantAction(tool=tool, arguments=args))
71
+
72
+ # If no tool calls found, treat the whole thing as a "done"
73
+ if not actions:
74
+ actions.append(AssistantAction(tool="done"))
75
+
76
+ return actions
77
+
78
+
79
+ def assistant_reward(completions, prompts=None, **kwargs):
80
+ """Reward function: run each completion through the environment."""
81
+ rewards = []
82
+
83
+ for i, completion in enumerate(completions):
84
+ # Extract text from completion
85
+ if isinstance(completion, list):
86
+ text = "".join(
87
+ c.get("content", "") if isinstance(c, dict) else str(c)
88
+ for c in completion
89
+ )
90
+ else:
91
+ text = str(completion)
92
+
93
+ try:
94
+ with ExecAssistantArenaEnv(base_url=ENV_URL) as env:
95
+ # Determine scenario seed from prompt index
96
+ prompt_idx = i // NUM_GENERATIONS if prompts else 0
97
+ seed = scenarios[prompt_idx % len(scenarios)].get("seed", 0)
98
+ difficulty = scenarios[prompt_idx % len(scenarios)].get("difficulty", "easy")
99
+
100
+ result = env.reset(seed=seed, difficulty=difficulty)
101
+ actions = parse_tool_calls(text)
102
+
103
+ total_reward = 0.0
104
+ for action in actions:
105
+ result = env.step(action)
106
+ total_reward += (result.reward or 0.0)
107
+ if result.done:
108
+ break
109
+
110
+ # If agent didn't call "done", call it for terminal rewards
111
+ if not result.done:
112
+ result = env.step(AssistantAction(tool="done"))
113
+ total_reward += (result.reward or 0.0)
114
+
115
+ rewards.append(total_reward)
116
+
117
+ # Log component breakdown to W&B
118
+ state = env.state()
119
+ wandb.log({
120
+ "reward/total": total_reward,
121
+ "reward/conflicts_resolved": state.conflicts_resolved,
122
+ "reward/total_conflicts": state.total_conflicts,
123
+ "reward/conflict_rate": state.conflicts_resolved / max(1, state.total_conflicts),
124
+ "reward/preferences_inferred": state.preferences_inferred,
125
+ "reward/emails_drafted": state.emails_drafted,
126
+ "reward/deadlines_met": state.deadlines_met,
127
+ "reward/unnecessary_actions": state.unnecessary_actions,
128
+ "reward/late_changes_handled": state.late_changes_handled,
129
+ "reward/cumulative": state.cumulative_reward,
130
+ "meta/difficulty": difficulty,
131
+ "meta/n_actions_parsed": len(actions),
132
+ })
133
+
134
+ except Exception as e:
135
+ print(f"Error scoring completion {i}: {e}")
136
+ rewards.append(-1.0)
137
+
138
+ return rewards
139
+
140
+
141
+ def main():
142
+ wandb.init(project="exec-assistant-arena", name="grpo-qwen2.5-7b")
143
+
144
+ print(f"Loading model: {MODEL_NAME}")
145
+ model, tokenizer = FastLanguageModel.from_pretrained(
146
+ model_name=MODEL_NAME,
147
+ max_seq_length=MAX_SEQ_LEN,
148
+ load_in_4bit=True,
149
+ )
150
+
151
+ model = FastLanguageModel.get_peft_model(
152
+ model,
153
+ r=LORA_R,
154
+ lora_alpha=LORA_ALPHA,
155
+ target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
156
+ )
157
+
158
+ print("Model loaded. Starting GRPO training...")
159
+
160
+ config = GRPOConfig(
161
+ output_dir="./checkpoints",
162
+ num_generations=NUM_GENERATIONS,
163
+ learning_rate=LEARNING_RATE,
164
+ per_device_train_batch_size=BATCH_SIZE,
165
+ max_completion_length=MAX_COMPLETION_LENGTH,
166
+ num_train_epochs=NUM_EPOCHS,
167
+ save_steps=SAVE_STEPS,
168
+ report_to="wandb",
169
+ logging_steps=10,
170
+ bf16=True,
171
+ gradient_accumulation_steps=4,
172
+ warmup_ratio=0.05,
173
+ max_grad_norm=1.0,
174
+ )
175
+
176
+ trainer = GRPOTrainer(
177
+ model=model,
178
+ reward_funcs=assistant_reward,
179
+ args=config,
180
+ train_dataset=dataset,
181
+ processing_class=tokenizer,
182
+ )
183
+
184
+ trainer.train()
185
+
186
+ print(f"Training complete. Pushing to {HF_PUSH_REPO}...")
187
+ model.push_to_hub(HF_PUSH_REPO)
188
+ tokenizer.push_to_hub(HF_PUSH_REPO)
189
+ print("Done!")
190
+
191
+ wandb.finish()
192
+
193
+
194
+ if __name__ == "__main__":
195
+ main()