Node.js client for the unofficial ChatGPT API.
 
 
Go to file
Travis Fischer 4693de97a1 docs: update readme for new release 2022-12-06 22:17:47 -06:00
.github chore: remove support for node.js 14 from CI 2022-12-06 22:16:29 -06:00
.husky feat: init 2022-12-02 17:43:59 -06:00
docs docs: update auto-generated docs 2022-12-06 22:16:29 -06:00
media chore: update demo gif 2022-12-05 17:38:28 -06:00
src fix: various fixes and doc updates 2022-12-06 22:16:29 -06:00
.env.example feat: convert from browser to REST API 2022-12-05 01:32:27 -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 fix: various fixes and doc updates 2022-12-06 22:16:29 -06:00
pnpm-lock.yaml feat: WIP add support for native fetch; undici on node.js < 18, and refactor conversation support 2022-12-06 22:16:29 -06:00
readme.md docs: update readme for new release 2022-12-06 22:17:47 -06:00
tsconfig.json feat: init 2022-12-02 17:43:59 -06:00
tsup.config.ts feat: WIP add support for native fetch; undici on node.js < 18, and refactor conversation support 2022-12-06 22:16:29 -06:00
typedoc.json feat: init 2022-12-02 17:43:59 -06:00

readme.md

Example usage

ChatGPT API

Node.js client for the unofficial ChatGPT API.

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...

Install

npm install chatgpt

Usage

import { ChatGPTAPI } from 'chatgpt'

async function example() {
  // sessionToken is required; see below for details
  const api = new ChatGPTAPI({
    sessionToken: process.env.SESSION_TOKEN
  })

  // ensure the API is properly authenticated
  await api.ensureAuth()

  // 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.'
  )

  // response is a markdown-formatted string
  console.log(response)
}

The default ChatGPT responses are formatted as markdown. If you want to work with plaintext only, you can use:

const api = new ChatGPTAPI({
  sessionToken: process.env.SESSION_TOKEN,
  markdown: false
})

If you want to automatically track the conversation, you can use ChatGPTAPI.getConversation():

const api = new ChatGPTAPI({
  sessionToken: process.env.SESSION_TOKEN
})

const conversation = api.getConversation()

// send a message and wait for the response
const response0 = await conversation.sendMessage('What is OpenAI?')

// send a follow-up prompt to the previous message and wait for the response
const response1 = await conversation.sendMessage('Can you expand on that?')

// send another follow-up to the same conversation
const response2 = await conversation.sendMessage('Oh cool; thank you')
Usage in CommonJS (Dynamic import)
async function example() {
  // To use ESM in CommonJS, you can use a dynamic import
  const { ChatGPTAPI } = await import('chatgpt')

  const api = new ChatGPTAPI({
    sessionToken: process.env.SESSION_TOKEN
  })
  await api.ensureAuth()

  const response = await api.sendMessage('Hello World!')
  console.log(response)
}

Docs

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

Demos

A basic demo is included for testing purposes:

# 1. clone repo
# 2. install node deps
# 3. set `SESSION_TOKEN` in .env
# 4. run:
npx tsx src/demo.ts

A conversation demo is also included:

# 1. clone repo
# 2. install node deps
# 3. set `SESSION_TOKEN` in .env
# 4. run:
npx tsx src/demo-conversation.ts

Session Tokens

This package requires a valid session token from ChatGPT to access it's unofficial REST API.

To get a session token:

  1. Go to https://chat.openai.com/chat and log in or sign up.
  2. Open dev tools.
  3. Open Application > Cookies. ChatGPT cookies
  4. Copy the value for __Secure-next-auth.session-token and save it to your environment.

If you want to run the built-in demo, store this value as SESSION_TOKEN in a local .env file.

Note This package will switch to using the official API once it's released.

Note Prior to v1.0.0, this package used a headless browser via Playwright to automate the web UI. Here are the docs for the initial browser version.

Compatibility

This package is ESM-only. It supports:

  • Node.js >= 16.8
    • If you need Node.js 14 support, use v1.4.0
    • If you need CommonJS support, use v1.3.0
  • Edge runtimes like CF workers and Vercel edge functions
  • Modern browsers
    • This is mainly intended for chrome extensions where your code is protected to a degree
    • We do not recommend using chatgpt from client-side browser code because it would expose your private session token
    • If you want to build a website with chatgpt, we recommend using it only from your backend API

Examples

All of these awesome projects are built using the chatgpt package. 🤯

If you create a cool integration, feel free to open a PR and add it to the list.

Credit

License

MIT © Travis Fischer

If you found this project interesting, please consider supporting my open source work by sponsoring me or following me on twitter twitter