54 lines
1.2 KiB
Markdown
54 lines
1.2 KiB
Markdown
# Phase 3: Error Handling
|
|
|
|
**Objective**: Handle refusals, token limits, and validation errors
|
|
|
|
## Key Error Scenarios
|
|
|
|
### 1. Safety Refusals (`stop_reason: "refusal"`)
|
|
|
|
```python
|
|
if response.stop_reason == "refusal":
|
|
logger.warning(f"Request refused: {input_text}")
|
|
# Don't retry - respect safety boundaries
|
|
return None # or raise exception
|
|
```
|
|
|
|
### 2. Token Limit Reached (`stop_reason: "max_tokens"`)
|
|
|
|
```python
|
|
if response.stop_reason == "max_tokens":
|
|
# Retry with higher limit
|
|
return extract_with_higher_limit(text, max_tokens * 1.5)
|
|
```
|
|
|
|
### 3. Schema Validation Errors (SDK raises exception)
|
|
|
|
```python
|
|
from pydantic import ValidationError
|
|
|
|
try:
|
|
result = response.parsed_output
|
|
except ValidationError as e:
|
|
logger.error(f"Schema validation failed: {e}")
|
|
# Should be rare - indicates schema mismatch
|
|
raise
|
|
```
|
|
|
|
### 4. API Errors (400 - schema too complex)
|
|
|
|
```python
|
|
from anthropic import BadRequestError
|
|
|
|
try:
|
|
response = client.beta.messages.parse(...)
|
|
except BadRequestError as e:
|
|
if "too complex" in str(e).lower():
|
|
# Simplify schema
|
|
logger.error("Schema too complex, simplifying...")
|
|
raise
|
|
```
|
|
|
|
## Output
|
|
|
|
Robust error handling for production deployments.
|