Выберите модель

Прямой доступ к модели позволяет явно выбрать версию Gemini Nano, используемую вашим приложением. Настроив этап выпуска модели и предпочтения производительности, вы сможете раньше получить доступ к новым возможностям модели или оптимизировать свое приложение для конкретных аппаратных ограничений.

Конфигурации моделей

Чтобы выбрать определенную модель, необходимо настроить два ключевых параметра в классе ModelConfig: стадию выпуска и предпочтительную модель.

Этапы выпуска

Вы можете выбрать стабильную или предварительную версию модели.

  • Стабильная (ModelReleaseStage.STABLE). Выбирается последняя версия модели, которая полностью протестирована и используется на устройствах пользователей. Этот вариант используется по умолчанию.
  • Предварительная версия (ModelReleaseStage.PREVIEW). Выбирается последняя версия модели на этапе предварительного просмотра. На этом этапе вы можете протестировать бета-функции или новые архитектуры моделей, прежде чем они будут развернуты в стабильной версии.

Требования и инструкции по регистрации в программе предварительного доступа для разработчиков можно найти в руководстве по предварительной версии AICore для разработчиков.

Предпочтительная модель

Предпочтения модели позволяют указать, какие характеристики производительности наиболее важны для вашего случая использования.

  • Полная (ModelPreference.FULL). Рекомендуется, если точность и возможности модели важнее скорости.
  • Быстро (ModelPreference.FAST). Этот вариант рекомендуется для приложений, чувствительных к задержкам и требующих минимального времени ответа.

Настройте генеративную модель

Чтобы использовать определенный вариант модели, необходимо определить ModelConfig и передать его в GenerationConfig при инициализации клиента.

В следующем примере показано, как настроить клиент для использования модели Fast на этапе Preview:

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);

Доступность модели

Не все устройства поддерживают все комбинации этапов выпуска и предпочтительных моделей. Предварительные версии моделей доступны только на поддерживаемых устройствах, перечисленных в руководстве по предварительной версии AICore для разработчиков.

В API нет метода, который позволяет получить список всех доступных конфигураций моделей. Вместо этого инициализируйте клиент с нужной конфигурацией, а затем проверьте его статус.

  • Инициализируйте клиент. Создайте экземпляр GenerativeModel, используя нужный ModelConfig.
  • Проверьте статус. Вызовите метод checkStatus() для экземпляра, чтобы убедиться, что определенный вариант модели доступен на устройстве.

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));

Чтобы обеспечить совместимость с возможными будущими конфигурациями, SDK разработан так, чтобы не выдавать ошибку GenAiException во время инициализации клиента, полагаясь исключительно на метод checkStatus() для проверки доступности.

Рекомендации

  • Реализуйте резервные стратегии. Поскольку модели предварительного просмотра могут быть доступны не на всех устройствах, всегда реализуйте резервную стратегию. Если для настроек предпросмотра checkStatus() возвращает false, приложение должно корректно вернуться к ModelReleaseStage.STABLE и ModelPreference.FULL.
  • Используйте этапы выпуска моделей для разработки и производства. Используйте этап Предварительная версия во время разработки и внутреннего тестирования, чтобы оценить предстоящие улучшения модели. Переключитесь на стабильную версию для рабочих релизов, чтобы обеспечить стабильную работу для пользователей.

Известные проблемы

  • Некоторые устройства на этапе предварительного выпуска не поддерживают несколько вариантов в выходных данных и возвращают ошибку, если значение candidateCount больше 1. Подробную информацию можно найти в документации по API.
  • Некоторые реализации не поддерживают несколько образцов. Производительность будет ниже, чем в финальной версии.