**feat(executor): add model alias mapping and improve Antigravity payload handling**

- Introduced `modelName2Alias` and `alias2ModelName` functions for mapping between model names and aliases.
- Improved Antigravity payload transformation to include alias-to-model name conversion.
- Enhanced processing for Claude Sonnet models to adjust template parameters based on schema presence.
This commit is contained in:
Luis Pater
2025-11-23 03:16:14 +08:00
parent 4307f08bbc
commit 8d23ffc873

View File

@@ -269,13 +269,16 @@ func FetchAntigravityModels(ctx context.Context, auth *cliproxyauth.Auth, cfg *c
now := time.Now().Unix() now := time.Now().Unix()
models := make([]*registry.ModelInfo, 0, len(result.Map())) models := make([]*registry.ModelInfo, 0, len(result.Map()))
for id := range result.Map() { for id := range result.Map() {
models = append(models, &registry.ModelInfo{ id = modelName2Alias(id)
ID: id, if id != "" {
Object: "model", models = append(models, &registry.ModelInfo{
Created: now, ID: id,
OwnedBy: antigravityAuthType, Object: "model",
Type: antigravityAuthType, Created: now,
}) OwnedBy: antigravityAuthType,
Type: antigravityAuthType,
})
}
} }
return models return models
} }
@@ -389,6 +392,7 @@ func (e *AntigravityExecutor) buildRequest(ctx context.Context, auth *cliproxyau
} }
payload = geminiToAntigravity(modelName, payload) payload = geminiToAntigravity(modelName, payload)
payload, _ = sjson.SetBytes(payload, "model", alias2ModelName(modelName))
httpReq, errReq := http.NewRequestWithContext(ctx, http.MethodPost, requestURL.String(), bytes.NewReader(payload)) httpReq, errReq := http.NewRequestWithContext(ctx, http.MethodPost, requestURL.String(), bytes.NewReader(payload))
if errReq != nil { if errReq != nil {
return nil, errReq return nil, errReq
@@ -553,6 +557,20 @@ func geminiToAntigravity(modelName string, payload []byte) []byte {
return true return true
}) })
if strings.HasPrefix(modelName, "claude-sonnet-") {
gjson.Get(template, "request.tools").ForEach(func(key, tool gjson.Result) bool {
tool.Get("functionDeclarations").ForEach(func(funKey, funcDecl gjson.Result) bool {
if funcDecl.Get("parametersJsonSchema").Exists() {
template, _ = sjson.SetRaw(template, fmt.Sprintf("request.tools.%d.functionDeclarations.%d.parameters", key.Int(), funKey.Int()), funcDecl.Get("parametersJsonSchema").Raw)
template, _ = sjson.Delete(template, fmt.Sprintf("request.tools.%d.functionDeclarations.%d.parameters.$schema", key.Int(), funKey.Int()))
template, _ = sjson.Delete(template, fmt.Sprintf("request.tools.%d.functionDeclarations.%d.parametersJsonSchema", key.Int(), funKey.Int()))
}
return true
})
return true
})
}
return []byte(template) return []byte(template)
} }
@@ -573,3 +591,39 @@ func generateProjectID() string {
randomPart := strings.ToLower(uuid.NewString())[:5] randomPart := strings.ToLower(uuid.NewString())[:5]
return adj + "-" + noun + "-" + randomPart return adj + "-" + noun + "-" + randomPart
} }
func modelName2Alias(modelName string) string {
switch modelName {
case "rev19-uic3-1p":
return "gemini-2.5-computer-use-preview-10-2025"
case "gemini-3-pro-image":
return "gemini-3-pro-image-preview"
case "gemini-3-pro-high":
return "gemini-3-pro-preview"
case "claude-sonnet-4-5":
return "gemini-claude-sonnet-4-5"
case "claude-sonnet-4-5-thinking":
return "gemini-claude-sonnet-4-5-thinking"
case "chat_20706", "chat_23310", "gemini-2.5-flash-thinking", "gemini-3-pro-low":
return ""
default:
return modelName
}
}
func alias2ModelName(modelName string) string {
switch modelName {
case "gemini-2.5-computer-use-preview-10-2025":
return "rev19-uic3-1p"
case "gemini-3-pro-image-preview":
return "gemini-3-pro-image"
case "gemini-3-pro-preview":
return "gemini-3-pro-high"
case "gemini-claude-sonnet-4-5":
return "claude-sonnet-4-5"
case "gemini-claude-sonnet-4-5-thinking":
return "claude-sonnet-4-5-thinking"
default:
return modelName
}
}