2022-12-02 23:43:59 +00:00
# ChatGPT API <!-- omit in toc -->
2022-12-03 05:57:23 +00:00
> Node.js wrapper around [ChatGPT](https://openai.com/blog/chatgpt/). Uses headless Chrome until the official API is released.
2022-12-02 23:43:59 +00:00
[](https://www.npmjs.com/package/chatgpt) [](https://github.com/transitive-bullshit/chatgpt-api/actions/workflows/test.yml) [](https://github.com/transitive-bullshit/chatgpt-api/blob/main/license) [](https://prettier.io)
- [Intro ](#intro )
2022-12-03 05:57:23 +00:00
- [How it works ](#how-it-works )
2022-12-03 05:06:26 +00:00
- [Install ](#install )
2022-12-03 00:04:53 +00:00
- [Usage ](#usage )
2022-12-02 23:43:59 +00:00
- [Docs ](#docs )
- [Related ](#related )
- [License ](#license )
## Intro
2022-12-03 05:34:15 +00:00
This package is a Node.js wrapper around [ChatGPT ](https://openai.com/blog/chatgpt ) by [OpenAI ](https://openai.com ). TS batteries included. ✨
2022-12-03 00:04:53 +00:00
2022-12-03 05:57:23 +00:00
You can use it to start building projects powered by ChatGPT like chatbots, websites, etc...
2022-12-03 00:04:53 +00:00
2022-12-03 05:57:23 +00:00
## How it works
2022-12-03 00:04:53 +00:00
2022-12-03 05:57:23 +00:00
We use headless Chromium via [Playwright ](https://playwright.dev ) to automate the webapp, so **you still need to have access to ChatGPT** . It just makes building API-like integrations much easier.
2022-12-03 00:04:53 +00:00
2022-12-03 09:00:59 +00:00
Chromium will be opened in non-headless mode by default, which is important because the first time you run `ChatGPTAPI.init()` , you'll need to log in manually. We launch Chromium with a persistent context, however, so you shouldn't need to keep re-logging in after the first time.
When you log in the first time, we recommend dismissing the welcome modal so you can watch the progress. This isn't strictly necessary, but it helps to understand what's going on.
2022-12-03 00:04:53 +00:00
2022-12-03 08:57:32 +00:00
- [Demo video ](https://www.loom.com/share/0c44525b07354d679f30c45d8eec6271 ) showing how the initial auth flow works (29 seconds)
- [Demo video ](https://www.loom.com/share/98e712dbddf843289e2b6615095bbdd7 ) showing how it works if you're already authed (13 seconds)
2022-12-03 05:57:23 +00:00
> **Note**
> We'll replace headless chrome with the official API once it's released.
2022-12-03 05:06:26 +00:00
## Install
```bash
npm install --save chatgpt
# or
yarn add chatgpt
# or
pnpm add chatgpt
```
2022-12-03 00:04:53 +00:00
## Usage
```ts
2022-12-03 00:43:44 +00:00
import { ChatGPTAPI } from 'chatgpt'
2022-12-03 00:04:53 +00:00
async function example() {
const api = new ChatGPTAPI()
2022-12-03 05:49:30 +00:00
// open chromium and wait until you've logged in
2022-12-03 00:04:53 +00:00
await api.init({ auth: 'blocking' })
2022-12-03 05:49:30 +00:00
// send a message and wait for the response
2022-12-03 00:04:53 +00:00
const response = await api.sendMessage(
'Write a python version of bubble sort. Do not include example usage.'
)
console.log(response)
}
```
2022-12-03 00:53:24 +00:00
Which outputs a similar reponse to this (as a markdown string, including the _\`\`\`python_ code block prefix):
2022-12-03 00:04:53 +00:00
```python
def bubble_sort(lst):
# Set the initial flag to True to start the loop
swapped = True
# Keep looping until there are no more swaps
while swapped:
# Set the flag to False initially
swapped = False
# Loop through the list
for i in range(len(lst) - 1):
# If the current element is greater than the next element,
# swap them and set the flag to True
if lst[i] > lst[i + 1]:
lst[i], lst[i + 1] = lst[i + 1], lst[i]
swapped = True
# Return the sorted list
return lst
```
2022-12-03 05:59:20 +00:00
By default, ChatGPT responses are parsed as markdown using [html-to-md ](https://github.com/stonehank/html-to-md ). I've found that this works really well during my testing, but if you'd rather output plaintext, you can use:
2022-12-03 00:49:55 +00:00
```ts
const api = new ChatGPTAPI({ markdown: false })
```
2022-12-02 23:43:59 +00:00
2022-12-03 00:56:34 +00:00
A full [example ](./src/example.ts ) is included for testing purposes:
2022-12-03 00:53:24 +00:00
2022-12-03 05:59:20 +00:00
```bash
# clone repo
# install node deps
# then run
2022-12-03 00:53:24 +00:00
npx tsx src/example.ts
```
2022-12-02 23:43:59 +00:00
## Docs
2022-12-03 00:04:53 +00:00
See the [auto-generated docs ](./docs/classes/ChatGPTAPI.md ) for more info on methods parameters.
2022-12-02 23:43:59 +00:00
## Related
2022-12-03 00:09:45 +00:00
- Inspired by this [Go module ](https://github.com/danielgross/whatsapp-gpt ) by [Daniel Gross ](https://github.com/danielgross )
2022-12-03 01:20:06 +00:00
- [Python port ](https://github.com/taranjeet/chatgpt-api )
2022-12-02 23:43:59 +00:00
## License
MIT © [Travis Fischer ](https://transitivebullsh.it )
Support my open source work by < a href = "https://twitter.com/transitive_bs" > following me on twitter < img src = "https://storage.googleapis.com/saasify-assets/twitter-logo.svg" alt = "twitter" height = "24px" align = "center" > < / a >