From ccc305479309e0644380765f99b2e453498ea520 Mon Sep 17 00:00:00 2001 From: admin Date: Tue, 19 May 2026 17:12:07 +0400 Subject: [PATCH] v2.1.1: fix developer role mapping for DeepSeek and other providers --- CHANGELOG.md | 7 +++++++ codex-launcher_2.1.0_all.deb | Bin 21150 -> 0 bytes codex-launcher_2.1.1_all.deb | Bin 0 -> 21324 bytes src/codex-launcher-gui | 8 +++++++- src/translate-proxy.py | 13 ++++++++++++- 5 files changed, 26 insertions(+), 2 deletions(-) delete mode 100644 codex-launcher_2.1.0_all.deb create mode 100644 codex-launcher_2.1.1_all.deb diff --git a/CHANGELOG.md b/CHANGELOG.md index d5cef71..e602dc3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## v2.1.1 (2026-05-19) + +- Fixed proxy: map `developer` role to `system` for Chat Completions providers (DeepSeek, Qwen, etc.) +- Fixed proxy: map `developer` role to `user` for Anthropic providers +- Forward `instructions` field from Responses API as system message/param +- Fixes "unknown variant `developer`" error from providers like DeepSeek + ## v2.1.0 (2026-05-19) - Added Codex auth status detection (reads `codex login status`) diff --git a/codex-launcher_2.1.0_all.deb b/codex-launcher_2.1.0_all.deb deleted file mode 100644 index 7bee63b44e8094cb6ea457dc559b63ff2f481a15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21150 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 aUudv@z+5Q-;ARC5{B^PE8UtWD-D literal 0 HcmV?d00001 diff --git a/src/codex-launcher-gui b/src/codex-launcher-gui index 9170285..ef10be8 100755 --- a/src/codex-launcher-gui +++ b/src/codex-launcher-gui @@ -24,6 +24,12 @@ model_catalog_json = "" """ CHANGELOG = [ + ("2.1.1", "2026-05-19", [ + "Fixed proxy: map 'developer' role to 'system' for Chat Completions providers", + "Fixed proxy: map 'developer' role to 'user' for Anthropic providers", + "Forward 'instructions' field from Responses API as system message/param", + "Fixes DeepSeek and other providers rejecting unknown 'developer' role", + ]), ("2.1.0", "2026-05-19", [ "Added Codex auth status detection (codex login status)", "Added Re-login button to re-authenticate via codex login", @@ -494,7 +500,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.0") + lbl = Gtk.Label(label="Codex Launcher v2.1.1") lbl.set_use_markup(True) hdr.pack_start(lbl, False, False, 0) changelog_btn = Gtk.Button(label="Changelog") diff --git a/src/translate-proxy.py b/src/translate-proxy.py index 5f1d632..adb1e05 100755 --- a/src/translate-proxy.py +++ b/src/translate-proxy.py @@ -151,6 +151,8 @@ def oa_input_to_messages(input_data): t = item.get("type") if t == "message": role = item.get("role", "user") + if role == "developer": + role = "system" text = "" for part in item.get("content", []): pt = part.get("type", "") @@ -323,6 +325,8 @@ def an_input_to_messages(input_data): t = item.get("type") if t == "message": role = item.get("role", "user") + if role == "developer": + role = "user" text = "" for part in item.get("content", []): pt = part.get("type", "") @@ -532,7 +536,11 @@ class Handler(http.server.BaseHTTPRequestHandler): def _handle_openai_compat(self, body, model, stream): input_data = body.get("input", "") - chat_body = {"model": model, "messages": oa_input_to_messages(input_data)} + messages = oa_input_to_messages(input_data) + instructions = body.get("instructions", "").strip() + if instructions: + messages.insert(0, {"role": "system", "content": instructions}) + chat_body = {"model": model, "messages": messages} for k in ("temperature", "top_p", "max_output_tokens"): if k in body: chat_body["max_tokens" if k == "max_output_tokens" else k] = body[k] @@ -562,6 +570,9 @@ class Handler(http.server.BaseHTTPRequestHandler): input_data = body.get("input", "") an_body = {"model": model, "messages": an_input_to_messages(input_data), "max_tokens": body.get("max_output_tokens", 8192)} + instructions = body.get("instructions", "").strip() + if instructions: + an_body["system"] = instructions for k in ("temperature", "top_p"): if k in body: an_body[k] = body[k]