File size: 1,602 Bytes
e6b7161 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
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 }; |