Quieres que un agente revise un video corto y una hoja de ventas antes de sugerir qué publicar. Tu función ya puede recuperar ambos archivos, pero antes debía resumirlos en texto o gestionar bytes inline; ahí se pierden fotogramas, tablas y contexto. El 5 de noviembre de 2026, Gemini API amplió lo que una herramienta puede devolver al modelo: documentos Office/OpenDocument, audio, video y URI de Files API. El cambio sirve para agentes con archivos reales, no solo para chat con un PDF adjunto.
Qué cambió exactamente
El changelog de Google separa dos rutas. En GenerateContent, las partes de una respuesta de función ahora aceptan más tipos de medio y fileData, además de bytes inline. En Interactions, un paso function_result puede contener bloques document, audio y video junto a texto e imagen; cada bloque usa data en base64 o uri. Los bloques de video están disponibles en v1beta y v1alpha. La guía de funciones multimodales especifica MIME aceptados y devuelve 400 INVALID_ARGUMENT si envías uno incompatible.
Para un creador, la diferencia es sencilla: la función get_campaign_assets puede recuperar el clip y la hoja, subirlos a Files API y devolver referencias tipadas. Así el modelo recibe el material original en su siguiente turno. Una URL cualquiera de tu almacenamiento no se convierte por arte de magia en un archivo Gemini; la URI debe ser compatible con la ruta documentada y el archivo debe ser accesible al proyecto.

El bloque útil para un agente
El siguiente fragmento sigue la estructura oficial de Interactions. Supone que el modelo ya llamó a tu función y que tienes tool_call, interaction y un cliente genai. No es un script completo de arranque: pega este bloque en el manejador de esa llamada, después de obtener dos archivos de prueba sin datos privados.
sheet = client.files.upload(
file="weekly_metrics.xlsx",
config={"mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
)
clip = client.files.upload(file="campaign_clip.mp4")
final = client.interactions.create(
model="gemini-3.8-flash",
previous_interaction_id=interaction.id,
input=[{
"type": "function_result",
"name": tool_call.name,
"call_id": tool_call.id,
"result": [
{"type": "text", "text": "Review the clip and first worksheet; separate facts from suggestions."},
{"type": "document", "uri": sheet.uri, "mime_type": sheet.mime_type},
{"type": "video", "uri": clip.uri, "mime_type": "video/mp4", "processing": "static"},
],
}],
)
print(final.output_text)
Verifica tres cosas en la respuesta: que las cifras correspondan a la primera hoja del libro, que la observación visual aparezca realmente en el video y que el agente distinga recomendación de dato. La guía de documentos aclara que XLSX y XLS solo entregan valores de la primera hoja, convertidos a CSV; otras pestañas y fórmulas no llegan en ese formato. Si necesitas otra hoja, muévela primero o expórtala separada. Para video, elige static o agentic según el análisis que requieras y consulta sus costos y límites.
Cuándo vale la pena, y cuándo no
Usa URI para medios largos o documentos grandes: los datos inline cuentan para el límite de tamaño de la solicitud. Una respuesta de función pequeña en texto sigue siendo más simple si el modelo solo necesita un número verificado. El archivo devuelto nunca debe reemplazar validación de permisos, MIME real, datos personales y una revisión humana de cifras. En producción guarda el ID de llamada, tipo, origen y política de borrado de los archivos; evita pasar material privado a un proyecto equivocado.
Estado de la prueba: tipos, esquema y ejemplo proceden de la documentación oficial. Revisamos la sintaxis del fragmento, pero no ejecutamos una llamada pagada ni analizamos un video propio. Antes de desplegar, prueba con una hoja y un clip que conozcas, mide el costo y compara cada afirmación con el original.
