# Large language models

Currently, LinwitDocEditor supports the `Openai（ChatGPT)`, `Spark large model`, `Wenxin Yiyuan`  and `custom LLMs`.

##


```ts
new LinwitDocEditor({
    element: "#aiEditor",
    ai: {
        models: {
            openai: {
                apiKey:"sk-alQ96zbDn*****",
                model:"gpt-4o",
            } as OpenaiModelConfig
        }
    },
})
```
Or use `moonshot` through Openai's config

```ts
new LinwitDocEditor({
    element: "#aiEditor",
    ai: {
        models: {
            openai: {
                endpoint:"https://api.moonshot.cn",
                model:"moonshot-v1-8k",
                apiKey:"sk-alQ96zb******"
            } as OpenaiModelConfig
        }
    },
})
```

Note that in the above configuration, AIEditor will automatically request the URL `https://api.moonshot.cn/v1/chat/completions` for AI dialogue. If the address of the current large model is not `endpoint` + `/v1/chat/completions`, we need to configure `customUrl`, as shown in the following code:

```ts
new LinwitDocEditor({
    element: "#aiEditor",
    ai: {
        models: {
            openai: {
                customUrl: "https://api.moonshot.cn/your/custom/path",
                model: "moonshot-v1-8k",
                apiKey: "sk-alQ96zb******"
            }
        }
    },
})
```


## Spark large

```typescript
new LinwitDocEditor({
    element: "#aiEditor",
    ai: {
        models: {
            spark: {
                appId: "****",
                apiKey: "****",
                apiSecret: "****",
                protocol: "ws", //or wss
                version: "v3.1", //or other
            }
        }
    },
})
```

## Wenxin Yiyuan

```typescript
new LinwitDocEditor({
    element: "#aiEditor",
    ai: {
        models: {
            wenxin: {
                access_token: "****",
                protocol: "****",
                version: "****"
            }
        }
    },
})
```

## Gitee Ai

 Gitee AI's serverless API is used for support currently.

```typescript
new LinwitDocEditor({
    element: "#aiEditor",
    ai: {
        models: {
            gitee:{
                endpoint:"https://ai.gitee.com/api/inference/serverless/KGHCVOPBV7GY/chat/completions",
                apiKey:"***",
            }
        }
    },
})
```

More Gitee AI configurations, such as:

```typescript
new LinwitDocEditor({
    element: "#aiEditor",
    ai: {
        models: {
            gitee:{
                endpoint:"https://ai.gitee.com/api/inference/serverless/KGHCVOPBV7GY/chat/completions",
                apiKey:"***",
                max_tokens: 512,
                temperature: 0.7,
                top_p: 0.7,
                top_k: 50,
            }
        }
    },
})
```


## custom backend types of LLMs

```typescript
new LinwitDocEditor({
    element: "#aiEditor",
    ai: {
        models: {
            custom: {
                url: "http://127.0.0.1:8080/api/v1/ai/chat",
                headers: () => {
                    return {
                        "jwt": "xxxx"
                    }
                },
                wrapPayload: (message: string) => {
                    return JSON.stringify({prompt: message})
                },
                parseMessage: (message: string) => {
                    return {
                        role: "assistant",
                        content: message,
                        // index: number,
                        // //0 represents the first text result; 1 represents the middle text result; 2 represents the last text result.
                        // status: 0|1|2,
                    }
                },
                // protocol: "sse" | "websocket"
            }
        }
    },
})
```


Parameter Description:

- `url`: A string or a method that returns a string.
- `headers`: Custom HTTP header information for SSE requests.
- `wrapPayload`: Converts the user's `prompt` string into the `JSON` format (or other formats) required by the `url` interface.
- `parseMessage`: Converts the body content of the backend response into the `AiMessage` format.

Definition of `AiMessage` is as follows:

```ts
declare interface AiMessage {
    role: string;
    content: string;
    index: number;
    status: 0 | 1 | 2;
}
```
