diff --git a/assets/js/plugin-check-namer.js b/assets/js/plugin-check-namer.js index 02de00815..f8e3d90cb 100644 --- a/assets/js/plugin-check-namer.js +++ b/assets/js/plugin-check-namer.js @@ -268,7 +268,17 @@ } } - tokensText += tokenUsage.total_tokens + ' total'; + const totalTokens = + tokenUsage.total_tokens || + ( tokenUsage.prompt_tokens && + tokenUsage.completion_tokens + ? tokenUsage.prompt_tokens + + tokenUsage.completion_tokens + : null ); + + if ( totalTokens ) { + tokensText += totalTokens + ' total'; + } // Add breakdown with prompt and completion tokens. if ( diff --git a/includes/Traits/AI_Check_Names.php b/includes/Traits/AI_Check_Names.php index abd545539..3fc22cd45 100644 --- a/includes/Traits/AI_Check_Names.php +++ b/includes/Traits/AI_Check_Names.php @@ -163,10 +163,12 @@ protected function execute_ai_request( $prompt, $model_preference = '', $builder } // Try to generate a rich result first. + // Use is_callable() instead of method_exists() to detect methods + // provided via __call() magic (e.g. WP_AI_Client_Prompt_Builder). $result = null; - if ( method_exists( $builder, 'generate_text_result' ) ) { + if ( is_callable( array( $builder, 'generate_text_result' ) ) ) { $result = $builder->generate_text_result(); - } elseif ( method_exists( $builder, 'generateTextResult' ) ) { + } elseif ( is_callable( array( $builder, 'generateTextResult' ) ) ) { $result = $builder->generateTextResult(); } @@ -281,6 +283,11 @@ protected function extract_token_usage( $result ) { $completion_tokens = method_exists( $usage, 'get_completion_tokens' ) ? $usage->get_completion_tokens() : ( method_exists( $usage, 'getCompletionTokens' ) ? $usage->getCompletionTokens() : null ); $total_tokens = method_exists( $usage, 'get_total_tokens' ) ? $usage->get_total_tokens() : ( method_exists( $usage, 'getTotalTokens' ) ? $usage->getTotalTokens() : null ); + // Compute total from prompt + completion if not directly available. + if ( null === $total_tokens && null !== $prompt_tokens && null !== $completion_tokens ) { + $total_tokens = $prompt_tokens + $completion_tokens; + } + if ( null === $prompt_tokens && null === $completion_tokens && null === $total_tokens ) { return null; }