2022-12-03 00:04:53 +00:00
chatgpt / [Exports ](modules.md )
2023-02-01 10:58:25 +00:00
# Update February 1, 2023 <!-- omit in toc -->
2022-12-12 17:23:19 +00:00
2023-02-02 00:12:29 +00:00
This package no longer requires any browser hacks – **it is now using the official OpenAI completions API** with a leaked model that ChatGPT uses under the hood. 🔥
2022-12-15 23:15:38 +00:00
```ts
2023-02-01 10:58:25 +00:00
import { ChatGPTAPI } from 'chatgpt'
2022-12-15 23:15:38 +00:00
2023-02-01 10:58:25 +00:00
const api = new ChatGPTAPI({
apiKey: process.env.OPENAI_API_KEY
2022-12-15 23:15:38 +00:00
})
2023-02-01 10:58:25 +00:00
const res = await api.sendMessage('Hello World!')
console.log(res.text)
2022-12-15 23:15:38 +00:00
```
2023-02-02 00:12:29 +00:00
Please upgrade to `chatgpt@latest` (at least [v4.0.0 ](https://github.com/transitive-bullshit/chatgpt-api/releases/tag/v4.0.0 )). The updated version is **significantly more lightweight and robust** compared with previous versions. You also don't have to worry about IP issues or rate limiting!
Huge shoutout to [@waylaidwanderer ](https://github.com/waylaidwanderer ) for discovering the leaked chat model! 💪
2023-01-12 10:04:51 +00:00
If you run into any issues, we do have a pretty active [Discord ](https://discord.gg/v9gERj825w ) with a bunch of ChatGPT hackers from the Node.js & Python communities.
2022-12-12 23:23:36 +00:00
Lastly, please consider starring this repo and < 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 > to help support the project.
2022-12-12 17:35:40 +00:00
Thanks & & cheers,
2022-12-15 23:15:38 +00:00
[Travis ](https://twitter.com/transitive_bs )
2022-12-12 17:23:19 +00:00
---
2022-12-12 00:04:20 +00:00
2022-12-05 07:34:01 +00:00
< p align = "center" >
< img alt = "Example usage" src = "/media/demo.gif" >
< / p >
2022-12-03 00:04:53 +00:00
# ChatGPT API <!-- omit in toc -->
2022-12-05 05:13:36 +00:00
> Node.js client for the unofficial [ChatGPT](https://openai.com/blog/chatgpt/) API.
2022-12-03 00:04:53 +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)
2022-12-12 23:23:36 +00:00
- [Intro ](#intro )
- [Install ](#install )
- [Usage ](#usage )
- [Docs ](#docs )
- [Demos ](#demos )
- [Projects ](#projects )
- [Compatibility ](#compatibility )
- [Credits ](#credits )
- [License ](#license )
2022-12-03 00:04:53 +00:00
## Intro
2022-12-03 08:46:57 +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 08:46:57 +00:00
You can use it to start building projects powered by ChatGPT like chatbots, websites, etc...
2022-12-03 00:53:33 +00:00
2022-12-03 08:46:57 +00:00
## Install
```bash
2023-02-01 10:58:25 +00:00
npm install chatgpt
2022-12-03 08:46:57 +00:00
```
2022-12-03 00:04:53 +00:00
2023-02-02 00:12:29 +00:00
Make sure you're using `node >= 18` so `fetch` is available (or `node >= 14` if you install a [fetch polyfill ](https://github.com/developit/unfetch#usage-as-a-polyfill )).
2022-12-03 00:04:53 +00:00
## Usage
2023-02-01 10:58:25 +00:00
Sign up for an [OpenAI API key ](https://platform.openai.com/overview ) and store it in your environment.
2022-12-15 23:15:38 +00:00
```ts
2023-02-01 10:58:25 +00:00
import { ChatGPTAPI } from 'chatgpt'
2022-12-15 23:15:38 +00:00
async function example() {
2023-02-01 10:58:25 +00:00
const api = new ChatGPTAPI({
apiKey: process.env.OPENAI_API_KEY
2022-12-15 23:15:38 +00:00
})
2023-02-01 10:58:25 +00:00
const res = await api.sendMessage('Hello World!')
console.log(res.text)
2022-12-15 23:15:38 +00:00
}
```
2023-02-02 00:15:56 +00:00
If you want to track the conversation, use the `conversationId` and `id` in the result object, and pass them to `sendMessage` as `conversationId` and `parentMessageId` respectively. `parentMessageId` is the most important parameter for recalling previous message context.
2022-12-07 04:37:56 +00:00
```ts
2023-02-01 10:58:25 +00:00
const api = new ChatGPTAPI({ apiKey: process.env.OPENAI_API_KEY })
2022-12-07 04:37:56 +00:00
// send a message and wait for the response
2022-12-18 06:18:10 +00:00
let res = await api.sendMessage('What is OpenAI?')
2023-02-01 10:58:25 +00:00
console.log(res.text)
2022-12-07 04:37:56 +00:00
2022-12-12 17:23:19 +00:00
// send a follow-up
2022-12-18 06:18:10 +00:00
res = await api.sendMessage('Can you expand on that?', {
2022-12-17 09:57:22 +00:00
conversationId: res.conversationId,
2023-02-01 10:58:25 +00:00
parentMessageId: res.id
2022-12-17 09:57:22 +00:00
})
2023-02-01 10:58:25 +00:00
console.log(res.text)
2022-12-07 04:37:56 +00:00
2022-12-12 17:23:19 +00:00
// send another follow-up
2022-12-18 06:18:10 +00:00
res = await api.sendMessage('What were we talking about?', {
2022-12-17 09:57:22 +00:00
conversationId: res.conversationId,
2023-02-01 10:58:25 +00:00
parentMessageId: res.id
2022-12-17 09:57:22 +00:00
})
2023-02-01 10:58:25 +00:00
console.log(res.text)
2022-12-07 04:37:56 +00:00
```
2023-02-01 10:58:25 +00:00
You can add streaming via the `onProgress` handler:
2022-12-07 04:37:56 +00:00
2023-02-01 10:58:25 +00:00
```ts
// timeout after 2 minutes (which will also abort the underlying HTTP request)
2023-02-02 00:12:29 +00:00
const res = await api.sendMessage('Write a 500 word essay on frogs.', {
// print the partial response as the AI is "typing"
onProgress: (partialResponse) => console.log(partialResponse.text)
2023-02-01 10:58:25 +00:00
})
2023-02-02 00:12:29 +00:00
// print the full text at the end
console.log(res.text)
2023-02-01 10:58:25 +00:00
```
You can add a timeout using the `timeoutMs` option:
2022-12-07 04:37:56 +00:00
```ts
// timeout after 2 minutes (which will also abort the underlying HTTP request)
2023-02-02 00:12:29 +00:00
const response = await api.sendMessage(
'write me a really really long essay on frogs',
{
timeoutMs: 2 * 60 * 1000
}
)
```
If you want to see more info about what's actually being sent to [OpenAI's completions API ](https://platform.openai.com/docs/api-reference/completions ), set the `debug: true` option in the `ChatGPTAPI` constructor:
```ts
const api = new ChatGPTAPI({
apiKey: process.env.OPENAI_API_KEY,
debug: true
})
```
You'll notice that we're using a reverse-engineered `promptPrefix` and `promptSuffix` . You can customize these via the `sendMessage` options:
```ts
const res = await api.sendMessage('what is the answer to the universe?', {
promptPrefix: `You are ChatGPT, a large language model trained by OpenAI. You answer as concisely as possible for each response (e.g. don’ t be verbose). It is very important that you answer as concisely as possible, so please remember this. If you are generating a list, do not have too many items. Keep the number of items short.
Current date: ${new Date().toISOString()}\n\n`
2022-12-07 04:37:56 +00:00
})
```
2023-02-02 00:12:29 +00:00
Note that we automatically handle appending the previous messages to the prompt and attempt to optimize for the available tokens (which defaults to `4096` ).
2022-12-07 04:37:56 +00:00
< details >
< summary > Usage in CommonJS (Dynamic import)< / summary >
```js
async function example() {
// To use ESM in CommonJS, you can use a dynamic import
2023-02-01 10:58:25 +00:00
const { ChatGPTAPI } = await import('chatgpt')
2022-12-12 17:23:19 +00:00
2023-02-01 10:58:25 +00:00
const api = new ChatGPTAPI({ apiKey: process.env.OPENAI_API_KEY })
2022-12-07 04:37:56 +00:00
2023-02-01 10:58:25 +00:00
const res = await api.sendMessage('Hello World!')
console.log(res.text)
2022-12-07 04:37:56 +00:00
}
```
< / details >
### Docs
2023-02-02 00:15:56 +00:00
See the [auto-generated docs ](./docs/classes/ChatGPTAPI.md ) for more info on methods and parameters.
2022-12-07 04:37:56 +00:00
### Demos
2022-12-12 17:23:19 +00:00
To run the included demos:
1. clone repo
2. install node deps
2023-02-01 10:58:25 +00:00
3. set `OPENAI_API_KEY` in .env
2022-12-12 17:23:19 +00:00
A [basic demo ](./demos/demo.ts ) is included for testing purposes:
2022-12-03 00:04:53 +00:00
2022-12-03 08:46:57 +00:00
```bash
2022-12-13 04:07:58 +00:00
npx tsx demos/demo.ts
2022-12-03 00:53:33 +00:00
```
2022-12-03 00:04:53 +00:00
2023-01-12 10:04:51 +00:00
A [demo showing on progress handler ](./demos/demo-on-progress.ts ):
```bash
npx tsx demos/demo-on-progress.ts
```
The on progress demo uses the optional `onProgress` parameter to `sendMessage` to receive intermediary results as ChatGPT is "typing".
A [conversation demo ](./demos/demo-conversation.ts ):
2022-12-03 00:04:53 +00:00
2022-12-07 04:37:56 +00:00
```bash
2022-12-13 04:07:58 +00:00
npx tsx demos/demo-conversation.ts
2022-12-07 04:37:56 +00:00
```
2022-12-05 05:13:36 +00:00
2023-02-01 10:58:25 +00:00
Lastly, a [persitence demo ](./demos/demo-persistence.ts ) shows how to store messages in Redis for persistence:
2022-12-19 00:17:29 +00:00
2023-02-01 10:58:25 +00:00
```bash
npx tsx demos/demo-conversation.ts
2022-12-19 00:17:29 +00:00
```
2023-02-01 10:58:25 +00:00
Any [keyv adaptor ](https://github.com/jaredwray/keyv ) is supported for persistence, and there are overrides if you'd like to use a different way of storing / retrieving messages.
2022-12-15 23:15:38 +00:00
2023-02-01 10:58:25 +00:00
Note that persisting message is very important for remembering the context of previous conversations.
2022-12-06 04:53:20 +00:00
2022-12-07 04:37:56 +00:00
## Projects
2022-12-05 05:13:36 +00:00
2022-12-06 04:53:20 +00:00
All of these awesome projects are built using the `chatgpt` package. 🤯
2022-12-05 05:13:36 +00:00
- [Twitter Bot ](https://github.com/transitive-bullshit/chatgpt-twitter-bot ) powered by ChatGPT ✨
- Mention [@ChatGPTBot ](https://twitter.com/ChatGPTBot ) on Twitter with your prompt to try it out
2023-01-12 10:04:51 +00:00
- [ChatGPT API Server ](https://github.com/waylaidwanderer/node-chatgpt-api ) - API server for this package with support for multiple OpenAI accounts, proxies, and load-balancing requests between accounts.
2022-12-15 23:15:38 +00:00
- [Lovelines.xyz ](https://lovelines.xyz?ref=chatgpt-api )
2022-12-05 05:13:36 +00:00
- [Chrome Extension ](https://github.com/gragland/chatgpt-everywhere ) ([demo](https://twitter.com/gabe_ragland/status/1599466486422470656))
2022-12-12 00:04:20 +00:00
- [VSCode Extension #1 ](https://github.com/mpociot/chatgpt-vscode ) ([demo](https://twitter.com/marcelpociot/status/1599180144551526400), [updated version ](https://github.com/timkmecl/chatgpt-vscode ), [marketplace ](https://marketplace.visualstudio.com/items?itemName=timkmecl.chatgpt ))
2022-12-07 04:37:56 +00:00
- [VSCode Extension #2 ](https://github.com/barnesoir/chatgpt-vscode-plugin ) ([marketplace](https://marketplace.visualstudio.com/items?itemName=JayBarnes.chatgpt-vscode-plugin))
- [VSCode Extension #3 ](https://github.com/gencay/vscode-chatgpt ) ([marketplace](https://marketplace.visualstudio.com/items?itemName=gencay.vscode-chatgpt))
2022-12-15 23:15:38 +00:00
- [VSCode Extension #4 ](https://github.com/dogukanakkaya/chatgpt-code-vscode-extension ) ([marketplace](https://marketplace.visualstudio.com/items?itemName=dogukanakkaya.chatgpt-code))
2022-12-12 00:04:20 +00:00
- [Raycast Extension #1 ](https://github.com/abielzulio/chatgpt-raycast ) ([demo](https://twitter.com/abielzulio/status/1600176002042191875))
- [Raycast Extension #2 ](https://github.com/domnantas/raycast-chatgpt )
- [Telegram Bot #1 ](https://github.com/realies/chatgpt-telegram-bot )
- [Telegram Bot #2 ](https://github.com/dawangraoming/chatgpt-telegram-bot )
2023-01-02 23:28:55 +00:00
- [Telegram Bot #3 ](https://github.com/RainEggplant/chatgpt-telegram-bot ) (group privacy mode, ID-based auth)
- [Telegram Bot #4 ](https://github.com/ArdaGnsrn/chatgpt-telegram ) (queue system, ID-based chat thread)
2022-12-12 00:04:20 +00:00
- [Deno Telegram Bot ](https://github.com/Ciyou/chatbot-telegram )
2022-12-05 05:13:36 +00:00
- [Go Telegram Bot ](https://github.com/m1guelpf/chatgpt-telegram )
2023-01-02 23:28:55 +00:00
- [Telegram Bot for YouTube Summaries ](https://github.com/codextde/youtube-summary )
2022-12-06 04:53:20 +00:00
- [GitHub ProBot ](https://github.com/oceanlvr/ChatGPTBot )
2022-12-12 00:04:20 +00:00
- [Discord Bot #1 ](https://github.com/onury5506/Discord-ChatGPT-Bot )
- [Discord Bot #2 ](https://github.com/Nageld/ChatGPT-Bot )
- [Discord Bot #3 ](https://github.com/leinstay/gptbot )
- [Discord Bot #4 (selfbot) ](https://github.com/0x7030676e31/cumsocket )
2023-01-22 07:53:09 +00:00
- [Discord Bot #5 ](https://github.com/itskdhere/ChatGPT-Discord-BOT )
- [Discord Bot #6 (Shakespeare bot) ](https://gist.github.com/TheBrokenRail/4b37e7c44e8f721d8bd845050d034c16 )
2022-12-12 00:04:20 +00:00
- [WeChat Bot #1 ](https://github.com/AutumnWhj/ChatGPT-wechat-bot )
- [WeChat Bot #2 ](https://github.com/fuergaosi233/wechat-chatgpt )
- [WeChat Bot #3 ](https://github.com/wangrongding/wechat-bot )
- [WeChat Bot #4 ](https://github.com/darknightlab/wechat-bot )
- [WeChat Bot #5 ](https://github.com/sunshanpeng/wechaty-chatgpt )
- [QQ Bot (plugin for Yunzai-bot) ](https://github.com/ikechan8370/chatgpt-plugin )
- [QQ Bot (plugin for KiviBot) ](https://github.com/KiviBotLab/kivibot-plugin-chatgpt )
- [QQ Bot (oicq) ](https://github.com/easydu2002/chat_gpt_oicq )
- [QQ Bot (oicq + RabbitMQ) ](https://github.com/linsyking/ChatGPT-QQBot )
2022-12-12 17:23:19 +00:00
- [QQ Bot (go-cqhttp) ](https://github.com/PairZhu/ChatGPT-QQRobot )
2022-12-06 04:53:20 +00:00
- [EXM smart contracts ](https://github.com/decentldotland/molecule )
2022-12-07 00:19:50 +00:00
- [Flutter ChatGPT API ](https://github.com/coskuncay/flutter_chatgpt_api )
2022-12-12 00:04:20 +00:00
- [Carik Bot ](https://github.com/luridarmawan/Carik )
- [Github Action for reviewing PRs ](https://github.com/kxxt/chatgpt-action/ )
- [WhatsApp Bot #1 ](https://github.com/pascalroget/whatsgpt ) (multi-user support)
- [WhatsApp Bot #2 ](https://github.com/amosayomide05/chatgpt-whatsapp-bot )
2022-12-12 17:23:19 +00:00
- [WhatsApp Bot #3 ](https://github.com/navopw/whatsapp-chatgpt )
2023-01-12 10:04:51 +00:00
- [WhatsApp Bot #4 ](https://github.com/noelzappy/chatgpt-whatsapp ) (schedule periodic messages)
- [Matrix Bot ](https://github.com/matrixgpt/matrix-chatgpt-bot )
2022-12-12 00:04:20 +00:00
- [Rental Cover Letter Generator ](https://sharehouse.app/ai )
- [Assistant CLI ](https://github.com/diciaup/assistant-cli )
- [Teams Bot ](https://github.com/formulahendry/chatgpt-teams-bot )
2022-12-12 17:23:19 +00:00
- [Askai ](https://github.com/yudax42/askai )
2022-12-15 23:15:38 +00:00
- [TalkGPT ](https://github.com/ShadovvBeast/TalkGPT )
2023-01-22 07:53:09 +00:00
- [ChatGPT With Voice ](https://github.com/thanhsonng/chatgpt-voice )
2022-12-15 23:15:38 +00:00
- [iOS Shortcut ](https://github.com/leecobaby/shortcuts/blob/master/other/ChatGPT_EN.md )
2023-01-02 23:28:55 +00:00
- [Slack Bot #1 ](https://github.com/trietphm/chatgpt-slackbot/ )
- [Slack Bot #2 ](https://github.com/lokwkin/chatgpt-slackbot-node/ ) (with queueing mechanism)
2022-12-18 06:18:10 +00:00
- [Electron Bot ](https://github.com/ShiranAbir/chaty )
2022-12-19 00:17:29 +00:00
- [Kodyfire CLI ](https://github.com/nooqta/chatgpt-kodyfire )
- [Twitch Bot ](https://github.com/BennyDeeDev/chatgpt-twitch-bot )
2022-12-22 07:06:19 +00:00
- [Continuous Conversation ](https://github.com/DanielTerletzkiy/chat-gtp-assistant )
- [Figma plugin ](https://github.com/frederickk/chatgpt-figma-plugin )
2023-01-02 23:28:55 +00:00
- [NestJS server ](https://github.com/RusDyn/chatgpt_nestjs_server )
2023-01-12 10:04:51 +00:00
- [NestJS ChatGPT Starter Boilerplate ](https://github.com/mitkodkn/nestjs-chatgpt-starter )
- [Wordsmith: Add-in for Microsoft Word ](https://github.com/xtremehpx/Wordsmith )
2023-01-22 07:53:09 +00:00
- [QuizGPT: Create Kahoot quizzes with ChatGPT ](https://github.com/Kladdy/quizgpt )
2022-12-05 05:13:36 +00:00
If you create a cool integration, feel free to open a PR and add it to the list.
2022-12-03 00:04:53 +00:00
2022-12-07 04:37:56 +00:00
## Compatibility
2023-02-01 10:58:25 +00:00
- This package is ESM-only.
- This package supports `node >= 14` .
- This module assumes that `fetch` is installed.
- In `node >= 18` , it's installed by default.
2023-02-02 00:12:29 +00:00
- In `node < 18` , you need to install a polyfill like `unfetch/polyfill` ([guide](https://github.com/developit/unfetch#usage-as-a-polyfill))
2022-12-12 23:23:36 +00:00
- If you want to build a website using `chatgpt` , we recommend using it only from your backend API
2022-12-07 04:37:56 +00:00
## Credits
2022-12-03 00:04:53 +00:00
2022-12-18 06:18:10 +00:00
- Huge thanks to [@waylaidwanderer ](https://github.com/waylaidwanderer ), [@abacaj ](https://github.com/abacaj ), [@wong2 ](https://github.com/wong2 ), [@simon300000 ](https://github.com/simon300000 ), [@RomanHotsiy ](https://github.com/RomanHotsiy ), [@ElijahPepe ](https://github.com/ElijahPepe ), and all the other contributors 💪
2022-12-05 07:34:01 +00:00
- The original browser version was inspired by this [Go module ](https://github.com/danielgross/whatsapp-gpt ) by [Daniel Gross ](https://github.com/danielgross )
2022-12-12 00:04:20 +00:00
- [OpenAI ](https://openai.com ) for creating [ChatGPT ](https://openai.com/blog/chatgpt/ ) 🔥
2022-12-03 00:04:53 +00:00
## License
MIT © [Travis Fischer ](https://transitivebullsh.it )
2022-12-07 04:37:56 +00:00
If you found this project interesting, please consider [sponsoring me ](https://github.com/sponsors/transitive-bullshit ) or < 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 >