LangChain Retry Logic
LangChain Invoke Retry Logic
Section titled “LangChain Invoke Retry Logic”LLM call is not stable and may fail due to network issues or other reasons, therefore, retry logic is necessary.
Below is an example of how to implement retry logic in LangChain.
Before implementing the retry logic, you need to install tenacity package which provides a flexible retry mechanism.
httpx Retry Logic
Section titled “httpx Retry Logic”from httpx import ConnectTimeoutfrom tenacity import retry, stop_after_attempt, retry_if_exception_type
@retry(retry=retry_if_exception_type(ConnectTimeout), stop=stop_after_attempt(3))async def send_address_match_request(requests_client, payload): response = await requests_client.post( url=f"<endpoint>", data=payload, ) response.raise_for_status() resp_data = response.json() return resp_dataNote: The above code snippet is an basic retry logic implementation.
stop_after_attempt(3): will retry 3 timesretry_if_exception_type(ConnectTimeout): onlyConnectTimeoutexception will trigger the retry
One Advanced Retry Logic
Section titled “One Advanced Retry Logic”import logging
logger = logging.getLogger(__name__)
@tenacity.retry( reraise=True, stop=tenacity.stop_after_attempt(3), wait=tenacity.wait_random( min=15, max=45 ), # this is mainly included to allow calming RateLimitErrors before_sleep=before_sleep_log(logger, logging.INFO), after=after_log(logger, logging.INFO), retry=( tenacity.retry_if_exception_type(APITimeoutError) | tenacity.retry_if_exception_type(RateLimitError) | tenacity.retry_if_exception_type(InternalServerError) ),)async def my_async_function(): passNote: The above code snippet is an another retry logic implementation.
stop_after_attempt(3): will retry 3 timestenacity.wait_random(min=15, max=45): wait for a random time between 15 and 45 seconds before retryingbefore_sleep_log(logger, logging.INFO): log before retryingafter_log(logger, logging.INFO): log after retryingretry(): only the specified exceptions will trigger the retry
LangChain Retry
Section titled “LangChain Retry”from langchain_openai import ChatOpenAIfrom langchain_core.runnables import RunnableConfigfrom langchain_core.utils import RetryConfigfrom tenacity import wait_fixed, stop_after_attempt, wait_random_exponential
model = ChatOpenAI()
# Custom retry configurationretry_config = RetryConfig( stop=stop_after_attempt(3), # Retry up to 3 times wait=wait_fixed(2), # Wait 2 seconds between attempts)
# Or a more complex configuration with exponential backoffretry_config = RetryConfig( stop=stop_after_attempt(5), wait=wait_random_exponential(min=1, max=10), # Waits 1–10s, increasing randomly)
# Apply retry configmodel_with_retry = model.with_retry(retry_config=retry_config)
# OR: You can now use this in your chaintemplate = PromptTemplate.from_template("Tell me a joke about {topic}.")chain = template | model.with_retry(retry_config=retry_config)result = chain.invoke({"topic": "AI"})