feat: consolidate docs, backend/session infra, and settings updates
This commit is contained in:
@@ -11,30 +11,85 @@ if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Result object containing provider instance plus selection metadata.
|
||||
* Used to satisfy the DoD Provider Transparency contract.
|
||||
*
|
||||
* @since 0.2.0
|
||||
*/
|
||||
class WPAW_Provider_Selection_Result {
|
||||
public $provider; // Provider instance
|
||||
public $selected_provider; // Original requested provider name
|
||||
public $actual_provider; // Actually used provider name (may differ if fallback)
|
||||
public $fallback_used; // True if fallback occurred
|
||||
public $warnings; // Array of warning messages
|
||||
|
||||
public function __construct( $provider, $selected, $actual, $fallback, $warnings = array() ) {
|
||||
$this->provider = $provider;
|
||||
$this->selected_provider = $selected;
|
||||
$this->actual_provider = $actual;
|
||||
$this->fallback_used = $fallback;
|
||||
$this->warnings = $warnings;
|
||||
}
|
||||
}
|
||||
|
||||
class WP_Agentic_Writer_Provider_Manager {
|
||||
/**
|
||||
* Get provider instance for specific task type
|
||||
*
|
||||
* @param string $type Task type (chat, clarity, planning, writing, refinement, image).
|
||||
* @return WP_Agentic_Writer_AI_Provider_Interface Provider instance.
|
||||
* @return WPAW_Provider_Selection_Result Provider selection result with metadata.
|
||||
*/
|
||||
public static function get_provider_for_task( $type ) {
|
||||
$settings = get_option( 'wp_agentic_writer_settings', array() );
|
||||
$task_providers = $settings['task_providers'] ?? array();
|
||||
|
||||
|
||||
// Determine which provider to use for this task
|
||||
$provider_name = $task_providers[ $type ] ?? 'openrouter';
|
||||
|
||||
$requested_provider = $task_providers[ $type ] ?? 'openrouter';
|
||||
|
||||
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
|
||||
error_log( "WPAW Provider Manager: task={$type}, provider_name={$requested_provider}, task_providers=" . json_encode( $task_providers ) );
|
||||
}
|
||||
|
||||
$warnings = array();
|
||||
$fallback_used = false;
|
||||
$actual_provider = $requested_provider;
|
||||
|
||||
// Get provider instance with fallback logic
|
||||
$provider = self::get_provider_instance( $provider_name, $type );
|
||||
|
||||
$provider = self::get_provider_instance( $requested_provider, $type );
|
||||
|
||||
// If provider not configured or unavailable, fallback to OpenRouter
|
||||
if ( ! $provider || ! $provider->is_configured() ) {
|
||||
error_log( "Provider '{$provider_name}' not available for task '{$type}', using OpenRouter fallback" );
|
||||
return WP_Agentic_Writer_OpenRouter_Provider::get_instance();
|
||||
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
|
||||
error_log( "Provider '{$requested_provider}' not available for task '{$type}', using OpenRouter fallback" );
|
||||
}
|
||||
$warnings[] = "Provider '{$requested_provider}' unavailable, fell back to OpenRouter";
|
||||
$provider = WP_Agentic_Writer_OpenRouter_Provider::get_instance();
|
||||
$actual_provider = 'openrouter';
|
||||
$fallback_used = true;
|
||||
}
|
||||
|
||||
return $provider;
|
||||
|
||||
// For local backend, verify it's actually reachable before using it
|
||||
if ( 'local_backend' === $requested_provider && ! $fallback_used && method_exists( $provider, 'test_connection' ) ) {
|
||||
$test_result = $provider->test_connection();
|
||||
if ( is_wp_error( $test_result ) ) {
|
||||
if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
|
||||
error_log( "Local Backend not reachable for task '{$type}', using OpenRouter fallback. Error: " . $test_result->get_error_message() );
|
||||
}
|
||||
$warnings[] = "Local Backend not reachable, fell back to OpenRouter";
|
||||
$provider = WP_Agentic_Writer_OpenRouter_Provider::get_instance();
|
||||
$actual_provider = 'openrouter';
|
||||
$fallback_used = true;
|
||||
}
|
||||
}
|
||||
|
||||
return new WPAW_Provider_Selection_Result(
|
||||
$provider,
|
||||
$requested_provider,
|
||||
$actual_provider,
|
||||
$fallback_used,
|
||||
$warnings
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user