From fd065fe9ccc07fdbd8b3781ce1d195ab73ce7d96 Mon Sep 17 00:00:00 2001 From: Antaripa Saha Date: Thu, 10 Apr 2025 20:42:39 +0530 Subject: [PATCH] Personal Study Buddy (#2531) --- examples/misc/study_buddy.py | 84 ++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 examples/misc/study_buddy.py diff --git a/examples/misc/study_buddy.py b/examples/misc/study_buddy.py new file mode 100644 index 00000000..4b4b6a68 --- /dev/null +++ b/examples/misc/study_buddy.py @@ -0,0 +1,84 @@ +""" +Create your personal AI Study Buddy that remembers what you’ve studied (and where you struggled), +helps with spaced repetition and topic review, personalizes responses using your past interactions. +Supports both text and PDF/image inputs. + +In order to run this file, you need to set up your Mem0 API at Mem0 platform and also need a OpenAI API key. +export OPENAI_API_KEY="your_openai_api_key" +export MEM0_API_KEY="your_mem0_api_key" +""" +import asyncio + +from mem0 import MemoryClient +from agents import Agent, Runner + + +client = MemoryClient() + +# Define your study buddy agent +study_agent = Agent( + name="StudyBuddy", + instructions="""You are a helpful study coach. You: +- Track what the user has studied before +- Identify topics the user has struggled with (e.g., "I'm confused", "this is hard") +- Help with spaced repetition by suggesting topics to revisit based on last review time +- Personalize answers using stored memories +- Summarize PDFs or notes the user uploads""") + + +# Upload and store PDF to Mem0 +def upload_pdf(pdf_url: str, user_id: str): + pdf_message = { + "role": "user", + "content": { + "type": "pdf_url", + "pdf_url": {"url": pdf_url} + } + } + client.add([pdf_message], user_id=user_id) + print("✅ PDF uploaded and processed into memory.") + + +# Main interaction loop with your personal study buddy +async def study_buddy(user_id: str, topic: str, user_input: str): + + memories = client.search(f"{topic}", user_id=user_id) + memory_context = "n".join(f"- {m['memory']}" for m in memories) + + prompt = f""" +You are helping the user study the topic: {topic}. +Here are past memories from previous sessions: +{memory_context} + +Now respond to the user's new question or comment: +{user_input} +""" + result = await Runner.run(study_agent, prompt) + response = result.final_output + + client.add([ + {"role": "user", "content": f'''Topic: {topic}nUser: {user_input}nnStudy Assistant: {response}'''} + ], user_id=user_id, metadata={"topic": topic}) + + return response + + +# Example usage +async def main(): + user_id = "Ajay" + pdf_url = "https://pages.physics.ua.edu/staff/fabi/ph101/classnotes/8RotD101.pdf" + upload_pdf(pdf_url, user_id) # Upload a relevant lecture PDF to memory + + topic = "Lagrangian Mechanics" + # Demonstrate tracking previously learned topics + print(await study_buddy(user_id, topic, "Can you remind me of what we discussed about generalized coordinates?")) + + # Demonstrate weakness detection + print(await study_buddy(user_id, topic, "I still don’t get what frequency domain really means.")) + + # Demonstrate spaced repetition prompting + topic = "Momentum Conservation" + print(await study_buddy(user_id, topic, "I think we covered this last week. Is it time to review momentum conservation again?")) + +if __name__ == "__main__": + asyncio.run(main())