Context
Batch operations where some items may fail.
Problem
All-or-nothing responses lose successful results when some fail.
Solution
Report per-item status:
- Successes: Items that worked
- Failures: Items that failed with reasons
- Summary: Overall statistics
- Retry guidance: How to retry failures
- Successes: Items that worked
- Failures: Items that failed with reasons
- Summary: Overall statistics
- Retry guidance: How to retry failures
Examples
Python
@tool
def send_invites(
emails: list[str]
) -> InviteResult:
"""Send invites to multiple users.
Returns success/failure for each email.
"""
results = []
for email in emails:
try:
invite_api.send(email)
results.append(InviteStatus(email=email, success=True))
except Exception as e:
results.append(InviteStatus(email=email, success=False, error=str(e)))
succeeded = [r for r in results if r.success]
failed = [r for r in results if not r.success]
return InviteResult(
total=len(results),
succeeded=len(succeeded),
failed=len(failed),
results=results,
retry_hint=f"Retry with: send_invites([{', '.join(f.email for f in failed)}])" if failed else None
) Considerations
- Always return partial successes, don't discard them
- Provide enough error detail to understand failures
- Include retry guidance for failed items