> ## 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.

# Cómo generar un PowerPoint desde Azure OpenAI

> Pasa doconda.tools() como funciones a tu despliegue de Azure OpenAI: el modelo crea un .pptx editable con su PDF y te da el enlace.

Instala `openai` y `doconda` (o `@ai-sdk/azure` y `@doconda/sdk`) y pasa `doconda.tools()` como funciones a tu
despliegue de Azure OpenAI. Cuando pides una presentación, el modelo llama a `create_document` con `format: "pptx"` y
recibes el PowerPoint y su PDF con sus enlaces de descarga.

## Pasos

1. Ten un despliegue de Azure OpenAI con llamada a funciones. `model` es el nombre de tu **despliegue**.
2. Guarda tus credenciales de Azure en el entorno y tu API key de Doconda (panel → **API keys**) en `DOCONDA_API_KEY`.
3. Conecta las herramientas y pide la presentación:

<CodeGroup>
  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  # pip install openai doconda
  import json

  from doconda import Doconda
  from openai import AzureOpenAI

  client = AzureOpenAI()
  tools = Doconda().tools()
  specs = [{"type": "function", "function": {"name": t.name, "description": t.description, "parameters": t.input_schema}} for t in tools]
  messages = [{"role": "user", "content": "Crea una presentación de 5 diapositivas sobre nuestros resultados del trimestre"}]

  while True:
      message = client.chat.completions.create(model="mi-despliegue", messages=messages, tools=specs).choices[0].message
      messages.append(message)
      if not message.tool_calls:
          break
      for call in message.tool_calls:
          out = next(t for t in tools if t.name == call.function.name).run(json.loads(call.function.arguments))
          messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(out)})

  print(message.content)
  ```

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

  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: azure("mi-despliegue"),
    tools,
    stopWhen: isStepCount(5),
    prompt: "Crea una presentación de 5 diapositivas sobre nuestros resultados del trimestre",
  })

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

`AzureOpenAI()` lee `AZURE_OPENAI_ENDPOINT`, `AZURE_OPENAI_API_KEY` y `OPENAI_API_VERSION`; `azure` del AI SDK lee
`AZURE_RESOURCE_NAME` y `AZURE_API_KEY`.

## Qué devuelve

```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."
}
```

* Un PowerPoint editable en 16:9, con gráficos nativos y un tema que siguen las diapositivas que añadas, y su PDF.
* `status`: `ready`, `ready_with_warnings`, `needs_review` o `failed` (no se cobra).
* Los enlaces caducan a los 5 minutos; el agente pide otros con `get_document`.

## Preguntas frecuentes

<AccordionGroup>
  <Accordion title="¿Funciona con Azure AI Foundry?">
    Sí, con cualquier despliegue de Foundry que admita llamada a funciones: las herramientas son JSON Schema estándar.
  </Accordion>

  <Accordion title="¿Puede partir de nuestra plantilla corporativa?">
    Sí. Pasa la presentación como fuente y pide «con el diseño de nuestra plantilla»: el resultado parte de sus
    diapositivas (en calidad `standard` y `best`).
  </Accordion>

  <Accordion title="¿Dónde se guardan los documentos?">
    En la Unión Europea (Irlanda), y la IA que los procesa también funciona en la UE.
  </Accordion>

  <Accordion title="¿Cuánto cuesta?">
    Pagas por documento entregado; los que fallan no se cobran. Ver [precios](/guides/account#precios).
  </Accordion>
</AccordionGroup>

## Sigue leyendo

* [Azure OpenAI](/agents/azure): la guía completa.
* [Quickstart](/quickstart).


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