- Timestamp:
- 03/17/2026 02:28:40 PM (7 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/ai-client/class-wp-ai-client-prompt-builder.php
r61942 r62037 9 9 10 10 use WordPress\AiClient\Builders\PromptBuilder; 11 use WordPress\AiClient\Common\Exception\InvalidArgumentException; 12 use WordPress\AiClient\Common\Exception\TokenLimitReachedException; 11 13 use WordPress\AiClient\Files\DTO\File; 12 14 use WordPress\AiClient\Files\Enums\FileTypeEnum; … … 16 18 use WordPress\AiClient\Messages\Enums\ModalityEnum; 17 19 use WordPress\AiClient\Providers\Http\DTO\RequestOptions; 20 use WordPress\AiClient\Providers\Http\Exception\ClientException; 21 use WordPress\AiClient\Providers\Http\Exception\NetworkException; 22 use WordPress\AiClient\Providers\Http\Exception\ServerException; 18 23 use WordPress\AiClient\Providers\Models\Contracts\ModelInterface; 19 24 use WordPress\AiClient\Providers\Models\DTO\ModelConfig; … … 180 185 } catch ( Exception $e ) { 181 186 $this->builder = new PromptBuilder( $registry ); 182 $this->error = new WP_Error( 183 'prompt_builder_error', 184 $e->getMessage(), 185 array( 186 'exception_class' => get_class( $e ), 187 ) 188 ); 187 $this->error = $this->exception_to_wp_error( $e ); 189 188 } 190 189 … … 312 311 __( 'Prompt execution was prevented by a filter.' ), 313 312 array( 314 ' exception_class' => 'WP_AI_Client_Prompt_Prevented',313 'status' => 503, 315 314 ) 316 315 ); … … 334 333 return $result; 335 334 } catch ( Exception $e ) { 336 $this->error = new WP_Error( 337 'prompt_builder_error', 338 $e->getMessage(), 339 array( 340 'exception_class' => get_class( $e ), 341 ) 342 ); 335 $this->error = $this->exception_to_wp_error( $e ); 343 336 344 337 if ( self::is_generating_method( $name ) ) { … … 347 340 return $this; 348 341 } 342 } 343 344 /** 345 * Converts an exception into a WP_Error with a structured error code and message. 346 * 347 * This method maps different exception types to specific WP_Error codes and HTTP status codes. 348 * The presence of the status codes means these WP_Error objects can be easily used in REST API responses 349 * or other contexts where HTTP semantics are relevant. 350 * 351 * @since 7.0.0 352 * 353 * @param Exception $e The exception to convert. 354 * @return WP_Error The resulting WP_Error object. 355 */ 356 private function exception_to_wp_error( Exception $e ): WP_Error { 357 if ( $e instanceof NetworkException ) { 358 $error_code = 'prompt_network_error'; 359 $status_code = 503; 360 } elseif ( $e instanceof ClientException ) { 361 // `ClientException` uses HTTP status codes as exception codes, so we can rely on them. 362 $error_code = 'prompt_client_error'; 363 $status_code = $e->getCode() ? $e->getCode() : 400; 364 } elseif ( $e instanceof ServerException ) { 365 // `ServerException` uses HTTP status codes as exception codes, so we can rely on them. 366 $error_code = 'prompt_upstream_server_error'; 367 $status_code = $e->getCode() ? $e->getCode() : 500; 368 } elseif ( $e instanceof TokenLimitReachedException ) { 369 $error_code = 'prompt_token_limit_reached'; 370 $status_code = 400; 371 } elseif ( $e instanceof InvalidArgumentException ) { 372 $error_code = 'prompt_invalid_argument'; 373 $status_code = 400; 374 } else { 375 $error_code = 'prompt_builder_error'; 376 $status_code = 500; 377 } 378 379 return new WP_Error( 380 $error_code, 381 $e->getMessage(), 382 array( 383 'status' => $status_code, 384 'exception_class' => get_class( $e ), 385 ) 386 ); 349 387 } 350 388
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)