Skip to content

Commit 33983b6

Browse files
committed
refactor(executor): consolidate Codex request translation logic
- Introduced `translateCodexRequestPair` to simplify and reuse translation logic for handling original and modified payloads. - Updated relevant methods to use the new function. - Added unit tests to cover payload reuse and differentiation scenarios.
1 parent 3a54fb7 commit 33983b6

3 files changed

Lines changed: 73 additions & 8 deletions

File tree

internal/runtime/executor/codex_executor.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,16 @@ func NewCodexExecutor(cfg *config.Config) *CodexExecutor { return &CodexExecutor
207207

208208
func (e *CodexExecutor) Identifier() string { return "codex" }
209209

210+
func translateCodexRequestPair(from, to sdktranslator.Format, model string, originalPayload, payload []byte, stream bool) ([]byte, []byte) {
211+
if bytes.Equal(originalPayload, payload) {
212+
body := sdktranslator.TranslateRequest(from, to, model, payload, stream)
213+
return body, body
214+
}
215+
originalTranslated := sdktranslator.TranslateRequest(from, to, model, originalPayload, stream)
216+
body := sdktranslator.TranslateRequest(from, to, model, payload, stream)
217+
return originalTranslated, body
218+
}
219+
210220
// PrepareRequest injects Codex credentials into the outgoing HTTP request.
211221
func (e *CodexExecutor) PrepareRequest(req *http.Request, auth *cliproxyauth.Auth) error {
212222
if req == nil {
@@ -264,8 +274,7 @@ func (e *CodexExecutor) Execute(ctx context.Context, auth *cliproxyauth.Auth, re
264274
originalPayloadSource = opts.OriginalRequest
265275
}
266276
originalPayload := originalPayloadSource
267-
originalTranslated := sdktranslator.TranslateRequest(from, to, baseModel, originalPayload, false)
268-
body := sdktranslator.TranslateRequest(from, to, baseModel, req.Payload, false)
277+
originalTranslated, body := translateCodexRequestPair(from, to, baseModel, originalPayload, req.Payload, false)
269278

270279
body, err = thinking.ApplyThinking(body, req.Model, from.String(), to.String(), e.Identifier())
271280
if err != nil {
@@ -427,8 +436,7 @@ func (e *CodexExecutor) executeCompact(ctx context.Context, auth *cliproxyauth.A
427436
originalPayloadSource = opts.OriginalRequest
428437
}
429438
originalPayload := originalPayloadSource
430-
originalTranslated := sdktranslator.TranslateRequest(from, to, baseModel, originalPayload, false)
431-
body := sdktranslator.TranslateRequest(from, to, baseModel, req.Payload, false)
439+
originalTranslated, body := translateCodexRequestPair(from, to, baseModel, originalPayload, req.Payload, false)
432440

433441
body, err = thinking.ApplyThinking(body, req.Model, from.String(), to.String(), e.Identifier())
434442
if err != nil {
@@ -528,8 +536,7 @@ func (e *CodexExecutor) ExecuteStream(ctx context.Context, auth *cliproxyauth.Au
528536
originalPayloadSource = opts.OriginalRequest
529537
}
530538
originalPayload := originalPayloadSource
531-
originalTranslated := sdktranslator.TranslateRequest(from, to, baseModel, originalPayload, true)
532-
body := sdktranslator.TranslateRequest(from, to, baseModel, req.Payload, true)
539+
originalTranslated, body := translateCodexRequestPair(from, to, baseModel, originalPayload, req.Payload, true)
533540

534541
body, err = thinking.ApplyThinking(body, req.Model, from.String(), to.String(), e.Identifier())
535542
if err != nil {
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package executor
2+
3+
import (
4+
"bytes"
5+
"sync/atomic"
6+
"testing"
7+
8+
sdktranslator "github.com/router-for-me/CLIProxyAPI/v7/sdk/translator"
9+
)
10+
11+
func TestTranslateCodexRequestPairReusesEqualPayload(t *testing.T) {
12+
from := sdktranslator.Format("codex-test-from-equal")
13+
to := sdktranslator.Format("codex-test-to-equal")
14+
var calls int32
15+
sdktranslator.Register(from, to, func(model string, rawJSON []byte, stream bool) []byte {
16+
atomic.AddInt32(&calls, 1)
17+
if model != "test-model" {
18+
t.Errorf("model = %q, want test-model", model)
19+
}
20+
if !stream {
21+
t.Error("stream = false, want true")
22+
}
23+
return append([]byte(nil), rawJSON...)
24+
}, sdktranslator.ResponseTransform{})
25+
26+
payload := []byte(`{"model":"test-model","input":[{"role":"user"}]}`)
27+
originalTranslated, body := translateCodexRequestPair(from, to, "test-model", payload, bytes.Clone(payload), true)
28+
29+
if gotCalls := atomic.LoadInt32(&calls); gotCalls != 1 {
30+
t.Fatalf("TranslateRequest calls = %d, want 1", gotCalls)
31+
}
32+
if !bytes.Equal(originalTranslated, body) {
33+
t.Fatalf("translated payloads differ: original=%s body=%s", originalTranslated, body)
34+
}
35+
}
36+
37+
func TestTranslateCodexRequestPairTranslatesDifferentPayloads(t *testing.T) {
38+
from := sdktranslator.Format("codex-test-from-different")
39+
to := sdktranslator.Format("codex-test-to-different")
40+
var calls int32
41+
sdktranslator.Register(from, to, func(_ string, rawJSON []byte, _ bool) []byte {
42+
atomic.AddInt32(&calls, 1)
43+
return append([]byte(nil), rawJSON...)
44+
}, sdktranslator.ResponseTransform{})
45+
46+
originalPayload := []byte(`{"model":"test-model","input":[{"role":"system"}]}`)
47+
payload := []byte(`{"model":"test-model","input":[{"role":"user"}]}`)
48+
originalTranslated, body := translateCodexRequestPair(from, to, "test-model", originalPayload, payload, false)
49+
50+
if gotCalls := atomic.LoadInt32(&calls); gotCalls != 2 {
51+
t.Fatalf("TranslateRequest calls = %d, want 2", gotCalls)
52+
}
53+
if !bytes.Equal(originalTranslated, originalPayload) {
54+
t.Fatalf("original translated = %s, want %s", originalTranslated, originalPayload)
55+
}
56+
if !bytes.Equal(body, payload) {
57+
t.Fatalf("body = %s, want %s", body, payload)
58+
}
59+
}

internal/runtime/executor/codex_websockets_executor.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,7 @@ func (e *CodexWebsocketsExecutor) Execute(ctx context.Context, auth *cliproxyaut
194194
originalPayloadSource = opts.OriginalRequest
195195
}
196196
originalPayload := originalPayloadSource
197-
originalTranslated := sdktranslator.TranslateRequest(from, to, baseModel, originalPayload, false)
198-
body := sdktranslator.TranslateRequest(from, to, baseModel, req.Payload, false)
197+
originalTranslated, body := translateCodexRequestPair(from, to, baseModel, originalPayload, req.Payload, false)
199198

200199
body, err = thinking.ApplyThinking(body, req.Model, from.String(), to.String(), e.Identifier())
201200
if err != nil {

0 commit comments

Comments
 (0)