Your threads (which are attached to a single user / conversation) can contain metadata.
metadata
map
Set of 16 key-value pairs that can be attached to an object. This can be useful for storing additional information about the object in a structured format. Keys can be a maximum of 64 characters long and values can be a maxium of 512 characters long.
If you want to attach specific/private documents to specific people then making an assistant for each person is not the solution.
Even if it was, the procedure is essentially the same. You need to get/authenticate the user, and then find the appropriate assistant/file to attach to them (business logic).
Once you have performed this task you can set the metadata to identify the user for future reference
async function main() {
const updatedThread = await openai.beta.threads.update(
"thread_abc123",
{
metadata: { modified: "true", user: "abc123" },
}
);
console.log(updatedThread);
}