Com a API Prompt, você pode selecionar explicitamente a versão do Gemini Nano usada pelo seu app. Ao configurar a fase de lançamento do modelo e a preferência de desempenho, você pode acessar novos recursos do modelo mais cedo ou otimizar seu app para restrições de hardware específicas.
Entender as configurações do modelo
Para selecionar um modelo específico, configure dois parâmetros principais na classe ModelConfig: o estágio de lançamento e a preferência de modelo.
Etapas de lançamento
O estágio de lançamento permite escolher entre um modelo estável ou de prévia:
- Estável (
ModelReleaseStage.STABLE): seleciona a versão mais recente do modelo totalmente testada e disponível em dispositivos do consumidor. Essa é a configuração padrão. - Prévia (
ModelReleaseStage.PREVIEW): seleciona a versão mais recente do modelo na fase de prévia. Essa etapa permite testar recursos Beta ou arquiteturas de modelo mais recentes antes da implantação geral na etapa estável.
Para conferir os pré-requisitos e as instruções de inscrição na prévia para desenvolvedores, consulte o guia da prévia do AICore para desenvolvedores.
Preferência de modelo
Com a preferência de modelo, você especifica quais características de desempenho são mais importantes para seu caso de uso.
- Completa (
ModelPreference.FULL): essa preferência é recomendada quando a acurácia do modelo e os recursos completos são priorizados em vez da velocidade. - Rápido (
ModelPreference.FAST): essa preferência é recomendada para apps sensíveis à latência que exigem tempos de resposta mínimos.
Configurar o modelo generativo
Para usar uma variante de modelo específica, defina um ModelConfig e transmita-o para
seu GenerationConfig ao inicializar o cliente.
O exemplo a seguir demonstra como configurar o cliente para usar um modelo Fast da fase Prévia:
Kotlin
// Define the configuration with a specific stage and preference
val previewFastConfig = generationConfig {
modelConfig = modelConfig {
releaseStage = ModelReleaseStage.PREVIEW
preference = ModelPreference.FAST
}
}
// Initialize the GenerativeModel with the configuration
val generativeModel = Generation.getClient(previewFastConfig)
Java
// Define the configuration with a specific stage and preference
GenerationConfig previewFastConfig = new GenerationConfig.Builder()
.setModelConfig(new ModelConfig.Builder()
.setReleaseStage(ModelReleaseStage.PREVIEW)
.setPreference(ModelPreference.FAST)
.build())
.build();
// Initialize the GenerativeModel with the configuration
GenerativeModel generativeModel = Generation.INSTANCE.getClient(previewFastConfig);
Verificar a disponibilidade do modelo
Nem todos os dispositivos oferecem suporte a todas as combinações de estágio de lançamento e preferência de modelo. Os modelos de prévia estão disponíveis apenas na lista de dispositivos compatíveis no guia da Prévia do AICore para desenvolvedores.
A API não oferece um método para listar todas as configurações de modelo disponíveis de antemão. Em vez disso, inicialize o cliente com a configuração desejada e verifique o status dele.
- Inicialize o cliente:crie a instância
GenerativeModelusando seuModelConfigpreferido. Verificar status:chame o método
checkStatus()na instância para verificar se a variante do modelo específico está disponível no dispositivo.
Kotlin
val generativeModel = Generation.getClient(previewFastConfig)
// Verify that the specific preview model is available
val status = generativeModel.checkStatus()
when (status) {
FeatureStatus.UNAVAILABLE -> {
// Specified preview model is not available on this device
}
FeatureStatus.DOWNLOADABLE -> {
// Specified preview model is available for this device, but not downloaded yet.
// Model may be downloaded through the AICore app or by calling generativeModel.download()
}
FeatureStatus.AVAILABLE -> {
// Proceed with inference
}
FeatureStatus.DOWNLOADING -> {
// Specified preview model is downloading
}
}
Java
GenerativeModel generativeModel = Generation.INSTANCE.getClient(previewFastConfig);
// For Java, use GenerativeModelFutures if you prefer ListenableFuture
GenerativeModelFutures generativeModelFutures = GenerativeModelFutures.from(generativeModel);
Futures.addCallback(
generativeModelFutures.checkStatus(),
new FutureCallback<Integer>() {
@Override
public void onSuccess(Integer status) {
if (status == FeatureStatus.AVAILABLE) {
// Proceed with inference
} else if (status == FeatureStatus.DOWNLOADING) {
// Specified preview model is downloading
} else if (status == FeatureStatus.DOWNLOADABLE) {
// Specified preview model is available for this device, but not downloaded yet.
// Call generativeModelFutures.download(callback) or use the AICore app.
} else if (status == FeatureStatus.UNAVAILABLE) {
// Specified preview model is not available on this device
}
}
@Override
public void onFailure(Throwable t) {
// Handle failure
}
},
ContextCompat.getMainExecutor(context));
Para garantir a compatibilidade com possíveis configurações futuras, o SDK foi
projetado para evitar o lançamento de um GenAiException durante a inicialização do cliente,
dependendo apenas do método checkStatus() para verificação de disponibilidade.
Práticas recomendadas
- Implemente estratégias de substituição:como não há garantia de que os modelos de prévia estejam disponíveis em todos os dispositivos, sempre implemente uma estratégia de substituição. Se
checkStatus()retornarfalsepara uma configuração de prévia, seu app deverá reverter normalmente paraModelReleaseStage.STABLEeModelPreference.FULL. - Use as etapas de lançamento do modelo para desenvolvimento e produção:use a etapa Prévia durante o desenvolvimento e os testes internos para avaliar as próximas melhorias do modelo. Mude para Stable nas suas versões de produção públicas para garantir um comportamento consistente para os usuários.
Problemas conhecidos
- Alguns dispositivos na fase de pré-lançamento não são compatíveis com vários candidatos na saída e retornam um erro se
candidateCountfor definido como maior que 1. Consulte a referência da API para mais detalhes. - Não é possível usar várias amostras em algumas implementações. O desempenho será mais lento do que na produção final.
- No momento, a entrada de imagem só funciona no Pixel 10.
- O modelo
nanov4-fastpode dar respostas ruins para determinados comandos em alguns dispositivos.