Using pinecone for a nexus, but also user conversation storage for a single assistant

I am trying to create an use case, where i have different ‘programs’ that are supported by a Gen-AI assistant: Each ‘program’ has their unique set of support documents that my LLM will be semantic searching for.

But also, my end product is multi-user, multi-program; that means that a user can only be subscribed to a single program, but multiple users will be subscribed at the same time to a program.
I need my LLM instance to be able to have memory for each specific end-user conversation, but at the same time, have access to the specific support documents for the program that end-user is subscribed to.

Would the approach be to use metadata? I’m thinking of embedding messages with metadata from the uuid for each-user, and then embedding the documents with metadata from the associated program. That way, when i do semantic search, i can filter for both the program that end-user is subscribed to, but also the end-users conversation history.

Any ideas or suggestions to improve the functionality?