mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-16 07:33:06 +08:00
fix(antigravity): preserve tool_result images, native Gemini functionCall/thoughtSignature, and composite /v1beta routing
This commit is contained in:
@@ -216,3 +216,75 @@ func TestShouldFallbackGeminiModel_DelegatesScopeFallback(t *testing.T) {
|
||||
}
|
||||
require.True(t, shouldFallbackGeminiModel("gemini-future-model", res))
|
||||
}
|
||||
|
||||
func TestGeminiV1BetaGetModel_CompositeAntigravityRoute(t *testing.T) {
|
||||
gin.SetMode(gin.TestMode)
|
||||
|
||||
t.Run("composite route to antigravity gemini model succeeds", func(t *testing.T) {
|
||||
rec := httptest.NewRecorder()
|
||||
c, _ := gin.CreateTestContext(rec)
|
||||
req := httptest.NewRequest(http.MethodGet, "/v1beta/models/gemini-4-argon", nil)
|
||||
req = req.WithContext(service.WithCompositeRouteDecision(req.Context(), service.CompositeRouteDecision{
|
||||
Matched: true,
|
||||
TargetPlatform: service.PlatformAntigravity,
|
||||
UpstreamModel: "gemini-4-argon-high",
|
||||
}))
|
||||
c.Request = req
|
||||
c.Params = gin.Params{{Key: "model", Value: "gemini-4-argon"}}
|
||||
groupID := int64(4)
|
||||
c.Set(string(middleware.ContextKeyAPIKey), &service.APIKey{
|
||||
ID: 1,
|
||||
GroupID: &groupID,
|
||||
Group: &service.Group{ID: groupID, Platform: service.PlatformComposite},
|
||||
})
|
||||
|
||||
(&GatewayHandler{}).GeminiV1BetaGetModel(c)
|
||||
require.Equal(t, http.StatusOK, rec.Code, rec.Body.String())
|
||||
require.Contains(t, rec.Body.String(), "models/gemini-4-argon-high")
|
||||
})
|
||||
|
||||
t.Run("composite route to antigravity claude model is rejected on v1beta", func(t *testing.T) {
|
||||
rec := httptest.NewRecorder()
|
||||
c, _ := gin.CreateTestContext(rec)
|
||||
req := httptest.NewRequest(http.MethodGet, "/v1beta/models/claude-sonnet-5-5-high", nil)
|
||||
req = req.WithContext(service.WithCompositeRouteDecision(req.Context(), service.CompositeRouteDecision{
|
||||
Matched: true,
|
||||
TargetPlatform: service.PlatformAntigravity,
|
||||
UpstreamModel: "claude-sonnet-5-5-high",
|
||||
}))
|
||||
c.Request = req
|
||||
c.Params = gin.Params{{Key: "model", Value: "claude-sonnet-5-5-high"}}
|
||||
groupID := int64(4)
|
||||
c.Set(string(middleware.ContextKeyAPIKey), &service.APIKey{
|
||||
ID: 1,
|
||||
GroupID: &groupID,
|
||||
Group: &service.Group{ID: groupID, Platform: service.PlatformComposite},
|
||||
})
|
||||
|
||||
(&GatewayHandler{}).GeminiV1BetaGetModel(c)
|
||||
require.Equal(t, http.StatusBadRequest, rec.Code, rec.Body.String())
|
||||
})
|
||||
|
||||
t.Run("composite route to antigravity claude model is rejected on generateContent", func(t *testing.T) {
|
||||
rec := httptest.NewRecorder()
|
||||
c, _ := gin.CreateTestContext(rec)
|
||||
req := httptest.NewRequest(http.MethodPost, "/v1beta/models/claude-sonnet-5-5-high:generateContent", nil)
|
||||
req = req.WithContext(service.WithCompositeRouteDecision(req.Context(), service.CompositeRouteDecision{
|
||||
Matched: true,
|
||||
TargetPlatform: service.PlatformAntigravity,
|
||||
UpstreamModel: "claude-sonnet-5-5-high",
|
||||
}))
|
||||
c.Request = req
|
||||
c.Params = gin.Params{{Key: "modelAction", Value: "/claude-sonnet-5-5-high:generateContent"}}
|
||||
groupID := int64(4)
|
||||
c.Set(string(middleware.ContextKeyAPIKey), &service.APIKey{
|
||||
ID: 1,
|
||||
GroupID: &groupID,
|
||||
Group: &service.Group{ID: groupID, Platform: service.PlatformComposite},
|
||||
})
|
||||
c.Set(string(middleware.ContextKeyUser), middleware.AuthSubject{UserID: 1, Concurrency: 1})
|
||||
|
||||
(&GatewayHandler{}).GeminiV1BetaModels(c)
|
||||
require.Equal(t, http.StatusBadRequest, rec.Code, rec.Body.String())
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user