Skip to content

Commit 74e239c

Browse files
committed
Update antigravity.py
1 parent c881c99 commit 74e239c

1 file changed

Lines changed: 31 additions & 9 deletions

File tree

src/api/antigravity.py

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,13 @@ def _extract_first_user_text(request_payload: Dict[str, Any]) -> str:
5656

5757

5858
def _generate_request_id() -> str:
59-
return f"agent/{uuid.uuid4()}"
59+
"""生成完整格式的 requestId,对齐参考实现:
60+
agent/{uuid}/{毫秒时间戳}/{trajectory_id}/{step}
61+
"""
62+
trajectory_id = str(uuid.uuid4())
63+
step = 1
64+
ms = int(datetime.now(timezone.utc).timestamp() * 1000)
65+
return f"agent/{uuid.uuid4()}/{ms}/{trajectory_id}/{step}"
6066

6167

6268
def _build_labels(model: str, trajectory_id: str, step: int) -> Dict[str, str]:
@@ -102,6 +108,7 @@ async def wrap_cli_request(
102108
gemini_request: Dict[str, Any],
103109
model: str,
104110
project_id: str,
111+
enable_credit: bool = False,
105112
) -> Tuple[Dict[str, Any], str]:
106113
"""
107114
将 Gemini 格式请求包装成 Antigravity CLI 格式。
@@ -143,14 +150,19 @@ async def wrap_cli_request(
143150
"model": model,
144151
"userAgent": "antigravity",
145152
"requestType": "agent",
146-
"enabledCreditTypes": ["GOOGLE_ONE_AI"],
147153
}
154+
if enable_credit:
155+
payload["enabledCreditTypes"] = ["GOOGLE_ONE_AI"]
148156
return payload, request_id
149157

150158

151159
# ==================== 辅助函数 ====================
152160

153-
def build_antigravity_headers(access_token: str, extra_headers: Optional[Dict[str, str]] = None) -> Dict[str, str]:
161+
def build_antigravity_headers(
162+
access_token: str,
163+
extra_headers: Optional[Dict[str, str]] = None,
164+
model_name: str = "",
165+
) -> Dict[str, str]:
154166
"""构建 Antigravity CLI API 请求头。"""
155167
headers = {
156168
"User-Agent": ANTIGRAVITY_USER_AGENT,
@@ -159,11 +171,19 @@ def build_antigravity_headers(access_token: str, extra_headers: Optional[Dict[st
159171
"Accept": "*/*",
160172
"Accept-Encoding": "gzip",
161173
"Connection": "close",
174+
"requestId": f"req-{uuid.uuid4()}",
162175
}
163176

164177
for key, value in _sanitize_antigravity_headers(extra_headers).items():
165178
headers.setdefault(key, value)
166179

180+
# 根据模型名称判断 request_type
181+
if model_name:
182+
if "image" in model_name.lower():
183+
headers["requestType"] = "image_gen"
184+
else:
185+
headers["requestType"] = "agent"
186+
167187
return headers
168188

169189

@@ -237,6 +257,7 @@ async def stream_request(
237257
current_file, credential_data = cred_result
238258
access_token = credential_data.get("access_token") or credential_data.get("token")
239259
project_id = credential_data.get("project_id", "")
260+
enable_credit = bool(credential_data.get("enable_credit", False))
240261

241262
if not access_token:
242263
log.error(f"[ANTIGRAVITY STREAM] No access token in credential: {current_file}")
@@ -251,11 +272,11 @@ async def stream_request(
251272
antigravity_url = await get_antigravity_api_url()
252273
target_url = f"{antigravity_url}/v1internal:streamGenerateContent?alt=sse"
253274

254-
auth_headers = build_antigravity_headers(access_token, headers)
275+
auth_headers = build_antigravity_headers(access_token, headers, model_name)
255276

256277
# 构建 CLI 格式请求体
257278
inner_request = body.get("request", body)
258-
final_payload, _ = await wrap_cli_request(inner_request, model_name, project_id)
279+
final_payload, _ = await wrap_cli_request(inner_request, model_name, project_id, enable_credit)
259280

260281
# 3. 调用stream_post_async进行请求
261282
retry_config = await get_retry_config()
@@ -513,6 +534,7 @@ async def non_stream_request(
513534
current_file, credential_data = cred_result
514535
access_token = credential_data.get("access_token") or credential_data.get("token")
515536
project_id = credential_data.get("project_id", "")
537+
enable_credit = bool(credential_data.get("enable_credit", False))
516538

517539
if not access_token:
518540
log.error(f"[ANTIGRAVITY] No access token in credential: {current_file}")
@@ -526,11 +548,11 @@ async def non_stream_request(
526548
antigravity_url = await get_antigravity_api_url()
527549
target_url = f"{antigravity_url}/v1internal:generateContent"
528550

529-
auth_headers = build_antigravity_headers(access_token, headers)
551+
auth_headers = build_antigravity_headers(access_token, headers, model_name)
530552

531553
# 构建 CLI 格式请求体
532554
inner_request = body.get("request", body)
533-
final_payload, _ = await wrap_cli_request(inner_request, model_name, project_id)
555+
final_payload, _ = await wrap_cli_request(inner_request, model_name, project_id, enable_credit)
534556

535557
# 3. 调用post_async进行请求
536558
retry_config = await get_retry_config()
@@ -756,7 +778,7 @@ async def fetch_available_models() -> List[Dict[str, Any]]:
756778
return []
757779

758780
# 构建请求头
759-
headers = build_antigravity_headers(access_token)
781+
headers = build_antigravity_headers(access_token, model_name="agent")
760782

761783
try:
762784
# 使用 POST 请求获取模型列表
@@ -840,7 +862,7 @@ async def fetch_quota_info(access_token: str) -> Dict[str, Any]:
840862
}
841863
"""
842864

843-
headers = build_antigravity_headers(access_token)
865+
headers = build_antigravity_headers(access_token, model_name="agent")
844866

845867
try:
846868
antigravity_url = await get_antigravity_api_url()

0 commit comments

Comments
 (0)