Firebase AI Logic y sus SDKs de cliente antes se llamaban "Vertex AI in Firebase". Para reflejar mejor nuestros servicios y funciones ampliados (por ejemplo, ahora admitimos Gemini Developer API), cambiamos el nombre de nuestros servicios y los volvimos a empaquetar en Firebase AI Logic.
Para acceder de forma segura a los modelos de IA generativa de Google directamente desde tus apps web o para dispositivos móviles, ahora puedes elegir un proveedor de "Gemini API", ya sea el Agent Platform Gemini API (formerly Vertex AI), que está disponible desde hace mucho tiempo, o el Gemini Developer API. Esto significa que ahora tienes la opción de usar Gemini Developer API, que proporciona un nivel sin costo con límites de frecuencia y cuotas razonables.
Descripción general de los pasos para migrar a los SDKs de Firebase AI Logic
Paso 1: Elige el mejor proveedor de la "API de Gemini" para tu app y tus casos de uso.
Paso 2: Habilita las APIs necesarias.
Paso 3: Actualiza la biblioteca que se usa en tu app.
Paso 4: Actualiza la inicialización en tu app.
Paso 5: Actualiza tu código según las funciones que uses.
Paso 1: Elige el mejor proveedor de la "API de Gemini" para tu app
Con esta migración, puedes elegir un proveedor de "Gemini API":
Los SDKs antiguos de "Vertex AI in Firebase" solo podían usar el Agent Platform Gemini API (formerly Vertex AI).
Los nuevos SDKs de Firebase AI Logic te permiten elegir a qué proveedor de "Gemini API" quieres llamar directamente desde tu app web o para dispositivos móviles, ya sea Gemini Developer API o Agent Platform Gemini API (formerly Vertex AI).
Revisa las diferencias entre el uso de los dos proveedores de Gemini API, especialmente en términos de funciones compatibles, precios y límites de frecuencia. Por ejemplo, Gemini Developer API no admite la entrega de archivos con URLs de Cloud Storage, pero podría ser una buena opción si quieres aprovechar su nivel sin costo y su cuota razonable.
Paso 2: Habilita las APIs necesarias
Asegúrate de que todas las APIs necesarias estén habilitadas en tu proyecto de Firebase para usar el proveedor de "Gemini API" que elegiste.
Ten en cuenta que puedes tener habilitados ambos proveedores de APIs en tu proyecto al mismo tiempo.
Accede a la consola de Firebase y, luego, selecciona tu proyecto de Firebase.
En la consola de Firebase, ve a Servicios de IA > Lógica de IA.
Haz clic en Comenzar para iniciar un flujo de trabajo guiado que te ayudará a configurar las APIs requeridas y los recursos para tu proyecto.
Selecciona el proveedor de la "API de Gemini" que quieras usar con los SDKs de Firebase AI Logic. Puedes configurar y usar el otro proveedor de API más adelante, si lo deseas.
Gemini Developer API: Facturación opcional (disponible en el plan de precios Spark sin costo)
El flujo de trabajo de la consola habilitará las APIs requeridas y creará una clave de API de Gemini en tu proyecto.
No agregues esta clave de API de Gemini a la base de código de tu app. Obtén más información.Agent Platform Gemini API (formerly Vertex AI): Se requiere facturación (se necesita el plan de precios Blaze de pago por uso)
El flujo de trabajo de la consola habilitará las APIs necesarias en tu proyecto.
Continúa con esta guía de migración para actualizar la biblioteca y la inicialización en tu app.
Paso 3: Actualiza la biblioteca que se usa en tu app
Actualiza la base de código de tu app para usar la biblioteca de Firebase AI Logic.
Swift
En Xcode, con el proyecto de tu app abierto, actualiza el paquete de Firebase a la versión 12.5.0 o una posterior con una de las siguientes opciones:
Opción 1: Actualiza todos los paquetes. Para ello, navega a File > Packages > Update to Latest Package Versions.
Opción 2: Actualiza Firebase de forma individual. Para ello, navega al paquete de Firebase en la sección Package Dependencies. Haz clic con el botón derecho en el paquete de Firebase y, luego, selecciona Update Package.
Asegúrate de que el paquete de Firebase ahora muestre la versión 12.5.0 o una posterior. Si no es así, verifica que los requisitos del paquete que especificaste permitan la actualización a la versión 12.5.0 o una posterior.
Selecciona el destino de tu app en el editor de proyectos y, luego, navega a la sección Frameworks, Libraries, and Embedded Content.
Agrega la biblioteca nueva: Selecciona el botón + y, luego, agrega FirebaseAILogic desde el paquete de Firebase.
Después de terminar de migrar tu app (consulta las secciones restantes de esta guía), asegúrate de quitar la biblioteca anterior:
Selecciona FirebaseVertexAI-Preview y, luego, presiona el botón –.
Kotlin
En el archivo Gradle del módulo (nivel de la app) (generalmente
<project>/<app-module>/build.gradle.ktso<project>/<app-module>/build.gradle), reemplaza las dependencias anteriores (según corresponda) por las siguientes.Ten en cuenta que puede ser más fácil migrar la base de código de tu app (consulta las secciones restantes de esta guía) antes de borrar la dependencia anterior.
// BEFORE dependencies {
implementation("com.google.firebase:firebase-vertexai:16.0.0-betaXX")} // AFTER dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:35.0.0")) // Add the dependency for the Firebase AI Logic library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-ai") }Sincroniza tu proyecto de Android con archivos Gradle.
Ten en cuenta que, si decides no usar Firebase Android BoM, solo debes agregar la dependencia de la biblioteca firebase-ai y aceptar la versión más reciente que sugiere Android Studio.
Java
En el archivo Gradle del módulo (nivel de la app) (generalmente
<project>/<app-module>/build.gradle.ktso<project>/<app-module>/build.gradle), reemplaza las dependencias antiguas (según corresponda) por las siguientes.Ten en cuenta que puede ser más fácil migrar la base de código de tu app (consulta las secciones restantes de esta guía) antes de borrar la dependencia anterior.
// BEFORE dependencies {
implementation("com.google.firebase:firebase-vertexai:16.0.0-betaXX")} // AFTER dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:35.0.0")) // Add the dependency for the Firebase AI Logic library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-ai") }Sincroniza tu proyecto de Android con archivos Gradle.
Ten en cuenta que, si decides no usar la Firebase Android BoM, solo debes agregar la dependencia para la biblioteca firebase-ai y aceptar la versión más reciente que sugiere Android Studio.
Web
Obtén la versión más reciente del SDK de Firebase JS para la Web con npm:
npm i firebase@latest
O
yarn add firebase@latest
En todos los lugares donde hayas importado la biblioteca, actualiza las instrucciones de importación para usar
firebase/aien su lugar.Ten en cuenta que podría ser más fácil migrar la base de código de tu app (consulta las secciones restantes de esta guía) antes de borrar las importaciones antiguas.
// BEFORE import { initializeApp } from "firebase/app";
import { getVertexAI, getGenerativeModel } from "firebase/vertexai-preview";// AFTER import { initializeApp } from "firebase/app"; import { getAI, getGenerativeModel } from "firebase/ai";
Dart
Actualiza el uso del paquete
firebase_aien tu archivopubspec.yamlejecutando el siguiente comando desde el directorio de tu proyecto de Flutter:flutter pub add firebase_ai
Vuelve a compilar tu proyecto de Flutter:
flutter run
Después de que termines de migrar tu app (consulta las secciones restantes de esta guía), asegúrate de borrar el paquete anterior:
flutter pub remove firebase_vertexai
Unity
La compatibilidad con Unity no estaba disponible desde "Vertex AI in Firebase".
Obtén información para comenzar a utilizar el SDK de Firebase AI Logic para Unity.
Paso 4: Actualiza la inicialización en tu app
|
Haz clic en tu proveedor de Gemini API para ver el contenido y el código específicos del proveedor en esta página. |
Actualiza la forma en que inicializas el servicio para el proveedor de API que elegiste y
crea una instancia de GenerativeModel.
Swift
import FirebaseAILogic
// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create a `GenerativeModel` instance with a model that supports your use case
let model = ai.generativeModel(modelName: "gemini-3.8-flash")
Kotlin
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.generativeModel("gemini-3.8-flash")
Java
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel("gemini-3.8-flash");
// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
Web
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
// TODO(developer): Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create a `GenerativeModel` instance with a model that supports your use case.
const model = getGenerativeModel(ai, { model: "gemini-3.8-flash" });
Dart
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
// Initialize FirebaseApp
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Gemini Developer API backend service
// Create a `GenerativeModel` instance with a model that supports your use case
final model =
FirebaseAI.googleAI().generativeModel(model: 'gemini-3.8-flash');
Unity
La compatibilidad con Unity no estaba disponible desde "Vertex AI in Firebase".
Obtén información para comenzar a utilizar el SDK de Firebase AI Logic para Unity.
Ten en cuenta que según la capacidad que uses, es posible que no siempre crees una instancia de GenerativeModel. Para transmitir entrada y salida con Gemini Live API, crea una instancia de LiveModel.
Paso 5: Actualiza tu código según las funciones que uses
En este paso, se describen los cambios que pueden ser necesarios según las funciones que uses.
Si usas URLs de Cloud Storage y cambiaste para usar Gemini Developer API en esta migración, debes actualizar tus solicitudes multimodales para incluir archivos como datos intercalados (o usar URLs de YouTube para los videos).
Se introdujeron varios cambios en las versiones de DG de los SDKs de "Vertex AI in Firebase". Estos mismos cambios son necesarios para usar los SDK de Firebase AI Logic. Revisa las siguientes listas para ver si hay cambios que debas realizar en tu código para admitir el SDK de Firebase AI Logic.
Obligatorio para todos los idiomas y plataformas
Llamadas a funciones
Si implementaste esta función antes de la DG, deberás actualizar la forma en que defines tu esquema. Te recomendamos que revises la guía de llamadas a funciones actualizada para aprender a escribir tus declaraciones de funciones.Genera resultados estructurados (como JSON) con
responseSchema
Si implementaste esta función antes de la DG, deberás actualizar la forma en que defines tu esquema. Te recomendamos que revises la nueva guía de resultados estructurados para aprender a escribir esquemas JSON.Tiempo de espera
- Se cambió el tiempo de espera predeterminado para las solicitudes a 180 segundos.
Obligatorio según la plataforma o el idioma
Swift
Enumeraciones
Se reemplazaron la mayoría de los tipos
enumporstructs con variables estáticas. Este cambio permite una mayor flexibilidad para desarrollar la API de forma retrocompatible. Cuando uses instruccionesswitch, ahora debes incluir un casodefault:para abarcar los valores desconocidos o no controlados, incluidos los valores nuevos que se agreguen al SDK en el futuro.Se cambió el nombre de la enumeración
BlockThresholdaHarmBlockThreshold. Este tipo ahora es unstruct.Se quitaron los casos
unknownyunspecifiedde las siguientes enumeraciones (ahorastructs):HarmCategory,HarmBlockThreshold,HarmProbability,BlockReasonyFinishReason.Se reemplazó la enumeración
ModelContent.Partpor un protocolo llamadoPartpara permitir que se agreguen tipos nuevos de forma retrocompatible. Este cambio se describe con más detalle en la sección Partes del contenido.
Partes del contenido
Se quitó el protocolo
ThrowingPartsRepresentabley se simplificaron los inicializadores deModelContentpara evitar errores ocasionales del compilador. Las imágenes que no se codifiquen correctamente seguirán arrojando errores cuando se usen engenerateContent.Se reemplazaron los casos de
ModelContent.Partpor los siguientes tipos destructque se ajustan al protocoloPart:- De
.textaTextPart - De
.dataaInlineDataPart - De
.fileDataaFileDataPart - De
.functionCallaFunctionCallPart - De
.functionResponseaFunctionResponsePart
- De
Categoría de daño
- Se cambió
HarmCategorypara que ya no esté anidado en el tipoSafetySetting. Si te refieres a ella comoSafetySetting.HarmCategory, puedes reemplazarla porHarmCategory.
- Se cambió
Comentarios sobre seguridad
- Se quitó el tipo
SafetyFeedback, ya que no se usaba en ninguna de las respuestas.
- Se quitó el tipo
Metadatos de citas
- Se cambió el nombre de la propiedad
citationSourcesacitationsenCitationMetadata.
- Se cambió el nombre de la propiedad
Total de caracteres facturables
- Se cambió la propiedad
totalBillableCharactersenCountTokensResponsepara que sea opcional y refleje situaciones en las que no se envían caracteres.
- Se cambió la propiedad
Respuesta del candidato
- Se cambió el nombre de
CandidateResponseaCandidatepara que coincida con otras plataformas.
- Se cambió el nombre de
Configuración de la generación
- Se cambiaron las propiedades públicas de
GenerationConfigainternal. Todos siguen siendo configurables en el inicializador.
- Se cambiaron las propiedades públicas de
Kotlin
Enumeraciones
Se reemplazaron las clases
enumysealedpor clases regulares. Este cambio permite una mayor flexibilidad para evolucionar la API de forma retrocompatible.Se cambió el nombre de la enumeración
BlockThresholdaHarmBlockThreshold.Se quitaron valores de las siguientes enumeraciones:
HarmBlockThreshold,HarmProbability,HarmSeverity,BlockReasonyFinishReason.
Métodos de Blob
- Se cambió el nombre de todos los métodos que incluían
Blobcomo parte de su nombre para usarInlineDataen su lugar.
- Se cambió el nombre de todos los métodos que incluían
Configuración de seguridad
- Se cambió el campo
methodpara que sea anulable.
- Se cambió el campo
Clase Duration
- Se quitaron todos los usos de la clase
Durationde Kotlin y se reemplazaron porlong. Este cambio proporciona una mejor interoperabilidad con Java.
- Se quitaron todos los usos de la clase
Metadatos de citas
- Se unieron todos los campos declarados anteriormente en
CitationMetadataen una clase nueva llamadaCitation. Las citas se pueden encontrar en la lista llamadacitationsenCitationMetadata. Este cambio permite una mejor alineación de los tipos en todas las plataformas.
- Se unieron todos los campos declarados anteriormente en
Contar tokens
- Se cambió el campo
totalBillableCharacterspara que admita valores nulos.
- Se cambió el campo
Total de caracteres facturables
- Se cambió la propiedad
totalBillableCharactersenCountTokensResponsepara que sea opcional y refleje situaciones en las que no se envían caracteres.
- Se cambió la propiedad
Cómo crear una instancia de un modelo
- Se movió el parámetro
requestOptionsal final de la lista de parámetros para alinearlo con otras plataformas.
- Se movió el parámetro
Live API
Se quitó el valor
UNSPECIFIEDpara la clase de enumeraciónResponseModality. En su lugar, usanull.Se cambió el nombre de
LiveGenerationConfig.setResponseModalitiesporLiveGenerationConfig.setResponseModality.Se quitó la clase
LiveContentResponse.Statusy, en su lugar, se anidaron los campos de estado como propiedades deLiveContentResponse.Se quitó la clase
LiveContentResponsey, en su lugar, se proporcionaron subclases deLiveServerMessageque coinciden con las respuestas del modelo.Se cambió
LiveModelFutures.connectpara que devuelvaListenableFuture<LiveSessionFutures>en lugar deListenableFuture<LiveSession>.
Java
Enumeraciones
Se reemplazaron las clases
enumysealedpor clases regulares. Este cambio permite una mayor flexibilidad para evolucionar la API de forma retrocompatible.Se cambió el nombre de la enumeración
BlockThresholdaHarmBlockThreshold.Se quitaron valores de las siguientes enumeraciones:
HarmBlockThreshold,HarmProbability,HarmSeverity,BlockReasonyFinishReason.
Métodos de Blob
- Se cambió el nombre de todos los métodos que incluían
Blobcomo parte de su nombre para usarInlineDataen su lugar.
- Se cambió el nombre de todos los métodos que incluían
Configuración de seguridad
- Se cambió el campo
methodpara que sea anulable.
- Se cambió el campo
Clase Duration
- Se quitaron todos los usos de la clase
Durationde Kotlin y se reemplazaron porlong. Este cambio proporciona una mejor interoperabilidad con Java.
- Se quitaron todos los usos de la clase
Metadatos de citas
- Se unieron todos los campos declarados anteriormente en
CitationMetadataen una clase nueva llamadaCitation. Las citas se pueden encontrar en la lista llamadacitationsenCitationMetadata. Este cambio permite una mejor alineación de los tipos en todas las plataformas.
- Se unieron todos los campos declarados anteriormente en
Contar tokens
- Se cambió el campo
totalBillableCharacterspara que admita valores nulos.
- Se cambió el campo
Total de caracteres facturables
- Se cambió la propiedad
totalBillableCharactersenCountTokensResponsepara que sea opcional y refleje situaciones en las que no se envían caracteres.
- Se cambió la propiedad
Cómo crear una instancia de un modelo
- Se movió el parámetro
requestOptionsal final de la lista de parámetros para alinearlo con otras plataformas.
- Se movió el parámetro
Live API
Se quitó el valor
UNSPECIFIEDpara la clase de enumeraciónResponseModality. En su lugar, usanull.Se cambió el nombre de
LiveGenerationConfig.setResponseModalitiesporLiveGenerationConfig.setResponseModality.Se quitó la clase
LiveContentResponse.Statusy, en su lugar, se anidaron los campos de estado como propiedades deLiveContentResponse.Se quitó la clase
LiveContentResponsey, en su lugar, se proporcionaron subclases deLiveServerMessageque coinciden con las respuestas del modelo.Se cambió
LiveModelFutures.connectpara que devuelvaListenableFuture<LiveSessionFutures>en lugar deListenableFuture<LiveSession>.
Se cambiaron varios métodos de compilador de Java para que ahora devuelvan correctamente la instancia de su clase, en lugar de
void.
Web
Enumeraciones
- Se quitaron valores de las siguientes enumeraciones:
HarmCategory,BlockThreshold,HarmProbability,HarmSeverity,BlockReasonyFinishReason.
- Se quitaron valores de las siguientes enumeraciones:
Motivo del bloqueo
- Se cambió
blockReasonenPromptFeedbackpara que sea opcional.
- Se cambió
Cambios necesarios solo si comienzas a usar Gemini Developer API (en lugar de Agent Platform Gemini API (formerly Vertex AI)):
Configuración de seguridad
- Se quitaron los usos de
SafetySetting.methodno admitido.
- Se quitaron los usos de
Datos intercalados
- Se quitaron los usos de
InlineDataPart.videoMetadatano compatible.
- Se quitaron los usos de
Dart
Enumeraciones
- Se quitaron los valores de las siguientes enumeraciones:
HarmCategory,HarmProbability,BlockReasonyFinishReason.
- Se quitaron los valores de las siguientes enumeraciones:
Parte de datos
- Se cambió el nombre de
DataPartporInlineDataParty el de la funciónstaticdataporinlineDatapara alinearlo con otras plataformas.
- Se cambió el nombre de
Opciones de solicitud
- Se quitó
RequestOptionsporquetimeoutno funcionaba. Se volverá a agregar en el futuro cercano, pero se cambiará al tipoGenerativeModelpara que coincida con otras plataformas.
- Se quitó
Secuencias de detención
- Se cambió el parámetro
stopSequencesenGenerationConfigpara que sea opcional y se usenullde forma predeterminada, en lugar de un array vacío.
- Se cambió el parámetro
Citas
- Se cambió el nombre de la propiedad
citationSourcesacitationsenCitationMetadata. Se cambió el nombre del tipoCitationSourceporCitationpara que coincida con otras plataformas.
- Se cambió el nombre de la propiedad
Tipos, métodos y propiedades públicos innecesarios
- Se quitaron los siguientes tipos, métodos y propiedades que se expusieron de forma no intencional:
defaultTimeout,CountTokensResponseFields,parseCountTokensResponse,parseEmbedContentResponse,parseGenerateContentResponse,parseContent,BatchEmbedContentsResponse,ContentEmbedding,EmbedContentRequestyEmbedContentResponse.
- Se quitaron los siguientes tipos, métodos y propiedades que se expusieron de forma no intencional:
Cuenta tokens
- Se quitaron los campos adicionales de la función
countTokensque ya no son necesarios. Solo se necesitacontents.
- Se quitaron los campos adicionales de la función
Cómo crear una instancia de un modelo
- Se trasladó el parámetro
systemInstructional final de la lista de parámetros para alinearse con otras plataformas.
- Se trasladó el parámetro
Funcionalidad de incorporación
- Se quitó la funcionalidad de incorporación no admitida (
embedContentybatchEmbedContents) del modelo.
- Se quitó la funcionalidad de incorporación no admitida (
Unity
La compatibilidad con Unity no estaba disponible desde "Vertex AI in Firebase".
Obtén información para comenzar a utilizar el SDK de Firebase AI Logic para Unity.
Posibles errores relacionados con la migración
A medida que migras para usar la versión de DG de Firebase AI Logic, es posible que encuentres errores si no completaste todos los cambios necesarios, como se describe en esta guía de migración.
Error 403: Requests to this API firebasevertexai.googleapis.com ... are blocked.
Si recibes un error 403 que dice Requests to this API firebasevertexai.googleapis.com ... are blocked., suele significar que la clave de API de Firebase en tu objeto o archivo de configuración de Firebase no tiene una API requerida en su lista de entidades permitidas para el producto que intentas usar.
Asegúrate de que la clave de API de Firebase que usa tu app tenga todas las APIs requeridas incluidas en la lista de entidades permitidas de "restricciones de API" de la clave. Para Firebase AI Logic, tu clave de API de Firebase debe tener, como mínimo, la API de Firebase AI Logic en su lista de entidades permitidas. Esta API debería haberse agregado automáticamente a la lista de entidades permitidas de tu clave de API cuando habilitaste las APIs requeridas en la consola de Firebase.
Puedes ver todas tus claves de API en el panel APIs y servicios > Credenciales de la consola de Google Cloud.
Envía comentarios sobre tu experiencia con Firebase AI Logic