From dcf038df1f36763e0b5c42f0da1afb98616994c2 Mon Sep 17 00:00:00 2001 From: Max Kammler Date: Fri, 3 Feb 2023 11:35:49 +0100 Subject: [PATCH] add CHATGPT_MODEL environment variable --- .env.example | 2 ++ README.md | 1 + src/env.ts | 6 ++++-- src/index.ts | 9 ++++++--- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/.env.example b/.env.example index bd5041b..3eb8d48 100644 --- a/.env.example +++ b/.env.example @@ -6,6 +6,8 @@ OPENAI_PRO=false # Set the ChatGPT conversation context to 'thread', 'room' or 'both'. CHATGPT_CONTEXT=thread +# (Optional) Explicitly set the ChatGPT model to be used by the API. +#CHATGPT_MODEL=text-chat-davinci-002-20221122 # Matrix Static Settings (required, see notes) # Defaults to "https://matrix.org" diff --git a/README.md b/README.md index 87b16a4..07e9d01 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ Per default, whoever knows the name of your bot can add it to their rooms and st ### OpenAI / ChatGPT - You need to have an account at [openai.com. ](https://openai.com/). Create a [API Key](https://platform.openai.com/account/api-keys). Then, set `OPENAI_API_KEY` in your `.env` file +- You might want to change to chat-model by setting the `CHATGPT_MODEL` in your `.env` file. The model currently defaults to `text-chat-davinci-002-20221122`. Check the [node-chatgpt-api](https://github.com/waylaidwanderer/node-chatgpt-api) repository for keeping track of the models. ## Setup diff --git a/src/env.ts b/src/env.ts index ab7639a..de2a56c 100644 --- a/src/env.ts +++ b/src/env.ts @@ -26,7 +26,8 @@ export const { OPENAI_API_KEY, OPENAI_PRO, CHATGPT_CONTEXT, - CHATGPT_TIMEOUT + CHATGPT_TIMEOUT, + CHATGPT_MODEL } = parseEnv(process.env, { DATA_PATH: { schema: z.string().default("./storage"), description: "Set to /storage/ if using docker, ./storage if running without" }, /** Matrix Bot Settings */ @@ -50,5 +51,6 @@ export const { OPENAI_API_KEY: { schema: z.string().default(""), description: "Set to the API key from https://platform.openai.com/account/api-keys"}, OPENAI_PRO: { schema: z.boolean().default(false), description: "Set to true if you have a paid ChatGPT subscription." }, CHATGPT_TIMEOUT: { schema: z.number().default(2 * 60 * 1000), description: "Set number of milliseconds to wait for ChatGPT responses" }, - CHATGPT_CONTEXT: { schema: z.enum(["thread", "room", "both"]).default("thread"), description: "Set the ChatGPT conversation context to 'thread', 'room' or 'both'" } + CHATGPT_CONTEXT: { schema: z.enum(["thread", "room", "both"]).default("thread"), description: "Set the ChatGPT conversation context to 'thread', 'room' or 'both'" }, + CHATGPT_MODEL: { schema: z.string().default("text-chat-davinci-002-20221122"), description: "The model for the ChatGPT-API to use" } }); diff --git a/src/index.ts b/src/index.ts index 5111ec5..45a4409 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,7 +7,7 @@ import { } from "matrix-bot-sdk"; import * as path from "path"; -import { DATA_PATH, OPENAI_API_KEY, OPENAI_PRO, MATRIX_HOMESERVER_URL, MATRIX_ACCESS_TOKEN, MATRIX_AUTOJOIN, MATRIX_BOT_PASSWORD, MATRIX_BOT_USERNAME, MATRIX_ENCRYPTION, MATRIX_THREADS, CHATGPT_CONTEXT } from './env.js' +import { DATA_PATH, OPENAI_API_KEY, OPENAI_PRO, MATRIX_HOMESERVER_URL, MATRIX_ACCESS_TOKEN, MATRIX_AUTOJOIN, MATRIX_BOT_PASSWORD, MATRIX_BOT_USERNAME, MATRIX_ENCRYPTION, MATRIX_THREADS, CHATGPT_CONTEXT, CHATGPT_MODEL } from './env.js' import { parseMatrixUsernamePretty } from './utils.js'; import CommandHandler from "./handlers.js" import { ChatGPTAPI } from 'chatgpt' @@ -43,7 +43,10 @@ async function main() { // use puppeteer to bypass cloudflare (headful because of captchas) const chatGPT: ChatGPTAPI = new ChatGPTAPI({ - apiKey: OPENAI_API_KEY + apiKey: OPENAI_API_KEY, + completionParams: { + model: CHATGPT_MODEL + } }) // // call `api.refreshSession()` every hour to refresh the session @@ -83,7 +86,7 @@ async function main() { const commands = new CommandHandler(client, chatGPT); await commands.start(); - LogService.info("index", "Starting bot..."); + LogService.info("index", `Starting bot using ChatGPT model ${CHATGPT_MODEL}`); await client.start() LogService.info("index", "Bot started!"); }