Files
Aether/tests/services/test_provider_transport_antigravity.py
fawney19 62f852b851 feat: Antigravity 端点签名迁移至 gemini:chat,流式 usage 提取重构与请求详情自动刷新
- Antigravity 端点签名从 gemini:cli 统一为 gemini:chat,保留向后兼容,含 DB 迁移
- 流式处理中 usage/completion/text 提取抽离为 _update_ctx_from_provider_event,
  支持 envelope 解包后提取,避免格式转换流程中重复计数
- 新增 has_format_conversion 属性,区分真正的格式转换与 envelope rewrite,
  修正 usage 展示层的格式转换标记
- 请求详情抽屉对未完成请求支持自动轮询刷新,关闭时自动停止
- 按次计费样式调整;实际成本仅在倍率非 1.0 时显示;缓存日志降级为 trace
2026-02-07 02:59:02 +08:00

56 lines
1.7 KiB
Python

from __future__ import annotations
from dataclasses import dataclass
from types import SimpleNamespace
from unittest.mock import patch
from src.services.provider.adapters.antigravity.constants import PROD_BASE_URL
from src.services.provider.transport import build_provider_url, get_antigravity_base_url
@dataclass
class _DummyEndpoint:
base_url: str
api_format: str
custom_path: str | None = None
provider: object | None = None
def test_antigravity_uses_v1internal_path_and_sets_contextvar() -> None:
endpoint = _DummyEndpoint(
base_url="https://ignored.example.com",
api_format="gemini:chat",
provider=SimpleNamespace(provider_type="antigravity"),
)
with patch(
"src.services.provider.adapters.antigravity.plugin.url_availability.get_ordered_urls",
return_value=[PROD_BASE_URL],
):
url = build_provider_url(
endpoint, # type: ignore[arg-type]
path_params={"model": "gemini-2.0-flash"},
is_stream=True,
)
assert url.startswith(f"{PROD_BASE_URL}/v1internal:streamGenerateContent")
assert "alt=sse" in url
assert get_antigravity_base_url() == PROD_BASE_URL
def test_gemini_cli_non_antigravity_uses_v1beta_path_and_clears_contextvar() -> None:
endpoint = _DummyEndpoint(
base_url="https://generativelanguage.googleapis.com",
api_format="gemini:cli",
provider=SimpleNamespace(provider_type="gemini_cli"),
)
url = build_provider_url(
endpoint, # type: ignore[arg-type]
path_params={"model": "gemini-2.0-flash"},
is_stream=False,
)
assert "/v1beta/models/gemini-2.0-flash:generateContent" in url
assert get_antigravity_base_url() is None