Title: WP_AI_Client_Prompt_Builder::exception_to_wp_error
Published: May 20, 2026

---

# WP_AI_Client_Prompt_Builder::exception_to_wp_error( Exception $e ): 󠀁[WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)󠁿

## In this article

 * [Description](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/exception_to_wp_error/?output_format=md#description)
 * [Parameters](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/exception_to_wp_error/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/exception_to_wp_error/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/exception_to_wp_error/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/exception_to_wp_error/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/exception_to_wp_error/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/exception_to_wp_error/?output_format=md#wp--skip-link--target)

This function’s access is marked private. This means it is not intended for use 
by plugin or theme developers, only by core. It is listed here for completeness.

Converts an exception into a [WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)
with a structured error code and message.

## 󠀁[Description](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/exception_to_wp_error/?output_format=md#description)󠁿

This method maps different exception types to specific [WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)
codes and HTTP status codes.
The presence of the status codes means these [WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)
objects can be easily used in REST API responses or other contexts where HTTP semantics
are relevant.

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/exception_to_wp_error/?output_format=md#parameters)󠁿

 `$e`Exceptionrequired

The exception to convert.

## 󠀁[Return](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/exception_to_wp_error/?output_format=md#return)󠁿

 [WP_Error](https://developer.wordpress.org/reference/classes/wp_error/) The resulting
[WP_Error](https://developer.wordpress.org/reference/classes/wp_error/) object.

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/exception_to_wp_error/?output_format=md#source)󠁿

    ```php
    private function exception_to_wp_error( Exception $e ): WP_Error {
    	if ( $e instanceof NetworkException ) {
    		$error_code  = 'prompt_network_error';
    		$status_code = 503;
    	} elseif ( $e instanceof ClientException ) {
    		// `ClientException` uses HTTP status codes as exception codes, so we can rely on them.
    		$error_code  = 'prompt_client_error';
    		$status_code = $e->getCode() ? $e->getCode() : 400;
    	} elseif ( $e instanceof ServerException ) {
    		// `ServerException` uses HTTP status codes as exception codes, so we can rely on them.
    		$error_code  = 'prompt_upstream_server_error';
    		$status_code = $e->getCode() ? $e->getCode() : 500;
    	} elseif ( $e instanceof TokenLimitReachedException ) {
    		$error_code  = 'prompt_token_limit_reached';
    		$status_code = 400;
    	} elseif ( $e instanceof InvalidArgumentException ) {
    		$error_code  = 'prompt_invalid_argument';
    		$status_code = 400;
    	} else {
    		$error_code  = 'prompt_builder_error';
    		$status_code = 500;
    	}

    	return new WP_Error(
    		$error_code,
    		$e->getMessage(),
    		array(
    			'status'          => $status_code,
    			'exception_class' => get_class( $e ),
    		)
    	);
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/ai-client/class-wp-ai-client-prompt-builder.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.0/src/wp-includes/ai-client/class-wp-ai-client-prompt-builder.php#L383)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.0/src/wp-includes/ai-client/class-wp-ai-client-prompt-builder.php#L383-L414)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/exception_to_wp_error/?output_format=md#related)󠁿

| Uses | Description | 
| [WP_Error::__construct()](https://developer.wordpress.org/reference/classes/wp_error/__construct/)`wp-includes/class-wp-error.php` |

Initializes the error.

  |

| Used by | Description | 
| [WP_AI_Client_Prompt_Builder::__construct()](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/__construct/)`wp-includes/ai-client/class-wp-ai-client-prompt-builder.php` |

Constructor.

  | 
| [WP_AI_Client_Prompt_Builder::__call()](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/__call/)`wp-includes/ai-client/class-wp-ai-client-prompt-builder.php` |

Magic method to proxy snake_case method calls to their PHP AI Client camelCase counterparts.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_ai_client_prompt_builder/exception_to_wp_error/?output_format=md#changelog)󠁿

| Version | Description | 
| [7.0.0](https://developer.wordpress.org/reference/since/7.0.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_ai_client_prompt_builder%2Fexception_to_wp_error%2F)
before being able to contribute a note or feedback.