Automattic\WooCommerce\Blocks\AIContent

UpdatePatterns::fetch_and_validate_ai_responses()privateWC 1.0

Fetches and validates the AI responses.

Method of the class: UpdatePatterns{}

No Hooks.

Return

Array|Mixed.

Usage

// private - for code of main (parent) class only
$result = $this->fetch_and_validate_ai_responses( $ai_connection, $token, $formatted_prompts, $expected_results_format );
$ai_connection(Connection) (required)
The AI connection.
$token(string|WP_Error) (required)
The JWT token.
$formatted_prompts(array) (required)
The array of formatted prompts.
$expected_results_format(array) (required)
The array of expected results format.

UpdatePatterns::fetch_and_validate_ai_responses() code WC 9.8.1

private function fetch_and_validate_ai_responses( $ai_connection, $token, $formatted_prompts, $expected_results_format ) {
	$ai_request_retries = 0;
	$ai_responses       = [];
	$success            = false;
	while ( $ai_request_retries < 5 && ! $success ) {
		$ai_request_retries ++;
		$ai_responses = $ai_connection->fetch_ai_responses( $token, $formatted_prompts, 60, 'json_object' );

		if ( is_wp_error( $ai_responses ) ) {
			continue;
		}

		if ( empty( $ai_responses ) ) {
			continue;
		}

		$loops_success = [];
		$i             = 0;
		foreach ( $ai_responses as $ai_response ) {
			if ( ! isset( $ai_response['completion'] ) ) {
				$loops_success[] = false;
				continue;
			}

			$completion = json_decode( $ai_response['completion'], true );

			if ( ! is_array( $completion ) ) {
				$loops_success[] = false;
				continue;
			}

			$diff = array_diff_key( $expected_results_format[ $i ], $completion );
			$i ++;

			if ( ! empty( $diff ) ) {
				$loops_success[] = false;
				continue;
			}

			$empty_results = false;
			foreach ( $completion as $completion_item ) {
				foreach ( $completion_item as $value ) {
					if ( empty( $value ) ) {
						$empty_results = true;
					}
				}
			}

			if ( $empty_results ) {
				$loops_success[] = false;
				continue;
			}

			$loops_success[] = true;
		}

		if ( ! in_array( false, $loops_success, true ) ) {
			$success = true;
		}
	}

	if ( ! $success ) {
		return new WP_Error( 'failed_to_fetch_ai_responses', __( 'Failed to fetch AI responses.', 'woocommerce' ) );
	}

	return $ai_responses;
}