Enhance chatbot conversation engine and add retrieval eval suite
This commit is contained in:
@@ -740,6 +740,7 @@ app.get('/api/admin-content', async (_req, res) => {
|
||||
const MAX_CHATBOT_ENTRIES = 500
|
||||
let chatbotEntries = []
|
||||
let chatbotWritePromise = Promise.resolve()
|
||||
let chatbotFileMtimeMs = 0
|
||||
|
||||
function queueChatbotWrite() {
|
||||
chatbotWritePromise = chatbotWritePromise
|
||||
@@ -756,25 +757,43 @@ function queueChatbotWrite() {
|
||||
})
|
||||
}
|
||||
|
||||
function loadChatbotFromDisk() {
|
||||
return readFile(CHATBOT_FILE, 'utf8')
|
||||
.then(raw => {
|
||||
const parsed = JSON.parse(raw)
|
||||
chatbotEntries = Array.isArray(parsed) ? parsed.slice(0, MAX_CHATBOT_ENTRIES) : []
|
||||
})
|
||||
.catch(() => {
|
||||
chatbotEntries = []
|
||||
})
|
||||
async function loadChatbotFromDisk() {
|
||||
try {
|
||||
const [fileStats, raw] = await Promise.all([
|
||||
stat(CHATBOT_FILE),
|
||||
readFile(CHATBOT_FILE, 'utf8'),
|
||||
])
|
||||
const parsed = JSON.parse(raw)
|
||||
chatbotEntries = Array.isArray(parsed) ? parsed.slice(0, MAX_CHATBOT_ENTRIES) : []
|
||||
chatbotFileMtimeMs = fileStats.mtimeMs
|
||||
} catch {
|
||||
chatbotEntries = []
|
||||
chatbotFileMtimeMs = 0
|
||||
}
|
||||
}
|
||||
|
||||
async function refreshChatbotFromDiskIfChanged() {
|
||||
try {
|
||||
const fileStats = await stat(CHATBOT_FILE)
|
||||
if (fileStats.mtimeMs <= chatbotFileMtimeMs) return
|
||||
await loadChatbotFromDisk()
|
||||
} catch {
|
||||
if (chatbotFileMtimeMs === 0) return
|
||||
chatbotEntries = []
|
||||
chatbotFileMtimeMs = 0
|
||||
}
|
||||
}
|
||||
|
||||
// Public: return all chatbot entries for client-side matching
|
||||
app.get('/api/chatbot-content', (req, res) => {
|
||||
app.get('/api/chatbot-content', async (req, res) => {
|
||||
await refreshChatbotFromDiskIfChanged()
|
||||
res.json(chatbotEntries)
|
||||
})
|
||||
|
||||
// Admin: get all entries
|
||||
app.get('/api/admin/chatbot-content', (req, res) => {
|
||||
app.get('/api/admin/chatbot-content', async (req, res) => {
|
||||
if (!isValidAdminSession(req)) { res.status(401).json({ message: 'Not authenticated.' }); return }
|
||||
await refreshChatbotFromDiskIfChanged()
|
||||
res.json(chatbotEntries)
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user