Firebase AI Logic y sus SDKs de cliente antes se llamaban "Vertex AI in Firebase". Para reflejar mejor nuestros servicios y funciones expandidos (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 tu app web o para dispositivos móviles, ahora puedes elegir un proveedor de "Gemini API", el Vertex AI Gemini API disponible desde hace mucho tiempo o ahora 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 y cuotas de tarifas razonables.
Descripción general de los pasos para migrar a los SDKs de Firebase AI Logic
Paso 1: Elige el mejor proveedor de "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 "API de Gemini" para tu app
Con esta migración, tienes la opción de elegir el proveedor "Gemini API":
Los SDKs "Vertex AI in Firebase" anteriores solo podían usar Vertex AI Gemini API.
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 Vertex AI Gemini API.
Revisa las diferencias entre usar los dos proveedores de Gemini API, sobre todo en términos de las funciones compatibles, los precios y los límites de tarifas. Por ejemplo, Gemini Developer API no admite la entrega de archivos con URLs Cloud Storage, pero podría ser una buena opción si deseas 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 API 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 la página Firebase AI Logic.
Haz clic en Comenzar para iniciar un flujo de trabajo guiado que te ayudará a configurar las APIs requeridas y los recursos de tu proyecto.
Selecciona el proveedor de "API de Gemini" que deseas usar con los SDKs de Firebase AI Logic. Si lo deseas, puedes configurar y usar el otro proveedor de API más adelante.
Gemini Developer API: Facturación opcional (disponible en el plan de precios sin costo Spark)
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. Más información.Vertex AI Gemini API: Facturación obligatoria (requiere el plan de precios Blaze de pago por uso)
El flujo de trabajo de la consola habilitará las APIs requeridas 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 Firebase AI Logic.
Swift
En Xcode, con el proyecto de tu app abierto, actualiza el paquete de Firebase a la versión 11.13.0 o una posterior con una de las siguientes opciones:
Opción 1: Actualiza todos los paquetes: Navega a File > Packages > Update to Latest Package Versions.
Opción 2: Actualiza Firebase de forma individual: Navega al paquete de Firebase en la sección llamada Dependencias del paquete. 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 11.13.0 o una posterior. Si no es así, verifica que los Requisitos del paquete especificados permitan la actualización a la versión 11.13.0 o una posterior.
Selecciona el destino de tu app en el editor de proyectos y, luego, navega a la sección Frameworks, bibliotecas y contenido incorporado.
Agrega la biblioteca nueva: Selecciona el botón + y, luego, agrega FirebaseAI desde el paquete de Firebase.
Una vez que hayas terminado 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 (generalmente
<project>/<app-module>/build.gradle.kts
o<project>/<app-module>/build.gradle
) del módulo (nivel de app), reemplaza las dependencias anteriores (según corresponda) por lo siguiente.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 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:33.15.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 (generalmente
<project>/<app-module>/build.gradle.kts
o<project>/<app-module>/build.gradle
) del módulo (nivel de app), reemplaza las dependencias anteriores (según corresponda) por lo siguiente.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 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:33.15.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.
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
Donde hayas importado la biblioteca, actualiza las instrucciones de importación para usar
firebase/ai
en 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 anteriores.
// 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
Para actualizar y usar el paquete
firebase_ai
en tu archivopubspec.yaml
, ejecuta 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 terminar 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 en “Vertex AI in Firebase”.
Obtén información para comenzar a usar 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 FirebaseAI
// 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-2.5-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-2.5-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-2.5-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-2.5-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-2.5-flash');
Unity
La compatibilidad con Unity no estaba disponible en "Vertex AI in Firebase".
Obtén información para comenzar a usar el SDK de Firebase AI Logic para Unity.
Ten en cuenta que , según la capability que uses, es posible que no siempre se cree una instancia de GenerativeModel
.
- Para acceder a un modelo Imagen, crea una instancia de
ImagenModel
.
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 Cloud Storage y cambiaste a 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 GA de los SDK 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 poder usar el SDK de Firebase AI Logic.
Obligatorio para todos los idiomas y plataformas
Llamadas a funciones
Si implementaste esta función antes de la versión GA, deberás actualizar la manera en que defines tu esquema. Te recomendamos que revises la guía actualizada de llamadas a función para aprender a escribir las declaraciones de tus funciones.Cómo generar un resultado estructurado (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 salida estructurada para aprender a escribir esquemas JSON.Tiempo de espera
- Se cambió el tiempo de espera predeterminado de las solicitudes a 180 segundos.
Obligatorio según la plataforma o el idioma
Swift
Enumeraciones
Se reemplazaron la mayoría de los tipos
enum
porstruct
con variables estáticas. Este cambio permite más flexibilidad para evolucionar la API de forma retrocompatible. Cuando uses sentenciasswitch
, ahora debes incluir un casodefault:
para cubrir 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
BlockThreshold
aHarmBlockThreshold
. Este tipo ahora esstruct
.Se quitaron los casos
unknown
yunspecified
de las siguientes enumeraciones (ahorastruct
):HarmCategory
,HarmBlockThreshold
,HarmProbability
,BlockReason
yFinishReason
.Se reemplazó la enumeración
ModelContent.Part
por un protocolo llamadoPart
para 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
ThrowingPartsRepresentable
y se simplificaron los inicializadores deModelContent
para evitar errores ocasionales del compilador. Las imágenes que no se codifican correctamente seguirán arrojando errores cuando se usen engenerateContent
.Se reemplazaron los casos
ModelContent.Part
por los siguientes tiposstruct
que cumplen con el protocoloPart
:- De
.text
aTextPart
- De
.data
aInlineDataPart
- De
.fileData
aFileDataPart
- De
.functionCall
aFunctionCallPart
- De
.functionResponse
aFunctionResponsePart
- De
Categoría de daño
- Se cambió
HarmCategory
para que ya no esté anidado en el tipoSafetySetting
. Si te refieres a ella comoSafetySetting.HarmCategory
, se puede reemplazar porHarmCategory
.
- Se cambió
Comentarios sobre seguridad
- Se quitó el tipo
SafetyFeedback
, ya que no se usó en ninguna de las respuestas.
- Se quitó el tipo
Metadatos de citas
- Se cambió el nombre de la propiedad
citationSources
acitations
enCitationMetadata
.
- Se cambió el nombre de la propiedad
Total de caracteres facturables
- Se cambió la propiedad
totalBillableCharacters
enCountTokensResponse
para 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
CandidateResponse
porCandidate
para que coincida con otras plataformas.
- Se cambió el nombre de
Configuración de generación
- Se cambiaron las propiedades públicas de
GenerationConfig
ainternal
. Todos se pueden configurar en el inicializador.
- Se cambiaron las propiedades públicas de
Kotlin
Enumeraciones
Se reemplazaron las clases
enum
ysealed
por clases normales. Este cambio permite más flexibilidad para evolucionar la API de forma retrocompatible.Se cambió el nombre de la enumeración
BlockThreshold
aHarmBlockThreshold
.Se quitaron los valores de las siguientes enumeraciones:
HarmBlockThreshold
,HarmProbability
,HarmSeverity
,BlockReason
yFinishReason
.
Métodos de BLOB
- Se cambió el nombre de todos los métodos que incluían
Blob
como parte de su nombre para usarInlineData
en su lugar.
- Se cambió el nombre de todos los métodos que incluían
Configuración de seguridad
- Se cambió el campo
method
para que sea nulo.
- Se cambió el campo
Clase de duración
- Se quitaron todos los usos de la clase
Duration
de Kotlin y se reemplazó porlong
. Este cambio proporciona una mejor interoperabilidad con Java.
- Se quitaron todos los usos de la clase
Metadatos de citas
- Se unió todos los campos declarados anteriormente en
CitationMetadata
en una clase nueva llamadaCitation
. Las citas se pueden encontrar en la lista llamadacitations
enCitationMetadata
. Este cambio permite una mejor alineación de los tipos en todas las plataformas.
- Se unió todos los campos declarados anteriormente en
Cómo contar tokens
- Se cambió el campo
totalBillableCharacters
para que sea nulo.
- Se cambió el campo
Total de caracteres facturables
- Se cambió la propiedad
totalBillableCharacters
enCountTokensResponse
para 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
requestOptions
al final de la lista de parámetros para alinearse con otras plataformas.
- Se movió el parámetro
Live API
Se quitó el valor
UNSPECIFIED
para la clase enumResponseModality
. En su lugar, usanull
.Se cambió el nombre de
LiveGenerationConfig.setResponseModalities
aLiveGenerationConfig.setResponseModality
.Se quitó la clase
LiveContentResponse.Status
y, en su lugar, se anidan los campos de estado como propiedades deLiveContentResponse
.Se quitó la clase
LiveContentResponse
y, en su lugar, se proporcionaron subclases deLiveServerMessage
que coinciden con las respuestas del modelo.Se cambió
LiveModelFutures.connect
para mostrarListenableFuture<LiveSessionFutures>
en lugar deListenableFuture<LiveSession>
.
Java
Enumeraciones
Se reemplazaron las clases
enum
ysealed
por clases normales. Este cambio permite más flexibilidad para evolucionar la API de forma retrocompatible.Se cambió el nombre de la enumeración
BlockThreshold
aHarmBlockThreshold
.Se quitaron los valores de las siguientes enumeraciones:
HarmBlockThreshold
,HarmProbability
,HarmSeverity
,BlockReason
yFinishReason
.
Métodos de BLOB
- Se cambió el nombre de todos los métodos que incluían
Blob
como parte de su nombre para usarInlineData
en su lugar.
- Se cambió el nombre de todos los métodos que incluían
Configuración de seguridad
- Se cambió el campo
method
para que sea nulo.
- Se cambió el campo
Clase de duración
- Se quitaron todos los usos de la clase
Duration
de Kotlin y se reemplazó porlong
. Este cambio proporciona una mejor interoperabilidad con Java.
- Se quitaron todos los usos de la clase
Metadatos de citas
- Se unió todos los campos declarados anteriormente en
CitationMetadata
en una clase nueva llamadaCitation
. Las citas se pueden encontrar en la lista llamadacitations
enCitationMetadata
. Este cambio permite una mejor alineación de los tipos en todas las plataformas.
- Se unió todos los campos declarados anteriormente en
Cómo contar tokens
- Se cambió el campo
totalBillableCharacters
para que sea nulo.
- Se cambió el campo
Total de caracteres facturables
- Se cambió la propiedad
totalBillableCharacters
enCountTokensResponse
para 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
requestOptions
al final de la lista de parámetros para alinearse con otras plataformas.
- Se movió el parámetro
Live API
Se quitó el valor
UNSPECIFIED
para la clase enumResponseModality
. En su lugar, usanull
.Se cambió el nombre de
LiveGenerationConfig.setResponseModalities
aLiveGenerationConfig.setResponseModality
.Se quitó la clase
LiveContentResponse.Status
y, en su lugar, se anidan los campos de estado como propiedades deLiveContentResponse
.Se quitó la clase
LiveContentResponse
y, en su lugar, se proporcionaron subclases deLiveServerMessage
que coinciden con las respuestas del modelo.Se cambió
LiveModelFutures.connect
para mostrarListenableFuture<LiveSessionFutures>
en lugar deListenableFuture<LiveSession>
.
Se cambiaron varios métodos de compilador de Java para que ahora muestren correctamente la instancia de su clase, en lugar de
void
.
Web
Enumeraciones
- Se quitaron los valores de las siguientes enumeraciones:
HarmCategory
,BlockThreshold
,HarmProbability
,HarmSeverity
,BlockReason
yFinishReason
.
- Se quitaron los valores de las siguientes enumeraciones:
Motivo del bloqueo
- Se cambió
blockReason
enPromptFeedback
para que sea opcional.
- Se cambió
Cambios obligatorios solo si comienzas a usar Gemini Developer API (en lugar de Vertex AI Gemini API):
Configuración de seguridad
- Se quitaron los usos de
SafetySetting.method
no admitidos.
- Se quitaron los usos de
Datos intercalados
- Se quitaron los usos de
InlineDataPart.videoMetadata
no admitidos.
- Se quitaron los usos de
Dart
Enumeraciones
- Se quitaron los valores de las siguientes enumeraciones:
HarmCategory
,HarmProbability
,BlockReason
yFinishReason
.
- Se quitaron los valores de las siguientes enumeraciones:
Parte de datos
- Se cambió el nombre de
DataPart
porInlineDataPart
y el de la funcióndata
destatic
porinlineData
para alinearse con otras plataformas.
- Se cambió el nombre de
Opciones de solicitud
- Se quitó
RequestOptions
porquetimeout
no era funcional. Se volverá a agregar en un futuro cercano, pero se moverá al tipoGenerativeModel
para que coincida con otras plataformas.
- Se quitó
Secuencias de detención
- Se cambió el parámetro
stopSequences
enGenerationConfig
para que sea opcional y tenga el valor predeterminadonull
en lugar de un array vacío.
- Se cambió el parámetro
Citas
- Se cambió el nombre de la propiedad
citationSources
acitations
enCitationMetadata
. Se cambió el nombre del tipoCitationSource
aCitation
para 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
,EmbedContentRequest
yEmbedContentResponse
.
- Se quitaron los siguientes tipos, métodos y propiedades que se expusieron de forma no intencional:
Cómo contar tokens
- Se quitaron los campos adicionales de la función
countTokens
que 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 movió el parámetro
systemInstruction
al final de la lista de parámetros para alinearse con otras plataformas.
- Se movió el parámetro
Funcionalidad de incorporación
- Se quitó la funcionalidad de incorporación no admitida (
embedContent
ybatchEmbedContents
) del modelo.
- Se quitó la funcionalidad de incorporación no admitida (
Unity
La compatibilidad con Unity no estaba disponible en “Vertex AI in Firebase”.
Obtén información para comenzar a usar el SDK de Firebase AI Logic para Unity.
Posibles errores relacionados con la migración
Cuando realices la migración para usar la versión GA 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.
,
por lo general, significa 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. En el caso de 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