Domify commited on
Commit
54eb7de
Β·
verified Β·
1 Parent(s): ad0fe02

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +34 -21
index.js CHANGED
@@ -3,22 +3,20 @@ import cors from 'cors';
3
  import fetch from 'node-fetch';
4
  import rateLimit from 'express-rate-limit';
5
  const app = express();
6
- // ── Add these imports at the top ───────────────────
7
- import { searchDuckDuckGo, scrapeSiteKnowledge, buildIsabellaPrompt } from './consultant.js';
8
 
9
- // ── Add these routes before your TTS endpoints ─────
10
- // URLs to scrape for knowledge base (updated automatically)
 
11
  const KNOWLEDGE_URLS = [
12
- 'https://domify-academy.free.nf/refund.html',
13
- 'https://domify-academy.free.nf/certificate.html',
14
- 'https://domify-academy.free.nf/verify.html',
15
- 'https://domify-academy.free.nf/about-us',
16
  'https://domify-academy.free.nf/privacy',
17
- 'https://domify-academy.free.nf/Product-Price',
18
- 'https://domify-academy.free.nf',
19
  ];
20
 
21
- // Cached knowledge (refreshed periodically)
22
  let cachedKnowledge = null;
23
  let knowledgeLastFetched = 0;
24
 
@@ -29,25 +27,29 @@ async function getKnowledge() {
29
  }
30
  cachedKnowledge = await scrapeSiteKnowledge(KNOWLEDGE_URLS);
31
  knowledgeLastFetched = now;
32
- console.log('πŸ“š Knowledge base refreshed');
33
  return cachedKnowledge;
34
  }
35
 
36
- // ── Isabella Chat Endpoint ─────────────────────────
37
  app.post('/api/isabella/chat', async (req, res) => {
38
  try {
39
- const { message, userName, pageName, conversationHistory } = req.body;
40
-
41
  if (!message) {
42
  return res.status(400).json({ error: 'Message required' });
43
  }
44
 
45
- // Get fresh knowledge and search in parallel
 
 
 
 
46
  const [knowledge, searchResults] = await Promise.all([
47
  getKnowledge(),
48
  searchDuckDuckGo(message)
49
  ]);
50
 
 
51
  const systemPrompt = buildIsabellaPrompt(
52
  userName || '',
53
  pageName || 'unknown',
@@ -55,19 +57,30 @@ app.post('/api/isabella/chat', async (req, res) => {
55
  searchResults
56
  );
57
 
 
 
 
 
 
 
 
 
 
 
 
58
  res.json({
59
- systemPrompt: systemPrompt,
60
- searchContext: searchResults,
61
  knowledgeRefreshed: Date.now() - knowledgeLastFetched < 60000
62
  });
63
 
64
  } catch (err) {
65
- console.error('Isabella chat error:', err.message);
66
- res.status(500).json({ error: err.message });
67
  }
68
  });
69
 
70
- // ── Refresh Knowledge Manually ──────────────────────
71
  app.post('/api/isabella/refresh-knowledge', async (req, res) => {
72
  cachedKnowledge = await scrapeSiteKnowledge(KNOWLEDGE_URLS);
73
  knowledgeLastFetched = Date.now();
 
3
  import fetch from 'node-fetch';
4
  import rateLimit from 'express-rate-limit';
5
  const app = express();
6
+ // ── Isabella Consultant Endpoint (standalone) ─────
7
+ import { searchDuckDuckGo, scrapeSiteKnowledge, buildIsabellaPrompt, callNVIDIA } from './consultant.js';
8
 
9
+ const ISABELLA_NVIDIA_KEY = process.env.ISABELLA_NVIDIA_KEY || '';
10
+
11
+ // URLs to scrape for knowledge
12
  const KNOWLEDGE_URLS = [
13
+ 'https://domify-academy.free.nf/about-us',
14
+ 'domify-academy.free.nf/product-Price',
15
+ 'https://domify-academy.free.nf/refund',
 
16
  'https://domify-academy.free.nf/privacy',
17
+ 'https://domify-academy.free.nf'
 
18
  ];
19
 
 
20
  let cachedKnowledge = null;
21
  let knowledgeLastFetched = 0;
22
 
 
27
  }
28
  cachedKnowledge = await scrapeSiteKnowledge(KNOWLEDGE_URLS);
29
  knowledgeLastFetched = now;
30
+ console.log('πŸ“š Isabella knowledge base refreshed');
31
  return cachedKnowledge;
32
  }
33
 
 
34
  app.post('/api/isabella/chat', async (req, res) => {
35
  try {
36
+ const { message, userName, pageName, conversationHistory = [] } = req.body;
37
+
38
  if (!message) {
39
  return res.status(400).json({ error: 'Message required' });
40
  }
41
 
42
+ if (!ISABELLA_NVIDIA_KEY) {
43
+ return res.status(500).json({ error: 'Isabella NVIDIA key not configured' });
44
+ }
45
+
46
+ // Get knowledge and search in parallel
47
  const [knowledge, searchResults] = await Promise.all([
48
  getKnowledge(),
49
  searchDuckDuckGo(message)
50
  ]);
51
 
52
+ // Build enriched system prompt
53
  const systemPrompt = buildIsabellaPrompt(
54
  userName || '',
55
  pageName || 'unknown',
 
57
  searchResults
58
  );
59
 
60
+ // Call NVIDIA for actual response
61
+ const reply = await callNVIDIA(systemPrompt, message, ISABELLA_NVIDIA_KEY, conversationHistory);
62
+
63
+ // Check for embedded issue reports
64
+ let issue = null;
65
+ const issueMatch = reply.match(/\[ISSUE:\s*(.+?)\]/);
66
+ if (issueMatch) {
67
+ issue = issueMatch[1];
68
+ reply = reply.replace(/\[ISSUE:.*?\]/g, '').trim();
69
+ }
70
+
71
  res.json({
72
+ reply,
73
+ issue,
74
  knowledgeRefreshed: Date.now() - knowledgeLastFetched < 60000
75
  });
76
 
77
  } catch (err) {
78
+ console.error('Isabella error:', err.message);
79
+ res.status(500).json({ error: 'Isabella is thinking... try again' });
80
  }
81
  });
82
 
83
+ // ── Knowledge refresh ────────────────────────────
84
  app.post('/api/isabella/refresh-knowledge', async (req, res) => {
85
  cachedKnowledge = await scrapeSiteKnowledge(KNOWLEDGE_URLS);
86
  knowledgeLastFetched = Date.now();