Node.js client for the unofficial ChatGPT API.
Go to file
Travis Fischer 8d241f3ad4 docs: add demo videos to readme 2022-12-03 02:57:32 -06:00
.github
.husky
docs
src
.gitignore
.npmrc
.prettierignore
.prettierrc.cjs
license
package.json
pnpm-lock.yaml
readme.md docs: add demo videos to readme 2022-12-03 02:57:32 -06:00
tsconfig.json
tsup.config.ts
typedoc.json

readme.md

ChatGPT API

Node.js wrapper around ChatGPT. Uses headless Chrome until the official API is released.

NPM Build Status MIT License Prettier Code Formatting

Intro

This package is a Node.js wrapper around ChatGPT by OpenAI. TS batteries included.

You can use it to start building projects powered by ChatGPT like chatbots, websites, etc...

How it works

We use headless Chromium via Playwright to automate the webapp, so you still need to have access to ChatGPT. It just makes building API-like integrations much easier.

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, make sure that you also dismiss the welcome modal.

  • Demo video showing how the initial auth flow works (29 seconds)
  • Demo video showing how it works if you're already authed (13 seconds)

Note We'll replace headless chrome with the official API once it's released.

Install

npm install --save chatgpt
# or
yarn add chatgpt
# or
pnpm add chatgpt

Usage

import { ChatGPTAPI } from 'chatgpt'

async function example() {
  const api = new ChatGPTAPI()

  // open chromium and wait until you've logged in
  await api.init({ auth: 'blocking' })

  // send a message and wait for the response
  const response = await api.sendMessage(
    'Write a python version of bubble sort. Do not include example usage.'
  )
  console.log(response)
}

Which outputs a similar reponse to this (as a markdown string, including the ```python code block prefix):

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

By default, ChatGPT responses are parsed as markdown using html-to-md. I've found that this works really well during my testing, but if you'd rather output plaintext, you can use:

const api = new ChatGPTAPI({ markdown: false })

A full example is included for testing purposes:

# clone repo
# install node deps
# then run
npx tsx src/example.ts

Docs

See the auto-generated docs for more info on methods parameters.

License

MIT © Travis Fischer

Support my open source work by following me on twitter twitter