37 lines
1.2 KiB
JavaScript
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.NODE_ENV?.trim() || "development";
|
|
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");
|