From 9532ba40f37dd4bbcf235bd6f5e1b83357c95655 Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 20 May 2026 12:20:33 +0400 Subject: [PATCH] v2.2.0: per-provider reasoning controls (on/off + effort level) - Add Reasoning On/Off toggle and Effort selector in endpoint editor - Proxy sends enable_thinking=false when reasoning is OFF - Proxy sends reasoning_effort level when reasoning is ON - Strip reasoning_content from output, force max_tokens=64000 minimum - Fixes Crof mimo-v2.5-pro and similar reasoning model token exhaustion --- CHANGELOG.md | 12 ++++++++++++ codex-launcher_2.1.3_all.deb | Bin 24992 -> 0 bytes codex-launcher_2.2.0_all.deb | Bin 0 -> 23776 bytes src/codex-launcher-gui | 35 +++++++++++++++++++++++++++++++++-- src/translate-proxy.py | 5 +++++ 5 files changed, 50 insertions(+), 2 deletions(-) delete mode 100644 codex-launcher_2.1.3_all.deb create mode 100644 codex-launcher_2.2.0_all.deb diff --git a/CHANGELOG.md b/CHANGELOG.md index ace2e99..72c44cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## v2.2.0 (2026-05-20) + +- **Added per-provider Reasoning controls in endpoint editor** + - Reasoning On/Off toggle — disable reasoning for models that exhaust output tokens (e.g., Crof mimo-v2.5-pro) + - Reasoning Effort selector: None, Minimal, Low, Medium, High, Max + - When reasoning is OFF: sends `enable_thinking=false` + `reasoning_effort=none` to upstream API + - When reasoning is ON: sends user-selected effort level (default: Medium) + - Settings stored per-endpoint, passed through proxy config to upstream requests +- Strip `reasoning_content` from proxy output — Codex doesn't use it, avoids token waste +- Force `max_tokens=64000` minimum for openai-compat providers — room for both reasoning and content +- Inspired by unsloth's reasoning control patterns for Qwen/GPT-OSS models + ## v2.1.3 (2026-05-19) - **Fixed Crof mimo-v2.5-pro stopping mid-response (finish_reason=length)** diff --git a/codex-launcher_2.1.3_all.deb b/codex-launcher_2.1.3_all.deb deleted file mode 100644 index 7245e9c71f169493c7ef57e126bd942517ef00fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24992 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 diff --git a/codex-launcher_2.2.0_all.deb b/codex-launcher_2.2.0_all.deb new file mode 100644 index 0000000000000000000000000000000000000000..65a01f5ac8e2a53d78fc513726dab3e1f9756996 GIT binary patch literal 23776 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 literal 0 HcmV?d00001 diff --git a/src/codex-launcher-gui b/src/codex-launcher-gui index f9de114..3f8dad2 100755 --- a/src/codex-launcher-gui +++ b/src/codex-launcher-gui @@ -24,6 +24,15 @@ model_catalog_json = "" """ CHANGELOG = [ + ("2.2.0", "2026-05-20", [ + "Added per-provider Reasoning On/Off toggle in endpoint editor", + "Added Reasoning Effort level per provider: None, Minimal, Low, Medium, High, Max", + "When reasoning is OFF: sends enable_thinking=false + reasoning_effort=none to upstream API", + "When reasoning is ON: sends user-selected effort level (default: Medium)", + "Fixes Crof mimo-v2.5-pro and similar reasoning models exhausting output tokens", + "Strip reasoning_content from proxy output — Codex doesn't use it", + "Force max_tokens=64000 minimum for openai-compat providers", + ]), ("2.1.3", "2026-05-19", [ "Fixed Crof mimo-v2.5-pro stopping: reasoning_content exhausted all output tokens", "Strip reasoning_content from proxy output — Codex doesn't use it, avoids token waste", @@ -434,6 +443,8 @@ def _start_proxy_for(endpoint, logfn): "target_url": normalize_base_url(endpoint["base_url"]), "api_key": endpoint["api_key"], "cc_version": endpoint.get("cc_version", ""), + "reasoning_enabled": endpoint.get("reasoning_enabled", True), + "reasoning_effort": endpoint.get("reasoning_effort", "medium"), "models": [{"id": m, "object": "model", "created": 1700000000, "owned_by": endpoint["name"]} for m in endpoint.get("models", [])], } @@ -532,7 +543,7 @@ class LauncherWin(Gtk.Window): # header row hdr = Gtk.Box(spacing=8) vbox.pack_start(hdr, False, False, 0) - lbl = Gtk.Label(label="Codex Launcher v2.1.3") + lbl = Gtk.Label(label="Codex Launcher v2.2.0") lbl.set_use_markup(True) hdr.pack_start(lbl, False, False, 0) changelog_btn = Gtk.Button(label="Changelog") @@ -1371,7 +1382,7 @@ class EditEndpointDialog(Gtk.Dialog): "base_url": "", "api_key": "", "default_model": "", "models": [], "provider_preset": "Custom", } - self.set_default_size(480, 420) + self.set_default_size(480, 520) area = self.get_content_area() area.set_spacing(6) @@ -1419,6 +1430,20 @@ class EditEndpointDialog(Gtk.Dialog): self._entry_cc_ver.set_placeholder_text("e.g. 0.26.8 (Command Code only)") add_row(5, "CC Version:", self._entry_cc_ver) + self._switch_reasoning = Gtk.Switch() + self._switch_reasoning.set_active(self._data.get("reasoning_enabled", True)) + self._switch_reasoning.connect("notify::active", lambda *a: self._on_reasoning_toggled()) + add_row(6, "Reasoning:", self._switch_reasoning) + + self._combo_effort = Gtk.ComboBoxText() + for ev, el in [("none", "None"), ("minimal", "Minimal"), ("low", "Low"), + ("medium", "Medium"), ("high", "High"), ("max", "Max")]: + self._combo_effort.append(ev, el) + saved_effort = self._data.get("reasoning_effort", "medium") + self._combo_effort.set_active_id(saved_effort if saved_effort in ("none","minimal","low","medium","high","max") else "medium") + add_row(7, "Effort:", self._combo_effort) + self._on_reasoning_toggled() + # Models mlbl = Gtk.Label(label="Models:", xalign=0) area.pack_start(mlbl, False, False, 4) @@ -1522,6 +1547,10 @@ class EditEndpointDialog(Gtk.Dialog): if initial and self._data.get("models"): self._refresh_default_combo(self._data.get("default_model", "")) + def _on_reasoning_toggled(self, *_): + active = self._switch_reasoning.get_active() + self._combo_effort.set_sensitive(active) + def _remove_model(self, path): current = self._combo_default.get_active_text() self._model_store.remove(self._model_store.get_iter(path)) @@ -1620,6 +1649,8 @@ class EditEndpointDialog(Gtk.Dialog): cc_ver = self._entry_cc_ver.get_text().strip() if cc_ver: new_ep["cc_version"] = cc_ver + new_ep["reasoning_enabled"] = self._switch_reasoning.get_active() + new_ep["reasoning_effort"] = self._combo_effort.get_active_id() or "medium" new_ep["base_url"] = normalize_base_url(new_ep["base_url"]) # Update or append diff --git a/src/translate-proxy.py b/src/translate-proxy.py index ffb2d33..bfcd59b 100755 --- a/src/translate-proxy.py +++ b/src/translate-proxy.py @@ -81,6 +81,8 @@ TARGET_URL = CONFIG["target_url"].rstrip("/") API_KEY = CONFIG["api_key"] MODELS = CONFIG["models"] CC_VERSION = CONFIG.get("cc_version", "") +REASONING_ENABLED = CONFIG.get("reasoning_enabled", True) +REASONING_EFFORT = CONFIG.get("reasoning_effort", "medium") # ═══════════════════════════════════════════════════════════════════ # Shared helpers @@ -889,6 +891,9 @@ class Handler(http.server.BaseHTTPRequestHandler): if body.get("tool_choice"): chat_body["tool_choice"] = body["tool_choice"] chat_body["stream"] = stream + if not REASONING_ENABLED: + chat_body["enable_thinking"] = False + chat_body["reasoning_effort"] = REASONING_EFFORT if REASONING_ENABLED else "none" target = upstream_target(TARGET_URL, "/chat/completions") fwd = forwarded_headers(self.headers, {