# modelRetryMiddleware

> **Function** in `langchain`

📖 [View in docs](https://reference.langchain.com/javascript/langchain/index/modelRetryMiddleware)

Middleware that automatically retries failed model calls with configurable backoff.

Supports retrying on specific exceptions and exponential backoff.

## Signature

```javascript
modelRetryMiddleware(config: __type = {}): AgentMiddleware<undefined, ZodObject<__type & __type, "strip", ZodTypeAny, __type, __type>, __type, readonly ClientTool | ServerTool[]>
```

## Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `config` | `__type` | No | Configuration options for the retry middleware (default: `{}`) |

## Returns

`AgentMiddleware<undefined, ZodObject<__type & __type, "strip", ZodTypeAny, __type, __type>, __type, readonly ClientTool | ServerTool[]>`

A middleware instance that handles model failures with retries

## Examples

### Example 1

```ts
import { createAgent, modelRetryMiddleware } from "langchain";

const agent = createAgent({
  model: "openai:gpt-4o",
  tools: [searchTool],
  middleware: [modelRetryMiddleware()],
});
```

### Example 2

```ts
import { modelRetryMiddleware } from "langchain";

const retry = modelRetryMiddleware({
  maxRetries: 4,
  retryOn: [TimeoutError, NetworkError],
  backoffFactor: 1.5,
});
```

### Example 3

```ts
function shouldRetry(error: Error): boolean {
  // Only retry on rate limit errors
  if (error.name === "RateLimitError") {
    return true;
  }
  // Or check for specific HTTP status codes
  if (error.name === "HTTPError" && "statusCode" in error) {
    const statusCode = (error as any).statusCode;
    return statusCode === 429 || statusCode === 503;
  }
  return false;
}

const retry = modelRetryMiddleware({
  maxRetries: 3,
  retryOn: shouldRetry,
});
```

### Example 4

```ts
const retry = modelRetryMiddleware({
  maxRetries: 4,
  onFailure: "continue", // Return AIMessage with error instead of throwing
});
```

### Example 5

```ts
const formatError = (error: Error) =>
  `Model call failed: ${error.message}. Please try again later.`;

const retry = modelRetryMiddleware({
  maxRetries: 4,
  onFailure: formatError,
});
```

### Example 6

```ts
const retry = modelRetryMiddleware({
  maxRetries: 5,
  backoffFactor: 0.0, // No exponential growth
  initialDelayMs: 2000, // Always wait 2 seconds
});
```

### Example 7

```ts
const retry = modelRetryMiddleware({
  maxRetries: 2,
  onFailure: "error", // Re-raise exception instead of returning message
});
```

---

[View source on GitHub](https://github.com/langchain-ai/langchainjs/blob/0c9440396c725d43b4758eb1b931c955e64ad8ec/libs/langchain/src/agents/middleware/modelRetry.ts#L126)