> ## Documentation Index
> Fetch the complete documentation index at: https://docs.doconda.com/llms.txt
> Use this file to discover all available pages before exploring further.

# PowerPoint desde Gemini en Vertex AI

> Cómo hacer que Gemini en Google Vertex AI cree una presentación de PowerPoint (.pptx) y devuelva el enlace de descarga.

Vas a hacer un agente con Gemini en Vertex AI que crea una presentación de PowerPoint a partir de una frase y te da el
enlace para descargarla. Gemini decide cuándo llamar a Doconda; tú solo conectas las herramientas.

## Qué necesitas

* Un proyecto de Google Cloud con Vertex AI activado.
* Credenciales de Google Cloud en tu entorno (`gcloud auth application-default login` o una cuenta de servicio).
* Una API key de Doconda en `DOCONDA_API_KEY`. Créala en el panel, en **API keys**.
* Python 3.9+ o Node 20+.

## 1. Instala las dependencias

<CodeGroup>
  ```bash Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  pip install google-genai doconda
  ```

  ```bash TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  npm install ai @ai-sdk/google-vertex @doconda/sdk
  ```
</CodeGroup>

## 2. Conecta las herramientas y pide la presentación

`tools()` devuelve las herramientas de Doconda (crear, subir, revisar, editar, consultar…) con su nombre, su
descripción y su JSON Schema. Gemini las recibe como declaraciones de funciones. Cambia `mi-proyecto` por el id de tu
proyecto.

<CodeGroup>
  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  from doconda import Doconda
  from google import genai
  from google.genai import types

  client = genai.Client(vertexai=True, project="mi-proyecto", location="europe-west1")
  tools = Doconda().tools()
  config = types.GenerateContentConfig(
      tools=[types.Tool(function_declarations=[
          types.FunctionDeclaration(name=t.name, description=t.description, parameters_json_schema=t.input_schema) for t in tools
      ])]
  )
  prompt = "Crea un PowerPoint de 5 diapositivas sobre nuestros resultados del trimestre"
  contents = [types.Content(role="user", parts=[types.Part.from_text(text=prompt)])]

  while True:
      res = client.models.generate_content(model="gemini-3.5-flash", contents=contents, config=config)
      if not res.function_calls:
          break
      contents.append(res.candidates[0].content)
      parts = [
          types.Part.from_function_response(name=c.name, response={"result": next(t for t in tools if t.name == c.name).run(dict(c.args or {}))})
          for c in res.function_calls
      ]
      contents.append(types.Content(role="user", parts=parts))

  print(res.text)
  ```

  ```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  import { createVertex } from "@ai-sdk/google-vertex"
  import { generateText, isStepCount, jsonSchema, tool } from "ai"
  import { Doconda } from "@doconda/sdk"

  const vertex = createVertex({ project: "mi-proyecto", location: "europe-west1" })
  const doconda = new Doconda()
  const tools = Object.fromEntries(
    doconda.tools().map((t) => [
      t.name,
      tool({ description: t.description, inputSchema: jsonSchema(t.inputSchema), execute: (input) => t.run(input as Record<string, unknown>) }),
    ]),
  )

  const { text } = await generateText({
    model: vertex("gemini-3.5-flash"),
    tools,
    stopWhen: isStepCount(5),
    prompt: "Crea un PowerPoint de 5 diapositivas sobre nuestros resultados del trimestre",
  })

  console.log(text)
  ```
</CodeGroup>

En Python, el bucle sigue mientras Gemini pida funciones: ejecutas cada una y le devuelves el resultado. En TypeScript,
el AI SDK hace ese bucle por ti.

## Resultado

La herramienta `create_document` devuelve a Gemini algo así, y Gemini se lo pasa al usuario en su respuesta:

```json theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
{
  "id": "doc_01JAB3…",
  "format": "pptx",
  "status": "ready",
  "links": { "pptx": "https://…", "pdf": "https://…" },
  "links_note": "Links expire in 5 minutes: call get_document for fresh ones."
}
```

Tienes el PowerPoint (`.pptx`) y su versión en PDF. Los enlaces caducan a los 5 minutos; si el usuario los pide más
tarde, el agente llama a `get_document` y obtiene otros nuevos.

## Siguientes pasos

* [Google Vertex AI](/agents/vertex): la guía completa, también con `@google/genai` en TypeScript.
* [SDK de Python](/sdk/python): todos los métodos, por si quieres llamar a Doconda sin agente.
* [Ejemplos completos en GitHub](https://github.com/B-C-Software/doconda-examples).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.