Add mocks for HTTP transport to avoid real network calls during tests. This addresses reviewer feedback about test reliability: - Tests are now faster (no network latency) - Tests are deterministic across environments - Test intent is clearer (unit testing error handling logic) The mock throws immediately with a controlled error message, allowing tests to validate error handling without network dependencies. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
45 lines
1.7 KiB
Plaintext
45 lines
1.7 KiB
Plaintext
## Summary
|
|
|
|
Adds an automatic model fallback system that gracefully handles API failures by retrying with configured fallback models. When primary models fail due to transient errors (rate limits, 5xx, network issues), the system automatically retries with fallback models. Background tasks also properly support model fallback chains for reliability.
|
|
|
|
## Features
|
|
|
|
Automatic Fallback on Transient Errors:
|
|
- Rate limits and HTTP 429 errors
|
|
- Service unavailable (HTTP 503, 502)
|
|
- Capacity issues (overloaded, capacity, unavailable)
|
|
- Network errors (timeout, ECONNREFUSED, ENOTFOUND)
|
|
|
|
Non-model errors like authentication failures or invalid input are NOT retried.
|
|
|
|
Background Task Support:
|
|
- Background tasks properly use modelChain for fallback
|
|
- Ensures reliability for async operations
|
|
|
|
## Implementation Details
|
|
|
|
Core module src/features/model-fallback/ provides utilities for:
|
|
- parseModelString: Parse provider/model format
|
|
- buildModelChain: Build ordered list of models
|
|
- isModelError: Detect retryable errors
|
|
- withModelFallback: Generic retry wrapper with validation
|
|
- formatRetryErrors: Format error list for display
|
|
|
|
Integration with sisyphus-task includes updated resolveCategoryConfig, inline retry logic, and special handling for configuration errors.
|
|
|
|
## Fixes from Review
|
|
|
|
✅ maxAttempts validated with Math.max(1, ...) to prevent silent failures
|
|
✅ Error matching scoped to agent.name errors only
|
|
✅ Background LaunchInput supports modelChain
|
|
✅ BackgroundTask stores modelChain field
|
|
✅ Background manager passes modelChain to prompt execution
|
|
|
|
## Testing
|
|
|
|
✅ 36/36 model-fallback tests passing
|
|
✅ Build successful
|
|
✅ TypeScript types valid
|
|
|
|
This is a clean PR without auto-generated XML descriptions, fixing the authorship issue from PR #785.
|