dspy errors¶
DSPy exposes structured exception classes for LM failures and adapter parsing failures. LM errors inherit from dspy.LMError, which inherits from dspy.DSPyError and carries metadata such as model, provider, status, request_id, and retry_after when available.
Use dspy.LMError to catch any LM call failure, or catch a concrete subclass when you need specific handling.
try:
result = program(question="...")
except dspy.ContextWindowExceededError as e:
print(f"Prompt was too long for {e.model}")
except dspy.LMRateLimitError as e:
print(f"Rate limited; retry after {e.retry_after} seconds")
except dspy.LMError as e:
print(f"LM failed with code={e.code}, provider={e.provider}, request_id={e.request_id}")
Use dspy.is_retryable_lm_error(error) to classify LM failures that are generally safe to retry: rate limits, timeouts, server errors, and transport errors. DSPy's built-in dspy.LM delegates provider retries to LiteLLM, but callers can use this helper after retries are exhausted. Retryability is advisory: respect provider policy and retry_after when present.
try:
result = program(question="...")
except dspy.LMError as e:
if dspy.is_retryable_lm_error(e):
# Schedule another attempt later.
raise
raise
API Reference¶
Classes¶
DSPyError(message: str = '', *, code: str | None = None, model: str | None = None, provider: str | None = None, provider_code: str | None = None, status: int | None = None, request_id: str | None = None, retry_after: float | None = None)
¶
Bases: Exception
Base class for DSPy errors with structured metadata.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
message
|
str
|
Human-readable error message. |
''
|
code
|
str | None
|
Stable DSPy error code. Defaults to the class code. |
None
|
model
|
str | None
|
Model identifier involved in the failure. |
None
|
provider
|
str | None
|
Provider or backend that returned the error. |
None
|
provider_code
|
str | None
|
Provider-specific error code, when available. |
None
|
status
|
int | None
|
HTTP status code, when the error came from an HTTP response. |
None
|
request_id
|
str | None
|
Provider request ID, when available. |
None
|
retry_after
|
float | None
|
Suggested retry delay in seconds, when available. |
None
|
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
Attributes¶
default_code: str | None = None
class-attribute
instance-attribute
¶
message = message
instance-attribute
¶
code = code or self.default_code
instance-attribute
¶
model = model
instance-attribute
¶
provider = provider
instance-attribute
¶
provider_code = provider_code
instance-attribute
¶
status = status
instance-attribute
¶
request_id = request_id
instance-attribute
¶
retry_after = retry_after
instance-attribute
¶
Functions¶
LMError(message: str = '', *, code: str | None = None, model: str | None = None, provider: str | None = None, provider_code: str | None = None, status: int | None = None, request_id: str | None = None, retry_after: float | None = None)
¶
Bases: DSPyError
Base class for language model errors.
Catch this class to handle any failure raised while configuring or calling an LM. Concrete subclasses identify whether the failure came from local configuration, transport, provider authentication, rate limits, invalid requests, unsupported features, or provider server errors.
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
LMTransportError(message: str = '', *, code: str | None = None, model: str | None = None, provider: str | None = None, provider_code: str | None = None, status: int | None = None, request_id: str | None = None, retry_after: float | None = None)
¶
Bases: LMError
The LM request failed before the provider returned a response.
This commonly represents network, DNS, TLS, connection-reset, or similar client-side transport failures.
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
LMConfigurationError(message: str = '', *, code: str | None = None, model: str | None = None, provider: str | None = None, provider_code: str | None = None, status: int | None = None, request_id: str | None = None, retry_after: float | None = None)
¶
Bases: LMError
The LM or provider client is not configured correctly.
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
LMNotConfiguredError(message: str = '', *, code: str | None = None, model: str | None = None, provider: str | None = None, provider_code: str | None = None, status: int | None = None, request_id: str | None = None, retry_after: float | None = None)
¶
Bases: LMConfigurationError
The LM is missing required provider configuration or credentials.
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
LMUnsupportedFeatureError(message: str = '', *, features: list[str] | None = None, issues: list[str] | None = None, **kwargs: Any)
¶
Bases: LMError
The LM, provider, or DSPy provider wrapper does not support a requested feature.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
message
|
str
|
Human-readable error message. |
''
|
features
|
list[str] | None
|
Feature names that were requested but unavailable, such as
|
None
|
issues
|
list[str] | None
|
Optional detailed reasons the requested feature could not be used. |
None
|
**kwargs
|
Any
|
Structured error metadata accepted by |
{}
|
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
LMProviderError(message: str = '', *, code: str | None = None, model: str | None = None, provider: str | None = None, provider_code: str | None = None, status: int | None = None, request_id: str | None = None, retry_after: float | None = None)
¶
Bases: LMError
The provider returned an error response.
Provider errors include structured metadata when available, such as HTTP
status, provider request_id, provider-specific provider_code, and
retry_after for rate limits.
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
LMUnexpectedError(message: str = '', *, code: str | None = None, model: str | None = None, provider: str | None = None, provider_code: str | None = None, status: int | None = None, request_id: str | None = None, retry_after: float | None = None)
¶
Bases: LMError
An unexpected failure occurred at the LM provider boundary.
DSPy raises this when an exception is raised while calling the LM backend, but the exception does not match a known provider error class and does not include an HTTP status code. This keeps adapter fallback behavior from treating unknown LM-boundary failures as parse failures while avoiding over-classifying them as provider response errors.
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
LMAuthError(message: str = '', *, code: str | None = None, model: str | None = None, provider: str | None = None, provider_code: str | None = None, status: int | None = None, request_id: str | None = None, retry_after: float | None = None)
¶
Bases: LMProviderError
The provider rejected the request because authentication failed.
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
LMBillingError(message: str = '', *, code: str | None = None, model: str | None = None, provider: str | None = None, provider_code: str | None = None, status: int | None = None, request_id: str | None = None, retry_after: float | None = None)
¶
Bases: LMProviderError
The provider rejected the request because billing or quota failed.
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
LMRateLimitError(message: str = '', *, code: str | None = None, model: str | None = None, provider: str | None = None, provider_code: str | None = None, status: int | None = None, request_id: str | None = None, retry_after: float | None = None)
¶
Bases: LMProviderError
The provider rate-limited the request.
Check the retry_after attribute for a provider-suggested retry delay when
one is available.
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
LMInvalidRequestError(message: str = '', *, code: str | None = None, model: str | None = None, provider: str | None = None, provider_code: str | None = None, status: int | None = None, request_id: str | None = None, retry_after: float | None = None)
¶
Bases: LMProviderError
The provider rejected the request shape or resource.
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
ContextWindowExceededError(*, model: str | None = None, message: str = 'Context window exceeded', **kwargs: Any)
¶
Bases: LMInvalidRequestError
Raised when the prompt exceeds the model's context window.
Any LM subclass should raise this error, or a subclass of it, when the request fails because the input is too long for the model. Adapters and some modules rely on catching this specific type to decide whether a fallback retry is appropriate.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model
|
str | None
|
The model identifier that rejected the request. |
None
|
message
|
str
|
Description of the error. Defaults to |
'Context window exceeded'
|
**kwargs
|
Any
|
Structured error metadata such as |
{}
|
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
LMUnsupportedModelError(message: str = '', *, code: str | None = None, model: str | None = None, provider: str | None = None, provider_code: str | None = None, status: int | None = None, request_id: str | None = None, retry_after: float | None = None)
¶
Bases: LMInvalidRequestError
The requested model is unavailable or unsupported by the provider.
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
LMTimeoutError(message: str = '', *, code: str | None = None, model: str | None = None, provider: str | None = None, provider_code: str | None = None, status: int | None = None, request_id: str | None = None, retry_after: float | None = None)
¶
Bases: LMProviderError
The provider request timed out.
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
LMServerError(message: str = '', *, code: str | None = None, model: str | None = None, provider: str | None = None, provider_code: str | None = None, status: int | None = None, request_id: str | None = None, retry_after: float | None = None)
¶
Bases: LMProviderError
The provider failed while handling the request.
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
AdapterParseError(adapter_name: str, signature: Signature, lm_response: str, message: str | None = None, parsed_result: str | None = None)
¶
Bases: DSPyError
Raised when an adapter cannot parse an LM response into signature outputs.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
adapter_name
|
str
|
Name of the adapter that failed to parse the response. |
required |
signature
|
Signature
|
DSPy signature whose output fields were expected. |
required |
lm_response
|
str
|
Raw LM response text or representation being parsed. |
required |
message
|
str | None
|
Optional additional context about the parse failure. |
None
|
parsed_result
|
str | None
|
Partial parsed result, if any. |
None
|
Source code in .venv/lib/python3.14/site-packages/dspy/utils/exceptions.py
Functions¶
is_retryable_lm_error(error: Exception) -> bool
¶
Return whether an LM error is generally safe to retry.
DSPy's built-in LM delegates provider retries to LiteLLM, but callers and
higher-level orchestration code can use this helper to classify wrapped LM
failures after provider retries are exhausted. Retryability is advisory:
callers should still respect provider policy and retry_after when present.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
error
|
Exception
|
The exception to classify. |
required |