From 30549f6f01d5223d5842258a4e0c17d004d84ce1 Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Wed, 3 May 2023 10:41:49 -0600 Subject: [PATCH 01/10] Add initial structure for OpenAI Whisper integration --- .../Classifai/Providers/OpenAI/Whisper.php | 241 ++++++++++++++++++ .../Classifai/Services/LanguageProcessing.php | 1 + 2 files changed, 242 insertions(+) create mode 100644 includes/Classifai/Providers/OpenAI/Whisper.php diff --git a/includes/Classifai/Providers/OpenAI/Whisper.php b/includes/Classifai/Providers/OpenAI/Whisper.php new file mode 100644 index 000000000..dc06cc902 --- /dev/null +++ b/includes/Classifai/Providers/OpenAI/Whisper.php @@ -0,0 +1,241 @@ +onboarding_options = array( + 'title' => __( 'OpenAI Whisper', 'classifai' ), + 'fields' => array( 'api-key' ), + 'features' => array( + 'enable_transcripts' => __( 'Generate transcripts from audio files', 'classifai' ), + ), + ); + } + + /** + * Can the functionality be initialized? + * + * @return bool + */ + public function can_register() { + $settings = $this->get_settings(); + + if ( empty( $settings ) || ( isset( $settings['authenticated'] ) && false === $settings['authenticated'] ) ) { + return false; + } + + return true; + } + + /** + * Register what we need for the plugin. + * + * This only fires if can_register returns true. + */ + public function register() { + $settings = $this->get_settings(); + + // Check if the current user has permission. + $roles = $settings['roles'] ?? []; + $user_roles = wp_get_current_user()->roles ?? []; + + if ( + ( ! empty( $roles ) && empty( array_diff( $user_roles, $roles ) ) ) + && ( isset( $settings['enable_transcripts'] ) && 1 === (int) $settings['enable_transcripts'] ) + ) { + add_action( 'enqueue_block_editor_assets', [ $this, 'enqueue_editor_assets' ] ); + add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_admin_assets' ] ); + } + } + + /** + * Enqueue the editor scripts. + */ + public function enqueue_editor_assets() { + } + + /** + * Enqueue the admin scripts. + * + * @param string $hook_suffix The current admin page. + */ + public function enqueue_admin_assets( $hook_suffix = '' ) { + } + + /** + * Setup fields + */ + public function setup_fields_sections() { + $default_settings = $this->get_default_settings(); + + $this->setup_api_fields( $default_settings['api_key'] ); + + add_settings_field( + 'enable-transcripts', + esc_html__( 'Generate transcripts from audio files', 'classifai' ), + [ $this, 'render_input' ], + $this->get_option_name(), + $this->get_option_name(), + [ + 'label_for' => 'enable_transcripts', + 'input_type' => 'checkbox', + 'default_value' => $default_settings['enable_transcripts'], + 'description' => __( 'Automatically generate transcripts for supported audio files.', 'classifai' ), + ] + ); + + $roles = get_editable_roles() ?? []; + $roles = array_combine( array_keys( $roles ), array_column( $roles, 'name' ) ); + + add_settings_field( + 'roles', + esc_html__( 'Allowed roles', 'classifai' ), + [ $this, 'render_checkbox_group' ], + $this->get_option_name(), + $this->get_option_name(), + [ + 'label_for' => 'roles', + 'options' => $roles, + 'default_values' => $default_settings['roles'], + 'description' => __( 'Choose which roles are allowed to generate transcripts.', 'classifai' ), + ] + ); + } + + /** + * Sanitization for the options being saved. + * + * @param array $settings Array of settings about to be saved. + * + * @return array The sanitized settings to be saved. + */ + public function sanitize_settings( $settings ) { + $new_settings = $this->get_settings(); + $new_settings = array_merge( + $new_settings, + $this->sanitize_api_key_settings( $new_settings, $settings ) + ); + + if ( empty( $settings['enable_transcripts'] ) || 1 !== (int) $settings['enable_transcripts'] ) { + $new_settings['enable_transcripts'] = 'no'; + } else { + $new_settings['enable_transcripts'] = '1'; + } + + if ( isset( $settings['roles'] ) && is_array( $settings['roles'] ) ) { + $new_settings['roles'] = array_map( 'sanitize_text_field', $settings['roles'] ); + } else { + $new_settings['roles'] = array_keys( get_editable_roles() ?? [] ); + } + + return $new_settings; + } + + /** + * Resets settings for the provider. + */ + public function reset_settings() { + update_option( $this->get_option_name(), $this->get_default_settings() ); + } + + /** + * Default settings for Whisper. + * + * @return array + */ + private function get_default_settings() { + return [ + 'authenticated' => false, + 'api_key' => '', + 'enable_transcripts' => false, + 'roles' => array_keys( get_editable_roles() ?? [] ), + ]; + } + + /** + * Provides debug information related to the provider. + * + * @param array|null $settings Settings array. If empty, settings will be retrieved. + * @param boolean $configured Whether the provider is correctly configured. If null, the option will be retrieved. + * @return string|array + */ + public function get_provider_debug_information( $settings = null, $configured = null ) { + if ( is_null( $settings ) ) { + $settings = $this->sanitize_settings( $this->get_settings() ); + } + + $authenticated = 1 === intval( $settings['authenticated'] ?? 0 ); + $enable_transcript = 1 === intval( $settings['enable_transcript'] ?? 0 ); + + return [ + __( 'Authenticated', 'classifai' ) => $authenticated ? __( 'yes', 'classifai' ) : __( 'no', 'classifai' ), + __( 'Generate transcripts', 'classifai' ) => $enable_transcript ? __( 'yes', 'classifai' ) : __( 'no', 'classifai' ), + __( 'Allowed roles', 'classifai' ) => implode( ', ', $settings['roles'] ?? [] ), + __( 'Latest response', 'classifai' ) => $this->get_formatted_latest_response( 'classifai_openai_whisper_latest_response' ), + ]; + } + +} diff --git a/includes/Classifai/Services/LanguageProcessing.php b/includes/Classifai/Services/LanguageProcessing.php index 9da9d5b85..08012ed75 100644 --- a/includes/Classifai/Services/LanguageProcessing.php +++ b/includes/Classifai/Services/LanguageProcessing.php @@ -22,6 +22,7 @@ public function __construct() { [ 'Classifai\Providers\Watson\NLU', 'Classifai\Providers\OpenAI\ChatGPT', + 'Classifai\Providers\OpenAI\Whisper', ] ); } From c1e6c7ddb9a1223d013eb47a9df5c1cc46c4c59d Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Wed, 3 May 2023 14:08:32 -0600 Subject: [PATCH 02/10] Add a Transcribe class that handles making API requests and storing the result. Fire this when a new attachment is added --- .../Classifai/Providers/OpenAI/APIRequest.php | 61 +++++++- .../Classifai/Providers/OpenAI/Whisper.php | 78 +++------- .../Providers/OpenAI/Whisper/Transcribe.php | 144 ++++++++++++++++++ .../Providers/OpenAI/Whisper/Whisper.php | 86 +++++++++++ 4 files changed, 305 insertions(+), 64 deletions(-) create mode 100644 includes/Classifai/Providers/OpenAI/Whisper/Transcribe.php create mode 100644 includes/Classifai/Providers/OpenAI/Whisper/Whisper.php diff --git a/includes/Classifai/Providers/OpenAI/APIRequest.php b/includes/Classifai/Providers/OpenAI/APIRequest.php index 6ed0e2517..333954e2c 100644 --- a/includes/Classifai/Providers/OpenAI/APIRequest.php +++ b/includes/Classifai/Providers/OpenAI/APIRequest.php @@ -30,7 +30,7 @@ class APIRequest { * * @param string $api_key OpenAI API key. */ - public function __construct( $api_key = '' ) { + public function __construct( string $api_key = '' ) { $this->api_key = $api_key; } @@ -41,7 +41,7 @@ public function __construct( $api_key = '' ) { * @param array $options Additional query params * @return array|WP_Error */ - public function get( $url, $options = [] ) { + public function get( string $url, array $options = [] ) { $this->add_headers( $options ); return $this->get_result( wp_remote_get( $url, $options ) ); // phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_remote_get_wp_remote_get } @@ -53,7 +53,7 @@ public function get( $url, $options = [] ) { * @param array $options Additional query params. * @return array|WP_Error */ - public function post( $url = '', $options = [] ) { + public function post( string $url = '', array $options = [] ) { $options = wp_parse_args( $options, [ @@ -64,6 +64,50 @@ public function post( $url = '', $options = [] ) { return $this->get_result( wp_remote_post( $url, $options ) ); // phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_remote_get_wp_remote_get } + /** + * Makes an authorized POST request with form data. + * + * @param string $url The OpenAI API URL. + * @param array $body The body of the request. + * @return array|WP_Error + */ + public function post_form( string $url = '', array $body = [] ) { + $boundary = wp_generate_password( 24, false ); + $payload = ''; + + // Take all our POST fields and transform them to work with form-data. + foreach ( $body as $name => $value ) { + $payload .= '--' . $boundary; + $payload .= "\r\n"; + + if ( 'file' === $name ) { + $payload .= 'Content-Disposition: form-data; name="file"; filename="' . basename( $value ) . '"' . "\r\n"; + $payload .= "\r\n"; + $payload .= file_get_contents( $value ); // phpcs:ignore + } else { + $payload .= 'Content-Disposition: form-data; name="' . esc_attr( $name ) . + '"' . "\r\n\r\n"; + $payload .= esc_attr( $value ); + } + + $payload .= "\r\n"; + } + + $payload .= '--' . $boundary . '--'; + + $options = [ + 'body' => $payload, + 'headers' => [ + 'Content-Type' => 'multipart/form-data; boundary=' . $boundary, + ], + 'timeout' => 60, // phpcs:ignore WordPressVIPMinimum.Performance.RemoteRequestTimeout.timeout_timeout + ]; + + $this->add_headers( $options ); + + return $this->get_result( wp_remote_post( $url, $options ) ); + } + /** * Get results from the response. * @@ -96,13 +140,18 @@ public function get_result( $response ) { * * @param array $options The header options, passed by reference. */ - public function add_headers( &$options = [] ) { + public function add_headers( array &$options = [] ) { if ( empty( $options['headers'] ) ) { $options['headers'] = []; } - $options['headers']['Authorization'] = $this->get_auth_header(); - $options['headers']['Content-Type'] = 'application/json'; + if ( ! isset( $options['headers']['Authorization'] ) ) { + $options['headers']['Authorization'] = $this->get_auth_header(); + } + + if ( ! isset( $options['headers']['Content-Type'] ) ) { + $options['headers']['Content-Type'] = 'application/json'; + } } /** diff --git a/includes/Classifai/Providers/OpenAI/Whisper.php b/includes/Classifai/Providers/OpenAI/Whisper.php index dc06cc902..285621727 100644 --- a/includes/Classifai/Providers/OpenAI/Whisper.php +++ b/includes/Classifai/Providers/OpenAI/Whisper.php @@ -6,52 +6,13 @@ namespace Classifai\Providers\OpenAI; use Classifai\Providers\Provider; -use Classifai\Providers\OpenAI\APIRequest; -use Classifai\Providers\OpenAI\Tokenizer; -use Classifai\Watson\Normalizer; -use function Classifai\get_asset_info; +use Classifai\Providers\OpenAI\Whisper\Transcribe; use WP_Error; class Whisper extends Provider { use \Classifai\Providers\OpenAI\OpenAI; - /** - * OpenAI Whisper URL - * - * @var string - */ - protected $whisper_url = 'https://api.openai.com/v1/audio/'; - - /** - * OpenAI Whisper model - * - * @var string - */ - protected $chatgpt_model = 'whisper-1'; - - /** - * Supported file formats - * - * @var array - */ - protected $file_formats = [ - 'mp3', - 'mp4', - 'mpeg', - 'mpga', - 'm4a', - 'wav', - 'webm', - ]; - - /** - * Maximum file size our model supports - * - * @var int - */ - protected $max_file_size = 25 * MB_IN_BYTES; - /** * OpenAI Whisper constructor. * @@ -96,33 +57,34 @@ public function can_register() { * This only fires if can_register returns true. */ public function register() { + add_action( 'add_attachment', [ $this, 'transcribe_audio' ] ); + } + + /** + * Start the audio transcription process. + * + * @param int $attachment_id Attachment ID to process. + * @return WP_Error|bool + */ + public function transcribe_audio( $attachment_id = 0 ) { $settings = $this->get_settings(); // Check if the current user has permission. $roles = $settings['roles'] ?? []; $user_roles = wp_get_current_user()->roles ?? []; - if ( - ( ! empty( $roles ) && empty( array_diff( $user_roles, $roles ) ) ) - && ( isset( $settings['enable_transcripts'] ) && 1 === (int) $settings['enable_transcripts'] ) - ) { - add_action( 'enqueue_block_editor_assets', [ $this, 'enqueue_editor_assets' ] ); - add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_admin_assets' ] ); + if ( empty( $roles ) || ! empty( array_diff( $user_roles, $roles ) ) ) { + return new WP_Error( 'invalid', esc_html__( 'User role does not have permission.', 'classifai' ) ); } - } - /** - * Enqueue the editor scripts. - */ - public function enqueue_editor_assets() { - } + // Ensure feature is turned on. + if ( ! isset( $settings['enable_transcripts'] ) || 1 !== (int) $settings['enable_transcripts'] ) { + return new WP_Error( 'not_enabled', esc_html__( 'Transcripts are not enabled.', 'classifai' ) ); + } - /** - * Enqueue the admin scripts. - * - * @param string $hook_suffix The current admin page. - */ - public function enqueue_admin_assets( $hook_suffix = '' ) { + $transcribe = new Transcribe( intval( $attachment_id ), $settings ); + + return $transcribe->process(); } /** diff --git a/includes/Classifai/Providers/OpenAI/Whisper/Transcribe.php b/includes/Classifai/Providers/OpenAI/Whisper/Transcribe.php new file mode 100644 index 000000000..b9cfe7223 --- /dev/null +++ b/includes/Classifai/Providers/OpenAI/Whisper/Transcribe.php @@ -0,0 +1,144 @@ +attachment_id = $attachment_id; + $this->settings = $settings; + } + + /** + * Transcribe the audio file. + * + * @return string|WP_Error + */ + public function process() { + if ( ! $this->should_process( $this->attachment_id ) ) { + return new WP_Error( 'process_error', esc_html__( 'Attachment does not meet processing requirements. Ensure the file type and size meet requirements.', 'classifai' ) ); + } + + $request = new APIRequest( $this->settings['api_key'] ?? '' ); + + /** + * Filter the request body before sending to Whisper. + * + * @since x.x.x + * @hook classifai_whisper_transcribe_request_body + * + * @param {array} $body Request body that will be sent to Whisper. + * @param {int} $attachment_id ID of attachment we are transcribing. + * + * @return {array} Request body. + */ + $body = apply_filters( + 'classifai_whisper_transcribe_request_body', + [ + 'file' => get_attached_file( $this->attachment_id ) ?? '', + 'model' => $this->whisper_model, + 'response_format' => 'json', + 'temperature' => 0, + ], + $this->attachment_id + ); + + // Make our API request. + $response = $request->post_form( + $this->get_api_url( $this->path ), + $body + ); + + set_transient( 'classifai_openai_whisper_latest_response', $response, DAY_IN_SECONDS * 30 ); + + // Extract out the text response, if it exists. + if ( ! is_wp_error( $response ) && isset( $response['text'] ) ) { + $response = $this->add_transcription( $response['text'] ); + } + + return $response; + } + + /** + * Add the transcribed text to the attachment. + * + * @param string $text Transcription result. + * @return string|WP_Error + */ + public function add_transcription( string $text = '' ) { + if ( empty( $text ) ) { + return new WP_Error( 'invalid_result', esc_html__( 'The transcription result is invalid.', 'classifai' ) ); + } + + /** + * Filter the text result returned from Whisper API. + * + * @hook classifai_whisper_transcribe_result + * + * @param {string} $text Text extracted from the response. + * @param {int} $attachment_id The attachment ID. + * + * @return {string} + */ + $text = apply_filters( 'classifai_whisper_transcribe_result', $text, $this->attachment_id ); + + $update = wp_update_post( + [ + 'ID' => (int) $this->attachment_id, + 'post_content' => wp_kses_post( $text ), + ], + true + ); + + if ( is_wp_error( $update ) ) { + return $update; + } else { + return $text; + } + } + +} diff --git a/includes/Classifai/Providers/OpenAI/Whisper/Whisper.php b/includes/Classifai/Providers/OpenAI/Whisper/Whisper.php new file mode 100644 index 000000000..fa9c5158d --- /dev/null +++ b/includes/Classifai/Providers/OpenAI/Whisper/Whisper.php @@ -0,0 +1,86 @@ +whisper_url ), $path ); + } + + /** + * Should this attachment be processed. + * + * Ensure the file is a supported format and is under the maximum file size. + * + * @param int $attachment_id Attachment ID to process. + * @return boolean + */ + public function should_process( int $attachment_id ) { + $mime_type = get_post_mime_type( $attachment_id ); + $matched_extensions = explode( '|', array_search( $mime_type, wp_get_mime_types(), true ) ); + $process = false; + + foreach ( $matched_extensions as $ext ) { + if ( in_array( $ext, $this->file_formats, true ) ) { + $process = true; + } + } + + // If we have a proper file format, check the file size. + if ( $process ) { + $filesize = filesize( get_attached_file( $attachment_id ) ); + if ( ! $filesize || $filesize > $this->max_file_size ) { + $process = false; + } + } + + return $process; + } + +} From 6946e636c85ba6957d9d282f1c6defc208e236ea Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Wed, 3 May 2023 14:54:19 -0600 Subject: [PATCH 03/10] Add transcribe button to media modal. Add new REST endpoint that this button uses --- .../Providers/Azure/ComputerVision.php | 2 +- .../Classifai/Providers/OpenAI/Whisper.php | 34 ++++++- .../Classifai/Services/LanguageProcessing.php | 90 +++++++++++++++++++ src/js/media.js | 26 ++++++ 4 files changed, 149 insertions(+), 3 deletions(-) diff --git a/includes/Classifai/Providers/Azure/ComputerVision.php b/includes/Classifai/Providers/Azure/ComputerVision.php index 64addf224..eb94f8af3 100644 --- a/includes/Classifai/Providers/Azure/ComputerVision.php +++ b/includes/Classifai/Providers/Azure/ComputerVision.php @@ -499,7 +499,7 @@ public function maybe_rescan_image( $attachment_id ) { $image_url = get_largest_acceptable_image_url( get_attached_file( $attachment_id ), wp_get_attachment_url( $attachment_id ), - $metadata['sizes'], + $metadata['sizes'] ?? [], computer_vision_max_filesize() ); } diff --git a/includes/Classifai/Providers/OpenAI/Whisper.php b/includes/Classifai/Providers/OpenAI/Whisper.php index 285621727..fc5c470f1 100644 --- a/includes/Classifai/Providers/OpenAI/Whisper.php +++ b/includes/Classifai/Providers/OpenAI/Whisper.php @@ -58,6 +58,7 @@ public function can_register() { */ public function register() { add_action( 'add_attachment', [ $this, 'transcribe_audio' ] ); + add_filter( 'attachment_fields_to_edit', [ $this, 'add_buttons_to_media_modal' ], 10, 2 ); } /** @@ -73,7 +74,7 @@ public function transcribe_audio( $attachment_id = 0 ) { $roles = $settings['roles'] ?? []; $user_roles = wp_get_current_user()->roles ?? []; - if ( empty( $roles ) || ! empty( array_diff( $user_roles, $roles ) ) ) { + if ( empty( $roles ) || ! empty( array_diff( $user_roles, $roles ) ) || ! current_user_can( 'edit_post', $attachment_id ) ) { return new WP_Error( 'invalid', esc_html__( 'User role does not have permission.', 'classifai' ) ); } @@ -87,6 +88,35 @@ public function transcribe_audio( $attachment_id = 0 ) { return $transcribe->process(); } + /** + * Add new buttons to the media modal. + * + * @param array $form_fields Existing form fields. + * @param \WP_Post $attachment Attachment object. + * @return array + */ + public function add_buttons_to_media_modal( $form_fields, $attachment ) { + $settings = $this->get_settings(); + $transcribe = new Transcribe( $attachment->ID, $settings ); + + if ( ! $transcribe->should_process( $attachment->ID ) ) { + return $form_fields; + } + + if ( is_array( $settings ) && isset( $settings['enable_transcripts'] ) && '1' === $settings['enable_transcripts'] ) { + $text = empty( get_the_content( null, false, $attachment ) ) ? __( 'Transcribe', 'classifai' ) : __( 'Re-transcribe', 'classifai' ); + + $form_fields['retranscribe'] = [ + 'label' => __( 'Transcribe audio', 'classifai' ), + 'input' => 'html', + 'html' => '', + 'show_in_edit' => false, + ]; + } + + return $form_fields; + } + /** * Setup fields */ @@ -190,7 +220,7 @@ public function get_provider_debug_information( $settings = null, $configured = } $authenticated = 1 === intval( $settings['authenticated'] ?? 0 ); - $enable_transcript = 1 === intval( $settings['enable_transcript'] ?? 0 ); + $enable_transcript = 1 === intval( $settings['enable_transcripts'] ?? 0 ); return [ __( 'Authenticated', 'classifai' ) => $authenticated ? __( 'yes', 'classifai' ) : __( 'no', 'classifai' ), diff --git a/includes/Classifai/Services/LanguageProcessing.php b/includes/Classifai/Services/LanguageProcessing.php index 08012ed75..75f0df2a1 100644 --- a/includes/Classifai/Services/LanguageProcessing.php +++ b/includes/Classifai/Services/LanguageProcessing.php @@ -76,6 +76,24 @@ public function register_endpoints() { 'permission_callback' => [ $this, 'generate_post_excerpt_permissions_check' ], ] ); + + register_rest_route( + 'classifai/v1/openai', + 'generate-transcript/(?P\d+)', + [ + 'methods' => WP_REST_Server::READABLE, + 'callback' => [ $this, 'generate_audio_transcript' ], + 'args' => [ + 'id' => [ + 'required' => true, + 'type' => 'integer', + 'sanitize_callback' => 'absint', + 'description' => esc_html__( 'Attachment ID to generate transcript for.', 'classifai' ), + ], + ], + 'permission_callback' => [ $this, 'generate_audio_transcript_permissions_check' ], + ] + ); } /** @@ -243,4 +261,76 @@ public function generate_post_excerpt_permissions_check( WP_REST_Request $reques return true; } + /** + * Handle request to generate a transcript for given attachment ID. + * + * @param WP_REST_Request $request The full request object. + * @return \WP_REST_Response|WP_Error + */ + public function generate_audio_transcript( WP_REST_Request $request ) { + $attachment_id = $request->get_param( 'id' ); + $provider = ''; + + // Find the right provider class. + foreach ( $this->provider_classes as $provider_class ) { + if ( 'Whisper' === $provider_class->provider_service_name ) { + $provider = $provider_class; + } + } + + // Ensure we have a provider class. Should never happen but :shrug: + if ( ! $provider ) { + return new WP_Error( 'provider_class_required', esc_html__( 'Provider class not found.', 'classifai' ) ); + } + + return rest_ensure_response( $provider->transcribe_audio( $attachment_id ) ); + } + + /** + * Check if a given request has access to generate a transcript. + * + * This check ensures we have a valid user with proper capabilities + * making the request, that we are properly authenticated with OpenAI + * and that transcription is turned on. + * + * @param WP_REST_Request $request Full data about the request. + * @return WP_Error|bool + */ + public function generate_audio_transcript_permissions_check( WP_REST_Request $request ) { + $attachment_id = $request->get_param( 'id' ); + $post_type = get_post_type_object( 'attachment' ); + + // Ensure attachments are allowed in REST endpoints. + if ( empty( $post_type ) || empty( $post_type->show_in_rest ) ) { + return false; + } + + // Ensure we have a logged in user that can upload and change files. + if ( empty( $attachment_id ) || ! current_user_can( 'edit_post', $attachment_id ) || ! current_user_can( 'upload_files' ) ) { + return false; + } + + $settings = \Classifai\get_plugin_settings( 'language_processing', 'Whisper' ); + + // Check if valid authentication is in place. + if ( empty( $settings ) || ( isset( $settings['authenticated'] ) && false === $settings['authenticated'] ) ) { + return new WP_Error( 'auth', esc_html__( 'Please set up valid authentication with OpenAI.', 'classifai' ) ); + } + + // Check if transcription is turned on. + if ( empty( $settings ) || ( isset( $settings['enable_transcripts'] ) && 'no' === $settings['enable_transcripts'] ) ) { + return new WP_Error( 'not_enabled', esc_html__( 'Transcription is not currently enabled.', 'classifai' ) ); + } + + // Check if the current user's role is allowed. + $roles = $settings['roles'] ?? []; + $user_roles = wp_get_current_user()->roles ?? []; + + if ( empty( $roles ) || ! empty( array_diff( $user_roles, $roles ) ) ) { + return false; + } + + return true; + } + } diff --git a/src/js/media.js b/src/js/media.js index 0ef8f2752..3026f9fc9 100644 --- a/src/js/media.js +++ b/src/js/media.js @@ -20,6 +20,9 @@ import { __ } from '@wordpress/i18n'; 'classifai-rescan-smart-crop' ); const readButton = document.getElementById( 'classifai-rescan-pdf' ); + const transcribeButton = document.getElementById( + 'classifai-retranscribe' + ); if ( altTagsButton ) { altTagsButton.addEventListener( 'click', ( e ) => @@ -128,6 +131,29 @@ import { __ } from '@wordpress/i18n'; e.target.textContent = __( 'Read API requested!', 'classifai' ); } ); } + + if (transcribeButton) { + transcribeButton.addEventListener('click', (e) => + handleClick({ + button: e.target, + endpoint: '/classifai/v1/openai/generate-transcript/', + callback: (resp) => { + if (resp) { + const textField = + document.getElementById( + 'attachment-details-two-column-description' + ) ?? + document.getElementById( + 'attachment-details-description' + ); + if (textField) { + textField.value = resp; + } + } + }, + }) + ); + } }; /** From c64924e92b1e0df9b3eaa12f50ab2d414cd7db30 Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Wed, 3 May 2023 14:57:39 -0600 Subject: [PATCH 04/10] Fix eslint errors --- src/js/media.js | 122 ++++++++++++++++++++++++------------------------ 1 file changed, 60 insertions(+), 62 deletions(-) diff --git a/src/js/media.js b/src/js/media.js index 3026f9fc9..a45209ec0 100644 --- a/src/js/media.js +++ b/src/js/media.js @@ -15,25 +15,25 @@ import { __ } from '@wordpress/i18n'; const imageTagsButton = document.getElementById( 'classifai-rescan-image-tags' ); - const ocrScanButton = document.getElementById( 'classifai-rescan-ocr' ); + const ocrScanButton = document.getElementById('classifai-rescan-ocr'); const smartCropButton = document.getElementById( 'classifai-rescan-smart-crop' ); - const readButton = document.getElementById( 'classifai-rescan-pdf' ); + const readButton = document.getElementById('classifai-rescan-pdf'); const transcribeButton = document.getElementById( 'classifai-retranscribe' ); - if ( altTagsButton ) { - altTagsButton.addEventListener( 'click', ( e ) => - handleClick( { + if (altTagsButton) { + altTagsButton.addEventListener('click', (e) => + handleClick({ button: e.target, endpoint: '/classifai/v1/alt-tags/', - callback: ( resp ) => { + callback: (resp) => { const { enabledAltTextFields } = classifaiMediaVars; - if ( resp ) { - if ( enabledAltTextFields.includes( 'alt' ) ) { + if (resp) { + if (enabledAltTextFields.includes('alt')) { const textField = document.getElementById( 'attachment-details-two-column-alt-text' @@ -42,12 +42,12 @@ import { __ } from '@wordpress/i18n'; 'attachment-details-alt-text' ); - if ( textField ) { + if (textField) { textField.value = resp; } } - if ( enabledAltTextFields.includes( 'caption' ) ) { + if (enabledAltTextFields.includes('caption')) { const textField = document.getElementById( 'attachment-details-two-column-caption' @@ -56,14 +56,12 @@ import { __ } from '@wordpress/i18n'; 'attachment-details-caption' ); - if ( textField ) { + if (textField) { textField.value = resp; } } - if ( - enabledAltTextFields.includes( 'description' ) - ) { + if (enabledAltTextFields.includes('description')) { const textField = document.getElementById( 'attachment-details-two-column-description' @@ -72,32 +70,32 @@ import { __ } from '@wordpress/i18n'; 'attachment-details-description' ); - if ( textField ) { + if (textField) { textField.value = resp; } } } }, - } ) + }) ); } - if ( imageTagsButton ) { - imageTagsButton.addEventListener( 'click', ( e ) => - handleClick( { + if (imageTagsButton) { + imageTagsButton.addEventListener('click', (e) => + handleClick({ button: e.target, endpoint: '/classifai/v1/image-tags/', - } ) + }) ); } - if ( ocrScanButton ) { - ocrScanButton.addEventListener( 'click', ( e ) => - handleClick( { + if (ocrScanButton) { + ocrScanButton.addEventListener('click', (e) => + handleClick({ button: e.target, endpoint: '/classifai/v1/ocr/', - callback: ( resp ) => { - if ( resp ) { + callback: (resp) => { + if (resp) { const textField = document.getElementById( 'attachment-details-two-column-description' @@ -105,31 +103,31 @@ import { __ } from '@wordpress/i18n'; document.getElementById( 'attachment-details-description' ); - if ( textField ) { + if (textField) { textField.value = resp; } } }, - } ) + }) ); } - if ( smartCropButton ) { - smartCropButton.addEventListener( 'click', ( e ) => - handleClick( { + if (smartCropButton) { + smartCropButton.addEventListener('click', (e) => + handleClick({ button: e.target, endpoint: '/classifai/v1/smart-crop/', - } ) + }) ); } - if ( readButton ) { - readButton.addEventListener( 'click', ( e ) => { - const postID = e.target.getAttribute( 'data-id' ); - wp.apiRequest( { path: `/classifai/v1/read-pdf/${ postID }` } ); - e.target.setAttribute( 'disabled', 'disabled' ); - e.target.textContent = __( 'Read API requested!', 'classifai' ); - } ); + if (readButton) { + readButton.addEventListener('click', (e) => { + const postID = e.target.getAttribute('data-id'); + wp.apiRequest({ path: `/classifai/v1/read-pdf/${postID}` }); + e.target.setAttribute('disabled', 'disabled'); + e.target.textContent = __('Read API requested!', 'classifai'); + }); } if (transcribeButton) { @@ -160,15 +158,15 @@ import { __ } from '@wordpress/i18n'; * Check the PDF Scanner status and disable button if in progress. */ const checkPdfReadStatus = () => { - const readButton = document.getElementById( 'classifai-rescan-pdf' ); + const readButton = document.getElementById('classifai-rescan-pdf'); - if ( ! readButton ) { + if (!readButton) { return; } - const postId = readButton.getAttribute( 'data-id' ); + const postId = readButton.getAttribute('data-id'); - $.ajax( { + $.ajax({ url: ajaxurl, type: 'POST', data: { @@ -176,38 +174,38 @@ import { __ } from '@wordpress/i18n'; attachment_id: postId, nonce: ClassifAI.ajax_nonce, }, - success: ( resp ) => { - if ( resp?.success ) { - if ( resp?.data?.running ) { - readButton.setAttribute( 'disabled', 'disabled' ); + success: (resp) => { + if (resp?.success) { + if (resp?.data?.running) { + readButton.setAttribute('disabled', 'disabled'); readButton.textContent = __( 'In progress!', 'classifai' ); - } else if ( resp?.data?.read ) { - readButton.textContent = __( 'Rescan', 'classifai' ); + } else if (resp?.data?.read) { + readButton.textContent = __('Rescan', 'classifai'); } } }, - } ); + }); }; - $( document ).ready( function() { - if ( wp.media ) { - wp.media.view.Modal.prototype.on( 'open', function() { - wp.media.frame.on( 'selection:toggle', handleButtonsClick ); - wp.media.frame.on( 'selection:toggle', checkPdfReadStatus ); - } ); + $(document).ready(function () { + if (wp.media) { + wp.media.view.Modal.prototype.on('open', function () { + wp.media.frame.on('selection:toggle', handleButtonsClick); + wp.media.frame.on('selection:toggle', checkPdfReadStatus); + }); } - if ( wp.media.frame ) { - wp.media.frame.on( 'edit:attachment', handleButtonsClick ); - wp.media.frame.on( 'edit:attachment', checkPdfReadStatus ); + if (wp.media.frame) { + wp.media.frame.on('edit:attachment', handleButtonsClick); + wp.media.frame.on('edit:attachment', checkPdfReadStatus); } // For new uploaded media. - if ( wp.Uploader && wp.Uploader.queue ) { - wp.Uploader.queue.on( 'reset', handleButtonsClick ); + if (wp.Uploader && wp.Uploader.queue) { + wp.Uploader.queue.on('reset', handleButtonsClick); } - } ); -} )( jQuery ); + }); +})(jQuery); From 959186924d6f3b2cba5645e82c01b61e6e6afcc5 Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Wed, 3 May 2023 15:22:46 -0600 Subject: [PATCH 05/10] Add metabox on single audio attachment pages that can be used to generate transcriptions --- .../Classifai/Providers/OpenAI/Whisper.php | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/includes/Classifai/Providers/OpenAI/Whisper.php b/includes/Classifai/Providers/OpenAI/Whisper.php index fc5c470f1..e01793252 100644 --- a/includes/Classifai/Providers/OpenAI/Whisper.php +++ b/includes/Classifai/Providers/OpenAI/Whisper.php @@ -7,6 +7,8 @@ use Classifai\Providers\Provider; use Classifai\Providers\OpenAI\Whisper\Transcribe; +use function Classifai\clean_input; + use WP_Error; class Whisper extends Provider { @@ -59,6 +61,8 @@ public function can_register() { public function register() { add_action( 'add_attachment', [ $this, 'transcribe_audio' ] ); add_filter( 'attachment_fields_to_edit', [ $this, 'add_buttons_to_media_modal' ], 10, 2 ); + add_action( 'add_meta_boxes_attachment', [ $this, 'setup_attachment_meta_box' ] ); + add_action( 'edit_attachment', [ $this, 'maybe_transcribe_audio' ] ); } /** @@ -117,6 +121,75 @@ public function add_buttons_to_media_modal( $form_fields, $attachment ) { return $form_fields; } + /** + * Add metabox on single attachment view to allow for transcription. + * + * @param \WP_Post $post Post object. + */ + public function setup_attachment_meta_box( $post ) { + $settings = $this->get_settings(); + $transcribe = new Transcribe( $post->ID, $settings ); + + if ( ! $transcribe->should_process( $post->ID ) ) { + return; + } + + if ( is_array( $settings ) && isset( $settings['enable_transcripts'] ) && '1' === $settings['enable_transcripts'] ) { + add_meta_box( + 'attachment_meta_box', + __( 'ClassifAI Audio Processing', 'classifai' ), + [ $this, 'attachment_meta_box' ], + 'attachment', + 'side', + 'high' + ); + } + } + + /** + * Display the attachment meta box. + * + * @param \WP_Post $post Post object. + */ + public function attachment_meta_box( $post ) { + $text = empty( get_the_content( null, false, $post ) ) ? __( 'Transcribe', 'classifai' ) : __( 'Re-transcribe', 'classifai' ); + + wp_nonce_field( 'classifai_openai_whisper_meta_action', 'classifai_openai_whisper_meta' ); + ?> + +
+
+ +
+
+ + transcribe_audio( $attachment_id ); + } + } + /** * Setup fields */ From 81bdf1ae9372eb4bd4eba61b26f6c84e225bd988 Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Thu, 4 May 2023 09:08:01 -0600 Subject: [PATCH 06/10] Add bulk action support to transcribe audio files. Refactor our BulkActions class to better support multiple providers, following what was done in #437 --- includes/Classifai/Admin/BulkActions.php | 137 ++++++++++++++---- .../Providers/OpenAI/Whisper/Transcribe.php | 1 + 2 files changed, 112 insertions(+), 26 deletions(-) diff --git a/includes/Classifai/Admin/BulkActions.php b/includes/Classifai/Admin/BulkActions.php index 5d30bd10e..3e5cfb60f 100644 --- a/includes/Classifai/Admin/BulkActions.php +++ b/includes/Classifai/Admin/BulkActions.php @@ -2,12 +2,15 @@ namespace Classifai\Admin; use Classifai\Providers\Azure\ComputerVision; +use Classifai\Providers\OpenAI\Whisper; +use Classifai\Providers\OpenAI\Whisper\Transcribe; use function Classifai\get_supported_post_types; /** * Handle bulk actions. */ class BulkActions { + /** * Check to see if we can register this class. * @@ -27,34 +30,61 @@ public function can_register() { */ private $computer_vision; + /** + * @var \Classifai\Providers\OpenAI\Whisper + */ + private $whisper; + /** * Register the actions needed. */ public function register() { - $post_types = get_supported_post_types(); + $this->register_language_processing_hooks(); + $this->register_image_processing_hooks(); + + add_action( 'admin_notices', [ $this, 'bulk_action_admin_notice' ] ); + } + + /** + * Register bulk actions for language processing. + */ + public function register_language_processing_hooks() { + $nlu_post_types = get_supported_post_types(); + + // Set up the save post handler if we have any post types for NLU. + if ( ! empty( $nlu_post_types ) ) { + $this->save_post_handler = new SavePostHandler(); + } + + // Merge our post types together and make them unique. + $post_types = array_unique( array_merge( $nlu_post_types, [] ) ); if ( empty( $post_types ) ) { return; } - $this->save_post_handler = new SavePostHandler(); - $this->computer_vision = new ComputerVision( false ); - foreach ( $post_types as $post_type ) { add_filter( "bulk_actions-edit-$post_type", [ $this, 'register_bulk_actions' ] ); add_filter( "handle_bulk_actions-edit-$post_type", [ $this, 'bulk_action_handler' ], 10, 3 ); if ( is_post_type_hierarchical( $post_type ) ) { - add_action( 'page_row_actions', [ $this, 'register_row_action' ], 10, 2 ); + add_filter( 'page_row_actions', [ $this, 'register_row_action' ], 10, 2 ); } else { - add_action( 'post_row_actions', [ $this, 'register_row_action' ], 10, 2 ); + add_filter( 'post_row_actions', [ $this, 'register_row_action' ], 10, 2 ); } } + } + + /** + * Register bulk actions for the Computer Vision provider. + */ + public function register_image_processing_hooks() { + $this->computer_vision = new ComputerVision( false ); + $this->whisper = new Whisper( false ); add_filter( 'bulk_actions-upload', [ $this, 'register_media_bulk_actions' ] ); add_filter( 'handle_bulk_actions-upload', [ $this, 'media_bulk_action_handler' ], 10, 3 ); - - add_action( 'admin_notices', [ $this, 'bulk_action_admin_notice' ] ); + add_filter( 'media_row_actions', [ $this, 'register_media_row_action' ], 10, 2 ); } /** @@ -77,17 +107,22 @@ public function register_bulk_actions( $bulk_actions ) { * @return array */ public function register_media_bulk_actions( $bulk_actions ) { - $settings = $this->computer_vision->get_settings(); + $computer_vision_settings = $this->computer_vision->get_settings(); + $whisper_settings = $this->whisper->get_settings(); if ( - 'no' !== $settings['enable_image_tagging'] || + 'no' !== $computer_vision_settings['enable_image_tagging'] || ! empty( $this->computer_vision->get_alt_text_settings() ) ) { - $bulk_actions['scan_image'] = __( 'Scan Image', 'classifai' ); + $bulk_actions['scan_image'] = __( 'Scan image', 'classifai' ); } - if ( isset( $settings['enable_smart_cropping'] ) && '1' === $settings['enable_smart_cropping'] ) { - $bulk_actions['smart_crop'] = __( 'Smart Crop', 'classifai' ); + if ( isset( $computer_vision_settings['enable_smart_cropping'] ) && '1' === $computer_vision_settings['enable_smart_cropping'] ) { + $bulk_actions['smart_crop'] = __( 'Smart crop', 'classifai' ); + } + + if ( isset( $whisper_settings['enable_transcripts'] ) && '1' === $whisper_settings['enable_transcripts'] ) { + $bulk_actions['transcribe'] = __( 'Transcribe audio', 'classifai' ); } return $bulk_actions; @@ -108,11 +143,16 @@ public function bulk_action_handler( $redirect_to, $doaction, $post_ids ) { } foreach ( $post_ids as $post_id ) { - $this->save_post_handler->classify( $post_id ); + // Handle NLU classification. + if ( is_a( $this->save_post_handler, '\Classifai\Admin\SavePostHandler' ) ) { + $this->save_post_handler->classify( $post_id ); + } } - $redirect_to = remove_query_arg( [ 'bulk_classified', 'bulk_scanned', 'bulk_cropped' ], $redirect_to ); + + $redirect_to = remove_query_arg( [ 'bulk_classified', 'bulk_scanned', 'bulk_cropped', 'bulk_transcribed' ], $redirect_to ); $redirect_to = add_query_arg( 'bulk_classified', count( $post_ids ), $redirect_to ); - return $redirect_to; + + return esc_url_raw( $redirect_to ); } /** @@ -127,25 +167,34 @@ public function bulk_action_handler( $redirect_to, $doaction, $post_ids ) { public function media_bulk_action_handler( $redirect_to, $doaction, $attachment_ids ) { if ( empty( $attachment_ids ) || - ! in_array( $doaction, [ 'scan_image', 'smart_crop' ], true ) + ! in_array( $doaction, [ 'scan_image', 'smart_crop', 'transcribe' ], true ) ) { return $redirect_to; } + $action = ''; + foreach ( $attachment_ids as $attachment_id ) { + if ( 'transcribe' === $doaction ) { + $action = 'transcribed'; + $this->whisper->transcribe_audio( $attachment_id ); + continue; + } + $current_meta = wp_get_attachment_metadata( $attachment_id ); if ( 'smart_crop' === $doaction ) { + $action = 'cropped'; $this->computer_vision->smart_crop_image( $current_meta, $attachment_id ); - } else { + } elseif ( 'scan_image' === $doaction ) { + $action = 'scanned'; $this->computer_vision->generate_image_alt_tags( $current_meta, $attachment_id ); } } - $action = 'scan_image' === $doaction ? 'scanned' : 'cropped'; - - $redirect_to = remove_query_arg( [ 'bulk_classified', 'bulk_scanned', 'bulk_cropped' ], $redirect_to ); + $redirect_to = remove_query_arg( [ 'bulk_classified', 'bulk_scanned', 'bulk_cropped', 'bulk_transcribed' ], $redirect_to ); $redirect_to = add_query_arg( rawurlencode( "bulk_{$action}" ), count( $attachment_ids ), $redirect_to ); + return esc_url_raw( $redirect_to ); } @@ -154,11 +203,12 @@ public function media_bulk_action_handler( $redirect_to, $doaction, $attachment_ */ public function bulk_action_admin_notice() { - $classified = ! empty( $_GET['bulk_classified'] ) ? intval( wp_unslash( $_GET['bulk_classified'] ) ) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended - $scanned = ! empty( $_GET['bulk_scanned'] ) ? intval( wp_unslash( $_GET['bulk_scanned'] ) ) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended - $cropped = ! empty( $_GET['bulk_cropped'] ) ? intval( wp_unslash( $_GET['bulk_cropped'] ) ) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended + $classified = ! empty( $_GET['bulk_classified'] ) ? intval( wp_unslash( $_GET['bulk_classified'] ) ) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended + $scanned = ! empty( $_GET['bulk_scanned'] ) ? intval( wp_unslash( $_GET['bulk_scanned'] ) ) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended + $cropped = ! empty( $_GET['bulk_cropped'] ) ? intval( wp_unslash( $_GET['bulk_cropped'] ) ) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended + $transcribed = ! empty( $_GET['bulk_transcribed'] ) ? intval( wp_unslash( $_GET['bulk_transcribed'] ) ) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended - if ( ! $classified && ! $scanned && ! $cropped ) { + if ( ! $classified && ! $scanned && ! $cropped && ! $transcribed ) { return; } @@ -174,6 +224,10 @@ public function bulk_action_admin_notice() { $classified_posts_count = $cropped; $post_type = 'image'; $action = __( 'Cropped', 'classifai' ); + } elseif ( $transcribed ) { + $classified_posts_count = $transcribed; + $post_type = 'audio'; + $action = __( 'Transcribed', 'classifai' ); } $output = '

'; @@ -190,6 +244,7 @@ public function bulk_action_admin_notice() { $post_type ); $output .= '

'; + echo wp_kses( $output, [ @@ -211,7 +266,11 @@ public function bulk_action_admin_notice() { * @return array */ public function register_row_action( $actions, $post ) { - $post_types = get_supported_post_types(); + $post_types = []; + + if ( is_a( $this->save_post_handler, '\Classifai\Admin\SavePostHandler' ) ) { + $post_types = get_supported_post_types(); + } if ( ! in_array( $post->post_type, $post_types, true ) ) { return $actions; @@ -225,4 +284,30 @@ public function register_row_action( $actions, $post ) { return $actions; } + + /** + * Register media row actions. + * + * @param array $actions An array of action links for each attachment. + * @param \WP_Post $post WP_Post object for the current attachment. + * @return array + */ + public function register_media_row_action( $actions, $post ) { + $whisper_settings = $this->whisper->get_settings(); + + if ( isset( $whisper_settings['enable_transcripts'] ) && '1' === $whisper_settings['enable_transcripts'] ) { + $transcribe = new Transcribe( $post->ID, $whisper_settings ); + + if ( $transcribe->should_process( $post->ID ) ) { + $actions['transcribe'] = sprintf( + '%s', + esc_url( wp_nonce_url( admin_url( sprintf( 'upload.php?action=transcribe&ids=%d&post_type=%s', $post->ID, $post->post_type ) ), 'bulk-media' ) ), + esc_html__( 'Transcribe', 'classifai' ) + ); + } + } + + return $actions; + } + } diff --git a/includes/Classifai/Providers/OpenAI/Whisper/Transcribe.php b/includes/Classifai/Providers/OpenAI/Whisper/Transcribe.php index b9cfe7223..0d0c25c10 100644 --- a/includes/Classifai/Providers/OpenAI/Whisper/Transcribe.php +++ b/includes/Classifai/Providers/OpenAI/Whisper/Transcribe.php @@ -117,6 +117,7 @@ public function add_transcription( string $text = '' ) { /** * Filter the text result returned from Whisper API. * + * @since x.x.x * @hook classifai_whisper_transcribe_result * * @param {string} $text Text extracted from the response. From b0ee07a79ef9aa55b9d52cb343d87a3708cc8447 Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Thu, 4 May 2023 11:31:05 -0600 Subject: [PATCH 07/10] Update docs --- README.md | 58 +++++++++++++----- assets/img/screenshot-6.png | Bin 28130 -> 56724 bytes assets/img/screenshot-9.png | Bin 0 -> 62420 bytes .../Classifai/Providers/OpenAI/ChatGPT.php | 2 +- readme.txt | 3 +- 5 files changed, 47 insertions(+), 16 deletions(-) create mode 100644 assets/img/screenshot-9.png diff --git a/README.md b/README.md index e06b32988..2aa9e5e9d 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,10 @@ * [Installation](#installation) * [Register ClassifAI account](#register-classifai-account) * [Set Up NLU Language Processing](#set-up-language-processing-via-ibm-watson) -* [Set Up ChatGPT Language Processing](#set-up-language-processing-via-openai) +* [Set Up OpenAI ChatGPT Language Processing](#set-up-language-processing-via-openai-chatgpt) +* [Set Up OpenAI Whisper Language Processing](#set-up-language-processing-via-openai-whisper) * [Set Up Computer Vision Image Processing](#set-up-image-processing-via-microsoft-azure) -* [Set Up DALL·E Image Processing](#set-up-image-processing-via-openai) +* [Set Up OpenAI DALL·E Image Processing](#set-up-image-processing-via-openai) * [Set Up Recommended Content](#set-up-recommended-content-via-microsoft-azure-personalizer) * [WP CLI Commands](#wp-cli-commands) * [FAQs](#frequently-asked-questions) @@ -27,6 +28,7 @@ * Automatically generate a summary of your content and store that as an excerpt using [OpenAI's ChatGPT](https://platform.openai.com/docs/guides/chat) * Generate new images on demand to use in-content or as a featured image using [OpenAI's DALL·E](https://platform.openai.com/docs/guides/images) +* Automatically generate transcripts of your audio files using [OpenAI's Whisper](https://platform.openai.com/docs/guides/speech-to-text) * Classify your content using [IBM Watson's Natural Language Understanding API](https://www.ibm.com/watson/services/natural-language-understanding/) and [Microsoft Azure's Computer Vision API](https://azure.microsoft.com/en-us/services/cognitive-services/computer-vision/) * Supports Watson's [Categories](https://cloud.ibm.com/docs/natural-language-understanding?topic=natural-language-understanding-about#categories), [Keywords](https://cloud.ibm.com/docs/natural-language-understanding?topic=natural-language-understanding-about#keywords), [Concepts](https://cloud.ibm.com/docs/natural-language-understanding?topic=natural-language-understanding-about#concepts) & [Entities](https://cloud.ibm.com/docs/natural-language-understanding?topic=natural-language-understanding-about#entities) and Azure's [Describe Image](https://westus.dev.cognitive.microsoft.com/docs/services/5adf991815e1060e6355ad44/operations/56f91f2e778daf14a499e1fe) * Automatically classify content and images on save @@ -36,9 +38,9 @@ * BETA: Recommend content based on overall site traffic via [Azure Personalizer](https://azure.microsoft.com/en-us/services/cognitive-services/personalizer/) (note that we're gathering feedback on this feature and may significantly iterate depending on community input) * Bulk classify content with [WP-CLI](https://wp-cli.org/) -| Language Processing - Tagging | Recommended Content | Excerpt Generation | -| :-: | :-: | :-: | -| ![Screenshot of ClassifAI post tagging](assets/img/screenshot-1.png "Example of a Block Editor post with Watson Categories, Keywords, Concepts, and Entities.") | ![Screenshot of ClassifAI recommended content](assets/img/screenshot-2.png "Example of a Recommended Content Block with Azure Personalizer.") | ![Screenshot of ClassifAI excerpt generation](assets/img/screenshot-7.png "Example of automatic excerpt generation with OpenAI.") | +| Language Processing - Tagging | Recommended Content | Excerpt Generation | Audio Transcripts | +| :-: | :-: | :-: | :-: | +| ![Screenshot of ClassifAI post tagging](assets/img/screenshot-1.png "Example of a Block Editor post with Watson Categories, Keywords, Concepts, and Entities.") | ![Screenshot of ClassifAI recommended content](assets/img/screenshot-2.png "Example of a Recommended Content Block with Azure Personalizer.") | ![Screenshot of ClassifAI excerpt generation](assets/img/screenshot-7.png "Example of automatic excerpt generation with OpenAI.") | ![Screenshot of ClassifAI audio transcript generation](assets/img/screenshot-9.png "Example of automatic audio transcript generation with OpenAI.") | | Image Processing - Alt Text | Image Processing - Smart Cropping | Image Processing - Tagging | Image Processing - Generate Images | | :-: | :-: | :-: | :-: | @@ -49,7 +51,7 @@ * PHP 7.4+ * [WordPress](http://wordpress.org) 5.7+ * To utilize the NLU Language Processing functionality, you will need an active [IBM Watson](https://cloud.ibm.com/registration) account. -* To utilize the ChatGPT Language Processing functionality or DALL·E Image Processing functionality, you will need an active [OpenAI](https://platform.openai.com/signup) account. +* To utilize the ChatGPT or Whisper Language Processing functionality or DALL·E Image Processing functionality, you will need an active [OpenAI](https://platform.openai.com/signup) account. * To utilize the Computer Vision Image Processing functionality, you will need an active [Microsoft Azure](https://signup.azure.com/signup) account. ## Pricing @@ -58,7 +60,7 @@ Note that there is no cost to using ClassifAI itself. Both IBM Watson and Micros The service that powers ClassifAI's NLU Language Processing, IBM Watson's Natural Language Understanding ("NLU"), has a ["lite" pricing tier](https://www.ibm.com/cloud/watson-natural-language-understanding/pricing) that offers 30,000 free NLU items per month. -The service that powers ClassifAI's ChatGPT Language Processing and DALL·E Image Processing, OpenAI, has a limited free trial and then requires a [pay per usage](https://openai.com/pricing) plan. +The service that powers ClassifAI's ChatGPT and Whisper Language Processing and DALL·E Image Processing, OpenAI, has a limited free trial and then requires a [pay per usage](https://openai.com/pricing) plan. The service that powers ClassifAI's Computer Vision Image Processing, Microsoft Azure, has a ["free" pricing tier](https://azure.microsoft.com/en-us/pricing/details/cognitive-services/computer-vision/) that offers 20 transactions per minute and 5,000 transactions per month. @@ -134,7 +136,7 @@ ClassifAI is a sophisticated solution that we want organizations of all shapes a - Check for an email from `ClassifAI Team` which contains the registration key. - Note that the email will be sent from `opensource@10up.com`, so please whitelist this email address if needed. -### 2. Configure ClassifAI Registration Key under ClassifAI > ClassifAI +### 2. Configure ClassifAI Registration Key under Tools > ClassifAI - In the `Registered Email` field, enter the email you used for registration. - In the `Registration Key` field, enter the registration key from the email in step 1 above. @@ -150,7 +152,7 @@ ClassifAI is a sophisticated solution that we want organizations of all shapes a - Log into your account (accepting the privacy policy) and create a new [*Natural Language Understanding*](https://cloud.ibm.com/catalog/services/natural-language-understanding) Resource if you do not already have one. It may take a minute for your account to fully populate with the default resource group to use. - Click `Manage` in the left hand menu, then `Show credentials` on the Manage page to view the credentials for this resource. -### 2. Configure IBM Watson API Keys under ClassifAI > Language Processing > IBM Watson +### 2. Configure IBM Watson API Keys under Tools > ClassifAI > Language Processing > IBM Watson **The credentials screen will show either an API key or a username/password combination.** @@ -178,7 +180,7 @@ For more information, see https://cloud.ibm.com/docs/watson?topic=watson-endpoin ### 4. Save a Post/Page/CPT or run WP CLI command to batch classify your content -## Set Up Language Processing (via OpenAI) +## Set Up Language Processing (via OpenAI ChatGPT) ### 1. Sign up for OpenAI @@ -187,7 +189,7 @@ For more information, see https://cloud.ibm.com/docs/watson?topic=watson-endpoin * Log into your account and go to the [API key page](https://platform.openai.com/account/api-keys). * Click `Create new secret key` and copy the key that is shown. -### 2. Configure OpenAI API Keys under ClassifAI > Language Processing > OpenAI +### 2. Configure OpenAI API Keys under Tools > ClassifAI > Language Processing > OpenAI ChatGPT * Enter your API Key copied from the above step into the `API Key` field. @@ -203,6 +205,34 @@ For more information, see https://cloud.ibm.com/docs/watson?topic=watson-endpoin * Ensure this item has content saved. * Open the Excerpt panel in the sidebar and click on `Generate Excerpt` +## Set Up Language Processing (via OpenAI Whisper) + +Note that [OpenAI](https://platform.openai.com/docs/guides/speech-to-text) can create a transcript for audio files that meet the following requirements: +* The file must be presented in mp3, mp4, mpeg, mpga, m4a, wav, or webm format +* The file size must be less than 25 megabytes (MB) + +### 1. Sign up for OpenAI + +* [Sign up for an OpenAI account](https://platform.openai.com/signup) or sign into your existing one. +* If creating a new account, complete the verification process (requires confirming your email and phone number). +* Log into your account and go to the [API key page](https://platform.openai.com/account/api-keys). +* Click `Create new secret key` and copy the key that is shown. + +### 2. Configure OpenAI API Keys under Tools > ClassifAI > Language Processing > OpenAI Whisper + +* Enter your API Key copied from the above step into the `API Key` field. + +### 3. Enable specific features + +* Choose to enable the ability to automatically generate transcripts from supported audio files. +* Choose which user roles have access to this ability. +* Save changes and ensure a success message is shown. An error will show if API authentication fails. + +### 4. Upload a new audio file + +* Upload a new audio file. +* Check to make sure the transcript was stored in the Description field. + ## Set Up Image Processing (via Microsoft Azure) Note that [Computer Vision](https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/home#image-requirements) can analyze and crop images that meet the following requirements: @@ -218,7 +248,7 @@ Note that [Computer Vision](https://docs.microsoft.com/en-us/azure/cognitive-ser - Click `Keys and Endpoint` in the left hand Resource Management menu to view the `Endpoint` URL for this resource. - Click the copy icon next to `KEY 1` to copy the API Key credential for this resource. -### 2. Configure Microsoft Azure API and Key under ClassifAI > Image Processing +### 2. Configure Microsoft Azure API and Key under Tools > ClassifAI > Image Processing - In the `Endpoint URL` field, enter your `API endpoint`. - In the `API Key` field, enter your `KEY 1`. @@ -239,7 +269,7 @@ Note that [Computer Vision](https://docs.microsoft.com/en-us/azure/cognitive-ser * Log into your account and go to the [API key page](https://platform.openai.com/account/api-keys). * Click `Create new secret key` and copy the key that is shown. -### 2. Configure OpenAI API Keys under ClassifAI > Image Processing > OpenAI +### 2. Configure OpenAI API Keys under Tools > ClassifAI > Image Processing > OpenAI * Enter your API Key copied from the above step into the `API Key` field. @@ -274,7 +304,7 @@ Note that [Personalizer](https://azure.microsoft.com/en-us/services/cognitive-se For more information, see https://docs.microsoft.com/en-us/azure/cognitive-services/personalizer/how-to-create-resource -### 2. Configure Microsoft Azure API and Key under ClassifAI > Recommended Content +### 2. Configure Microsoft Azure API and Key under Tools > ClassifAI > Recommended Content - In the `Endpoint URL` field, enter your `Endpoint` URL from Step 1 above. - In the `API Key` field, enter your `KEY 1` from Step 1 above. diff --git a/assets/img/screenshot-6.png b/assets/img/screenshot-6.png index fd461d3f1d23e9b588021f42cd2c70912d78c7a0..9117400ae60e3d630114801809c2a440db91df27 100644 GIT binary patch literal 56724 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°{Xp4$s-8P8z?gVO$nA;wOKQeq*U^zQo`%n?8ai}SAJ zjZ}w~dXsLB+WK_Q=N_6}xzeXZgi~B3J5ry`DHv(1Be8znUt@qlwk8=|zYJkK z!tS(_#J3H-iFoftw=v*MHn)_3E?NHNlZfOY|3RwP`_Qnkj|~WD47pF8*7Bt zBnS6-m@5&750Ge;NFJt~g?0rJ=x6`~_ArY4F9ki62~mz(WQwBv8)HKCe2y5J`P<_* z;jOGHMrQy!7(3=Q{e;=UMpMt=;&uiN_;nl*0pSZ3t^cX2wwS}XaT?11@-=og%LQ%tMGiYNI^vg$+HEP8ZSqun5(W11hT=( zPFlbX!7+92jz>o+NnB@-v0O=I^TjEltgHHUVXkzC5jhj@R8Cs?dxtN8Jgi*Pw^OS{}> z_aHzt>l5%As|Hyie;~fewS4{fgoRe`T@W-~&ykIFJ*le2e_kgA(>F~fdSLTf~+CJ)g+h zmo?DU?{>hIVDVRM?LFUOB_9oDc|Ci>+(&KXS6$e59sbWIJOQy(N!MBuuz8o~6cg&* z4L{wT|L87S1@lIg3VTKZxt;1Iw)=Z^B9T08=Z23hq;`G`ch>^^6|or4I6by*niO=A zWO_uqklxH7`7J}qn2d}MrFcKs(9*I>#leLhd`Q9 z@!YGY!tC?Ue__3;s>+X2)-NyrJ9*ic6|JW|O;FaB^3J1eS93;tv&C3ry7c<@bH`Wd z@eaELsEMEVL~m3iS6I!3FLfi=D8n`deLSl29#8~3UtxQFGI!-;3XeC&_gJ^5n7+^P z943ds%s^{qHXB!O0z{KX#C7eE&ky9+7{wedxK_V6(>?G%-{n@efq(47l*Y`)VF|>+ z6V2~8#{{`sxK_?$QL@zv2 zCL?BfoV=)^L3j<6#;nNP zO70fxwp599l=)}q$m4jHMjXgiP#1`TYk*NX-f%nje&Nr*hBB;E=1JoS4FVwVpY$iR zSHtDMB^3!221bRcdMx3)Lj#cTgHiPjxU0OT$Ec#p@NA$VK4{jC*A|?Es+T~oNItWR z$0Z(bp@x3>HLMt6@Y>1>ho5mURC4}#sBe%~aUVwkGMf$tEwN|%q-X__ZtQDwvMhVI zo=9tm)miF8+BM8#i`mr#d?3j83C5kmz@N^C7&s5nqSO}jU%Lsyv|Pca%HBK%pBL!Y zn>_O;{JN3dqD@N_Vb&r6D3mG$KuT5f74O7bev%jcyvj z{^z@nST?_ml~EfW%47@=g?E9u7M~h6fa5gJ8GM|Ru+4WXRe4C@N_K+?&$r;0=T`_j zAAHC~UZqHWA)=nPg&t~8)@>bpm4HwHAnQi%6Vp6DWDis6bp&Fh9N_#P`ar@4{VFV} z6`@+iqjxmB;Y&+B=zAtXGSu~wWc}Qo0R2$RDE-+CMB3xH932hA#fA1eJtjIIe@LO@ zafefAt?;pqlF~_50Y7Xq550pymkGq3A6nH7K?^AX9I5ldm4Vn@;N68#ihWG!Cr_Au z7hcVZcbkOF07T{A4;qw}^_b}oTI z4xrq_>=abjQgO0Raj8vKU&_d*NN1$L0xA(Ea{1MR?4U?C3&Bs7Vx6-4S1~jZA|MP2Q+AEQ4PF}n@_&j7e6_-gg2KC2)3UNcy7pI zY|(qDZrUd$ZcE+`PmI9KFW=s=n0%@E>SQQzb?ih4byqM)hV=D*;JcKAFD}~(OX>Ct zNWg_(dwnxii7ju#frKZjTz*Ith4IC)CTLyXb#%relhkKiF7J4*pP0Jr?6Ysu7n)H5 zJ1TGCfp*n}>XhmApH|25zcLXp^`+3qIqVDsu)fg8!IUVYQiaAuFTIIOgy$nsx;ytDi+W5(jJlJGmS%J(2X#mgkRvCcVV@}&nWc(;F0Vg- z-+KKc znWKRI-dEFwK?RwBpb~;8#$>RmR$_7DgnYrx*8c9UZGo7N_|{h3#c3)K$Aku|m?N

Bzm0?%I7vyXZE&C;VwX9_o$H`s!7` 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 Sj*`DX;Ig(jw7;0*7XNR-vxrLo literal 28130 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 Rg)*xjOw-` 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 diff --git a/assets/img/screenshot-9.png b/assets/img/screenshot-9.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a4f74869e36753f0f457a46c08182e2a46761d GIT binary patch literal 62420 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 Date: Thu, 4 May 2023 11:54:33 -0600 Subject: [PATCH 08/10] Add tests --- tests/cypress/fixtures/audio.mp3 | Bin 0 -> 114624 bytes .../integration/language-processing.test.js | 97 +++++++++++++++++- tests/cypress/plugins/functions.js | 10 ++ tests/test-plugin/e2e-test-plugin.php | 2 + tests/test-plugin/whisper.json | 3 + 5 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 tests/cypress/fixtures/audio.mp3 create mode 100644 tests/test-plugin/whisper.json diff --git a/tests/cypress/fixtures/audio.mp3 b/tests/cypress/fixtures/audio.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..6fc15969d622d16e5ea952f20a505079062f3ce4 GIT binary patch literal 114624 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%0DT7 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%0A|p-Ib~)?_)q~1gH30G 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

` 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

xMnB&6ApA6@4CL>hdhs+ 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 e3fTJBD@*rlq0N76{_{Er+4!;XW8>$Q75E { before(() => { @@ -152,7 +152,7 @@ describe('Language processing Tests', () => { cy.verifyPostTaxonomyTerms('tags', threshold / 100); }); - it( 'Can save OpenAI "Language Processing" settings', () => { + it( 'Can save OpenAI ChatGPT "Language Processing" settings', () => { cy.visit( '/wp-admin/tools.php?page=classifai&tab=language_processing&provider=openai_chatgpt' ); cy.get( '#api_key' ).clear().type( 'password' ); @@ -290,4 +290,97 @@ describe('Language processing Tests', () => { .should( 'not.exist' ); } ); } ); + + it('Can save OpenAI Whisper "Language Processing" settings', () => { + cy.visit( + '/wp-admin/tools.php?page=classifai&tab=language_processing&provider=openai_whisper' + ); + + cy.get('#api_key').clear().type('password'); + + cy.get('#enable_transcripts').check(); + cy.get('#openai_whisper_roles_administrator').check(); + cy.get('#submit').click(); + }); + + let audioEditLink = ''; + let mediaModalLink = ''; + + it('Can see OpenAI Whisper language processing actions on edit media page and verify generated data.', () => { + cy.visit('/wp-admin/media-new.php'); + cy.get('#plupload-upload-ui').should('exist'); + cy.get('#plupload-upload-ui input[type=file]').attachFile('audio.mp3'); + + cy.get('#media-items .media-item a.edit-attachment').should('exist'); + cy.get('#media-items .media-item a.edit-attachment') + .invoke('attr', 'href') + .then((editLink) => { + audioEditLink = editLink; + cy.visit(editLink); + }); + + // Verify metabox has processing actions. + cy.get('.postbox-header h2, #attachment_meta_box h2') + .first() + .contains('ClassifAI Audio Processing'); + cy.get('.misc-publishing-actions label[for=retranscribe]').contains( + 'Re-transcribe' + ); + + // Verify generated data. + cy.get('#attachment_content').should('have.value', getWhisperData()); + }); + + it('Can see OpenAI Whisper language processing actions on media model', () => { + const audioId = audioEditLink.split('post=')[1]?.split('&')[0]; + mediaModalLink = `wp-admin/upload.php?item=${audioId}`; + cy.visit(mediaModalLink); + cy.get('.media-modal').should('exist'); + + // Verify language processing actions. + cy.get('#classifai-retranscribe').contains('Re-transcribe'); + }); + + it('Can disable OpenAI Whisper language processing features', () => { + cy.visit( + '/wp-admin/tools.php?page=classifai&tab=language_processing&provider=openai_whisper' + ); + + // Disable features + cy.get('#enable_transcripts').uncheck(); + cy.get('#submit').click(); + + // Verify features are not present in attachment metabox. + cy.visit(audioEditLink); + cy.get('.misc-publishing-actions label[for=retranscribe]').should( + 'not.exist' + ); + + // Verify features are not present in media modal. + cy.visit(mediaModalLink); + cy.get('.media-modal').should('exist'); + cy.get('#classifai-retranscribe').should('not.exist'); + }); + + it('Can disable OpenAI Whisper language processing features by role', () => { + cy.visit( + '/wp-admin/tools.php?page=classifai&tab=language_processing&provider=openai_whisper' + ); + + // Disable admin role + cy.get('#enable_transcripts').check(); + cy.get('#openai_whisper_roles_administrator').uncheck(); + cy.get('#submit').click(); + + // Verify features are not present in attachment metabox. + cy.visit(audioEditLink); + cy.get('.misc-publishing-actions label[for=retranscribe]').should( + 'not.exist' + ); + + // Verify features are not present in media modal. + cy.visit(mediaModalLink); + cy.get('.media-modal').should('exist'); + cy.get('#classifai-retranscribe').should('not.exist'); + }); }); diff --git a/tests/cypress/plugins/functions.js b/tests/cypress/plugins/functions.js index af67bce58..919ba9800 100644 --- a/tests/cypress/plugins/functions.js +++ b/tests/cypress/plugins/functions.js @@ -2,6 +2,7 @@ import * as nluData from '../../test-plugin/nlu.json'; import * as chatgptData from '../../test-plugin/chatgpt.json'; import * as dalleData from '../../test-plugin/dalle.json'; import * as ocrData from '../../test-plugin/ocr.json'; +import * as whisperData from '../../test-plugin/whisper.json'; import * as imageData from '../../test-plugin/image_analyze.json'; import * as pdfData from '../../test-plugin/pdf.json'; @@ -52,6 +53,15 @@ export const getDalleData = () => { return dalleData.data; }; +/** + * Get data from test Whisper json file. + * + * @return {string[]} Whisper data. + */ +export const getWhisperData = () => { + return whisperData.text; +}; + /** * Get Image OCR data * diff --git a/tests/test-plugin/e2e-test-plugin.php b/tests/test-plugin/e2e-test-plugin.php index a9c917cb4..fb99ae1c7 100644 --- a/tests/test-plugin/e2e-test-plugin.php +++ b/tests/test-plugin/e2e-test-plugin.php @@ -23,6 +23,8 @@ function classifai_test_mock_http_requests( $preempt, $parsed_args, $url ) { $response = file_get_contents( __DIR__ . '/chatgpt.json' ); } elseif ( strpos( $url, 'https://api.openai.com/v1/chat/completions' ) !== false ) { $response = file_get_contents( __DIR__ . '/chatgpt.json' ); + } elseif ( strpos( $url, 'https://api.openai.com/v1/audio/transcriptions' ) !== false ) { + $response = file_get_contents( __DIR__ . '/whisper.json' ); } elseif ( strpos( $url, 'https://api.openai.com/v1/images/generations' ) !== false ) { $response = file_get_contents( __DIR__ . '/dalle.json' ); } elseif ( strpos( $url, 'http://e2e-test-image-processing.test/vision/v3.0/analyze' ) !== false ) { diff --git a/tests/test-plugin/whisper.json b/tests/test-plugin/whisper.json new file mode 100644 index 000000000..c1b94b7c3 --- /dev/null +++ b/tests/test-plugin/whisper.json @@ -0,0 +1,3 @@ +{ + "text": "Hello World!" +} From bcec22adcd0e4b3beb28fa8939ce5a8e98cd0c9c Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Thu, 4 May 2023 13:21:32 -0600 Subject: [PATCH 09/10] Add new helper method to determine if the feature is enabled and a user has access. Use this method anywhere we output our functionality. This fixes a bug our e2e tests found; thanks tests :) --- includes/Classifai/Admin/BulkActions.php | 25 +++++----- .../Classifai/Providers/OpenAI/Whisper.php | 49 +++++++++++++++++-- 2 files changed, 58 insertions(+), 16 deletions(-) diff --git a/includes/Classifai/Admin/BulkActions.php b/includes/Classifai/Admin/BulkActions.php index 3e5cfb60f..49eb2678e 100644 --- a/includes/Classifai/Admin/BulkActions.php +++ b/includes/Classifai/Admin/BulkActions.php @@ -108,7 +108,7 @@ public function register_bulk_actions( $bulk_actions ) { */ public function register_media_bulk_actions( $bulk_actions ) { $computer_vision_settings = $this->computer_vision->get_settings(); - $whisper_settings = $this->whisper->get_settings(); + $whisper_enabled = $this->whisper->is_feature_enabled(); if ( 'no' !== $computer_vision_settings['enable_image_tagging'] || @@ -121,7 +121,7 @@ public function register_media_bulk_actions( $bulk_actions ) { $bulk_actions['smart_crop'] = __( 'Smart crop', 'classifai' ); } - if ( isset( $whisper_settings['enable_transcripts'] ) && '1' === $whisper_settings['enable_transcripts'] ) { + if ( ! is_wp_error( $whisper_enabled ) ) { $bulk_actions['transcribe'] = __( 'Transcribe audio', 'classifai' ); } @@ -294,17 +294,20 @@ public function register_row_action( $actions, $post ) { */ public function register_media_row_action( $actions, $post ) { $whisper_settings = $this->whisper->get_settings(); + $whisper_enabled = $this->whisper->is_feature_enabled( $post->ID ); - if ( isset( $whisper_settings['enable_transcripts'] ) && '1' === $whisper_settings['enable_transcripts'] ) { - $transcribe = new Transcribe( $post->ID, $whisper_settings ); + if ( is_wp_error( $whisper_enabled ) ) { + return $actions; + } - if ( $transcribe->should_process( $post->ID ) ) { - $actions['transcribe'] = sprintf( - '%s', - esc_url( wp_nonce_url( admin_url( sprintf( 'upload.php?action=transcribe&ids=%d&post_type=%s', $post->ID, $post->post_type ) ), 'bulk-media' ) ), - esc_html__( 'Transcribe', 'classifai' ) - ); - } + $transcribe = new Transcribe( $post->ID, $whisper_settings ); + + if ( $transcribe->should_process( $post->ID ) ) { + $actions['transcribe'] = sprintf( + '%s', + esc_url( wp_nonce_url( admin_url( sprintf( 'upload.php?action=transcribe&ids=%d&post_type=%s', $post->ID, $post->post_type ) ), 'bulk-media' ) ), + esc_html__( 'Transcribe', 'classifai' ) + ); } return $actions; diff --git a/includes/Classifai/Providers/OpenAI/Whisper.php b/includes/Classifai/Providers/OpenAI/Whisper.php index e01793252..7ff819624 100644 --- a/includes/Classifai/Providers/OpenAI/Whisper.php +++ b/includes/Classifai/Providers/OpenAI/Whisper.php @@ -66,20 +66,24 @@ public function register() { } /** - * Start the audio transcription process. + * Check to see if the feature is enabled and a user has access. * * @param int $attachment_id Attachment ID to process. - * @return WP_Error|bool + * @return bool|WP_Error */ - public function transcribe_audio( $attachment_id = 0 ) { + public function is_feature_enabled( int $attachment_id = 0 ) { $settings = $this->get_settings(); // Check if the current user has permission. $roles = $settings['roles'] ?? []; $user_roles = wp_get_current_user()->roles ?? []; - if ( empty( $roles ) || ! empty( array_diff( $user_roles, $roles ) ) || ! current_user_can( 'edit_post', $attachment_id ) ) { - return new WP_Error( 'invalid', esc_html__( 'User role does not have permission.', 'classifai' ) ); + if ( empty( $roles ) || ! empty( array_diff( $user_roles, $roles ) ) ) { + return new WP_Error( 'no_permission', esc_html__( 'User role does not have permission.', 'classifai' ) ); + } + + if ( $attachment_id && ! current_user_can( 'edit_post', $attachment_id ) ) { + return new WP_Error( 'no_permission', esc_html__( 'User does not have permission to edit this attachment.', 'classifai' ) ); } // Ensure feature is turned on. @@ -87,6 +91,23 @@ public function transcribe_audio( $attachment_id = 0 ) { return new WP_Error( 'not_enabled', esc_html__( 'Transcripts are not enabled.', 'classifai' ) ); } + return true; + } + + /** + * Start the audio transcription process. + * + * @param int $attachment_id Attachment ID to process. + * @return WP_Error|bool + */ + public function transcribe_audio( $attachment_id = 0 ) { + $settings = $this->get_settings(); + $enabled = $this->is_feature_enabled( $attachment_id ); + + if ( is_wp_error( $enabled ) ) { + return $enabled; + } + $transcribe = new Transcribe( intval( $attachment_id ), $settings ); return $transcribe->process(); @@ -100,6 +121,12 @@ public function transcribe_audio( $attachment_id = 0 ) { * @return array */ public function add_buttons_to_media_modal( $form_fields, $attachment ) { + $enabled = $this->is_feature_enabled( $attachment->ID ); + + if ( is_wp_error( $enabled ) ) { + return $form_fields; + } + $settings = $this->get_settings(); $transcribe = new Transcribe( $attachment->ID, $settings ); @@ -127,6 +154,12 @@ public function add_buttons_to_media_modal( $form_fields, $attachment ) { * @param \WP_Post $post Post object. */ public function setup_attachment_meta_box( $post ) { + $enabled = $this->is_feature_enabled( $post->ID ); + + if ( is_wp_error( $enabled ) ) { + return; + } + $settings = $this->get_settings(); $transcribe = new Transcribe( $post->ID, $settings ); @@ -175,6 +208,12 @@ public function attachment_meta_box( $post ) { * @param int $attachment_id Attachment ID. */ public function maybe_transcribe_audio( $attachment_id ) { + $enabled = $this->is_feature_enabled( $attachment_id ); + + if ( is_wp_error( $enabled ) ) { + return; + } + if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) || ! current_user_can( 'edit_post', $attachment_id ) ) { return; } From 34d3d29c3ae70a4522c2f43d17d98c6a46a0e299 Mon Sep 17 00:00:00 2001 From: Darin Kotter Date: Thu, 18 May 2023 11:12:18 -0600 Subject: [PATCH 10/10] Remove unneeded method. Add auth check when determining if a feature is enabled. Ensure button text stays correct --- .../Classifai/Providers/OpenAI/Whisper.php | 20 +++++-------------- src/js/media.js | 1 + 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/includes/Classifai/Providers/OpenAI/Whisper.php b/includes/Classifai/Providers/OpenAI/Whisper.php index 7ff819624..32b01a1fe 100644 --- a/includes/Classifai/Providers/OpenAI/Whisper.php +++ b/includes/Classifai/Providers/OpenAI/Whisper.php @@ -38,21 +38,6 @@ public function __construct( $service ) { ); } - /** - * Can the functionality be initialized? - * - * @return bool - */ - public function can_register() { - $settings = $this->get_settings(); - - if ( empty( $settings ) || ( isset( $settings['authenticated'] ) && false === $settings['authenticated'] ) ) { - return false; - } - - return true; - } - /** * Register what we need for the plugin. * @@ -74,6 +59,11 @@ public function register() { public function is_feature_enabled( int $attachment_id = 0 ) { $settings = $this->get_settings(); + // Check if valid authentication is in place. + if ( empty( $settings ) || ( isset( $settings['authenticated'] ) && false === $settings['authenticated'] ) ) { + return new WP_Error( 'auth', esc_html__( 'Please set up valid authentication with OpenAI.', 'classifai' ) ); + } + // Check if the current user has permission. $roles = $settings['roles'] ?? []; $user_roles = wp_get_current_user()->roles ?? []; diff --git a/src/js/media.js b/src/js/media.js index a45209ec0..4833437ed 100644 --- a/src/js/media.js +++ b/src/js/media.js @@ -149,6 +149,7 @@ import { __ } from '@wordpress/i18n'; } } }, + buttonText: __('Re-transcribe', 'classifai'), }) ); }