langchain_core.runnables.retry.RunnableRetry¶
class langchain_core.runnables.retry.RunnableRetry[source]¶
Bases: RunnableBindingBase[Input, Output]
Retry a Runnable if it fails.
A RunnableRetry helps can be used to add retry logic to any object
that subclasses the base Runnable.
Such retries are especially useful for network calls that may fail
due to transient errors.
The RunnableRetry is implemented as a RunnableBinding. The easiest
way to use it is through the .with_retry() method on all Runnables.
Example:
Here’s an example that uses a RunnableLambda to raise an exception
import time
def foo(input) -> None:
    '''Fake function that raises an exception.'''
    raise ValueError("Invoking foo failed. At time {time.time()}")
runnable = RunnableLambda(foo)
runnable_with_retries = runnable.with_retry(
    retry_exception_types=(ValueError,), # Retry only on ValueError
    wait_exponential_jitter=True, # Add jitter to the exponential backoff
    max_attempt_number=2, # Try twice
)
# The method invocation above is equivalent to the longer form below:
runnable_with_retries = RunnableRetry(
    bound=runnable,
    retry_exception_types=(ValueError,),
    max_attempt_number=2,
    wait_exponential_jitter=True
)
This logic can be used to retry any Runnable, including a chain of Runnables,
but in general it’s best practice to keep the scope of the retry as small as
possible. For example, if you have a chain of Runnables, you should only retry
the Runnable that is likely to fail, not the entire chain.
Example
from langchain_core.chat_models import ChatOpenAI
from langchain_core.prompts import PromptTemplate