mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-12 22:20:19 +08:00
对齐原生 Antigravity 控制面与显示模型
This commit is contained in:
@@ -2280,7 +2280,10 @@ mod tests {
|
||||
"trace-openai-chat-antigravity"
|
||||
);
|
||||
assert_eq!(payload.provider_request_body["model"], "gemini-2.5-pro");
|
||||
assert_eq!(payload.provider_request_body["userAgent"], "antigravity");
|
||||
assert_eq!(
|
||||
payload.provider_request_body["userAgent"],
|
||||
"antigravity/cli/1.0.16 (aidev_client; os_type=linux; arch=arm64; auth_method=consumer)"
|
||||
);
|
||||
assert_eq!(payload.provider_request_body["requestType"], "agent");
|
||||
assert!(payload.provider_request_body.get("contents").is_none());
|
||||
assert!(payload.provider_request_body["request"]
|
||||
|
||||
@@ -21,11 +21,13 @@ const AI_POST_ROUTE_PATTERNS: &[&str] = &[
|
||||
"/v1beta/interactions",
|
||||
"/v1internal:loadCodeAssist",
|
||||
"/v1internal:fetchAvailableModels",
|
||||
"/v1internal:retrieveUserQuotaSummary",
|
||||
"/v1internal:fetchUserInfo",
|
||||
"/v1internal:fetchAdminControls",
|
||||
"/v1internal:setUserSettings",
|
||||
"/v1internal:listExperiments",
|
||||
"/v1internal:recordCodeAssistMetrics",
|
||||
"/v1internal:writeTrajectoryAcls",
|
||||
"/v1internal:streamGenerateContent",
|
||||
];
|
||||
|
||||
|
||||
@@ -141,11 +141,13 @@ pub(crate) const RUST_FRONTDOOR_OWNED_ROUTE_PATTERNS: &[&str] = &[
|
||||
"/v1beta/files/{path...}",
|
||||
"/v1internal:loadCodeAssist",
|
||||
"/v1internal:fetchAvailableModels",
|
||||
"/v1internal:retrieveUserQuotaSummary",
|
||||
"/v1internal:fetchUserInfo",
|
||||
"/v1internal:fetchAdminControls",
|
||||
"/v1internal:setUserSettings",
|
||||
"/v1internal:listExperiments",
|
||||
"/v1internal:recordCodeAssistMetrics",
|
||||
"/v1internal:writeTrajectoryAcls",
|
||||
"/v1internal:streamGenerateContent",
|
||||
"/",
|
||||
"/{*path}",
|
||||
|
||||
@@ -193,11 +193,13 @@ fn classify_antigravity_v1internal_route(
|
||||
let (route_kind, execution_runtime_candidate) = match action {
|
||||
"loadCodeAssist" => ("load_code_assist", false),
|
||||
"fetchAvailableModels" => ("fetch_available_models", false),
|
||||
"retrieveUserQuotaSummary" => ("retrieve_user_quota_summary", false),
|
||||
"fetchUserInfo" => ("fetch_user_info", false),
|
||||
"fetchAdminControls" => ("fetch_admin_controls", false),
|
||||
"setUserSettings" => ("set_user_settings", false),
|
||||
"listExperiments" => ("list_experiments", false),
|
||||
"recordCodeAssistMetrics" => ("record_code_assist_metrics", false),
|
||||
"writeTrajectoryAcls" => ("write_trajectory_acls", false),
|
||||
"streamGenerateContent" => ("stream_generate_content", true),
|
||||
_ => return None,
|
||||
};
|
||||
|
||||
@@ -319,6 +319,10 @@ fn classifies_antigravity_v1internal_control_plane_routes() {
|
||||
for (path, route_kind) in [
|
||||
("/v1internal:loadCodeAssist", "load_code_assist"),
|
||||
("/v1internal:fetchAvailableModels", "fetch_available_models"),
|
||||
(
|
||||
"/v1internal:retrieveUserQuotaSummary",
|
||||
"retrieve_user_quota_summary",
|
||||
),
|
||||
("/v1internal:fetchUserInfo", "fetch_user_info"),
|
||||
("/v1internal:fetchAdminControls", "fetch_admin_controls"),
|
||||
("/v1internal:setUserSettings", "set_user_settings"),
|
||||
@@ -327,6 +331,7 @@ fn classifies_antigravity_v1internal_control_plane_routes() {
|
||||
"/v1internal:recordCodeAssistMetrics",
|
||||
"record_code_assist_metrics",
|
||||
),
|
||||
("/v1internal:writeTrajectoryAcls", "write_trajectory_acls"),
|
||||
] {
|
||||
let uri: Uri = path.parse().expect("uri should parse");
|
||||
let decision = classify_control_route(&http::Method::POST, &uri, &headers)
|
||||
|
||||
@@ -926,6 +926,9 @@ fn maybe_build_local_antigravity_v1internal_response(
|
||||
"fetch_available_models" => {
|
||||
Some(Json(build_antigravity_fetch_available_models_payload()).into_response())
|
||||
}
|
||||
"retrieve_user_quota_summary" => {
|
||||
Some(Json(build_antigravity_retrieve_user_quota_summary_payload()).into_response())
|
||||
}
|
||||
"fetch_user_info" => {
|
||||
Some(Json(build_antigravity_fetch_user_info_payload()).into_response())
|
||||
}
|
||||
@@ -938,6 +941,7 @@ fn maybe_build_local_antigravity_v1internal_response(
|
||||
.into_response(),
|
||||
),
|
||||
"record_code_assist_metrics" => Some(Json(json!({})).into_response()),
|
||||
"write_trajectory_acls" => Some(Json(json!({})).into_response()),
|
||||
"set_user_settings" => Some(build_antigravity_set_user_settings_response(request_body)),
|
||||
"stream_generate_content" => None,
|
||||
_ => None,
|
||||
@@ -1042,27 +1046,42 @@ fn build_antigravity_fetch_user_info_payload() -> Value {
|
||||
})
|
||||
}
|
||||
|
||||
fn build_antigravity_retrieve_user_quota_summary_payload() -> Value {
|
||||
json!({
|
||||
"description": "",
|
||||
"groups": []
|
||||
})
|
||||
}
|
||||
|
||||
fn build_antigravity_default_user_settings_payload() -> Value {
|
||||
json!({
|
||||
"preferredModelId": "gemini-3.1-flash-lite"
|
||||
"preferredModelId": "gemini-3.5-flash-low"
|
||||
})
|
||||
}
|
||||
|
||||
fn build_antigravity_fetch_available_models_payload() -> Value {
|
||||
json!({
|
||||
"models": {
|
||||
"gemini-3.5-flash-low": antigravity_model_payload("gemini-3.5-flash-low", "Gemini 3.5 Flash Medium"),
|
||||
"gemini-3-flash-agent": antigravity_model_payload("gemini-3-flash-agent", "Gemini 3.5 Flash High"),
|
||||
"gemini-pro-agent": antigravity_model_payload("gemini-pro-agent", "Gemini 3.1 Pro (High)"),
|
||||
"gemini-3.1-pro-low": antigravity_model_payload("gemini-3.1-pro-low", "Gemini 3.1 Pro (Low)"),
|
||||
"gemini-3-flash-agent": antigravity_model_payload("gemini-3-flash-agent", "Gemini 3.5 Flash (High)"),
|
||||
"gemini-3.5-flash-low": antigravity_model_payload("gemini-3.5-flash-low", "Gemini 3.5 Flash (Medium)"),
|
||||
"gemini-3.5-flash-extra-low": antigravity_model_payload("gemini-3.5-flash-extra-low", "Gemini 3.5 Flash (Low)"),
|
||||
"claude-opus-4-6-thinking": antigravity_model_payload("claude-opus-4-6-thinking", "Claude Opus 4.6 (Thinking)"),
|
||||
"claude-sonnet-4-6": antigravity_model_payload("claude-sonnet-4-6", "Claude Sonnet 4.6 (Thinking)"),
|
||||
"gpt-oss-120b-medium": antigravity_model_payload("gpt-oss-120b-medium", "GPT-OSS 120B (Medium)"),
|
||||
"gemini-3.1-flash-lite": antigravity_model_payload("gemini-3.1-flash-lite", "Gemini 3.1 Flash Lite"),
|
||||
"gemini-3.1-pro-low": antigravity_model_payload("gemini-3.1-pro-low", "Gemini 3.1 Pro Low"),
|
||||
"gemini-3-flash": antigravity_model_payload("gemini-3-flash", "Gemini 3 Flash"),
|
||||
"gemini-2.5-flash": antigravity_model_payload("gemini-2.5-flash", "Gemini 2.5 Flash"),
|
||||
"gemini-2.5-flash-lite": antigravity_model_payload("gemini-2.5-flash-lite", "Gemini 2.5 Flash Lite"),
|
||||
"gemini-2.5-flash-thinking": antigravity_model_payload("gemini-2.5-flash-thinking", "Gemini 2.5 Flash Thinking"),
|
||||
"gemini-2.5-flash": antigravity_model_payload("gemini-2.5-flash", "Gemini 3.1 Flash Lite"),
|
||||
"gemini-2.5-flash-lite": antigravity_model_payload("gemini-2.5-flash-lite", "Gemini 3.1 Flash Lite"),
|
||||
"gemini-2.5-flash-thinking": antigravity_model_payload("gemini-2.5-flash-thinking", "Gemini 3.1 Flash Lite"),
|
||||
"gemini-2.5-pro": antigravity_model_payload("gemini-2.5-pro", "Gemini 2.5 Pro"),
|
||||
"gemini-3.1-flash-image": antigravity_model_payload("gemini-3.1-flash-image", "Gemini 3.1 Flash Image"),
|
||||
"tab_flash_lite_preview": antigravity_model_payload("tab_flash_lite_preview", "Tab Flash Lite Preview"),
|
||||
"tab_jump_flash_lite_preview": antigravity_model_payload("tab_jump_flash_lite_preview", "Tab Jump Flash Lite Preview"),
|
||||
"gemini-3.1-pro-high": antigravity_model_payload("gemini-3.1-pro-high", "Gemini 3.1 Pro (High)"),
|
||||
"chat_20706": antigravity_model_payload("chat_20706", ""),
|
||||
"chat_23310": antigravity_model_payload("chat_23310", ""),
|
||||
"tab_flash_lite_preview": antigravity_model_payload("tab_flash_lite_preview", ""),
|
||||
"tab_jump_flash_lite_preview": antigravity_model_payload("tab_jump_flash_lite_preview", ""),
|
||||
"models/proactive-observer": antigravity_model_payload("models/proactive-observer", "Proactive Observer")
|
||||
},
|
||||
"agentModelSorts": [
|
||||
@@ -1071,10 +1090,14 @@ fn build_antigravity_fetch_available_models_payload() -> Value {
|
||||
"groups": [
|
||||
{
|
||||
"modelIds": [
|
||||
"gemini-3.1-flash-lite",
|
||||
"gemini-3.5-flash-low",
|
||||
"gemini-3-flash-agent",
|
||||
"gemini-3.5-flash-extra-low",
|
||||
"gemini-3.1-pro-low",
|
||||
"gemini-3.5-flash-low"
|
||||
"gemini-pro-agent",
|
||||
"claude-sonnet-4-6",
|
||||
"claude-opus-4-6-thinking",
|
||||
"gpt-oss-120b-medium"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -1083,12 +1106,18 @@ fn build_antigravity_fetch_available_models_payload() -> Value {
|
||||
"audioTranscriptionModelIds": ["models/proactive-observer"],
|
||||
"commandModelIds": ["gemini-3-flash"],
|
||||
"commitMessageModelIds": ["gemini-3.1-flash-lite"],
|
||||
"defaultAgentModelId": "gemini-3.1-flash-lite",
|
||||
"deprecatedModelIds": {},
|
||||
"defaultAgentModelId": "gemini-3.5-flash-low",
|
||||
"deprecatedModelIds": {
|
||||
"gemini-3.1-pro-high": {
|
||||
"newModelEnum": "MODEL_PLACEHOLDER_M16",
|
||||
"newModelId": "gemini-pro-agent",
|
||||
"oldModelEnum": "MODEL_PLACEHOLDER_M37"
|
||||
}
|
||||
},
|
||||
"experimentIds": [],
|
||||
"imageGenerationModelIds": ["gemini-3.1-flash-image"],
|
||||
"mqueryModelIds": ["gemini-3.1-flash-lite"],
|
||||
"tabModelIds": ["tab_flash_lite_preview", "tab_jump_flash_lite_preview"],
|
||||
"tabModelIds": ["chat_20706", "chat_23310"],
|
||||
"tieredModelIds": {
|
||||
"flash": ["gemini-3-flash-agent"],
|
||||
"flashLite": ["gemini-3.1-flash-lite"],
|
||||
@@ -1100,6 +1129,11 @@ fn build_antigravity_fetch_available_models_payload() -> Value {
|
||||
|
||||
fn antigravity_model_payload(id: &str, display_name: &str) -> Value {
|
||||
let model = match id {
|
||||
"chat_20706" => "MODEL_CHAT_20706",
|
||||
"chat_23310" => "MODEL_CHAT_23310",
|
||||
"claude-opus-4-6-thinking" => "MODEL_PLACEHOLDER_M26",
|
||||
"claude-sonnet-4-6" => "MODEL_PLACEHOLDER_M35",
|
||||
"gpt-oss-120b-medium" => "MODEL_OPENAI_GPT_OSS_120B_MEDIUM",
|
||||
"gemini-2.5-flash" => "MODEL_GOOGLE_GEMINI_2_5_FLASH",
|
||||
"gemini-2.5-flash-lite" => "MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE",
|
||||
"gemini-2.5-flash-thinking" => "MODEL_GOOGLE_GEMINI_2_5_FLASH_THINKING",
|
||||
@@ -1108,22 +1142,43 @@ fn antigravity_model_payload(id: &str, display_name: &str) -> Value {
|
||||
"gemini-3-flash-agent" => "MODEL_PLACEHOLDER_M132",
|
||||
"gemini-3.1-flash-image" => "MODEL_PLACEHOLDER_M21",
|
||||
"gemini-3.1-flash-lite" => "MODEL_PLACEHOLDER_M50",
|
||||
"gemini-pro-agent" => "MODEL_PLACEHOLDER_M16",
|
||||
"gemini-3.1-pro-high" => "MODEL_PLACEHOLDER_M37",
|
||||
"gemini-3.1-pro-low" => "MODEL_PLACEHOLDER_M36",
|
||||
"gemini-3.5-flash-low" => "MODEL_PLACEHOLDER_M20",
|
||||
"gemini-3.5-flash-extra-low" => "MODEL_PLACEHOLDER_M187",
|
||||
"models/proactive-observer" => "MODEL_PLACEHOLDER_M70",
|
||||
"tab_flash_lite_preview" => "MODEL_PLACEHOLDER_M19",
|
||||
"tab_jump_flash_lite_preview" => "MODEL_PLACEHOLDER_M28",
|
||||
_ => "MODEL_PLACEHOLDER_M20",
|
||||
};
|
||||
json!({
|
||||
"apiProvider": "API_PROVIDER_GOOGLE_GEMINI",
|
||||
let (api_provider, model_provider) = match id {
|
||||
"claude-opus-4-6-thinking" | "claude-sonnet-4-6" => {
|
||||
("API_PROVIDER_ANTHROPIC_VERTEX", "MODEL_PROVIDER_ANTHROPIC")
|
||||
}
|
||||
"gpt-oss-120b-medium" => ("API_PROVIDER_OPENAI_VERTEX", "MODEL_PROVIDER_OPENAI"),
|
||||
"chat_20706" | "chat_23310" => ("API_PROVIDER_INTERNAL", "MODEL_PROVIDER_GOOGLE"),
|
||||
_ => ("API_PROVIDER_GOOGLE_GEMINI", "MODEL_PROVIDER_GOOGLE"),
|
||||
};
|
||||
let mut payload = json!({
|
||||
"apiProvider": api_provider,
|
||||
"displayName": display_name,
|
||||
"maxOutputTokens": 65536,
|
||||
"maxTokens": 1048576,
|
||||
"minThinkingBudget": 32,
|
||||
"model": model,
|
||||
"modelProvider": "MODEL_PROVIDER_GOOGLE",
|
||||
"recommended": id == "gemini-3.1-flash-lite",
|
||||
"modelProvider": model_provider,
|
||||
"recommended": matches!(
|
||||
id,
|
||||
"gemini-3.5-flash-low"
|
||||
| "gemini-3-flash-agent"
|
||||
| "gemini-3.5-flash-extra-low"
|
||||
| "gemini-3.1-pro-low"
|
||||
| "gemini-pro-agent"
|
||||
| "claude-sonnet-4-6"
|
||||
| "claude-opus-4-6-thinking"
|
||||
| "gpt-oss-120b-medium"
|
||||
),
|
||||
"supportedMimeTypes": {
|
||||
"application/json": true,
|
||||
"application/pdf": true,
|
||||
@@ -1137,7 +1192,88 @@ fn antigravity_model_payload(id: &str, display_name: &str) -> Value {
|
||||
"supportsVideo": true,
|
||||
"thinkingBudget": 4000,
|
||||
"tokenizerType": "LLAMA_WITH_SPECIAL"
|
||||
})
|
||||
});
|
||||
if let Some(object) = payload.as_object_mut() {
|
||||
match id {
|
||||
"gemini-3-flash-agent" => {
|
||||
object.insert("thinkingBudget".to_string(), json!(10000));
|
||||
}
|
||||
"gemini-pro-agent" => {
|
||||
object.insert("maxOutputTokens".to_string(), json!(65535));
|
||||
object.insert("thinkingBudget".to_string(), json!(10001));
|
||||
}
|
||||
"gemini-3.1-pro-high" => {
|
||||
object.insert("maxOutputTokens".to_string(), json!(65535));
|
||||
object.insert("minThinkingBudget".to_string(), json!(128));
|
||||
object.insert("thinkingBudget".to_string(), json!(10001));
|
||||
}
|
||||
"gemini-3.5-flash-extra-low" => {
|
||||
object.insert("thinkingBudget".to_string(), json!(1000));
|
||||
object.insert("maxOutputTokens".to_string(), json!(65536));
|
||||
}
|
||||
"gemini-3.1-pro-low" => {
|
||||
object.insert("maxOutputTokens".to_string(), json!(65535));
|
||||
object.insert("minThinkingBudget".to_string(), json!(128));
|
||||
object.insert("thinkingBudget".to_string(), json!(1001));
|
||||
}
|
||||
"claude-sonnet-4-6" | "claude-opus-4-6-thinking" => {
|
||||
object.insert("maxTokens".to_string(), json!(250000));
|
||||
object.insert("maxOutputTokens".to_string(), json!(64000));
|
||||
object.insert("thinkingBudget".to_string(), json!(1024));
|
||||
object.remove("minThinkingBudget");
|
||||
object.remove("supportsVideo");
|
||||
}
|
||||
"gpt-oss-120b-medium" => {
|
||||
object.insert("maxTokens".to_string(), json!(131072));
|
||||
object.insert("maxOutputTokens".to_string(), json!(32768));
|
||||
object.insert("thinkingBudget".to_string(), json!(8192));
|
||||
object.remove("minThinkingBudget");
|
||||
object.remove("supportsImages");
|
||||
object.remove("supportsVideo");
|
||||
}
|
||||
"chat_20706" => {
|
||||
object.insert("maxTokens".to_string(), json!(16384));
|
||||
object.remove("displayName");
|
||||
object.remove("maxOutputTokens");
|
||||
object.remove("minThinkingBudget");
|
||||
object.remove("recommended");
|
||||
object.remove("supportsImages");
|
||||
object.remove("supportsThinking");
|
||||
object.remove("supportsVideo");
|
||||
object.remove("thinkingBudget");
|
||||
object.remove("tokenizerType");
|
||||
object.remove("supportedMimeTypes");
|
||||
}
|
||||
"chat_23310" => {
|
||||
object.insert("maxTokens".to_string(), json!(32768));
|
||||
object.remove("displayName");
|
||||
object.remove("maxOutputTokens");
|
||||
object.remove("minThinkingBudget");
|
||||
object.remove("recommended");
|
||||
object.remove("supportsImages");
|
||||
object.remove("supportsThinking");
|
||||
object.remove("supportsVideo");
|
||||
object.remove("thinkingBudget");
|
||||
object.remove("tokenizerType");
|
||||
object.remove("supportedMimeTypes");
|
||||
}
|
||||
"tab_flash_lite_preview" | "tab_jump_flash_lite_preview" => {
|
||||
object.insert("maxTokens".to_string(), json!(16384));
|
||||
object.insert("maxOutputTokens".to_string(), json!(4096));
|
||||
object.remove("displayName");
|
||||
object.remove("minThinkingBudget");
|
||||
object.remove("recommended");
|
||||
object.remove("supportsImages");
|
||||
object.remove("supportsThinking");
|
||||
object.remove("supportsVideo");
|
||||
object.remove("thinkingBudget");
|
||||
object.remove("tokenizerType");
|
||||
object.remove("supportedMimeTypes");
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
payload
|
||||
}
|
||||
|
||||
async fn maybe_build_local_gemini_video_operations_response(
|
||||
|
||||
@@ -579,22 +579,21 @@ fn model_quota_window_snapshot(
|
||||
|
||||
fn canonical_antigravity_model_label(model_name: &str) -> Option<&'static str> {
|
||||
match model_name.trim() {
|
||||
"claude-opus-4-6-thinking" => Some("Claude Opus 4.6 Thinking"),
|
||||
"claude-sonnet-4-6" => Some("Claude Sonnet 4.6"),
|
||||
"gemini-3-flash-agent" => Some("Gemini 3.5 Flash High"),
|
||||
"gemini-3.5-flash-low" => Some("Gemini 3.5 Flash Medium"),
|
||||
"gemini-3.5-flash-extra-low" => Some("Gemini 3.5 Flash Low"),
|
||||
"gemini-3.1-pro-high" => Some("Gemini 3.1 Pro High"),
|
||||
"gemini-3.1-pro-low" => Some("Gemini 3.1 Pro Low"),
|
||||
"gemini-pro-agent" => Some("Gemini 3.1 Pro High"),
|
||||
"claude-opus-4-6-thinking" => Some("Claude Opus 4.6 (Thinking)"),
|
||||
"claude-sonnet-4-6" | "claude-sonnet-4-6-thinking" => Some("Claude Sonnet 4.6 (Thinking)"),
|
||||
"gemini-3-flash-agent" => Some("Gemini 3.5 Flash (High)"),
|
||||
"gemini-3.5-flash-low" => Some("Gemini 3.5 Flash (Medium)"),
|
||||
"gemini-3.5-flash-extra-low" => Some("Gemini 3.5 Flash (Low)"),
|
||||
"gemini-3.1-pro-high" | "gemini-pro-agent" => Some("Gemini 3.1 Pro (High)"),
|
||||
"gemini-3.1-pro-low" => Some("Gemini 3.1 Pro (Low)"),
|
||||
"gemini-3.1-flash-image" => Some("Gemini 3.1 Flash Image"),
|
||||
"gemini-3.1-flash-lite" => Some("Gemini 3.1 Flash Lite"),
|
||||
"gemini-3-flash" => Some("Gemini 3 Flash"),
|
||||
"gemini-2.5-pro" => Some("Gemini 2.5 Pro"),
|
||||
"gemini-2.5-flash-thinking" => Some("Gemini 2.5 Flash Thinking"),
|
||||
"gemini-2.5-flash" => Some("Gemini 2.5 Flash"),
|
||||
"gemini-2.5-flash-lite" => Some("Gemini 2.5 Flash Lite"),
|
||||
"gpt-oss-120b-medium" => Some("GPT-OSS 120B Medium"),
|
||||
"gemini-2.5-flash-thinking" | "gemini-2.5-flash" | "gemini-2.5-flash-lite" => {
|
||||
Some("Gemini 3.1 Flash Lite")
|
||||
}
|
||||
"gpt-oss-120b-medium" => Some("GPT-OSS 120B (Medium)"),
|
||||
"tab_flash_lite_preview" => Some("Tab Flash Lite Preview"),
|
||||
"tab_jump_flash_lite_preview" => Some("Tab Jump Flash Lite Preview"),
|
||||
"models/proactive-observer" => Some("Proactive Observer"),
|
||||
@@ -3805,23 +3804,23 @@ mod tests {
|
||||
|
||||
assert_eq!(
|
||||
label_for_model("gemini-3.5-flash-extra-low"),
|
||||
Some(json!("Gemini 3.5 Flash Low"))
|
||||
Some(json!("Gemini 3.5 Flash (Low)"))
|
||||
);
|
||||
assert_eq!(
|
||||
label_for_model("gemini-3.5-flash-low"),
|
||||
Some(json!("Gemini 3.5 Flash Medium"))
|
||||
Some(json!("Gemini 3.5 Flash (Medium)"))
|
||||
);
|
||||
assert_eq!(
|
||||
label_for_model("gemini-3-flash-agent"),
|
||||
Some(json!("Gemini 3.5 Flash High"))
|
||||
Some(json!("Gemini 3.5 Flash (High)"))
|
||||
);
|
||||
assert_eq!(
|
||||
label_for_model("gemini-2.5-flash"),
|
||||
Some(json!("Gemini 2.5 Flash"))
|
||||
Some(json!("Gemini 3.1 Flash Lite"))
|
||||
);
|
||||
assert_eq!(
|
||||
label_for_model("claude-sonnet-4-6"),
|
||||
Some(json!("Claude Sonnet 4.6"))
|
||||
Some(json!("Claude Sonnet 4.6 (Thinking)"))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -1963,7 +1963,10 @@ async fn gateway_executes_openai_chat_antigravity_cross_format_sync_via_local_fi
|
||||
"trace-openai-chat-antigravity-sync-123"
|
||||
);
|
||||
assert_eq!(seen_execution_runtime_request.model, "claude-sonnet-4-5");
|
||||
assert_eq!(seen_execution_runtime_request.user_agent, "antigravity");
|
||||
assert_eq!(
|
||||
seen_execution_runtime_request.user_agent,
|
||||
aether_provider_transport::antigravity::ANTIGRAVITY_REQUEST_USER_AGENT
|
||||
);
|
||||
assert_eq!(seen_execution_runtime_request.request_type, "agent");
|
||||
assert_eq!(seen_execution_runtime_request.contents_len, 1);
|
||||
assert!(!seen_execution_runtime_request.request_has_model);
|
||||
|
||||
@@ -1558,7 +1558,7 @@ async fn gateway_executes_openai_responses_antigravity_cross_format_upstream_str
|
||||
);
|
||||
assert_eq!(
|
||||
seen_remote_execution_runtime_request.user_agent,
|
||||
"antigravity"
|
||||
aether_provider_transport::antigravity::ANTIGRAVITY_REQUEST_USER_AGENT
|
||||
);
|
||||
assert_eq!(seen_remote_execution_runtime_request.request_type, "agent");
|
||||
assert_eq!(seen_remote_execution_runtime_request.contents_len, 1);
|
||||
|
||||
@@ -2143,7 +2143,7 @@ async fn gateway_executes_antigravity_gemini_cli_sync_upstream_stream_via_local_
|
||||
);
|
||||
assert_eq!(
|
||||
seen_remote_execution_runtime_request.user_agent,
|
||||
"antigravity"
|
||||
aether_provider_transport::antigravity::ANTIGRAVITY_REQUEST_USER_AGENT
|
||||
);
|
||||
assert_eq!(seen_remote_execution_runtime_request.request_type, "agent");
|
||||
assert_eq!(seen_remote_execution_runtime_request.contents_len, 0);
|
||||
|
||||
@@ -2031,7 +2031,10 @@ async fn gateway_executes_antigravity_gemini_cli_stream_via_local_decision_gate_
|
||||
"trace-antigravity-cli-oauth-local-stream-123"
|
||||
);
|
||||
assert_eq!(seen_execution_runtime_request.model, "claude-sonnet-4-5");
|
||||
assert_eq!(seen_execution_runtime_request.user_agent, "antigravity");
|
||||
assert_eq!(
|
||||
seen_execution_runtime_request.user_agent,
|
||||
aether_provider_transport::antigravity::ANTIGRAVITY_REQUEST_USER_AGENT
|
||||
);
|
||||
assert_eq!(seen_execution_runtime_request.request_type, "agent");
|
||||
assert_eq!(seen_execution_runtime_request.contents_len, 0);
|
||||
assert!((seen_execution_runtime_request.exact_temperature - 0.2).abs() < f64::EPSILON);
|
||||
|
||||
@@ -2334,7 +2334,10 @@ async fn gateway_executes_antigravity_gemini_cli_sync_via_local_decision_gate_af
|
||||
"trace-antigravity-cli-oauth-local-sync-123"
|
||||
);
|
||||
assert_eq!(seen_execution_runtime_request.model, "claude-sonnet-4-5");
|
||||
assert_eq!(seen_execution_runtime_request.user_agent, "antigravity");
|
||||
assert_eq!(
|
||||
seen_execution_runtime_request.user_agent,
|
||||
aether_provider_transport::antigravity::ANTIGRAVITY_REQUEST_USER_AGENT
|
||||
);
|
||||
assert_eq!(seen_execution_runtime_request.request_type, "agent");
|
||||
assert_eq!(seen_execution_runtime_request.contents_len, 0);
|
||||
assert!((seen_execution_runtime_request.exact_temperature - 0.2).abs() < f64::EPSILON);
|
||||
|
||||
@@ -949,6 +949,10 @@ async fn gateway_handles_antigravity_v1internal_control_plane_without_proxying()
|
||||
"/v1internal:fetchAvailableModels",
|
||||
json!({"project": "aether-antigravity-local"}),
|
||||
),
|
||||
(
|
||||
"/v1internal:retrieveUserQuotaSummary",
|
||||
json!({"project": "aether-antigravity-local"}),
|
||||
),
|
||||
(
|
||||
"/v1internal:fetchUserInfo",
|
||||
json!({"project": "aether-antigravity-local"}),
|
||||
@@ -966,6 +970,10 @@ async fn gateway_handles_antigravity_v1internal_control_plane_without_proxying()
|
||||
"metrics": []
|
||||
}),
|
||||
),
|
||||
(
|
||||
"/v1internal:writeTrajectoryAcls",
|
||||
json!({"trajectoryId": "trajectory-ant-123"}),
|
||||
),
|
||||
(
|
||||
"/v1internal:setUserSettings",
|
||||
json!({"userSettings": user_settings.clone()}),
|
||||
@@ -1012,18 +1020,58 @@ async fn gateway_handles_antigravity_v1internal_control_plane_without_proxying()
|
||||
);
|
||||
}
|
||||
"/v1internal:fetchAvailableModels" => {
|
||||
assert_eq!(payload["defaultAgentModelId"], "gemini-3.1-flash-lite");
|
||||
assert_eq!(payload["defaultAgentModelId"], "gemini-3.5-flash-low");
|
||||
assert_eq!(
|
||||
payload["tieredModelIds"]["flash"],
|
||||
json!(["gemini-3-flash-agent"])
|
||||
);
|
||||
assert_eq!(
|
||||
payload["models"]["gemini-3.5-flash-low"]["displayName"],
|
||||
"Gemini 3.5 Flash Medium"
|
||||
payload["tieredModelIds"]["pro"],
|
||||
json!(["gemini-3.1-pro-low"])
|
||||
);
|
||||
assert_eq!(
|
||||
payload["models"]["gemini-3-flash-agent"]["displayName"],
|
||||
"Gemini 3.5 Flash High"
|
||||
"Gemini 3.5 Flash (High)"
|
||||
);
|
||||
assert_eq!(
|
||||
payload["models"]["gemini-3.5-flash-low"]["displayName"],
|
||||
"Gemini 3.5 Flash (Medium)"
|
||||
);
|
||||
assert_eq!(
|
||||
payload["models"]["gemini-3.5-flash-extra-low"]["displayName"],
|
||||
"Gemini 3.5 Flash (Low)"
|
||||
);
|
||||
assert_eq!(
|
||||
payload["models"]["gemini-pro-agent"]["displayName"],
|
||||
"Gemini 3.1 Pro (High)"
|
||||
);
|
||||
assert_eq!(
|
||||
payload["models"]["claude-opus-4-6-thinking"]["displayName"],
|
||||
"Claude Opus 4.6 (Thinking)"
|
||||
);
|
||||
assert_eq!(
|
||||
payload["models"]["gpt-oss-120b-medium"]["displayName"],
|
||||
"GPT-OSS 120B (Medium)"
|
||||
);
|
||||
assert_eq!(
|
||||
payload["models"]["gemini-pro-agent"]["model"],
|
||||
"MODEL_PLACEHOLDER_M16"
|
||||
);
|
||||
assert_eq!(
|
||||
payload["models"]["gemini-3.1-pro-high"]["model"],
|
||||
"MODEL_PLACEHOLDER_M37"
|
||||
);
|
||||
assert_eq!(
|
||||
payload["models"]["gemini-3.5-flash-extra-low"]["model"],
|
||||
"MODEL_PLACEHOLDER_M187"
|
||||
);
|
||||
assert_eq!(
|
||||
payload["models"]["claude-sonnet-4-6"]["apiProvider"],
|
||||
"API_PROVIDER_ANTHROPIC_VERTEX"
|
||||
);
|
||||
assert_eq!(
|
||||
payload["models"]["gpt-oss-120b-medium"]["apiProvider"],
|
||||
"API_PROVIDER_OPENAI_VERTEX"
|
||||
);
|
||||
assert_eq!(
|
||||
payload["models"]["gemini-3.5-flash-low"]["apiProvider"],
|
||||
@@ -1036,18 +1084,26 @@ async fn gateway_handles_antigravity_v1internal_control_plane_without_proxying()
|
||||
assert_eq!(
|
||||
payload["agentModelSorts"][0]["groups"][0]["modelIds"],
|
||||
json!([
|
||||
"gemini-3.1-flash-lite",
|
||||
"gemini-3.5-flash-low",
|
||||
"gemini-3-flash-agent",
|
||||
"gemini-3.5-flash-extra-low",
|
||||
"gemini-3.1-pro-low",
|
||||
"gemini-3.5-flash-low"
|
||||
"gemini-pro-agent",
|
||||
"claude-sonnet-4-6",
|
||||
"claude-opus-4-6-thinking",
|
||||
"gpt-oss-120b-medium"
|
||||
])
|
||||
);
|
||||
assert_eq!(payload["deprecatedModelIds"], json!({}));
|
||||
assert_eq!(
|
||||
payload["deprecatedModelIds"]["gemini-3.1-pro-high"]["newModelId"],
|
||||
"gemini-pro-agent"
|
||||
);
|
||||
assert_eq!(payload["commandModelIds"], json!(["gemini-3-flash"]));
|
||||
assert_eq!(
|
||||
payload["imageGenerationModelIds"],
|
||||
json!(["gemini-3.1-flash-image"])
|
||||
);
|
||||
assert_eq!(payload["tabModelIds"], json!(["chat_20706", "chat_23310"]));
|
||||
assert_eq!(payload["mqueryModelIds"], json!(["gemini-3.1-flash-lite"]));
|
||||
assert_eq!(
|
||||
payload["webSearchModelIds"],
|
||||
@@ -1062,9 +1118,13 @@ async fn gateway_handles_antigravity_v1internal_control_plane_without_proxying()
|
||||
assert_eq!(payload["regionCode"], "US");
|
||||
assert_eq!(
|
||||
payload["userSettings"]["preferredModelId"],
|
||||
"gemini-3.1-flash-lite"
|
||||
"gemini-3.5-flash-low"
|
||||
);
|
||||
}
|
||||
"/v1internal:retrieveUserQuotaSummary" => {
|
||||
assert_eq!(payload["description"], "");
|
||||
assert_eq!(payload["groups"], json!([]));
|
||||
}
|
||||
"/v1internal:fetchAdminControls" => {
|
||||
assert_eq!(payload, json!({}));
|
||||
}
|
||||
@@ -1075,6 +1135,9 @@ async fn gateway_handles_antigravity_v1internal_control_plane_without_proxying()
|
||||
"/v1internal:recordCodeAssistMetrics" => {
|
||||
assert_eq!(payload, json!({}));
|
||||
}
|
||||
"/v1internal:writeTrajectoryAcls" => {
|
||||
assert_eq!(payload, json!({}));
|
||||
}
|
||||
"/v1internal:setUserSettings" => {
|
||||
assert_eq!(payload["userSettings"], user_settings);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ use serde_json::Value;
|
||||
use super::super::snapshot::GatewayProviderTransportSnapshot;
|
||||
|
||||
pub const ANTIGRAVITY_PROVIDER_TYPE: &str = "antigravity";
|
||||
pub const ANTIGRAVITY_REQUEST_USER_AGENT: &str = "antigravity";
|
||||
pub const ANTIGRAVITY_REQUEST_USER_AGENT: &str =
|
||||
"antigravity/cli/1.0.16 (aidev_client; os_type=linux; arch=arm64; auth_method=consumer)";
|
||||
const ANTIGRAVITY_CLIENT_NAME: &str = "antigravity";
|
||||
const ANTIGRAVITY_GOOG_API_CLIENT: &str = "gl-node/18.18.2 fire/0.8.6 grpc/1.10.x";
|
||||
|
||||
@@ -120,6 +121,10 @@ pub fn build_antigravity_static_client_headers(
|
||||
String::from("x-goog-api-client"),
|
||||
String::from(ANTIGRAVITY_GOOG_API_CLIENT),
|
||||
),
|
||||
(
|
||||
String::from("user-agent"),
|
||||
String::from(ANTIGRAVITY_REQUEST_USER_AGENT),
|
||||
),
|
||||
]);
|
||||
|
||||
if let Some(client_version) = client_version
|
||||
@@ -267,8 +272,8 @@ mod tests {
|
||||
use serde_json::json;
|
||||
|
||||
use super::{
|
||||
resolve_local_antigravity_request_auth, AntigravityRequestAuth,
|
||||
AntigravityRequestAuthSupport,
|
||||
build_antigravity_static_client_headers, resolve_local_antigravity_request_auth,
|
||||
AntigravityRequestAuth, AntigravityRequestAuthSupport, ANTIGRAVITY_REQUEST_USER_AGENT,
|
||||
};
|
||||
use crate::snapshot::{
|
||||
GatewayProviderTransportEndpoint, GatewayProviderTransportKey,
|
||||
@@ -376,4 +381,26 @@ mod tests {
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn static_client_headers_use_native_antigravity_cli_user_agent() {
|
||||
let headers = build_antigravity_static_client_headers(Some("1.0.16"), Some("session-abc"));
|
||||
|
||||
assert_eq!(
|
||||
headers.get("user-agent").map(String::as_str),
|
||||
Some(ANTIGRAVITY_REQUEST_USER_AGENT)
|
||||
);
|
||||
assert_eq!(
|
||||
headers.get("x-client-name").map(String::as_str),
|
||||
Some("antigravity")
|
||||
);
|
||||
assert_eq!(
|
||||
headers.get("x-client-version").map(String::as_str),
|
||||
Some("1.0.16")
|
||||
);
|
||||
assert_eq!(
|
||||
headers.get("x-vscode-sessionid").map(String::as_str),
|
||||
Some("session-abc")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,6 +141,7 @@ mod tests {
|
||||
build_antigravity_safe_v1internal_request, classify_antigravity_safe_request_body,
|
||||
AntigravityEnvelopeRequestType, AntigravityRequestAuth, AntigravityRequestEnvelopeSupport,
|
||||
};
|
||||
use crate::antigravity::ANTIGRAVITY_REQUEST_USER_AGENT;
|
||||
|
||||
fn sample_auth() -> AntigravityRequestAuth {
|
||||
AntigravityRequestAuth {
|
||||
@@ -228,7 +229,7 @@ mod tests {
|
||||
assert_eq!(envelope["project"], "project-ant-123");
|
||||
assert_eq!(envelope["requestId"], "request-ant-agent-123");
|
||||
assert_eq!(envelope["model"], "gemini-3.5-flash-low");
|
||||
assert_eq!(envelope["userAgent"], "antigravity");
|
||||
assert_eq!(envelope["userAgent"], ANTIGRAVITY_REQUEST_USER_AGENT);
|
||||
assert_eq!(envelope["requestType"], "agent");
|
||||
assert!(envelope["request"].get("model").is_none());
|
||||
assert!(envelope["request"].get("safetySettings").is_none());
|
||||
|
||||
+12
-4
@@ -137,13 +137,18 @@ describe('AntigravityQuotaDialog', () => {
|
||||
remaining_fraction: 0.9,
|
||||
used_percent: 10,
|
||||
},
|
||||
'gemini-pro-agent': {
|
||||
display_name: 'gemini-pro-agent',
|
||||
remaining_fraction: 0.95,
|
||||
used_percent: 5,
|
||||
},
|
||||
'gemini-3.5-flash-low': {
|
||||
display_name: 'Gemini 3.5 Flash (Medium)',
|
||||
remaining_fraction: 0.8,
|
||||
used_percent: 20,
|
||||
},
|
||||
'claude-opus-4-6-thinking': {
|
||||
display_name: 'Claude Opus 4.6 Thinking',
|
||||
display_name: 'Claude Opus 4.6 (Thinking)',
|
||||
remaining_fraction: 1,
|
||||
used_percent: 0,
|
||||
},
|
||||
@@ -157,9 +162,12 @@ describe('AntigravityQuotaDialog', () => {
|
||||
})
|
||||
const text = root.textContent || ''
|
||||
|
||||
expect(text.indexOf('Claude Opus 4.6 Thinking')).toBeLessThan(text.indexOf('Gemini 3.5 Flash High'))
|
||||
expect(text.indexOf('Gemini 3.5 Flash High')).toBeLessThan(text.indexOf('Gemini 3.5 Flash Medium'))
|
||||
expect(text.indexOf('Gemini 3.5 Flash Medium')).toBeLessThan(text.indexOf('Tab Flash Lite Preview'))
|
||||
expect(text).not.toContain('gemini-pro-agent')
|
||||
expect(text).not.toContain('claude-opus-4-6-thinking')
|
||||
expect(text.indexOf('Gemini 3.1 Pro (High)')).toBeLessThan(text.indexOf('Gemini 3.5 Flash (High)'))
|
||||
expect(text.indexOf('Gemini 3.5 Flash (High)')).toBeLessThan(text.indexOf('Gemini 3.5 Flash (Medium)'))
|
||||
expect(text.indexOf('Gemini 3.5 Flash (Medium)')).toBeLessThan(text.indexOf('Claude Opus 4.6 (Thinking)'))
|
||||
expect(text.indexOf('Claude Opus 4.6 (Thinking)')).toBeLessThan(text.indexOf('Tab Flash Lite Preview'))
|
||||
expect(text.indexOf('Tab Flash Lite Preview')).toBeLessThan(text.indexOf('chat_20706'))
|
||||
|
||||
unmount()
|
||||
|
||||
@@ -15,35 +15,49 @@ describe('antigravityQuota', () => {
|
||||
'Gemini 3.5 Flash (High)',
|
||||
opaqueDisplayIndex,
|
||||
),
|
||||
).toBe('Gemini 3.5 Flash High')
|
||||
).toBe('Gemini 3.5 Flash (High)')
|
||||
expect(
|
||||
resolveAntigravityQuotaLabel(
|
||||
'gemini-3.5-flash-low',
|
||||
'Gemini 3.5 Flash (Medium)',
|
||||
opaqueDisplayIndex,
|
||||
),
|
||||
).toBe('Gemini 3.5 Flash Medium')
|
||||
).toBe('Gemini 3.5 Flash (Medium)')
|
||||
expect(
|
||||
resolveAntigravityQuotaLabel(
|
||||
'gemini-3.5-flash-extra-low',
|
||||
'Gemini 3.5 Flash (Low)',
|
||||
opaqueDisplayIndex,
|
||||
),
|
||||
).toBe('Gemini 3.5 Flash Low')
|
||||
).toBe('Gemini 3.5 Flash (Low)')
|
||||
expect(
|
||||
resolveAntigravityQuotaLabel(
|
||||
'gemini-pro-agent',
|
||||
'gemini-pro-agent',
|
||||
opaqueDisplayIndex,
|
||||
),
|
||||
).toBe('Gemini 3.1 Pro (High)')
|
||||
expect(
|
||||
resolveAntigravityQuotaLabel(
|
||||
'gemini-3.1-pro-high',
|
||||
'gemini-3.1-pro-high',
|
||||
opaqueDisplayIndex,
|
||||
),
|
||||
).toBe('Gemini 3.1 Pro (High)')
|
||||
expect(
|
||||
resolveAntigravityQuotaLabel(
|
||||
'gemini-2.5-flash',
|
||||
'Gemini 3.1 Flash Lite',
|
||||
opaqueDisplayIndex,
|
||||
),
|
||||
).toBe('Gemini 2.5 Flash')
|
||||
).toBe('Gemini 3.1 Flash Lite')
|
||||
expect(
|
||||
resolveAntigravityQuotaLabel(
|
||||
'claude-sonnet-4-6',
|
||||
'Claude Sonnet 4.6 (Thinking)',
|
||||
opaqueDisplayIndex,
|
||||
),
|
||||
).toBe('Claude Sonnet 4.6')
|
||||
).toBe('Claude Sonnet 4.6 (Thinking)')
|
||||
expect(
|
||||
resolveAntigravityQuotaLabel(
|
||||
'RateLimitResetCredit_05cbb6eeeb9c81918e011d8300f9ebfb',
|
||||
@@ -63,22 +77,28 @@ describe('antigravityQuota', () => {
|
||||
},
|
||||
{
|
||||
model: 'gemini-3.5-flash-extra-low',
|
||||
label: 'Gemini 3.5 Flash Low',
|
||||
label: 'Gemini 3.5 Flash (Low)',
|
||||
remainingPercent: 95,
|
||||
resetSeconds: null,
|
||||
},
|
||||
{
|
||||
model: 'gemini-3.5-flash-low',
|
||||
label: 'Gemini 3.5 Flash Medium',
|
||||
label: 'Gemini 3.5 Flash (Medium)',
|
||||
remainingPercent: 90,
|
||||
resetSeconds: null,
|
||||
},
|
||||
{
|
||||
model: 'gemini-3-flash-agent',
|
||||
label: 'Gemini 3.5 Flash High',
|
||||
label: 'Gemini 3.5 Flash (High)',
|
||||
remainingPercent: 80,
|
||||
resetSeconds: null,
|
||||
},
|
||||
{
|
||||
model: 'gemini-pro-agent',
|
||||
label: 'Gemini 3.1 Pro (High)',
|
||||
remainingPercent: 70,
|
||||
resetSeconds: null,
|
||||
},
|
||||
{
|
||||
model: 'chat_20706',
|
||||
label: 'chat_20706',
|
||||
@@ -87,23 +107,24 @@ describe('antigravityQuota', () => {
|
||||
},
|
||||
{
|
||||
model: 'claude-opus-4-6-thinking',
|
||||
label: 'Claude Opus 4.6 Thinking',
|
||||
label: 'Claude Opus 4.6 (Thinking)',
|
||||
remainingPercent: 100,
|
||||
resetSeconds: null,
|
||||
},
|
||||
{
|
||||
model: 'gemini-2.5-flash-lite',
|
||||
label: 'Gemini 2.5 Flash Lite',
|
||||
label: 'Gemini 3.1 Flash Lite',
|
||||
remainingPercent: 5,
|
||||
resetSeconds: 5,
|
||||
},
|
||||
].sort(compareAntigravityQuotaItems)
|
||||
|
||||
expect(items.map(item => item.model)).toEqual([
|
||||
'claude-opus-4-6-thinking',
|
||||
'gemini-pro-agent',
|
||||
'gemini-3-flash-agent',
|
||||
'gemini-3.5-flash-low',
|
||||
'gemini-3.5-flash-extra-low',
|
||||
'claude-opus-4-6-thinking',
|
||||
'gemini-2.5-flash-lite',
|
||||
'tab_flash_lite_preview',
|
||||
'chat_20706',
|
||||
|
||||
@@ -6,38 +6,40 @@ export interface AntigravityQuotaSortableItem {
|
||||
}
|
||||
|
||||
const ANTIGRAVITY_MODEL_LABELS: Record<string, string> = {
|
||||
'claude-opus-4-6-thinking': 'Claude Opus 4.6 Thinking',
|
||||
'claude-sonnet-4-6': 'Claude Sonnet 4.6',
|
||||
'gemini-3-flash-agent': 'Gemini 3.5 Flash High',
|
||||
'gemini-3.5-flash-low': 'Gemini 3.5 Flash Medium',
|
||||
'gemini-3.5-flash-extra-low': 'Gemini 3.5 Flash Low',
|
||||
'gemini-3.1-pro-high': 'Gemini 3.1 Pro High',
|
||||
'gemini-3.1-pro-low': 'Gemini 3.1 Pro Low',
|
||||
'gemini-pro-agent': 'Gemini 3.1 Pro High',
|
||||
'gemini-pro-agent': 'Gemini 3.1 Pro (High)',
|
||||
'gemini-3.1-pro-high': 'Gemini 3.1 Pro (High)',
|
||||
'gemini-3.1-pro-low': 'Gemini 3.1 Pro (Low)',
|
||||
'gemini-3-flash-agent': 'Gemini 3.5 Flash (High)',
|
||||
'gemini-3.5-flash-low': 'Gemini 3.5 Flash (Medium)',
|
||||
'gemini-3.5-flash-extra-low': 'Gemini 3.5 Flash (Low)',
|
||||
'claude-opus-4-6-thinking': 'Claude Opus 4.6 (Thinking)',
|
||||
'claude-sonnet-4-6': 'Claude Sonnet 4.6 (Thinking)',
|
||||
'claude-sonnet-4-6-thinking': 'Claude Sonnet 4.6 (Thinking)',
|
||||
'gemini-3.1-flash-image': 'Gemini 3.1 Flash Image',
|
||||
'gemini-3.1-flash-lite': 'Gemini 3.1 Flash Lite',
|
||||
'gemini-3-flash': 'Gemini 3 Flash',
|
||||
'gemini-2.5-pro': 'Gemini 2.5 Pro',
|
||||
'gemini-2.5-flash-thinking': 'Gemini 2.5 Flash Thinking',
|
||||
'gemini-2.5-flash': 'Gemini 2.5 Flash',
|
||||
'gemini-2.5-flash-lite': 'Gemini 2.5 Flash Lite',
|
||||
'gpt-oss-120b-medium': 'GPT-OSS 120B Medium',
|
||||
'gemini-2.5-flash-thinking': 'Gemini 3.1 Flash Lite',
|
||||
'gemini-2.5-flash': 'Gemini 3.1 Flash Lite',
|
||||
'gemini-2.5-flash-lite': 'Gemini 3.1 Flash Lite',
|
||||
'gpt-oss-120b-medium': 'GPT-OSS 120B (Medium)',
|
||||
'tab_flash_lite_preview': 'Tab Flash Lite Preview',
|
||||
'tab_jump_flash_lite_preview': 'Tab Jump Flash Lite Preview',
|
||||
'models/proactive-observer': 'Proactive Observer',
|
||||
}
|
||||
|
||||
const ANTIGRAVITY_MODEL_PRIORITY: Record<string, number> = {
|
||||
'claude-opus-4-6-thinking': 10,
|
||||
'claude-sonnet-4-6': 20,
|
||||
'gemini-3-flash-agent': 100,
|
||||
'gemini-3.5-flash-low': 110,
|
||||
'gemini-3.5-flash-extra-low': 120,
|
||||
'gemini-3.1-pro-high': 130,
|
||||
'gemini-pro-agent': 135,
|
||||
'gemini-3.1-pro-low': 140,
|
||||
'gemini-3.1-flash-image': 150,
|
||||
'gemini-3.1-flash-lite': 160,
|
||||
'gemini-pro-agent': 10,
|
||||
'gemini-3.1-pro-high': 10,
|
||||
'gemini-3.1-pro-low': 20,
|
||||
'gemini-3-flash-agent': 30,
|
||||
'gemini-3.5-flash-low': 40,
|
||||
'gemini-3.5-flash-extra-low': 50,
|
||||
'claude-opus-4-6-thinking': 60,
|
||||
'claude-sonnet-4-6': 70,
|
||||
'claude-sonnet-4-6-thinking': 70,
|
||||
'gemini-3.1-flash-image': 80,
|
||||
'gemini-3.1-flash-lite': 90,
|
||||
'gemini-3-flash': 180,
|
||||
'gemini-2.5-pro': 300,
|
||||
'gemini-2.5-flash-thinking': 310,
|
||||
|
||||
Reference in New Issue
Block a user