| @@ -51,13 +51,40 @@ | ||
| 51 | 51 | ]; |
| 52 | 52 | } |
| 53 | 53 | |
| 54 | 54 | /** |
| 55 | + * Provider to use when none has been chosen yet. | |
| 56 | + * | |
| 57 | + * New installs start on OpenRouter, because its free models let someone try | |
| 58 | + * the AI features without paying anything first. An install that already had | |
| 59 | + * an OpenAI key before the provider selector existed keeps OpenAI, so an | |
| 60 | + * update never silently points working features at a provider with no key. | |
| 61 | + */ | |
| 62 | + public static function getDefaultProvider(): string | |
| 63 | + { | |
| 64 | + $options = get_option(self::OPTION_NAME, []); | |
| 65 | + | |
| 66 | + if (is_array($options) && !empty($options['openai_api_key'])) { | |
| 67 | + return self::OPENAI; | |
| 68 | + } | |
| 69 | + | |
| 70 | + return self::OPENROUTER; | |
| 71 | + } | |
| 72 | + | |
| 73 | + /** | |
| 55 | 74 | * Normalises an arbitrary value to a supported provider slug. |
| 56 | 75 | */ |
| 57 | 76 | public static function normalizeProvider($provider): string |
| 58 | 77 | { |
| 59 | - return ($provider === self::OPENROUTER) ? self::OPENROUTER : self::OPENAI; | |
| 78 | + if ($provider === self::OPENROUTER) { | |
| 79 | + return self::OPENROUTER; | |
| 80 | + } | |
| 81 | + | |
| 82 | + if ($provider === self::OPENAI) { | |
| 83 | + return self::OPENAI; | |
| 84 | + } | |
| 85 | + | |
| 86 | + return self::getDefaultProvider(); | |
| 60 | 87 | } |
| 61 | 88 | |
| 62 | 89 | /** |
| 63 | 90 | * The provider currently selected in AI Settings. |
| @@ -64,9 +91,15 @@ | ||
| 64 | 91 | */ |
| 65 | 92 | public static function getProvider(): string |
| 66 | 93 | { |
| 67 | 94 | $options = get_option(self::OPTION_NAME, []); |
| 68 | - return self::normalizeProvider(is_array($options) ? ($options['ai_provider'] ?? self::OPENAI) : self::OPENAI); | |
| 95 | + $stored = is_array($options) ? ($options['ai_provider'] ?? '') : ''; | |
| 96 | + | |
| 97 | + if ($stored === self::OPENAI || $stored === self::OPENROUTER) { | |
| 98 | + return $stored; | |
| 99 | + } | |
| 100 | + | |
| 101 | + return self::getDefaultProvider(); | |
| 69 | 102 | } |
| 70 | 103 | |
| 71 | 104 | public static function isOpenRouter(): bool |
| 72 | 105 | { |