# TS/JS

## Installation

```bash
$ npm install jamaibase@latest
```

## Usage

### Create API Client

#### Create an API client with baseURL:

```typescript
import JamAI from "jamaibase";

const jamai = new JamAI({ baseURL: "http://localhost:5173/" });
```

#### Create an API client with API key and project id:

```typescript
import JamAI from "jamaibase";

const jamai = new JamAI({ apiKey: "jamai_apikey", projectId: "proj_id" });
```

The default base URL is set to <http://api.jamaibase.com/>

#### Create an API client with custom HTTP client:

```typescript
import axios from "axios";
import JamAI from "jamaibase";

const httpClient = axios.create({
    headers: {
        Authorization: `Bearer ${credentials}`,
        "Content-Type": "application/json"
    }
});

const jamai = new JamAI({
    baseURL: "https://api.jamaibase.com",
    httpClient: httpClient
});
```

#### Create an API client with max-retry and timeout:

```typescript
import JamAI from "jamaibase";

const jamai = new JamAI({
    baseURL: "https://api.jamaibase.com",
    maxRetries: 3,
    timeout: 500
});
```

#### Configure httpAgent / httpsAgent

```typescript
import JamAI from "jamaibase";

const jamai = new JamAI({
    baseURL: "https://api.jamaibase.com"
});

jamai.setHttpagentConfig({
    maxSockets: 100,
    maxFreeSockets: 10,
    freeSocketTimeout: 30000 // free socket keepalive for 30 seconds
});
```

#### Imports

Can be imported from different modules depending on the need:

```typescript
import JamAI from "jamaibase/index.umd.js";
```

### Types

Types can be imported from resources:

```typescript
import { ChatRequest } from "jamaibase/resources/llm/chat";

let response: ChatRequest;
```

### Using the Client

Example of adding a row to an action table:

```typescript
try {
        let data = await jamai.addRow({
            table_type: "action",
            data: [
                {
                    age: 22,
                    height: 178,
                    weight: 66.5,
                    sex: male,
                    preferred_body_type: lean,
                },
            ],
            table_id: "fitness_planner",
            reindex: null,
        });

        console.log(data)
    } catch (error: any) {
        console.error("Error fetching data:", error?.message);
    }
```

Example of adding row with streaming output:

```typescript
try {
    const stream = await jamai.addRowStream({
        table_type: "action",
        table_id: "action-table-example-1",
        data: [{
            Name: "Albert Eistein"
        }]
    });

    const reader = stream.getReader();

    while (true) {
        const { done, value } = await reader.read();
        if (done) {
            console.log("Done");
            break;
        }
        console.log(value);
        if (value) {
            console.log(value?.choices[0]?.message.content);
        }
    }
} catch (err) {}
```

## Constructor Parameters for APIClient Configuration

| Parameter               | Type                | Description                                                  | Default Value               | Required                    |
| ----------------------- | ------------------- | ------------------------------------------------------------ | --------------------------- | --------------------------- |
| baseURL                 | string              | Base URL for the API request.                                | <http://api.jamaibase.com/> | false                       |
| maxRetries              | number              | Maximum number of retries for failed requests.               | 0                           | false                       |
| httpClient              | AxiosInstance       | Axios instance for making HTTP requests.                     | AxiosInstance               | false                       |
| timeout                 | number \| undefined | Timeout for the requests.                                    | undefined                   | false                       |
| apiKey                  | string \| undefined | apiKey.                                                      | undefined                   | required if accessing cloud |
| projectId               | string \| undefined | projectId.                                                   | undefined                   | required if accessing cloud |
| dangerouslyAllowBrowser | boolean             | Allowing the insecure usage of JamAI API Key on client side. | false                       | false                       |

## SDK

The complete SDK Documentation link can be found at <https://embeddedllm.github.io/jamaibase-ts-docs/> [TS/JS](/developer-reference/ts-js.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.jamaibase.com/developer-reference/ts-js.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
