Node.js client for the unofficial ChatGPT API.
Go to file
Travis Fischer a7f4086525 📑 2022-12-02 18:56:34 -06:00
.github feat: init 2022-12-02 17:43:59 -06:00
.husky feat: init 2022-12-02 17:43:59 -06:00
docs 🍋 2022-12-02 18:53:33 -06:00
src chore: docs 2022-12-02 18:09:45 -06:00
.env.example feat: init 2022-12-02 17:43:59 -06:00
.gitignore feat: init 2022-12-02 17:43:59 -06:00
.npmrc feat: init 2022-12-02 17:43:59 -06:00
.prettierignore feat: init 2022-12-02 17:43:59 -06:00
.prettierrc.cjs feat: init 2022-12-02 17:43:59 -06:00
license feat: init 2022-12-02 17:43:59 -06:00
package.json 0.2.0 2022-12-02 18:53:51 -06:00
pnpm-lock.yaml feat: remove extra deps 2022-12-02 18:36:07 -06:00
readme.md 📑 2022-12-02 18:56:34 -06:00
tsconfig.json feat: init 2022-12-02 17:43:59 -06:00
tsup.config.ts feat: init 2022-12-02 17:43:59 -06:00
typedoc.json feat: init 2022-12-02 17:43:59 -06:00

readme.md

ChatGPT API

Node.js TS 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 TypeScript wrapper around ChatGPT by OpenAI.

You can use it to start experimenting with ChatGPT by integrating it into websites, chatbots, etc...

Auth

It uses headless Chromium via Playwright, so you still need to have access to ChatGPT, but it makes it much easier to access programatically.

Chromium is 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, so you shouldn't need to keep re-logging in after the first time.

Usage

import { ChatGPTAPI } from 'chatgpt'

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

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

  // send a message and wait for a complete response, then parse it as markdown
  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

The default functionality is to parse ChatGPT responses as markdown using html-to-md. I've found the markdown parsing to work really well during my testing, but if you'd rather output plaintext, you can use:

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

Example

A full example is included for testing purposes:

npx tsx src/example.ts

Docs

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

Todo

  • Add message and conversation IDs
  • Add support for streaming responses
  • Add basic unit tests

License

MIT © Travis Fischer

Support my open source work by following me on twitter twitter