From 94c0fbb525bb214f70d8d32e50552088cf7cf39a Mon Sep 17 00:00:00 2001 From: Daniel Avila Date: Tue, 21 Mar 2023 19:44:31 -0400 Subject: [PATCH] feat: api will disable search if no meilisearch connection --- api/.env.example | 12 +++++++++--- api/server/routes/search.js | 17 ++++++++++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/api/.env.example b/api/.env.example index a6685f3d7d..012efa2583 100644 --- a/api/.env.example +++ b/api/.env.example @@ -21,10 +21,16 @@ OPENAI_KEY= CHATGPT_TOKEN= BING_TOKEN= -# User System +# Enable Message/Convo Search +# Requires installation of self-hosted Meilisearch or Paid Remote Plan +# this is taken care of you if you use the docker-compose file. +# SEARCH=TRUE +SEARCH= +MEILI_HOST='http://localhost:7700' +MEILI_KEY='MASTER_KEY' +# User System # global enable/disable the sample user system. # this is not a ready to use user system. # dont't use it, unless you can write your own code. -SEARCH= -ENABLE_USER_SYSTEM= +ENABLE_USER_SYSTEM= \ No newline at end of file diff --git a/api/server/routes/search.js b/api/server/routes/search.js index f9e917092d..25515325c4 100644 --- a/api/server/routes/search.js +++ b/api/server/routes/search.js @@ -1,5 +1,6 @@ const express = require('express'); const router = express.Router(); +const { MeiliSearch } = require('meilisearch'); const { Message } = require('../../models/Message'); const { Conversation, getConvosQueried } = require('../../models/Conversation'); const { reduceHits } = require('../../lib/utils/reduceHits'); @@ -79,7 +80,21 @@ router.get('/test', async function (req, res) { }); router.get('/enable', async function (req, res) { - res.send(!!process.env.SEARCH); + let result = false; + const client = new MeiliSearch({ + host: process.env.MEILI_HOST, + apiKey: process.env.MEILI_KEY + }); + + try { + const { status } = await client.health(); + console.log(`Meilisearch: ${status}`); + result = status === 'available' && !!process.env.SEARCH; + return res.send(result); + } catch(error) { + console.error(error); + return res.send(false); + } }); module.exports = router;