clip-embeddings / handlers.js
bberube's picture
More dev
e6b7161
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 };