diff --git a/.gitignore b/.gitignore index d1595af..883a9f0 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ coverage .next/ out/ build +dist/ # misc .DS_Store diff --git a/apps/server/.gitIgnore b/apps/server/.gitIgnore index 2ec5097..e6367a1 100644 --- a/apps/server/.gitIgnore +++ b/apps/server/.gitIgnore @@ -1,3 +1,3 @@ node_modules .env -dist/ +dist diff --git a/apps/server/dist/index.js b/apps/server/dist/index.js index 1ab99b9..cf1d2bf 100644 --- a/apps/server/dist/index.js +++ b/apps/server/dist/index.js @@ -38,7 +38,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) { var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; -Object.defineProperty(exports, "__esModule", { value: true }); +exports.__esModule = true; var express_1 = __importDefault(require("express")); var dotenv_1 = __importDefault(require("dotenv")); var cors_1 = __importDefault(require("cors")); @@ -49,171 +49,92 @@ var database_1 = require("database"); var types_1 = require("types"); var openai_1 = __importDefault(require("openai")); var trpc_1 = require("trpc"); +var helper_1 = require("trpc/lib/helper"); // import { ChatGPTAPIOptions, ChatGPTAPI } from 'chatgpt'; -dotenv_1.default.config(); +dotenv_1["default"].config(); var dbClient = new database_1.PrismaClient(); -var app = (0, express_1.default)(); +var app = (0, express_1["default"])(); var _a = process.env, PORT = _a.PORT, TWILIO_ACCOUNT_SID = _a.TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN = _a.TWILIO_AUTH_TOKEN, TWILIO_PHONE_NUMBER = _a.TWILIO_PHONE_NUMBER, BASEURL = _a.BASEURL, OPENAI_API_KEY = _a.OPENAI_API_KEY; -if (!OPENAI_API_KEY) { +if (!OPENAI_API_KEY || !TWILIO_PHONE_NUMBER || !TWILIO_AUTH_TOKEN || !TWILIO_ACCOUNT_SID || !BASEURL) { throw new Error("Add the enviorment variable"); } -app.use('/trpc', trpc_1.trpcExpress.createExpressMiddleware({ - router: trpc_1.appRouter, - createContext: function (_a) { - var req = _a.req, res = _a.res; - return { - TWILIO_ACCOUNT_SID: TWILIO_ACCOUNT_SID || '', - TWILIO_AUTH_TOKEN: TWILIO_AUTH_TOKEN || '', - TWILIO_PHONE_NUMBER: TWILIO_PHONE_NUMBER || '', - prisma: new database_1.PrismaClient(), - prevMessage: [ - { role: types_1.role.System, content: 'You are a chat generator' } - ] - }; - }, -})); -var api; +var preMessageId; +app.use('/trpc', (0, trpc_1.createExpressMiddleware)(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_PHONE_NUMBER, OPENAI_API_KEY)); // Ensure that the 'chatgpt' module is imported correctly -var openai = new openai_1.default({ - apiKey: OPENAI_API_KEY, // defaults to process.env["OPENAI_API_KEY"] +var openai = new openai_1["default"]({ + apiKey: OPENAI_API_KEY }); -app.use(body_parser_1.default.urlencoded({ +app.use(body_parser_1["default"].urlencoded({ extended: true })); -app.use(body_parser_1.default.json()); -app.use((0, cors_1.default)()); +app.use(body_parser_1["default"].json()); +app.use((0, cors_1["default"])()); app.post('/query', function (req, res) { return __awaiter(void 0, void 0, void 0, function () { - var _a, ProfileName, WaId, From, AccountSid, SmsMessageSid, MessageSid, from, isUser, prevMessagesId, pre, messages, newMsg, data, prompt, response, error_1; - return __generator(this, function (_b) { - switch (_b.label) { + var queryRes, prompt, error_1; + return __generator(this, function (_a) { + switch (_a.label) { case 0: - _b.trys.push([0, 12, , 13]); - console.log('\n\n', req.body, '\n\n'); - _a = req.body, ProfileName = _a.ProfileName, WaId = _a.WaId, From = _a.From, AccountSid = _a.AccountSid, SmsMessageSid = _a.SmsMessageSid, MessageSid = _a.MessageSid; - from = parseInt(From.split('+')[1]); - return [4 /*yield*/, dbClient.user.findUnique({ - where: { - Number: from - } + _a.trys.push([0, 4, , 5]); + return [4 /*yield*/, (0, axios_1["default"])({ + baseURL: BASEURL, + url: '/trpc/query', + data: req.body, + headers: { + "Content-Type": 'application/json', + "preMessagesId": (0, helper_1.getCookie)(req, 'preMessagesId') + }, + method: 'POST' })]; case 1: - isUser = _b.sent(); - prevMessagesId = void 0; - if (!!isUser) return [3 /*break*/, 3]; - return [4 /*yield*/, dbClient.user.create({ + queryRes = _a.sent(); + preMessageId = queryRes.data.result.data.data.prevMessagesId; + console.log(preMessageId); + console.log((0, helper_1.getCookie)(req, 'preMessagesId')); + if (preMessageId != (0, helper_1.getCookie)(req, 'preMessagesId')) { + res.setHeader('Set-Cookie', (0, helper_1.setCookie)('preMessagesId', preMessageId)); + } + console.log(preMessageId); + console.log((0, helper_1.getCookie)(req, 'preMessagesId')); + if (!(req.body.Body != '/clear')) return [3 /*break*/, 3]; + return [4 /*yield*/, (0, axios_1["default"])({ + baseURL: BASEURL, + url: '/trpc/generate', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + "preMessagesId": (0, helper_1.getCookie)(req, 'preMessagesId') + }, data: { - ProfileName: ProfileName, - WaId: WaId, - Number: from, - AccountSid: AccountSid + message: queryRes.data.result.data.data.message } })]; case 2: - isUser = _b.sent(); - _b.label = 3; - case 3: return [4 /*yield*/, dbClient.messages.findFirst({ - where: { - userId: isUser === null || isUser === void 0 ? void 0 : isUser.id - }, - select: { - id: true - } - })]; + prompt = _a.sent(); + console.log(prompt.data.result.data.prompt); + _a.label = 3; + case 3: + // data = { + // to: `whatsapp:+${isUser?.Number}`, + // message: prompt.data.prompt, + // prevMessagesId: prevMessagesId?.toString() || "" + // } + // } + // const response = await axios({ + // baseURL: BASEURL, + // url: '/trpc/reply', + // method: 'POST', + // headers: { + // 'Content-Type': 'application/json' + // }, + // data + // }); + return [2 /*return*/, res.status(200).json(req.body)]; case 4: - pre = _b.sent(); - if (pre) { - prevMessagesId = pre.id; - } - if (!(!pre || req.body.Body == '/clear')) return [3 /*break*/, 6]; - return [4 /*yield*/, dbClient.messages.create({ - data: { - user: { - connect: { - id: isUser.id - } - }, - messages: { - create: { - role: types_1.role.System, - MessageSid: '0000', - SmsMessageSid: '0000', - body: 'You are a chat generator helper' - } - } - } - })]; - case 5: - messages = _b.sent(); - prevMessagesId = messages.id; - _b.label = 6; - case 6: return [4 /*yield*/, dbClient.message.create({ - data: { - SmsMessageSid: SmsMessageSid, - MessageSid: MessageSid, - messages: { - connect: { - id: prevMessagesId - } - }, - body: req.body.Body, - role: types_1.role.User - } - })]; - case 7: - newMsg = _b.sent(); - // api = new ChatGPTAPI({ - // apiKey: OPENAI_API_KEY, - // }); - // console.log(api) - // const prompt = await api.sendMessage(req.body.Body); - // console.log(prompt.text); - console.log('\n\n', prevMessagesId, '\n\n'); - data = void 0; - if (!(req.body.Body == '/clear')) return [3 /*break*/, 8]; - data = { - to: "whatsapp:+".concat(isUser === null || isUser === void 0 ? void 0 : isUser.Number), - message: 'Starting New Conversation', - prevMessagesId: (prevMessagesId === null || prevMessagesId === void 0 ? void 0 : prevMessagesId.toString()) || "" - }; - return [3 /*break*/, 10]; - case 8: return [4 /*yield*/, (0, axios_1.default)({ - baseURL: BASEURL, - url: '/generate', - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - data: { - prevMessagesId: prevMessagesId, - message: req.body.Body - } - })]; - case 9: - prompt = _b.sent(); - console.log(prompt.data.prompt); - data = { - to: "whatsapp:+".concat(isUser === null || isUser === void 0 ? void 0 : isUser.Number), - message: prompt.data.prompt, - prevMessagesId: (prevMessagesId === null || prevMessagesId === void 0 ? void 0 : prevMessagesId.toString()) || "" - }; - _b.label = 10; - case 10: return [4 /*yield*/, (0, axios_1.default)({ - baseURL: BASEURL, - url: '/trpc/reply', - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - data: data - })]; - case 11: - response = _b.sent(); - return [2 /*return*/, res.status(200).json(req.body)]; - case 12: - error_1 = _b.sent(); - console.log(error_1); + error_1 = _a.sent(); + //@ts-ignore + console.log(error_1.response.data); return [2 /*return*/, res.status(500).json({ message: 'Internal Error', error: error_1 })]; - case 13: return [2 /*return*/]; + case 5: return [2 /*return*/]; } }); }); }); @@ -258,7 +179,7 @@ app.post('/generate', function (req, res) { return __awaiter(void 0, void 0, voi if (!(prevMessages === null || prevMessages === void 0 ? void 0 : prevMessages.messages)) return [3 /*break*/, 3]; messages = generateMessageArray(prevMessages, message); console.log('\n\n', messages, '\n\n'); - return [4 /*yield*/, (0, axios_1.default)({ + return [4 /*yield*/, (0, axios_1["default"])({ method: 'POST', baseURL: 'https://api.openai.com/v1/chat/completions', headers: { @@ -268,7 +189,7 @@ app.post('/generate', function (req, res) { return __awaiter(void 0, void 0, voi data: { model: "gpt-3.5-turbo", messages: messages, - temperature: 0.7, + temperature: 0.7 } })]; case 2: @@ -292,7 +213,7 @@ app.post('/reply', function (req, res) { return __awaiter(void 0, void 0, void 0 switch (_b.label) { case 0: _b.trys.push([0, 6, , 7]); - client = (0, twilio_1.default)(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN); + client = (0, twilio_1["default"])(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN); parsedInput = types_1.replyMessage.safeParse(req.body); if (!parsedInput.success) { console.log('Validation Error'); @@ -309,7 +230,7 @@ app.post('/reply', function (req, res) { return __awaiter(void 0, void 0, void 0 return [4 /*yield*/, client.messages.create({ body: chunk, from: "whatsapp:".concat(TWILIO_PHONE_NUMBER), - to: to, + to: to })]; case 2: response = _b.sent(); @@ -321,7 +242,7 @@ app.post('/reply', function (req, res) { return __awaiter(void 0, void 0, void 0 MessageSid: response.sid, messages: { connect: { - id: parseInt(prevMessagesId) + id: prevMessagesId } }, body: chunk, @@ -349,7 +270,7 @@ app.get('/chat-begin', function (req, res) { return __awaiter(void 0, void 0, vo switch (_a.label) { case 0: return [4 /*yield*/, openai.chat.completions.create({ messages: [{ role: 'user', content: 'Say this is a test' }], - model: 'gpt-3.5-turbo', + model: 'gpt-3.5-turbo' })]; case 1: completion = _a.sent(); diff --git a/apps/server/src/index.ts b/apps/server/src/index.ts index 36edc8a..403181f 100644 --- a/apps/server/src/index.ts +++ b/apps/server/src/index.ts @@ -77,6 +77,7 @@ app.post('/query', async (req, res) => { }); preMessageId = queryRes.data.result.data.data.prevMessagesId; + const data = queryRes.data.result.data.data; console.log(preMessageId); console.log(getCookie(req, 'preMessagesId')) if (preMessageId != getCookie(req, 'preMessagesId')) { @@ -102,6 +103,7 @@ app.post('/query', async (req, res) => { }); console.log(prompt.data.result.data.prompt); + data.message = prompt.data.result.data.prompt; } // data = { @@ -110,16 +112,15 @@ app.post('/query', async (req, res) => { // prevMessagesId: prevMessagesId?.toString() || "" // } // } - - // const response = await axios({ - // baseURL: BASEURL, - // url: '/trpc/reply', - // method: 'POST', - // headers: { - // 'Content-Type': 'application/json' - // }, - // data - // }); + const response = await axios({ + baseURL: BASEURL, + url: '/trpc/reply', + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + data + }); return res.status(200).json(req.body); } catch (error) { diff --git a/packages/trpc/server/index.ts b/packages/trpc/server/index.ts index aac87f7..bc4cde0 100644 --- a/packages/trpc/server/index.ts +++ b/packages/trpc/server/index.ts @@ -24,6 +24,7 @@ export const appRouter = router({ // Send each chunk as a separate WhatsApp message for (const chunk of responseChunks) { + const response = await client.messages.create({ body: chunk, from: `whatsapp:${TWILIO_PHONE_NUMBER}`,