async function indexDocument(document, env, previousChunkIds = []) {
const chunks = splitIntoChunks(document.text, 800);
const vectors = [];
for (let i = 0; i < chunks.length; i += 1) {
const values = await embed(chunks[i], env.EMBEDDING_API_KEY);
vectors.push({
id: `${document.id}:${i}`,
values,
namespace: document.tenant_id,
metadata: {
document_id: document.id,
title: document.title,
chunk: chunks[i],
locale: document.locale,
},
});
}
for (let start = 0; start < vectors.length; start += 1000) {
await env.DOCS.upsert(vectors.slice(start, start + 1000));
}
const currentIds = new Set(vectors.map((vector) => vector.id));
const obsoleteIds = previousChunkIds.filter((id) => !currentIds.has(id));
for (let start = 0; start < obsoleteIds.length; start += 1000) {
await env.DOCS.deleteByIds(obsoleteIds.slice(start, start + 1000));
}
return [...currentIds];
}