googlesamples / googlesamples/mlkit

[GenAI Prompt API] 1.0.0-beta3 regression: default ModelConfig switched the requested AICore feature from 636 to 648, which no shipping AICore provides

Open
#1,061 0 comments 3 reactions 0 assignees View on GitHub
Dominant language
Kotlin
Stars
4.3k
Forks
3.1k
PR merge metrics
No merged PRs in 30d

Description

### Summary

`com.google.mlkit:genai-prompt:1.0.0-beta3` cannot reach the Prompt API at all on a Pixel 10 where **beta1 and beta2 work fine**. `checkStatus()` throws `GenAiException(errorCode=606) FEATURE_NOT_FOUND` for every `ModelConfig`.

The cause is a **change in the requested AICore feature ID**: the default `ModelConfig` requests feature **636** in beta2 and feature **648** in beta3. No shipping AICore provides 648.

I verified this is **not** an AICore configuration-download issue: **beta2 succeeds on the same device, in the same session, minutes apart, with the same source code.** Only the AAR version differs.

### Environment

| | |
|---|---|
| Device | Google Pixel 10 (`frankel`), Tensor G5 |
| OS | Android 16, build `CP1A.260505.005`, security patch 2026-05-05 |
| Bootloader | **locked** (`ro.boot.verifiedbootstate=green`, `ro.boot.flash.locked=1`) |
| AICore | `0.release.prod_aicore_20260528.01_RC08.934495584` (versionCode 456989), **release channel**, installed from Play, no update offered |
| Play services | 26.23.34 |
| Google Play system update | 2026-07-01S+ |
| Account | not a member of `aicore-experimental` or any AICore testing group |

Pixel 10 is listed as a supported nano-v3 device for the Prompt API on the [official device support page](https://developers.google.com/ml-kit/genai#prompt-device).

### Steps to reproduce

1. `Generation.getClient()` (or `getClient(GenerationConfig)` with any `ModelConfig`)
2. `checkStatus()`
3. It throws instead of returning a `FeatureStatus`.

```
GenAiException(errorCode=606): [ErrorCode 606] AICore failed with error type
3-PREPARATION_ERROR and error code 606-FEATURE_NOT_FOUND: Feature 648 is not available.
```

### Evidence 1 — version A/B/A on one device, one session

Same source code, same device, same AICore. Only the `genai-prompt` version changed.

| Time | genai-prompt | `checkStatus()` (default `ModelConfig`) |
|---|---|---|
| 10:38 | **beta3** | throws 606, Feature **648** not available |
| 10:54 | **beta2** | returns **3 (AVAILABLE)** — inference then runs normally |
| 10:56 | **beta3** | throws 606, Feature **648** not available |
| 11:28 | **beta1** | returns **3 (AVAILABLE)** — inference then runs normally |

**This rules out "AICore hasn't finished downloading the latest configurations"** (the documented cause of 606): if the config were missing, beta1/beta2 would fail too. The device had also been rebooted and left connected to Wi-Fi, per the [troubleshooting guidance](https://developers.google.com/ml-kit/genai/prompt/android/get-started).

Additional control: **ML Kit GenAI Summarization works on the same device in the same session** (`nano-v3`, ~9.9 s for a Japanese article). AICore itself is healthy.

### Evidence 2 — the requested feature ID changed from 636 to 648

On the Pixel 10, beta2 **succeeds**, so its requested feature ID is not visible (the ID only appears in the error message).

To observe it, I ran the **same beta2 build on a Pixel 9a**, where the Prompt API is not provisioned at all. There, beta2 fails and prints the ID it asked for:

| `ModelConfig` | beta2 requests | beta3 requests |
|---|---|---|
| `default` | **636** | **648** |
| `STABLE` × `FULL` | **636** | **648** |
| `STABLE` × `FAST` | 645 | 645 |
| `PREVIEW` × `FAST` | 646 | 646 |
| `PREVIEW` × `FULL` | 647 | 647 |

Feature IDs are requested by the library, not reported by the device, so this is a property of the AAR version.

**beta3 changed `default` / `STABLE`×`FULL` from 636 to 648.** 636 exists on the shipping AICore (`prod_aicore_20260528`); 648 does not. Every publicly reported feature ID for beta1/beta2 that I could find is also 636, which is consistent.

In beta3, **no `ModelConfig` combination is reachable** — there is no workaround at the API level. (646/647 being absent is expected: PREVIEW requires the AICore Developer Preview program. The problem is the STABLE path.)

### Evidence 3 — the regression is in `genai-prompt`, not `genai-common`

beta3 also bumps its `genai-common` dependency from beta3 to beta4. To separate the two, I forced `genai-common:1.0.0-beta4` while keeping `genai-prompt:1.0.0-beta2`:

| Combination | Result |
|---|---|
| genai-prompt beta2 + genai-common beta3 (default) | works |
| **genai-prompt beta2 + genai-common beta4 (forced)** | **works** |
| genai-prompt beta3 + genai-common beta4 (default) | fails |

So the regression is in **genai-prompt beta3 itself**.

### Expected

`genai-prompt:1.0.0-beta3` should request an AICore feature that shipping AICore builds actually provide — or the release notes should state the minimum AICore version it requires. Currently [the release notes](https://developers.google.com/ml-kit/release-notes) list beta3 with a date and no description, and the get-started page still documents beta2.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start at the Android Prompt API entry points named in the report, Generation.getClient(), ModelConfig, and checkStatus(), and compare genai-prompt beta2 with beta3. Reproduce the feature ID difference on the stated devices and verify that the fix makes beta3 use a feature supplied by shipping AICore, or documents the required minimum AICore version.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, kotlin
Domain
ai, mobile-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.