dev1/backend/utils/seedFaq.js
2025-09-18 13:26:16 +00:00

37 lines
1.2 KiB
JavaScript

import { readFileSync } from "fs";
import { OpenAI } from "openai";
import sqlite3 from "sqlite3";
import { open } from "sqlite";
import dotenv from "dotenv";
import { fileURLToPath } from 'url';
import path from 'path';
// --- Basic file init ---
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const rootPath = path.resolve(__dirname, "../..");
const env = process.env.ENV_NAME?.trim() || "prod";
dotenv.config({ path: path.resolve(rootPath, `.env.${env}`) });
const faqPath = path.resolve(rootPath, "backend", "data", "faqs.json");
const faqs = JSON.parse(readFileSync(faqPath, "utf8"));
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const dbPath = path.resolve(rootPath, "user_profile.db");
const db = await open({ filename: dbPath, driver: sqlite3.Database });
for (const { q, a } of faqs) {
const { data } = await openai.embeddings.create({
model: "text-embedding-3-small",
input: q
});
const buf = Buffer.from(new Float32Array(data[0].embedding).buffer);
await db.run(
`INSERT INTO faq_embeddings (question,answer,embedding) VALUES (?,?,?)`,
[q, a, buf]
);
}
console.log("Seeded FAQ embeddings");