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

# Amazon Bedrock

> Genera Word, PowerPoint, Excel y PDF desde un agente con Amazon Bedrock.

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
npm install ai @ai-sdk/amazon-bedrock @doconda/sdk
```

## Con el AI SDK

Las credenciales salen de tu entorno de AWS (`AWS_REGION`, `AWS_ACCESS_KEY_ID`…), como en el resto de tu código.

```ts theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
import { bedrock } from "@ai-sdk/amazon-bedrock"
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: bedrock(process.env.BEDROCK_MODEL_ID!), // cualquier modelo activado en tu cuenta de Bedrock
  tools,
  stopWhen: isStepCount(5),
  prompt: "Crea una presentación de 5 diapositivas sobre nuestros resultados del trimestre",
})

console.log(text)
```

<Accordion title="Con la API Converse (@aws-sdk/client-bedrock-runtime)">
  ```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  npm install @aws-sdk/client-bedrock-runtime @doconda/sdk
  ```

  ```ts theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  import { BedrockRuntimeClient, ConverseCommand, type Message } from "@aws-sdk/client-bedrock-runtime"
  import { Doconda } from "@doconda/sdk"

  const bedrock = new BedrockRuntimeClient({})
  const tools = new Doconda().tools()
  const toolConfig = { tools: tools.map((t) => ({ toolSpec: { name: t.name, description: t.description, inputSchema: { json: t.inputSchema } } })) }
  const messages: Message[] = [{ role: "user", content: [{ text: "Hazme un Excel con el presupuesto del evento" }] }]

  while (true) {
    const res = await bedrock.send(new ConverseCommand({ modelId: process.env.BEDROCK_MODEL_ID, messages, toolConfig }))
    const message = res.output?.message
    if (!message) break
    messages.push(message)
    if (res.stopReason !== "tool_use") break
    const content = await Promise.all(
      message.content!.filter((b) => b.toolUse).map(async ({ toolUse }) => {
        const result = await tools.find((t) => t.name === toolUse!.name)!.run(toolUse!.input as Record<string, unknown>)
        return { toolResult: { toolUseId: toolUse!.toolUseId, content: [{ text: JSON.stringify(result) }] } }
      }),
    )
    messages.push({ role: "user", content })
  }

  console.log(messages.at(-1)?.content?.map((b) => b.text ?? "").join(""))
  ```
</Accordion>

## Con Python

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
pip install boto3 doconda
```

```python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
import json
import os

import boto3
from doconda import Doconda

bedrock = boto3.client("bedrock-runtime")
tools = Doconda().tools()
tool_config = {"tools": [{"toolSpec": {"name": t.name, "description": t.description, "inputSchema": {"json": t.input_schema}}} for t in tools]}
messages = [{"role": "user", "content": [{"text": "Hazme un Excel con el presupuesto del evento"}]}]

while True:
    res = bedrock.converse(modelId=os.environ["BEDROCK_MODEL_ID"], messages=messages, toolConfig=tool_config)
    message = res["output"]["message"]
    messages.append(message)
    if res["stopReason"] != "tool_use":
        break
    results = []
    for block in message["content"]:
        if "toolUse" in block:
            use = block["toolUse"]
            out = next(t for t in tools if t.name == use["name"]).run(use["input"])
            results.append({"toolResult": {"toolUseId": use["toolUseId"], "content": [{"text": json.dumps(out)}]}})
    messages.append({"role": "user", "content": results})

print("".join(block.get("text", "") for block in message["content"]))
```

Con el [SDK de Python](/es/sdk/python). `BEDROCK_MODEL_ID` es cualquier modelo activado en tu cuenta de Bedrock.


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