diff --git a/app-release-signed.apk b/app-release-signed.apk index 4e501f4..e6aa551 100644 Binary files a/app-release-signed.apk and b/app-release-signed.apk differ diff --git a/app/src/main/kotlin/com/google/ai/sample/ApiKeyDialog.kt b/app/src/main/kotlin/com/google/ai/sample/ApiKeyDialog.kt index f4836ea..83e39b8 100644 --- a/app/src/main/kotlin/com/google/ai/sample/ApiKeyDialog.kt +++ b/app/src/main/kotlin/com/google/ai/sample/ApiKeyDialog.kt @@ -26,7 +26,7 @@ fun ApiKeyDialog( ) { var apiKeyInput by remember { mutableStateOf("") } var errorMessage by remember { mutableStateOf("") } - var selectedProvider by remember { mutableStateOf(ApiProvider.CEREBRAS) } + var selectedProvider by remember { mutableStateOf(ApiProvider.VERCEL) } val apiKeys = remember { mutableStateMapOf>() } var selectedKeyIndex by remember { mutableStateOf(apiKeyManager.getCurrentKeyIndex(selectedProvider)) } val context = LocalContext.current @@ -38,6 +38,7 @@ fun ApiKeyDialog( // Load initial keys LaunchedEffect(Unit) { + loadKeysForProvider(ApiProvider.VERCEL) loadKeysForProvider(ApiProvider.GOOGLE) loadKeysForProvider(ApiProvider.CEREBRAS) } @@ -67,7 +68,7 @@ fun ApiKeyDialog( // Provider selection Row(Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) { - listOf(ApiProvider.CEREBRAS, ApiProvider.GOOGLE).forEach { provider -> + listOf(ApiProvider.VERCEL, ApiProvider.CEREBRAS, ApiProvider.GOOGLE).forEach { provider -> FilterChip( selected = selectedProvider == provider, onClick = { @@ -84,10 +85,10 @@ fun ApiKeyDialog( // Get API Key button Button( onClick = { - val url = if (selectedProvider == ApiProvider.GOOGLE) { - "https://makersuite.google.com/app/apikey" - } else { - "https://cloud.cerebras.ai/" + val url = when (selectedProvider) { + ApiProvider.GOOGLE -> "https://makersuite.google.com/app/apikey" + ApiProvider.CEREBRAS -> "https://cloud.cerebras.ai/" + ApiProvider.VERCEL -> "https://vercel.com/ai-gateway" } val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) context.startActivity(intent) @@ -193,7 +194,7 @@ fun ApiKeyDialog( .padding(top = 16.dp), horizontalArrangement = Arrangement.End ) { - if (!isFirstLaunch || (apiKeys[ApiProvider.GOOGLE]?.isNotEmpty() == true || apiKeys[ApiProvider.CEREBRAS]?.isNotEmpty() == true)) { + if (!isFirstLaunch || (apiKeys[ApiProvider.VERCEL]?.isNotEmpty() == true || apiKeys[ApiProvider.GOOGLE]?.isNotEmpty() == true || apiKeys[ApiProvider.CEREBRAS]?.isNotEmpty() == true)) { TextButton(onClick = onDismiss) { Text("Close") } diff --git a/app/src/main/kotlin/com/google/ai/sample/feature/live/LiveApiManager.kt b/app/src/main/kotlin/com/google/ai/sample/feature/live/LiveApiManager.kt index e1561f6..1dcb873 100644 --- a/app/src/main/kotlin/com/google/ai/sample/feature/live/LiveApiManager.kt +++ b/app/src/main/kotlin/com/google/ai/sample/feature/live/LiveApiManager.kt @@ -151,7 +151,6 @@ class LiveApiManager( put("maxOutputTokens", 8192) if (apiModelName == "gemini-live-2.5-flash-native-audio") { put("responseModalities", JSONArray()) // Empty array for text-only - put("turnComplete", true) } else { put("responseModalities", JSONArray().apply { put("TEXT")