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

# AI tools

*Tags*: JavaScript, React, Vue, Angular, Website, Web App

## What are AI tools?

AI tools allow you to create deep integrations between your app / website and Kai (our AI bot). A few use-cases might include:

* A banking app allowing to initiate transactions
* Performing a password reset directly in the messenger
* Canceling orders
* ...

The possibilities are almost endless. The following example shows how to add a new AI tool allowing users to initiate bank transactions directly inside Kai.

<img src="https://mintcdn.com/gleap-1d346ffa/b8_EVsZHbtxdB2pN/images/aitools.png?fit=max&auto=format&n=b8_EVsZHbtxdB2pN&q=85&s=74c2d435323893f41caf38670f204ec6" alt="Ticket custom data" width="2700" height="1680" data-path="images/aitools.png" />

## Specify AI tools

```js theme={null}
let aiTool = GleapAiTool(
    name: "send-money",
    // Describe the tool. This can also contain further instructions for the LLM.
    toolDescription: "Send money to a given contact.",
    // Let the LLM know what the tool is doing. This will allow Kai to update the customer accordingly.
    response: "The transfer got initiated but not completed yet. The user must confirm the transfer in the banking app.",
    // Set the execution type to auto or button.
    executionType: 'button',
    // Specify the parameters (it's also possible to pass an empty array)
    parameters: [
        GleapAiToolParameter(
            name: "amount",
            parameterDescription: "The amount of money to send. Must be positive and provided by the user.",
            type: "string",
            required: true
        ),
        GleapAiToolParameter(
            name: "contact",
            parameterDescription: "The contact to send money to.",
            type: "string",
            required: true,
            enums: ["Alice", "Bob"]
        )
    ]
)

// Set the available tools as array of tools
Gleap.setAiTools([aiTool])
```

### Execution type

`auto`: The tool will be executed automatically.

`button`: Kai adds a button to it's reply, that allows the user to execute the tool. The tool will not be executed automatically

<img src="https://mintcdn.com/gleap-1d346ffa/b8_EVsZHbtxdB2pN/images/buttontool.png?fit=max&auto=format&n=b8_EVsZHbtxdB2pN&q=85&s=cd4a6a90cf4630b3781348de70705d53" alt="Ticket custom data" width="2542" height="1594" data-path="images/buttontool.png" />

## Perform actions

Implement the `onToolExecution` delegate of GleapDelegate to get notified when a tool should be executed.

```js theme={null}
func onToolExecution(_ toolExecution: [AnyHashable : Any]) {
    guard let name = toolExecution["name"] as? String else {
        return
    }

    print("Tool: " + name)
    print(toolExecution["params"] ?? "No params.")
}
```
