post_status && isset( $types[ $post->post_type ] ); }; } /** * The real name of Hub's summary collection on this site. * * @return string */ public static function summary_collection(): string { return Post_Summary::get_collection_name(); } /** * Options for the naming request to OpenAI. * * @return array{model: string, reasoning_effort: string, timeout: int} */ public static function llm_options(): array { /** * Filters the OpenAI options used to name the categories. The model must * support OpenAI's Structured Outputs in strict mode. * * @param array $options Default gpt-5.4-mini, medium effort, 120 seconds. */ $options = (array) apply_filters( 'creator_assistant_categories_llm_options', array( 'model' => 'gpt-5.4-mini', 'reasoning_effort' => 'medium', 'timeout' => 120, // phpcs:ignore WordPressVIPMinimum.Performance.RemoteRequestTimeout.timeout_timeout -- reasoning model, runs in the background cron, never in a visitor's request. ) ); // Same defaults as Links: the filter may return anything, so each value is // read defensively instead of trusting the array shape. return array( 'model' => (string) ( $options['model'] ?? 'gpt-5.4-mini' ), 'reasoning_effort' => (string) ( $options['reasoning_effort'] ?? 'medium' ), 'timeout' => max( 1, (int) ( $options['timeout'] ?? 120 ) ), ); } }