51 lines
1.7 KiB
JavaScript
51 lines
1.7 KiB
JavaScript
import { CreateMLCEngine } from "@mlc-ai/web-llm";
|
|
|
|
var engine = null
|
|
var resume = ""
|
|
var resourcesLoaded = false
|
|
|
|
const loadProgress = (progress) => {
|
|
console.dir(progress)
|
|
// Trigger popup and stream progress.timeElapsed
|
|
}
|
|
|
|
const loadResources = async () => {
|
|
let modelName = (await browser.storage.local.get("model")).model || "Llama-3.2-1B-Instruct-q4f32_1-MLC"
|
|
console.log(`Loading model: ${modelName}`)
|
|
engine = await CreateMLCEngine(modelName, { initProgressCallback: loadProgress });
|
|
console.log("Model loaded")
|
|
resume = (await browser.storage.local.get("resume")).resume || "No resume, halt and ask for resume."
|
|
resourcesLoaded = true
|
|
}
|
|
|
|
const runMatch = async (inputText) => {
|
|
console.log("Run Match")
|
|
if (!resourcesLoaded) await loadResources()
|
|
const query = [
|
|
{ role: "system", content: "You are a resume-job description matching assistant." },
|
|
{ role: "user", content: `This is my resume: ${resume}` },
|
|
{ role: "user", content: `This is the job description: ${inputText}` }
|
|
]
|
|
const response = await engine.chat.completions.create({
|
|
messages: query
|
|
})
|
|
console.dir(response)
|
|
window.alert(response.choices[0].message.content)
|
|
|
|
}
|
|
|
|
// Add context menu items
|
|
browser.contextMenus.create({
|
|
id: "nms-cmenu",
|
|
title: "NoticeMe",
|
|
contexts: ["selection"]
|
|
}, () => void browser.runtime.lastError)
|
|
|
|
browser.contextMenus.onClicked.addListener((info, tab) => {
|
|
if (info.menuItemId === "nms-cmenu" && info.selectionText) {
|
|
// Handle context menu click with selected text
|
|
console.log("Context menu clicked with selection:", info.selectionText);
|
|
runMatch(info.selectionText)
|
|
}
|
|
})
|