History

refactor(translator): rename `system_instruction` to `systemInstruction` for consistency

Luis Pater committed 3 months agov7.2.103

Commit cade44b1 parent 20f83ca2 files · +25 −8Browse files

Unified · Split

2 files
  1. internal/translator/gemini/claude/gemini_claude_request.go +2 −2
  2. internal/translator/gemini/claude/gemini_claude_request_test.go +23 −6
internal/translator/gemini/claude/gemini_claude_request.go+2−2
@@ -55,10 +55,10 @@ func ConvertClaudeRequestToGemini(modelName string, inputRawJSON []byte, _ bool) · 54 unmodified lines
5555 if len(systemParts) > 0 {
5656 systemInstruction := []byte(`{"role":"user","parts":[]}`)
5757 systemInstruction, _ = sjson.SetRawBytes(systemInstruction, "parts", translatorcommon.JoinRawArray(systemParts))
58− out, _ = sjson.SetRawBytes(out, "system_instruction", systemInstruction)
58+ out, _ = sjson.SetRawBytes(out, "systemInstruction", systemInstruction)
5959 }
6060 } else if systemResult.Type == gjson.String && !util.IsClaudeCodeAttributionSystemText(systemResult.String()) {
61− out, _ = sjson.SetBytes(out, "system_instruction.parts.-1.text", systemResult.String())
61+ out, _ = sjson.SetBytes(out, "systemInstruction.parts.-1.text", systemResult.String())
6262 }
6363
6464 // contents
internal/translator/gemini/claude/gemini_claude_request_test.go+23−6
@@ -41,6 +41,23 @@ func TestConvertClaudeRequestToGemini_ToolChoice_SpecificTool(t *testing.T) { · 40 unmodified lines
4141 }
4242 }
4343
44+func TestConvertClaudeRequestToGemini_StringSystemInstruction(t *testing.T) {
45+ inputJSON := []byte(`{
46+ "model": "gemini-3-flash-preview",
47+ "system": "Be concise",
48+ "messages": [{"role": "user", "content": "Hello"}]
49+ }`)
50+
51+ output := ConvertClaudeRequestToGemini("gemini-3-flash-preview", inputJSON, false)
52+
53+ if got := gjson.GetBytes(output, "systemInstruction.parts.0.text").String(); got != "Be concise" {
54+ t.Fatalf("Expected systemInstruction text %q, got %q", "Be concise", got)
55+ }
56+ if gjson.GetBytes(output, "system_instruction").Exists() {
57+ t.Fatalf("Legacy system_instruction field should not be emitted: %s", output)
58+ }
59+}
60+
4461 func TestConvertClaudeRequestToGemini_ImageContent(t *testing.T) {
4562 inputJSON := []byte(`{
4663 "model": "gemini-3-flash-preview",
@@ -92,9 +109,9 @@ func TestConvertClaudeRequestToGemini_StripsClaudeCodeAttribution(t *testing.T) · 45 unmodified lines
92109
93110 output := ConvertClaudeRequestToGemini("gemini-3-flash-preview", inputJSON, false)
94111
95− parts := gjson.GetBytes(output, "system_instruction.parts").Array()
112+ parts := gjson.GetBytes(output, "systemInstruction.parts").Array()
96113 if len(parts) != 2 {
97− t.Fatalf("Expected 2 system parts after attribution strip, got %d: %s", len(parts), gjson.GetBytes(output, "system_instruction.parts").Raw)
114+ t.Fatalf("Expected 2 system parts after attribution strip, got %d: %s", len(parts), gjson.GetBytes(output, "systemInstruction.parts").Raw)
98115 }
99116 if got := parts[0].Get("text").String(); got != "You are a Claude agent, built on Anthropic's Claude Agent SDK." {
100117 t.Fatalf("Unexpected first system part: %q", got)
@@ -102,8 +119,8 @@ func TestConvertClaudeRequestToGemini_StripsClaudeCodeAttribution(t *testing.T) · 1 unmodified line
102119 if got := parts[1].Get("text").String(); got != "User system prompt" {
103120 t.Fatalf("Unexpected second system part: %q", got)
104121 }
105− if gjson.GetBytes(output, `system_instruction.parts.#(text%"x-anthropic-billing-header:*")`).Exists() {
106− t.Fatalf("Claude Code attribution block was forwarded: %s", gjson.GetBytes(output, "system_instruction.parts").Raw)
122+ if gjson.GetBytes(output, `systemInstruction.parts.#(text%"x-anthropic-billing-header:*")`).Exists() {
123+ t.Fatalf("Claude Code attribution block was forwarded: %s", gjson.GetBytes(output, "systemInstruction.parts").Raw)
107124 }
108125 }
109126
@@ -144,9 +161,9 @@ func TestConvertClaudeRequestToGemini_ConvertsMessageSystemRoleToUserContent(t * · 34 unmodified lines
144161 t.Fatalf("Unexpected array message-level system content text: %q", got)
145162 }
146163
147− parts := gjson.GetBytes(output, "system_instruction.parts").Array()
164+ parts := gjson.GetBytes(output, "systemInstruction.parts").Array()
148165 if len(parts) != 1 {
149− t.Fatalf("Expected only top-level system parts, got %d: %s", len(parts), gjson.GetBytes(output, "system_instruction.parts").Raw)
166+ t.Fatalf("Expected only top-level system parts, got %d: %s", len(parts), gjson.GetBytes(output, "systemInstruction.parts").Raw)
150167 }
151168 if got := parts[0].Get("text").String(); got != "Top-level rules" {
152169 t.Fatalf("Unexpected first system part: %q", got)