PluginProbe
MxChat – AI Chatbot & Content Generation for WordPress / 3.2.23
MxChat – AI Chatbot & Content Generation for WordPress v3.2.23
3.2.25 3.2.24 3.2.23 3.2.22 3.2.21 3.2.20 3.2.19 3.2.18 3.2.17 3.2.16 3.2.15 3.2.14 3.2.12 3.2.13 3.2.11 3.2.10 3.2.9 3.2.8 3.2.7 3.2.6 3.2.5 3.2.4 3.2.3 3.2.2 3.2.1 All 156 releases
← All changes | includes/class-mxchat-model-catalog.php +54 -6 3.2.22 → 3.2.23 View file →
@@ -83,9 +83,18 @@
83 83 // 'deprecated_on' (Y-m-d) + 'replacement' are optional per-model
84 84 // fields: pickers label a future date as "retires <date>" and hide
85 85 // the entry once the date passes (a saved value keeps rendering via
86 86 // settings_dropdown_groups($current_model)).
87 - 'gpt-5.6-sol' => array('label' => 'GPT-5.6 Sol', 'description' => __('Recommended — newest OpenAI flagship for reasoning, coding and chat', 'mxchat')),
87 + // GPT-6 (announced 2026-09-22; plan 45c22d). Probed live on
88 + // 2026-09-27: all three need max_completion_tokens, reject any
89 + // temperature but 1 and reject reasoning_effort 'minimal';
90 + // Astra also rejects 'none'. Every "modern OpenAI" gate goes
91 + // through is_modern_openai() so these ids are not sent legacy
92 + // parameters (which 400 on the first message).
93 + 'gpt-6-astra' => array('label' => 'GPT-6 Astra', 'description' => __('Recommended — newest OpenAI flagship; strongest reasoning, coding and agentic work', 'mxchat')),
94 + 'gpt-6-sol' => array('label' => 'GPT-6 Sol', 'description' => __('Strong reasoning on demanding tasks at mid-tier cost', 'mxchat')),
95 + 'gpt-6-luna' => array('label' => 'GPT-6 Luna', 'description' => __('Fastest and cheapest GPT-6 for high-volume, repeatable work', 'mxchat')),
96 + 'gpt-5.6-sol' => array('label' => 'GPT-5.6 Sol', 'description' => __('Previous OpenAI flagship for reasoning, coding and chat', 'mxchat')),
88 97 'gpt-5.6-terra' => array('label' => 'GPT-5.6 Terra', 'description' => __('Balanced GPT-5.6 — strong capability at lower cost', 'mxchat')),
89 98 'gpt-5.6-luna' => array('label' => 'GPT-5.6 Luna', 'description' => __('Fastest and cheapest GPT-5.6 for lightweight tasks', 'mxchat')),
90 99 'gpt-5.5' => array('label' => 'GPT-5.5', 'description' => __('Previous flagship — powerful reasoning and coding model', 'mxchat')),
91 100 'gpt-5.4' => array('label' => 'GPT-5.4', 'description' => __('Flagship reasoning and coding model', 'mxchat')),
@@ -738,10 +747,13 @@
738 747 }
739 748 return ($context === 'chat') ? 'low' : null;
740 749 }
741 750
742 - // Only the gpt-5 family carries reasoning_effort. Everything else omits.
743 - if (strpos($model, 'gpt-5') !== 0) {
751 + // Only the modern OpenAI family (gpt-5*, gpt-6*) carries
752 + // reasoning_effort. Everything else omits. plan 45c22d widened this
753 + // from a literal gpt-5 prefix: a gpt-6 id used to fall through all
754 + // three maps below and be sent legacy parameters.
755 + if (!self::is_modern_openai($model)) {
744 756 return null;
745 757 }
746 758
747 759 switch ($context) {
@@ -748,8 +760,11 @@
748 760 case 'websearch':
749 761 // integrator web-search (Responses API). Explicit allowlist, no
750 762 // "else" — anything not listed omits reasoning entirely.
751 763 $map = array(
764 + 'gpt-6-astra' => 'low', // plan 45c22d, probed 2026-09-27 on /v1/responses
765 + 'gpt-6-sol' => 'low',
766 + 'gpt-6-luna' => 'low',
752 767 'gpt-5.6-sol' => 'low',
753 768 'gpt-5.6-terra' => 'low',
754 769 'gpt-5.6-luna' => 'low',
755 770 'gpt-5.5' => 'low',
@@ -768,8 +783,14 @@
768 783 // 400'd on every call); the original gpt-5/-mini/-nano still
769 784 // REQUIRE 'minimal' and reject 'none'. Do not "harmonize" these
770 785 // — the two generations genuinely differ.
771 786 $map = array(
787 + // plan 45c22d (probed 2026-09-27): gpt-6-astra accepts only
788 + // low|medium|high; gpt-6-sol/-luna accept none|low|medium|high.
789 + // 'low' for all three, as for their 5.6 siblings.
790 + 'gpt-6-astra' => 'low',
791 + 'gpt-6-sol' => 'low',
792 + 'gpt-6-luna' => 'low',
772 793 'gpt-5.6-sol' => 'low',
773 794 'gpt-5.6-terra' => 'low',
774 795 'gpt-5.6-luna' => 'low',
775 796 'gpt-5.5' => 'low',
@@ -803,8 +824,14 @@
803 824 }
804 825 if ($model === 'gpt-5.4') {
805 826 return 'none';
806 827 }
828 + // plan 45c22d (probed 2026-09-27): gpt-6-astra accepts only
829 + // low|medium|high; -sol/-luna accept none|low|medium|high.
830 + // 'low' for all three, as for their 5.6 siblings.
831 + if (in_array($model, array('gpt-6-astra', 'gpt-6-sol', 'gpt-6-luna'), true)) {
832 + return 'low';
833 + }
807 834 if (in_array($model, array('gpt-5.6-sol', 'gpt-5.6-terra', 'gpt-5.6-luna'), true)) {
808 835 return 'low';
809 836 }
810 837 // plan-25b972: the original gpt-5 generation REQUIRES 'minimal'
@@ -860,10 +887,10 @@
860 887
861 888 public static function supports_temperature($model) {
862 889 $model = (string) $model;
863 890
864 - // gpt-5 family accepts only the default temperature (1).
865 - if (strpos($model, 'gpt-5') === 0) {
891 + // gpt-5 / gpt-6 families accept only the default temperature (1).
892 + if (self::is_modern_openai($model)) {
866 893 return false;
867 894 }
868 895
869 896 // Anthropic flagships that reject the temperature param outright.
@@ -892,7 +919,28 @@
892 919 * @param string $model Chat model id.
893 920 * @return string 'max_completion_tokens' | 'max_tokens'
894 921 */
895 922 public static function openai_token_param($model) {
896 - return strpos((string) $model, 'gpt-5') === 0 ? 'max_completion_tokens' : 'max_tokens';
923 + return self::is_modern_openai($model) ? 'max_completion_tokens' : 'max_tokens';
924 + }
925 +
926 + /**
927 + * plan 45c22d: ONE predicate for "a modern OpenAI chat model" — the
928 + * generations that take max_completion_tokens, only the default
929 + * temperature, and reasoning_effort. Every gate that used to test the
930 + * literal prefix gpt-5 routes through here, so the next generation is a
931 + * one-line change instead of nine edits. Before this, gpt-6-* ids fell
932 + * through all nine and were sent legacy parameters: a 400 on the first
933 + * message while looking fine in the picker.
934 + *
935 + * The frozen partial-upgrade fallbacks in the integrator, the content
936 + * generator and the editor assistant carry the same two-prefix test
937 + * inline (they exist for the window where this class is not loaded).
938 + *
939 + * @param string $model Chat model id.
940 + * @return bool
941 + */
942 + public static function is_modern_openai($model) {
943 + $model = (string) $model;
944 + return strpos($model, 'gpt-5') === 0 || strpos($model, 'gpt-6') === 0;
897 945 }
898 946 }