adds db connectivity and saving, need to process user messages still

This commit is contained in:
Daniel Avila 2023-02-05 23:05:07 -05:00
parent f889f23792
commit 254f9d7e26
3 changed files with 100 additions and 12 deletions

View file

@ -1,10 +1,43 @@
/*
{
role: 'assistant',
id: 'cmpl-6gNfeSy5RUJulgpX1vIlppGdyXjB3',
parentMessageId: 'e84f127b-201b-4a1d-8b6d-899e7edab5b4',
conversationId: '97f657cd-be00-490c-94b9-31dba2462a7c',
text: 'OpenAI is an AI research lab consisting of the for-profit technological company OpenAI LP and its parent company, the non-profit OpenAI Inc. It aims to promote and develop friendly AI in a way that benefits humanity as a whole.'
}
*/
const mongoose = require('mongoose');
const messageSchema = mongoose.Schema({
id: {
type: String,
unique: true,
required: true
},
conversationId: {
type: String,
required: true
},
parentMessageId: {
type: String,
required: true
},
sender: {
type: String,
required: true
},
text: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
}
});
const Message = mongoose.models.Message || mongoose.model('Message', messageSchema);
module.exports = {
saveMessage: async (message) => {
const { text, id, parentMessageId, conversationId } = message;
await Message.create({
id,
conversationId,
parentMessageId,
text
});
}
}

42
models/dbConnect.js Normal file
View file

@ -0,0 +1,42 @@
const mongoose = require('mongoose');
const MONGO_URI = process.env.MONGO_URI;
if (!MONGO_URI) {
throw new Error('Please define the MONGO_URI environment variable inside .env.local');
}
/**
* Global is used here to maintain a cached connection across hot reloads
* in development. This prevents connections growing exponentially
* during API Route usage.
*/
let cached = global.mongoose;
if (!cached) {
cached = global.mongoose = { conn: null, promise: null };
}
async function dbConnect() {
if (cached.conn) {
return cached.conn;
}
if (!cached.promise) {
const opts = {
useNewUrlParser: true,
useUnifiedTopology: true,
bufferCommands: false,
// bufferMaxEntries: 0,
// useFindAndModify: true,
// useCreateIndex: true
};
cached.promise = mongoose.connect(MONGO_URI, opts).then((mongoose) => {
return mongoose;
});
}
cached.conn = await cached.promise;
return cached.conn;
}
module.exports = dbConnect;

View file

@ -1,6 +1,9 @@
const path = require('path');
const express = require('express');
const { ask } = require('../app/chatgpt');
const dbConnect = require('../models/dbConnect');
const { saveMessage } = require('../models/Message');
const crypto = require('crypto');
const path = require('path');
const app = express();
const port = 3050;
const cors = require('cors');
@ -10,6 +13,8 @@ app.use(express.json());
const projectPath = path.join(__dirname, '..');
app.use(express.static(path.join(projectPath, 'public')));
dbConnect().then((connection) => console.log('Connected to MongoDB'));
app.get('/', function (req, res) {
console.log(path.join(projectPath, 'public', 'index.html'));
res.sendFile(path.join(projectPath, 'public', 'index.html'));
@ -18,6 +23,7 @@ app.get('/', function (req, res) {
app.post('/ask', async (req, res) => {
console.log(req.body);
const { text, parentMessageId, conversationId } = req.body;
const userMessageId = crypto.randomUUID();
res.writeHead(200, {
Connection: 'keep-alive',
@ -38,7 +44,14 @@ app.post('/ask', async (req, res) => {
res.write(`event: message\ndata: ${data}\n\n`);
};
const gptResponse = await ask(text, progressCallback, { parentMessageId, conversationId });
let gptResponse = await ask(text, progressCallback, { parentMessageId, conversationId });
if (!!parentMessageId) {
console.log('req parent vs res parent', parentMessageId, gptResponse.parentMessageId);
gptResponse = { ...gptResponse, parentMessageId, sender: 'GPT' };
}
await saveMessage(gptResponse);
res.write(`event: message\ndata: ${JSON.stringify(gptResponse)}\n\n`);
res.end();
});