npm package: @mirai-minds/voice
Description: Voice AI Web SDK - Mirai Minds
Author: miraiminds
Latest version: 0.0.5

# Miraiminds Voice - Web SDK

This package lets you start Vapi calls directly in your webapp.

## Installation

You can install the package via npm:

```bash
npm install @mirai-minds/voice
```

## Usage

First, import the Vapi or Custom class from the package:

```javascript
import { Vapi } from '@mirai-minds/voice';
```
or
```javascript
import { Custom } from '@mirai-minds/voice';
```

Then, create a new instance of the Vapi or Custom class, passing your Public Key as a parameter to the constructor:

```javascript
const assistant = new Vapi('your-public-key');
```
or
```javascript
const assistant = new Custom();
```

You can start a new call by calling the `start` method and passing an `assistant` object or `assistantId`:

```javascript
assistant.start({
  model: {
    provider: "openai",
    model: "gpt-3.5-turbo",
    messages: [
      {
        role: "system",
        content: "You are an assistant.",
      },
     ],
   },
   voice: {
    provider: "11labs",
    voiceId: "burt",
  },
  ...
});
```

```javascript
assistant.start('your-assistant-id');
```

The `start` method will initiate a new call.

You can override existing assistant parameters or set variables with the `assistant_overrides` parameter.
Assume the first message is `Hey, {{name}} how are you?` and you want to set the value of `name` to `John`:

```javascript
const assistantOverrides = {
  recordingEnabled: false,
  variableValues: {
    name: 'John',
  },
};

assistant.start('your-assistant-id', assistantOverrides);
```

You can send text messages to the assistant aside from the audio input using the `send` method and passing appropriate `role` and `content`.

```javascript
assistant.send({
  type: 'add-message',
  message: {
    role: 'system',
    content: 'The user has pressed the button, say peanuts',
  },
});
```

Possible values for the role are `system`, `user`, `assistant`, `tool` or `function`.

You can stop the session by calling the `stop` method:

```javascript
assistant.stop();
```

This will stop the recording and close the connection.

The `setMuted(muted: boolean)` can be used to mute and un-mute the user's microphone.

```javascript
assistant.isMuted(); // false
assistant.setMuted(true);
assistant.isMuted(); // true
```

The `say(message: string, endCallAfterSpoken?: boolean)` can be used to invoke speech and gracefully terminate the call if needed

```javascript
assistant.say("Our time's up, goodbye!", true);
```

## Events

You can listen to the following events:

```javascript
assistant.on('speech-start', () => {
  console.log('Speech has started');
});

assistant.on('speech-end', () => {
  console.log('Speech has ended');
});

assistant.on('call-start', () => {
  console.log('Call has started');
});

assistant.on('call-end', () => {
  console.log('Call has stopped');
});

assistant.on('volume-level', (volume) => {
  console.log(`Assistant volume level: ${volume}`);
});

// Function calls and transcripts will be sent via messages
assistant.on('message', (message) => {
  console.log(message);
});

assistant.on('error', (e) => {
  console.error(e);
});
```

These events allow you to react to changes in the state of the call or speech.