mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-03-30 02:09:43 +00:00
Merge pull request #918 from rickylin047/fix/responses-string-input
fix(openai): convert string input to array for Codex OAuth responses endpoint (fix #919)
This commit is contained in:
@@ -146,6 +146,22 @@ func applyCodexOAuthTransform(reqBody map[string]any, isCodexCLI bool, isCompact
|
||||
input = filterCodexInput(input, needsToolContinuation)
|
||||
reqBody["input"] = input
|
||||
result.Modified = true
|
||||
} else if inputStr, ok := reqBody["input"].(string); ok {
|
||||
// ChatGPT codex endpoint requires input to be a list, not a string.
|
||||
// Convert string input to the expected message array format.
|
||||
trimmed := strings.TrimSpace(inputStr)
|
||||
if trimmed != "" {
|
||||
reqBody["input"] = []any{
|
||||
map[string]any{
|
||||
"type": "message",
|
||||
"role": "user",
|
||||
"content": inputStr,
|
||||
},
|
||||
}
|
||||
} else {
|
||||
reqBody["input"] = []any{}
|
||||
}
|
||||
result.Modified = true
|
||||
}
|
||||
|
||||
return result
|
||||
|
||||
@@ -249,6 +249,50 @@ func TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions(t *t
|
||||
require.Equal(t, "old instructions", instructions)
|
||||
}
|
||||
|
||||
func TestApplyCodexOAuthTransform_StringInputConvertedToArray(t *testing.T) {
|
||||
reqBody := map[string]any{"model": "gpt-5.4", "input": "Hello, world!"}
|
||||
result := applyCodexOAuthTransform(reqBody, false, false)
|
||||
require.True(t, result.Modified)
|
||||
input, ok := reqBody["input"].([]any)
|
||||
require.True(t, ok)
|
||||
require.Len(t, input, 1)
|
||||
msg, ok := input[0].(map[string]any)
|
||||
require.True(t, ok)
|
||||
require.Equal(t, "message", msg["type"])
|
||||
require.Equal(t, "user", msg["role"])
|
||||
require.Equal(t, "Hello, world!", msg["content"])
|
||||
}
|
||||
|
||||
func TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray(t *testing.T) {
|
||||
reqBody := map[string]any{"model": "gpt-5.4", "input": ""}
|
||||
result := applyCodexOAuthTransform(reqBody, false, false)
|
||||
require.True(t, result.Modified)
|
||||
input, ok := reqBody["input"].([]any)
|
||||
require.True(t, ok)
|
||||
require.Len(t, input, 0)
|
||||
}
|
||||
|
||||
func TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray(t *testing.T) {
|
||||
reqBody := map[string]any{"model": "gpt-5.4", "input": " "}
|
||||
result := applyCodexOAuthTransform(reqBody, false, false)
|
||||
require.True(t, result.Modified)
|
||||
input, ok := reqBody["input"].([]any)
|
||||
require.True(t, ok)
|
||||
require.Len(t, input, 0)
|
||||
}
|
||||
|
||||
func TestApplyCodexOAuthTransform_StringInputWithToolsField(t *testing.T) {
|
||||
reqBody := map[string]any{
|
||||
"model": "gpt-5.4",
|
||||
"input": "Run the tests",
|
||||
"tools": []any{map[string]any{"type": "function", "name": "bash"}},
|
||||
}
|
||||
applyCodexOAuthTransform(reqBody, false, false)
|
||||
input, ok := reqBody["input"].([]any)
|
||||
require.True(t, ok)
|
||||
require.Len(t, input, 1)
|
||||
}
|
||||
|
||||
func TestIsInstructionsEmpty(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
|
||||
Reference in New Issue
Block a user