fix(gemini): strip native self prefixes before generateContent (#36141)
Strip `google/` and `gemini/` self-prefixes before native Gemini generateContent calls, and keep provider-normalization expectations aligned.
This commit is contained in:
@@ -198,6 +198,45 @@ def test_native_client_uses_x_goog_api_key_and_native_models_endpoint(monkeypatc
|
||||
assert response.choices[0].message.content == "hello"
|
||||
|
||||
|
||||
@pytest.mark.parametrize("model, expected", [
|
||||
("google/gemini-2.0-flash", "gemini-2.0-flash"),
|
||||
("gemini/gemini-3-pro-preview", "gemini-3-pro-preview"),
|
||||
("Google/Gemini-2.5-Pro", "Gemini-2.5-Pro"),
|
||||
("models/gemini-x", "models/gemini-x"),
|
||||
("tunedModels/my-tune", "tunedModels/my-tune"),
|
||||
])
|
||||
def test_bare_gemini_model_id_strips_only_self_prefix(model, expected):
|
||||
from agent.gemini_native_adapter import bare_gemini_model_id
|
||||
|
||||
assert bare_gemini_model_id(model) == expected
|
||||
|
||||
|
||||
def test_native_client_strips_self_prefix_from_model_url(monkeypatch):
|
||||
from agent.gemini_native_adapter import GeminiNativeClient
|
||||
|
||||
recorded = {}
|
||||
|
||||
class DummyHTTP:
|
||||
def post(self, url, json=None, headers=None, timeout=None):
|
||||
recorded["url"] = url
|
||||
return DummyResponse(payload={
|
||||
"candidates": [{"content": {"parts": [{"text": "ok"}]}, "finishReason": "STOP"}],
|
||||
"usageMetadata": {"promptTokenCount": 1, "candidatesTokenCount": 1, "totalTokenCount": 2},
|
||||
})
|
||||
|
||||
def close(self):
|
||||
return None
|
||||
|
||||
monkeypatch.setattr("agent.gemini_native_adapter.httpx.Client", lambda *a, **k: DummyHTTP())
|
||||
client = GeminiNativeClient(api_key="AIza-test", base_url="https://generativelanguage.googleapis.com/v1beta")
|
||||
client.chat.completions.create(
|
||||
model="google/gemini-2.0-flash",
|
||||
messages=[{"role": "user", "content": "Hello"}],
|
||||
)
|
||||
|
||||
assert recorded["url"] == "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent"
|
||||
|
||||
|
||||
def test_native_http_error_keeps_status_and_retry_after():
|
||||
from agent.gemini_native_adapter import gemini_http_error
|
||||
|
||||
|
||||
Reference in New Issue
Block a user