@@ -1512,3 +1512,96 @@ func TestApplyThinkingEnabledFallback(t *testing.T) {
15121512 })
15131513 }
15141514}
1515+
1516+ func TestNormalizeGLMOpenAIReasoningEffort (t * testing.T ) {
1517+ tests := []struct {
1518+ name string
1519+ model string
1520+ input string
1521+ wantApplied bool
1522+ wantPath string
1523+ wantValue string
1524+ wantUnchanged bool
1525+ }{
1526+ {
1527+ name : "flat xhigh maps to max" ,
1528+ model : "glm-5.2" ,
1529+ input : `{"model":"glm-5.2","reasoning_effort":"xhigh","messages":[]}` ,
1530+ wantApplied : true ,
1531+ wantPath : "reasoning_effort" ,
1532+ wantValue : "max" ,
1533+ },
1534+ {
1535+ name : "flat x-high maps to max" ,
1536+ model : "GLM-5.2" ,
1537+ input : `{"model":"glm-5.2","reasoning_effort":"x-high","messages":[]}` ,
1538+ wantApplied : true ,
1539+ wantPath : "reasoning_effort" ,
1540+ wantValue : "max" ,
1541+ },
1542+ {
1543+ name : "flat ultracode maps to max" ,
1544+ model : "glm-5.2" ,
1545+ input : `{"model":"glm-5.2","reasoning_effort":"ultracode","messages":[]}` ,
1546+ wantApplied : true ,
1547+ wantPath : "reasoning_effort" ,
1548+ wantValue : "max" ,
1549+ },
1550+ {
1551+ name : "flat medium maps to high" ,
1552+ model : "glm-5.2" ,
1553+ input : `{"model":"glm-5.2","reasoning_effort":"medium","messages":[]}` ,
1554+ wantApplied : true ,
1555+ wantPath : "reasoning_effort" ,
1556+ wantValue : "high" ,
1557+ },
1558+ {
1559+ name : "nested high case-normalizes" ,
1560+ model : "glm-5.2" ,
1561+ input : `{"model":"glm-5.2","reasoning":{"effort":"HIGH"},"messages":[]}` ,
1562+ wantApplied : true ,
1563+ wantPath : "reasoning.effort" ,
1564+ wantValue : "high" ,
1565+ },
1566+ {
1567+ name : "native max unchanged" ,
1568+ model : "glm-5.2" ,
1569+ input : `{"model":"glm-5.2","reasoning_effort":"max","messages":[]}` ,
1570+ wantApplied : false ,
1571+ wantUnchanged : true ,
1572+ },
1573+ {
1574+ name : "non glm unchanged" ,
1575+ model : "deepseek-v4-pro" ,
1576+ input : `{"model":"deepseek-v4-pro","reasoning_effort":"xhigh","messages":[]}` ,
1577+ wantApplied : false ,
1578+ wantUnchanged : true ,
1579+ },
1580+ {
1581+ name : "missing effort unchanged" ,
1582+ model : "glm-5.2" ,
1583+ input : `{"model":"glm-5.2","messages":[]}` ,
1584+ wantApplied : false ,
1585+ wantUnchanged : true ,
1586+ },
1587+ {
1588+ name : "unknown effort unchanged" ,
1589+ model : "glm-5.2" ,
1590+ input : `{"model":"glm-5.2","reasoning_effort":"banana","messages":[]}` ,
1591+ wantApplied : false ,
1592+ wantUnchanged : true ,
1593+ },
1594+ }
1595+
1596+ for _ , tt := range tests {
1597+ t .Run (tt .name , func (t * testing.T ) {
1598+ got , applied := NormalizeGLMOpenAIReasoningEffort ([]byte (tt .input ), tt .model )
1599+ require .Equal (t , tt .wantApplied , applied )
1600+ if tt .wantUnchanged {
1601+ require .Equal (t , tt .input , string (got ))
1602+ return
1603+ }
1604+ require .Equal (t , tt .wantValue , gjson .GetBytes (got , tt .wantPath ).String ())
1605+ })
1606+ }
1607+ }
0 commit comments