Batch/map tool for running tools against multiple inputs concurrently
Project description
exoclaw-tools-batch
Map and reduce primitives for agent-controlled ETL pipelines. Run tools against multiple inputs concurrently, then merge results — all without per-item LLM calls.
Tools
BatchTool (map)
Fan out a registered tool across multiple inputs concurrently. Results written to disk to keep agent context clean.
from exoclaw_tools_batch import BatchTool, ReduceTool
batch = BatchTool(concurrency=10)
reduce = ReduceTool()
app = Exoclaw(tools=[batch, reduce, ...])
{
"tool": "batch",
"items": [
{"url": "https://example.com/1"},
{"url": "https://example.com/2"}
],
"concurrency": 5
}
Returns {output_path: "/tmp/batch_web_fetch_abc.json", count: 2}. Use read_file to inspect results.
ReduceTool (reduce)
Merge multiple batch output files into one.
{
"dir": "/tmp/batch_llm_call_abc/",
"key": "results",
"dedup": "url"
}
Returns {output_path: "/tmp/reduce_xyz.json", count: 150}.
Options:
files— explicit list of paths (alternative todir)key— JSON key to extract from each file (default:"results", empty string for root)dedup— deduplicate by field nameoutput— explicit output path
ETL pipeline example
1. batch(tool="web_fetch", items=[...93 feeds...])
→ /tmp/batch_web_fetch_abc.json
2. batch(tool="llm_call", items=[
{prompt: "{{ file(path) }}\nExtract interesting URLs", model: "haiku", output: "/tmp/triage/0.json"},
...93 items...
])
→ 93 parallel cheap LLM calls
3. reduce(dir="/tmp/triage/", dedup="url")
→ /tmp/reduce_xyz.json (merged + deduped)
4. Agent reads merged results, queues to digest
2 batch calls + 1 reduce + 93 cheap model calls. No full agent loops per item.
How it works
BatchToolreceives theToolRegistryvia duck-typedset_registry()at registration time- Runs
registry.execute(tool, params)for each item behind an asyncio semaphore - Results written to temp files (configurable
output_dir) ReduceToolmerges JSON files by extracting at a key and concatenating
Requirements
exoclaw >= 0.3.0(withset_registryhook in AgentLoop)
Project details
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 exoclaw_tools_batch-0.1.1.tar.gz.
File metadata
- Download URL: exoclaw_tools_batch-0.1.1.tar.gz
- Upload date:
- Size: 6.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58c0a1c0f0ccc0b7fbe430e33bef76d49142df64270a37891827209a10cdab2a
|
|
| MD5 |
27e67bdbe5925b0703ec3376b20e9c6c
|
|
| BLAKE2b-256 |
59477a23cb4e8e59f098844f9a76175c29a46d250b58d2ade95acba9c35f39bf
|
File details
Details for the file exoclaw_tools_batch-0.1.1-py3-none-any.whl.
File metadata
- Download URL: exoclaw_tools_batch-0.1.1-py3-none-any.whl
- Upload date:
- Size: 9.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.10 {"installer":{"name":"uv","version":"0.10.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
049a4046783644b4050053e92bd235c2fc2a63648817ae9c4ac7565921488271
|
|
| MD5 |
4fc23dd8da3eeac7105615ae14cf4ae5
|
|
| BLAKE2b-256 |
9a21f8e9fd8aa35618f2de9ca1bc48ba7d9a59934e9925913dbfca591c7dbebe
|