feat: Antigravity 和 Codex 服务支持

- 新增 Antigravity 服务:签名缓存、URL 可用性检测、信封处理
- 新增 Codex 服务:信封处理、元数据收集器
- 重构 provider transport 支持新的服务架构
- 新增 stream_bridge 和 upstream_stream_bridge 处理流式响应
- 优化 OAuth 工具函数
- 添加相关测试用例
This commit is contained in:
fawney19
2026-02-05 15:57:52 +08:00
parent ed2ff5c1d7
commit 440721368f
44 changed files with 3498 additions and 134 deletions

View File

@@ -0,0 +1,35 @@
from __future__ import annotations
from src.services.antigravity.constants import DUMMY_THOUGHT_SIGNATURE
from src.services.antigravity.signature_cache import ThinkingSignatureCache
def test_get_or_dummy_returns_dummy_for_gemini_models() -> None:
cache = ThinkingSignatureCache(maxsize=10)
assert cache.get_or_dummy("gemini-3-pro", "thinking...") == DUMMY_THOUGHT_SIGNATURE
def test_get_or_dummy_returns_none_for_non_gemini_models() -> None:
cache = ThinkingSignatureCache(maxsize=10)
assert cache.get_or_dummy("claude-sonnet", "thinking...") is None
def test_cached_signature_preferred() -> None:
cache = ThinkingSignatureCache(maxsize=10)
cache.cache("gemini-3-pro", "t", "sig-1")
assert cache.get_or_dummy("gemini-3-pro", "t") == "sig-1"
def test_eviction_fifo() -> None:
cache = ThinkingSignatureCache(maxsize=4)
cache.cache("gemini-3-pro", "t1", "s1")
cache.cache("gemini-3-pro", "t2", "s2")
cache.cache("gemini-3-pro", "t3", "s3")
cache.cache("gemini-3-pro", "t4", "s4")
# Trigger eviction (evict 1 key when maxsize=4)
cache.cache("gemini-3-pro", "t5", "s5")
# Oldest key should be gone
assert cache.get_or_dummy("gemini-3-pro", "t1") == DUMMY_THOUGHT_SIGNATURE