|
import crypto from "crypto"; |
|
import { saveEmbedding, queryEmbedding, deleteNamespace } from "./pinecone.js"; |
|
import { getEmbeddings } from "./huggingFace.js"; |
|
|
|
const md5 = (str) => crypto.createHash("md5").update(str).digest("hex"); |
|
|
|
const handleEmbedding = async ({ |
|
id, |
|
embeddings, |
|
text, |
|
label, |
|
stage, |
|
user, |
|
}) => { |
|
switch (stage) { |
|
case "training": |
|
return await saveEmbedding({ |
|
id, |
|
values: embeddings, |
|
namespace: user, |
|
metadata: { keywords: text, label }, |
|
}); |
|
case "detecting": |
|
return await queryEmbedding({ |
|
values: embeddings, |
|
namespace: user, |
|
}); |
|
} |
|
}; |
|
|
|
const handleImage = async (req, res) => { |
|
const data = req.body; |
|
|
|
const { data: imageData, uri, label, stage, user } = data; |
|
const id = `${label}-${md5(uri)}`; |
|
const userHash = md5(user); |
|
const text = "default"; |
|
try { |
|
const embeddings = await getEmbeddings(imageData, [text]); |
|
const result = await handleEmbedding({ |
|
id, |
|
embeddings, |
|
text, |
|
label, |
|
stage, |
|
user: userHash, |
|
}); |
|
res.json(result); |
|
} catch (e) { |
|
const message = `Failed handling embedding: ${e}`; |
|
console.log(message, e); |
|
res.status(500).json({ message }); |
|
} |
|
}; |
|
|
|
const handleDeleteUser = async (req, res) => { |
|
const { user } = req.query; |
|
|
|
if (!user) { |
|
res.status(400).json({ |
|
message: "missing user", |
|
}); |
|
return; |
|
} |
|
const hashedUser = md5(user); |
|
|
|
await deleteNamespace({ namespace: hashedUser }); |
|
res.json({ |
|
message: "success", |
|
}); |
|
}; |
|
|
|
export { handleImage, handleDeleteUser }; |