fix: use correct google-genai async API and remove debug endpoint
The google-genai SDK uses `client.aio.models.generate_content()` for async calls, not `client.models.generate_content_async()` which doesn't exist. Also removes the temporary /ai/provider-debug endpoint. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -54,34 +54,6 @@ def _require_ai_enabled() -> None:
|
|||||||
detail="AI flow builder is not configured. Set GOOGLE_AI_API_KEY or ANTHROPIC_API_KEY.",
|
detail="AI flow builder is not configured. Set GOOGLE_AI_API_KEY or ANTHROPIC_API_KEY.",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/provider-debug")
|
|
||||||
async def provider_debug(
|
|
||||||
current_user: Annotated[User, Depends(get_current_active_user)],
|
|
||||||
_: None = Depends(require_engineer_or_admin),
|
|
||||||
):
|
|
||||||
"""Temporary debug endpoint — shows which AI provider would be selected."""
|
|
||||||
from app.core.ai_provider import get_ai_provider
|
|
||||||
has_gemini_key = bool(settings.GOOGLE_AI_API_KEY)
|
|
||||||
has_anthropic_key = bool(settings.ANTHROPIC_API_KEY)
|
|
||||||
provider_setting = settings.AI_PROVIDER
|
|
||||||
try:
|
|
||||||
provider = get_ai_provider()
|
|
||||||
provider_type = type(provider).__name__
|
|
||||||
except RuntimeError as e:
|
|
||||||
provider_type = f"ERROR: {e}"
|
|
||||||
return {
|
|
||||||
"ai_provider_setting": provider_setting,
|
|
||||||
"has_gemini_key": has_gemini_key,
|
|
||||||
"gemini_key_prefix": settings.GOOGLE_AI_API_KEY[:8] + "..." if settings.GOOGLE_AI_API_KEY else None,
|
|
||||||
"has_anthropic_key": has_anthropic_key,
|
|
||||||
"anthropic_key_prefix": settings.ANTHROPIC_API_KEY[:8] + "..." if settings.ANTHROPIC_API_KEY else None,
|
|
||||||
"selected_provider": provider_type,
|
|
||||||
"gemini_model": settings.AI_MODEL_GEMINI,
|
|
||||||
"anthropic_model": settings.AI_MODEL_ANTHROPIC,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@router.get("/quota", response_model=AIQuotaStatusResponse)
|
@router.get("/quota", response_model=AIQuotaStatusResponse)
|
||||||
async def get_quota(
|
async def get_quota(
|
||||||
current_user: Annotated[User, Depends(get_current_active_user)],
|
current_user: Annotated[User, Depends(get_current_active_user)],
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ class GeminiProvider(AIProvider):
|
|||||||
response_mime_type="application/json",
|
response_mime_type="application/json",
|
||||||
)
|
)
|
||||||
|
|
||||||
response = await client.models.generate_content_async(
|
response = await client.aio.models.generate_content(
|
||||||
model=self._model,
|
model=self._model,
|
||||||
contents=contents,
|
contents=contents,
|
||||||
config=config,
|
config=config,
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ class TestGeminiProvider:
|
|||||||
mock_response.usage_metadata = mock_usage
|
mock_response.usage_metadata = mock_usage
|
||||||
|
|
||||||
mock_client = MagicMock()
|
mock_client = MagicMock()
|
||||||
mock_client.models.generate_content_async = AsyncMock(
|
mock_client.aio.models.generate_content = AsyncMock(
|
||||||
return_value=mock_response
|
return_value=mock_response
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -172,7 +172,7 @@ class TestGeminiProvider:
|
|||||||
assert input_tokens == 80
|
assert input_tokens == 80
|
||||||
assert output_tokens == 40
|
assert output_tokens == 40
|
||||||
|
|
||||||
mock_client.models.generate_content_async.assert_called_once()
|
mock_client.aio.models.generate_content.assert_called_once()
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_generate_json_handles_none_usage(self):
|
async def test_generate_json_handles_none_usage(self):
|
||||||
@@ -185,7 +185,7 @@ class TestGeminiProvider:
|
|||||||
mock_response.usage_metadata = mock_usage
|
mock_response.usage_metadata = mock_usage
|
||||||
|
|
||||||
mock_client = MagicMock()
|
mock_client = MagicMock()
|
||||||
mock_client.models.generate_content_async = AsyncMock(
|
mock_client.aio.models.generate_content = AsyncMock(
|
||||||
return_value=mock_response
|
return_value=mock_response
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user