diff --git a/docs/docs.json b/docs/docs.json index 4cd8f3c6..6168a36a 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -47,6 +47,7 @@ "pages": [ "features/platform-overview", "features/advanced-retrieval", + "features/contextual-add", "features/multimodal-support", "features/selective-memory", "features/custom-categories", diff --git a/docs/features/contextual-add.mdx b/docs/features/contextual-add.mdx new file mode 100644 index 00000000..846e2232 --- /dev/null +++ b/docs/features/contextual-add.mdx @@ -0,0 +1,205 @@ +--- +title: Contextual Add (ADD v2) +icon: "square-plus" +iconType: "solid" +--- + +Mem0 now supports an contextual add version (v2). To use it, set `version="v2"` during the add call. The default version is v1, which is deprecated now. We recommend migrating to `v2` for new applications. + +## Key Differences Between v1 and v2 + +### Version 1 (Legacy) +In v1 (default), users needed to pass either the entire conversation history or past k messages with each new message to generate properly contextualized memories. This approach required: + +- Manually tracking and sending previous messages using a sliding window approach +- Increased payload sizes as conversations grew longer, requiring careful window size management + + + +```python Python +# First interaction +messages1 = [ + {"role": "user", "content": "Hi, I'm Alex and I live in San Francisco."}, + {"role": "assistant", "content": "Hello Alex! Nice to meet you. San Francisco is a beautiful city."} +] +client.add(messages1, user_id="alex") + +# Second interaction - must include previous messages for context +messages2 = [ + {"role": "user", "content": "Hi, I'm Alex and I live in San Francisco."}, + {"role": "assistant", "content": "Hello Alex! Nice to meet you. San Francisco is a beautiful city."}, + {"role": "user", "content": "I like to eat sushi, and yesterday I went to Sunnyvale to eat sushi with my friends."}, + {"role": "assistant", "content": "Sushi is really a tasty choice. What did you do this weekend?"} +] +client.add(messages2, user_id="alex") +``` + +```javascript JavaScript +// First interaction +const messages1 = [ + {"role": "user", "content": "Hi, I'm Alex and I live in San Francisco."}, + {"role": "assistant", "content": "Hello Alex! Nice to meet you. San Francisco is a beautiful city."} +]; +client.add(messages1, { user_id: "alex" }) + .then(response => console.log(response)) + .catch(error => console.error(error)); + +// Second interaction - must include previous messages for context +const messages2 = [ + {"role": "user", "content": "Hi, I'm Alex and I live in San Francisco."}, + {"role": "assistant", "content": "Hello Alex! Nice to meet you. San Francisco is a beautiful city."}, + {"role": "user", "content": "I like to eat sushi, and yesterday I went to Sunnyvale to eat sushi with my friends."}, + {"role": "assistant", "content": "Sushi is really a tasty choice. What did you do this weekend?"} +]; +client.add(messages2, { user_id: "alex" }) + .then(response => console.log(response)) + .catch(error => console.error(error)); +``` + + + +### Version 2 (Recommended) +In v2, Mem0 automatically manages conversation context. Users only need to send new messages, and the system will: + +- Automatically retrieve relevant conversation history +- Generate properly contextualized memories +- Reduce payload sizes and simplify integration + + + +```python Python +# First interaction +messages1 = [ + {"role": "user", "content": "Hi, I'm Alex and I live in San Francisco."}, + {"role": "assistant", "content": "Hello Alex! Nice to meet you. San Francisco is a beautiful city."} +] +client.add(messages1, user_id="alex", version="v2") + +# Second interaction - only need to send new messages +messages2 = [ + {"role": "user", "content": "I like to eat sushi, and yesterday I went to Sunnyvale to eat sushi with my friends."}, + {"role": "assistant", "content": "Sushi is really a tasty choice. What did you do this weekend?"} +] +client.add(messages2, user_id="alex", version="v2") +``` + +```javascript JavaScript +// First interaction +const messages1 = [ + {"role": "user", "content": "Hi, I'm Alex and I live in San Francisco."}, + {"role": "assistant", "content": "Hello Alex! Nice to meet you. San Francisco is a beautiful city."} +]; +client.add(messages1, { user_id: "alex", version: "v2" }) + .then(response => console.log(response)) + .catch(error => console.error(error)); + +// Second interaction - only need to send new messages +const messages2 = [ + {"role": "user", "content": "I like to eat sushi, and yesterday I went to Sunnyvale to eat sushi with my friends."}, + {"role": "assistant", "content": "Sushi is really a tasty choice. What did you do this weekend?"} +]; +client.add(messages2, { user_id: "alex", version: "v2" }) + .then(response => console.log(response)) + .catch(error => console.error(error)); +``` + + + +## Benefits of Using v2 + +1. **Simplified Integration**: No need to track and manage conversation history +2. **Reduced Payload Size**: Only send new messages, not the entire conversation +3. **Improved Memory Quality**: Automatic context retrieval ensures better memory generation + +## Understanding ID Parameters in v2 + +When using contextual add v2, you have different options for how to organize and retrieve memories: + +### Using Only `user_id` + +When you provide only a `user_id`: + +- Memories are associated with this user's long-term memory store +- The system will automatically retrieve relevant context from all of the user's previous conversations +- These memories persist indefinitely across all of the user's sessions +- Ideal for maintaining persistent user information (preferences, personal details, etc.) + + + +```python Python +# Adding to long-term user memory +messages = [ + {"role": "user", "content": "I'm allergic to peanuts and shellfish."}, + {"role": "assistant", "content": "I've noted your allergies to peanuts and shellfish."} +] +client.add(messages, user_id="alex", version="v2") +``` + +```javascript JavaScript +// Adding to long-term user memory +const messages = [ + {"role": "user", "content": "I'm allergic to peanuts and shellfish."}, + {"role": "assistant", "content": "I've noted your allergies to peanuts and shellfish."} +]; +client.add(messages, { user_id: "alex", version: "v2" }) + .then(response => console.log(response)) + .catch(error => console.error(error)); +``` + + + +### Using `user_id` with `run_id` + +When you provide both `user_id` and `run_id`: + +- Memories are associated with a specific conversation session or interaction +- The system will retrieve context primarily from this specific session +- These memories are still tied to the user but are organized by the specific session +- Ideal for maintaining context within a specific conversation flow or task +- Helps prevent context from different conversations from interfering with each other + + + +```python Python +# Adding to a specific conversation session +messages = [ + {"role": "user", "content": "For this trip to Paris, I want to focus on art museums."}, + {"role": "assistant", "content": "Great! I'll help you plan your Paris trip with a focus on art museums."} +] +client.add(messages, user_id="alex", run_id="paris-trip-2024", version="v2") + +# Later in the same conversation session +messages2 = [ + {"role": "user", "content": "I'd like to visit the Louvre on Monday."}, + {"role": "assistant", "content": "The Louvre is a great choice for Monday. Would you like information about opening hours?"} +] +client.add(messages2, user_id="alex", run_id="paris-trip-2024", version="v2") +``` + +```javascript JavaScript +// Adding to a specific conversation session +const messages = [ + {"role": "user", "content": "For this trip to Paris, I want to focus on art museums."}, + {"role": "assistant", "content": "Great! I'll help you plan your Paris trip with a focus on art museums."} +]; +client.add(messages, { user_id: "alex", run_id: "paris-trip-2024", version: "v2" }) + .then(response => console.log(response)) + .catch(error => console.error(error)); + +// Later in the same conversation session +const messages2 = [ + {"role": "user", "content": "I'd like to visit the Louvre on Monday."}, + {"role": "assistant", "content": "The Louvre is a great choice for Monday. Would you like information about opening hours?"} +]; +client.add(messages2, { user_id: "alex", run_id: "paris-trip-2024", version: "v2" }) + .then(response => console.log(response)) + .catch(error => console.error(error)); +``` + + + +Using `run_id` helps you organize memories into logical sessions or tasks, making it easier to maintain context for specific interactions while still associating everything with the user's overall profile. + +If you have any questions, please feel free to reach out to us using one of the following methods: + + \ No newline at end of file diff --git a/docs/features/platform-overview.mdx b/docs/features/platform-overview.mdx index 6cb86d38..e5280d26 100644 --- a/docs/features/platform-overview.mdx +++ b/docs/features/platform-overview.mdx @@ -12,6 +12,9 @@ Learn about the key features and capabilities that make Mem0 a powerful platform Superior search results using state-of-the-art algorithms, including keyword search, reranking, and filtering capabilities. + + Only send your latest conversation history - we automatically retrieve the rest and generate properly contextualized memories. + Process and analyze various types of content including images. diff --git a/docs/integrations/langchain-tools.mdx b/docs/integrations/langchain-tools.mdx index 5c021661..62b3b0d7 100644 --- a/docs/integrations/langchain-tools.mdx +++ b/docs/integrations/langchain-tools.mdx @@ -95,7 +95,7 @@ add_input = { {"role": "user", "content": "Hi, I'm Alex. I'm a vegetarian and I'm allergic to nuts."}, {"role": "assistant", "content": "Hello Alex! I've noted that you're a vegetarian and have a nut allergy."} ], - "user_id": "alex123", + "user_id": "alex", "output_format": "v1.1", "metadata": {"food": "vegan"} } @@ -173,7 +173,7 @@ search_input = { "filters": { "AND": [ {"created_at": {"gte": "2024-07-20", "lte": "2024-12-10"}}, - {"user_id": "alex123"} + {"user_id": "alex"} ] }, "version": "v2" @@ -186,7 +186,7 @@ result = search_tool.invoke(search_input) { "id": "1a75e827-7eca-45ea-8c5c-cfd43299f061", "memory": "Name is Alex", - "user_id": "alex123", + "user_id": "alex", "hash": "d0fccc8fa47f7a149ee95750c37bb0ca", "metadata": { "food": "vegan" @@ -255,7 +255,7 @@ get_all_input = { "version": "v2", "filters": { "AND": [ - {"user_id": "alex123"}, + {"user_id": "alex"}, {"created_at": {"gte": "2024-07-01", "lte": "2024-12-31"}} ] }, @@ -274,7 +274,7 @@ get_all_result = get_all_tool.invoke(get_all_input) { "id": "1a75e827-7eca-45ea-8c5c-cfd43299f061", "memory": "Name is Alex", - "user_id": "alex123", + "user_id": "alex", "hash": "d0fccc8fa47f7a149ee95750c37bb0ca", "metadata": { "food": "vegan" @@ -288,7 +288,7 @@ get_all_result = get_all_tool.invoke(get_all_input) { "id": "91509588-0b39-408a-8df3-84b3bce8c521", "memory": "Is a vegetarian", - "user_id": "alex123", + "user_id": "alex", "hash": "ce6b1c84586772ab9995a9477032df99", "metadata": { "food": "vegan" @@ -303,7 +303,7 @@ get_all_result = get_all_tool.invoke(get_all_input) { "id": "8d74f7a0-6107-4589-bd6f-210f6bf4fbbb", "memory": "Is allergic to nuts", - "user_id": "alex123", + "user_id": "alex", "hash": "7873cd0e5a29c513253d9fad038e758b", "metadata": { "food": "vegan" diff --git a/docs/openapi.json b/docs/openapi.json index 4443ffb3..4a7213a5 100644 --- a/docs/openapi.json +++ b/docs/openapi.json @@ -932,27 +932,27 @@ "x-code-samples": [ { "lang": "Python", - "source": "# To use the Python SDK, install the package:\n# pip install mem0ai\n\nfrom mem0 import MemoryClient\n\nclient = MemoryClient(api_key=\"your_api_key\", org_id=\"your_org_id\", project_id=\"your_project_id\")\n\nmessages = [\n {\"role\": \"user\", \"content\": \"\"},\n {\"role\": \"assistant\", \"content\": \"\"}\n]\n\nclient.add(messages, user_id=\"\")" + "source": "# To use the Python SDK, install the package:\n# pip install mem0ai\n\nfrom mem0 import MemoryClient\n\nclient = MemoryClient(api_key=\"your_api_key\", org_id=\"your_org_id\", project_id=\"your_project_id\")\n\nmessages = [\n {\"role\": \"user\", \"content\": \"\"},\n {\"role\": \"assistant\", \"content\": \"\"}\n]\n\nclient.add(messages, user_id=\"\", version=\"v2\")" }, { "lang": "JavaScript", - "source": "// To use the JavaScript SDK, install the package:\n// npm i mem0ai\n\nimport MemoryClient from 'mem0ai';\nconst client = new MemoryClient({ apiKey: \"your-api-key\" });\n\nconst messages = [\n { role: \"user\", content: \"Hi, I'm Alex. I'm a vegetarian and I'm allergic to nuts.\" },\n { role: \"assistant\", content: \"Hello Alex! I've noted that you're a vegetarian and have a nut allergy. I'll keep this in mind for any food-related recommendations or discussions.\" }\n];\n\nclient.add(messages, { user_id: \"\" })\n .then(result => console.log(result))\n .catch(error => console.error(error));" + "source": "// To use the JavaScript SDK, install the package:\n// npm i mem0ai\n\nimport MemoryClient from 'mem0ai';\nconst client = new MemoryClient({ apiKey: \"your-api-key\" });\n\nconst messages = [\n { role: \"user\", content: \"Hi, I'm Alex. I'm a vegetarian and I'm allergic to nuts.\" },\n { role: \"assistant\", content: \"Hello Alex! I've noted that you're a vegetarian and have a nut allergy. I'll keep this in mind for any food-related recommendations or discussions.\" }\n];\n\nclient.add(messages, { user_id: \"\", version: \"v2\" })\n .then(result => console.log(result))\n .catch(error => console.error(error));" }, { "lang": "cURL", - "source": "curl --request POST \\\n --url https://api.mem0.ai/v1/memories/ \\\n --header 'Authorization: Token ' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"messages\": [\n {}\n ],\n \"agent_id\": \"\",\n \"user_id\": \"\",\n \"app_id\": \"\",\n \"run_id\": \"\",\n \"metadata\": {},\n \"includes\": \"\",\n \"excludes\": \"\",\n \"infer\": true,\n \"custom_categories\": {}, \n \"org_id\": \"\",\n \"project_id\": \"\"\n}'" + "source": "curl --request POST \\\n --url https://api.mem0.ai/v1/memories/ \\\n --header 'Authorization: Token ' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"messages\": [\n {}\n ],\n \"agent_id\": \"\",\n \"user_id\": \"\",\n \"app_id\": \"\",\n \"run_id\": \"\",\n \"metadata\": {},\n \"includes\": \"\",\n \"excludes\": \"\",\n \"infer\": true,\n \"custom_categories\": {}, \n \"org_id\": \"\",\n \"project_id\": \"\",\n \"version\": \"v2\"\n}'" }, { "lang": "Go", - "source": "package main\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://api.mem0.ai/v1/memories/\"\n\n\tpayload := strings.NewReader(\"{\n \\\"messages\\\": [\n {}\n ],\n \\\"agent_id\\\": \\\"\\\",\n \\\"user_id\\\": \\\"\\\",\n \\\"app_id\\\": \\\"\\\",\n \\\"run_id\\\": \\\"\\\",\n \\\"metadata\\\": {},\n \\\"includes\\\": \\\"\\\",\n \\\"excludes\\\": \\\"\\\",\n \\\"infer\\\": true,\n \\\"custom_categories\\\": {},\n \\\"org_id\\\": \\\"\\\",\n \\\"project_id\\\": \\\"\"\n}\")\n\n\treq, _ := http.NewRequest(\"POST\", url, payload)\n\n\treq.Header.Add(\"Authorization\", \"Token \")\n\treq.Header.Add(\"Content-Type\", \"application/json\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}" + "source": "package main\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://api.mem0.ai/v1/memories/\"\n\n\tpayload := strings.NewReader(\"{\n \\\"messages\\\": [\n {}\n ],\n \\\"agent_id\\\": \\\"\\\",\n \\\"user_id\\\": \\\"\\\",\n \\\"app_id\\\": \\\"\\\",\n \\\"run_id\\\": \\\"\\\",\n \\\"metadata\\\": {},\n \\\"includes\\\": \\\"\\\",\n \\\"excludes\\\": \\\"\\\",\n \\\"infer\\\": true,\n \\\"custom_categories\\\": {},\n \\\"org_id\\\": \\\"\\\",\n \\\"project_id\\\": \\\"\",\n \\\"version\\\": \"v2\"\n}\")\n\n\treq, _ := http.NewRequest(\"POST\", url, payload)\n\n\treq.Header.Add(\"Authorization\", \"Token \")\n\treq.Header.Add(\"Content-Type\", \"application/json\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}" }, { "lang": "PHP", - "source": " \"https://api.mem0.ai/v1/memories/\",\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_ENCODING => \"\",\n CURLOPT_MAXREDIRS => 10,\n CURLOPT_TIMEOUT => 30,\n CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n CURLOPT_CUSTOMREQUEST => \"POST\",\n CURLOPT_POSTFIELDS => \"{\n \\\"messages\\\": [\n {}\n ],\n \\\"agent_id\\\": \\\"\\\",\n \\\"user_id\\\": \\\"\\\",\n \\\"app_id\\\": \\\"\\\",\n \\\"run_id\\\": \\\"\\\",\n \\\"metadata\\\": {},\n \\\"includes\\\": \\\"\\\",\n \\\"excludes\\\": \\\"\\\",\n \\\"infer\\\": true,\n \\\"custom_categories\\\": {}, \n \\\"org_id\\\": \\\"\\\",\n \\\"project_id\\\": \\\"\"\n}\",\n CURLOPT_HTTPHEADER => [\n \"Authorization: Token \",\n \"Content-Type: application/json\"\n ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n echo \"cURL Error #:\" . $err;\n} else {\n echo $response;\n}" + "source": " \"https://api.mem0.ai/v1/memories/\",\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_ENCODING => \"\",\n CURLOPT_MAXREDIRS => 10,\n CURLOPT_TIMEOUT => 30,\n CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n CURLOPT_CUSTOMREQUEST => \"POST\",\n CURLOPT_POSTFIELDS => \"{\n \\\"messages\\\": [\n {}\n ],\n \\\"agent_id\\\": \\\"\\\",\n \\\"user_id\\\": \\\"\\\",\n \\\"app_id\\\": \\\"\\\",\n \\\"run_id\\\": \\\"\\\",\n \\\"metadata\\\": {},\n \\\"includes\\\": \\\"\\\",\n \\\"excludes\\\": \\\"\\\",\n \\\"infer\\\": true,\n \\\"custom_categories\\\": {}, \n \\\"org_id\\\": \\\"\\\",\n \\\"project_id\\\": \\\"\",\n \\\"version\\\": \"v2\"\n}\",\n CURLOPT_HTTPHEADER => [\n \"Authorization: Token \",\n \"Content-Type: application/json\"\n ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n echo \"cURL Error #:\" . $err;\n} else {\n echo $response;\n}" }, { "lang": "Java", - "source": "HttpResponse response = Unirest.post(\"https://api.mem0.ai/v1/memories/\")\n .header(\"Authorization\", \"Token \")\n .header(\"Content-Type\", \"application/json\")\n .body(\"{\n \\\"messages\\\": [\n {}\n ],\n \\\"agent_id\\\": \\\"\\\",\n \\\"user_id\\\": \\\"\\\",\n \\\"app_id\\\": \\\"\\\",\n \\\"run_id\\\": \\\"\\\",\n \\\"metadata\\\": {},\n \\\"includes\\\": \\\"\\\",\n \\\"excludes\\\": \\\"\\\",\n \\\"infer\\\": true,\n \\\"custom_categories\\\": {}, \n \\\"org_id\\\": \\\"\\\",\n \\\"project_id\\\": \\\"\"\n}\")\n .asString();" + "source": "HttpResponse response = Unirest.post(\"https://api.mem0.ai/v1/memories/\")\n .header(\"Authorization\", \"Token \")\n .header(\"Content-Type\", \"application/json\")\n .body(\"{\n \\\"messages\\\": [\n {}\n ],\n \\\"agent_id\\\": \\\"\\\",\n \\\"user_id\\\": \\\"\\\",\n \\\"app_id\\\": \\\"\\\",\n \\\"run_id\\\": \\\"\\\",\n \\\"metadata\\\": {},\n \\\"includes\\\": \\\"\\\",\n \\\"excludes\\\": \\\"\\\",\n \\\"infer\\\": true,\n \\\"custom_categories\\\": {}, \n \\\"org_id\\\": \\\"\\\",\n \\\"project_id\\\": \\\"\",\n \\\"version\\\": \"v2\"\n}\")\n .asString();" } ], "x-codegen-request-body-name": "data" @@ -4809,6 +4809,12 @@ "title": "Project id", "type": "string", "nullable": true + }, + "version": { + "description": "The version of the memory to use. The default version is v1, which is deprecated. We recommend using v2 for new applications.", + "title": "Version", + "type": "string", + "nullable": true } } }, diff --git a/docs/platform/quickstart.mdx b/docs/platform/quickstart.mdx index 81316c80..19283ed9 100644 --- a/docs/platform/quickstart.mdx +++ b/docs/platform/quickstart.mdx @@ -87,10 +87,10 @@ messages = [ ] # The default output_format is v1.0 -client.add(messages, user_id="alex", output_format="v1.0") +client.add(messages, user_id="alex", output_format="v1.0", version="v2") # To use the latest output_format, set the output_format parameter to "v1.1" -client.add(messages, user_id="alex", output_format="v1.1", metadata={"food": "vegan"}) +client.add(messages, user_id="alex", output_format="v1.1", metadata={"food": "vegan"}, version="v2") ``` ```javascript JavaScript @@ -98,7 +98,7 @@ const messages = [ {"role": "user", "content": "Hi, I'm Alex. I'm a vegetarian and I'm allergic to nuts."}, {"role": "assistant", "content": "Hello Alex! I've noted that you're a vegetarian and have a nut allergy. I'll keep this in mind for any food-related recommendations or discussions."} ]; -client.add(messages, { user_id: "alex", output_format: "v1.1", metadata: { food: "vegan" } }) +client.add(messages, { user_id: "alex", output_format: "v1.1", metadata: { food: "vegan" }, version: "v2" }) .then(response => console.log(response)) .catch(error => console.error(error)); ``` @@ -116,7 +116,8 @@ curl -X POST "https://api.mem0.ai/v1/memories/" \ "output_format": "v1.1", "metadata": { "food": "vegan" - } + }, + "version": "v2" }' ``` @@ -191,10 +192,10 @@ messages = [ ] # The default output_format is v1.0 -client.add(messages, user_id="alex123", run_id="trip-planning-2024", output_format="v1.0") +client.add(messages, user_id="alex", run_id="trip-planning-2024", output_format="v1.0", version="v2") # To use the latest output_format, set the output_format parameter to "v1.1" -client.add(messages, user_id="alex123", run_id="trip-planning-2024", output_format="v1.1") +client.add(messages, user_id="alex", run_id="trip-planning-2024", output_format="v1.1", version="v2") ``` ```javascript JavaScript @@ -204,7 +205,7 @@ const messages = [ {"role": "user", "content": "Yes, please! Especially in Tokyo."}, {"role": "assistant", "content": "Great! I'll remember that you're interested in vegetarian restaurants in Tokyo for your upcoming trip. I'll prepare a list for you in our next interaction."} ]; -client.add(messages, { user_id: "alex123", run_id: "trip-planning-2024", output_format: "v1.1" }) +client.add(messages, { user_id: "alex", run_id: "trip-planning-2024", output_format: "v1.1", version: "v2" }) .then(response => console.log(response)) .catch(error => console.error(error)); ``` @@ -220,9 +221,10 @@ curl -X POST "https://api.mem0.ai/v1/memories/" \ {"role": "user", "content": "Yes, please! Especially in Tokyo."}, {"role": "assistant", "content": "Great! I'll remember that you're interested in vegetarian restaurants in Tokyo for your upcoming trip. I'll prepare a list for you in our next interaction."} ], - "user_id": "alex123", + "user_id": "alex", "run_id": "trip-planning-2024", - "output_format": "v1.1" + "output_format": "v1.1", + "version": "v2" }' ``` @@ -274,10 +276,10 @@ messages = [ ] # The default output_format is v1.0 -client.add(messages, agent_id="ai-tutor", output_format="v1.0") +client.add(messages, agent_id="ai-tutor", output_format="v1.0", version="v2") # To use the latest output_format, set the output_format parameter to "v1.1" -client.add(messages, agent_id="ai-tutor", output_format="v1.1") +client.add(messages, agent_id="ai-tutor", output_format="v1.1", version="v2") ``` ```javascript JavaScript @@ -285,7 +287,7 @@ const messages = [ {"role": "system", "content": "You are an AI tutor with a personality. Give yourself a name for the user."}, {"role": "assistant", "content": "Understood. I'm an AI tutor with a personality. My name is Alice."} ]; -client.add(messages, { agent_id: "ai-tutor", output_format: "v1.1" }) +client.add(messages, { agent_id: "ai-tutor", output_format: "v1.1", version: "v2" }) .then(response => console.log(response)) .catch(error => console.error(error)); ``` @@ -300,7 +302,8 @@ curl -X POST "https://api.mem0.ai/v1/memories/" \ {"role": "assistant", "content": "Understood. I'm an AI tutor with a personality. My name is Alice."} ], "agent_id": "ai-tutor", - "output_format": "v1.1" + "output_format": "v1.1", + "version": "v2" }' ``` @@ -368,7 +371,7 @@ messages = [ {"role": "assistant", "content": "That's great! I'm going to Dubai next month."}, ] -client.add(messages=messages, user_id="user1", agent_id="agent1") +client.add(messages=messages, user_id="user1", agent_id="agent1", version="v2") ``` ```javascript JavaScript @@ -377,7 +380,7 @@ const messages = [ {"role": "assistant", "content": "That's great! I'm going to Dubai next month."}, ] -client.add(messages, { user_id: "user1", agent_id: "agent1" }) +client.add(messages, { user_id: "user1", agent_id: "agent1", version: "v2" }) .then(response => console.log(response)) .catch(error => console.error(error)); ``` @@ -392,7 +395,8 @@ curl -X POST "https://api.mem0.ai/v1/memories/" \ {"role": "assistant", "content": "That's great! I'm going to Dubai next month."}, ], "user_id": "user1", - "agent_id": "agent1" + "agent_id": "agent1", + "version": "v2" }' ``` @@ -1004,17 +1008,17 @@ curl -X GET "https://api.mem0.ai/v1/memories/?agent_id=ai-tutor&page=1&page_size ```python Python -short_term_memories = client.get_all(user_id="alex123", run_id="trip-planning-2024", page=1, page_size=50) +short_term_memories = client.get_all(user_id="alex", run_id="trip-planning-2024", page=1, page_size=50) ``` ```javascript JavaScript -client.getAll({ user_id: "alex123", run_id: "trip-planning-2024", page: 1, page_size: 50 }) +client.getAll({ user_id: "alex", run_id: "trip-planning-2024", page: 1, page_size: 50 }) .then(memories => console.log(memories)) .catch(error => console.error(error)); ``` ```bash cURL -curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex123&run_id=trip-planning-2024&page=1&page_size=50" \ +curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex&run_id=trip-planning-2024&page=1&page_size=50" \ -H "Authorization: Token your-api-key" ``` @@ -1027,7 +1031,7 @@ curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex123&run_id=trip-planni { "id":"06d8df63-7bd2-4fad-9acb-60871bcecee0", "memory":"Planning a trip to Japan next month. Interested in vegetarian restaurants in Tokyo.", - "user_id":"alex123", + "user_id":"alex", "hash":"d2088c936e259f2f5d2d75543d31401c", "metadata":None, "immutable": false, @@ -1038,7 +1042,7 @@ curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex123&run_id=trip-planni { "id":"b4229775-d860-4ccb-983f-0f628ca112f5", "memory":"Planning a trip to Japan next month. Interested in vegetarian restaurants in Tokyo.", - "user_id":"alex123", + "user_id":"alex", "hash":"d2088c936e259f2f5d2d75543d31401c", "metadata":None, "immutable": false, @@ -1049,7 +1053,7 @@ curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex123&run_id=trip-planni { "id":"df1aca24-76cf-4b92-9f58-d03857efcb64", "memory":"Planning a trip to Japan next month. Interested in vegetarian restaurants in Tokyo.", - "user_id":"alex123", + "user_id":"alex", "hash":"d2088c936e259f2f5d2d75543d31401c", "metadata":None, "immutable": false, @@ -1072,7 +1076,7 @@ curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex123&run_id=trip-planni { "id": "06d8df63-7bd2-4fad-9acb-60871bcecee0", "memory": "Planning a trip to Japan next month. Interested in vegetarian restaurants in Tokyo.", - "user_id": "alex123", + "user_id": "alex", "hash": "d2088c936e259f2f5d2d75543d31401c", "metadata":None, "immutable": false, @@ -1083,7 +1087,7 @@ curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex123&run_id=trip-planni { "id": "b4229775-d860-4ccb-983f-0f628ca112f5", "memory": "Planning a trip to Japan next month. Interested in vegetarian restaurants in Tokyo.", - "user_id": "alex123", + "user_id": "alex", "hash": "d2088c936e259f2f5d2d75543d31401c", "metadata":None, "immutable": false, @@ -1094,7 +1098,7 @@ curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex123&run_id=trip-planni { "id": "df1aca24-76cf-4b92-9f58-d03857efcb64", "memory": "Planning a trip to Japan next month. Interested in vegetarian restaurants in Tokyo.", - "user_id": "alex123", + "user_id": "alex", "hash": "d2088c936e259f2f5d2d75543d31401c", "metadata":None, "immutable": false, @@ -1133,7 +1137,7 @@ curl -X GET "https://api.mem0.ai/v1/memories/582bbe6d-506b-48c6-a4c6-5df3b1e6342 { "id":"06d8df63-7bd2-4fad-9acb-60871bcecee0", "memory":"Planning a trip to Japan next month. Interested in vegetarian restaurants in Tokyo.", - "user_id":"alex123", + "user_id":"alex", "hash":"d2088c936e259f2f5d2d75543d31401c", "metadata":"None", "immutable": false, @@ -1152,55 +1156,55 @@ You can filter memories by their categories when using get_all: ```python Python # Get memories with specific categories -memories = client.get_all(user_id="alex123", categories=["likes"]) +memories = client.get_all(user_id="alex", categories=["likes"]) # Get memories with multiple categories -memories = client.get_all(user_id="alex123", categories=["likes", "food_preferences"]) +memories = client.get_all(user_id="alex", categories=["likes", "food_preferences"]) # Custom pagination with categories -memories = client.get_all(user_id="alex123", categories=["likes"], page=1, page_size=50) +memories = client.get_all(user_id="alex", categories=["likes"], page=1, page_size=50) # Get memories with specific keywords -memories = client.get_all(user_id="alex123", keywords="to play", page=1, page_size=50) +memories = client.get_all(user_id="alex", keywords="to play", page=1, page_size=50) ``` ```javascript JavaScript // Get memories with specific categories -client.getAll({ user_id: "alex123", categories: ["likes"] }) +client.getAll({ user_id: "alex", categories: ["likes"] }) .then(memories => console.log(memories)) .catch(error => console.error(error)); // Get memories with multiple categories -client.getAll({ user_id: "alex123", categories: ["likes", "food_preferences"] }) +client.getAll({ user_id: "alex", categories: ["likes", "food_preferences"] }) .then(memories => console.log(memories)) .catch(error => console.error(error)); // Custom pagination with categories -client.getAll({ user_id: "alex123", categories: ["likes"], page: 1, page_size: 50 }) +client.getAll({ user_id: "alex", categories: ["likes"], page: 1, page_size: 50 }) .then(memories => console.log(memories)) .catch(error => console.error(error)); // Get memories with specific keywords -client.getAll({ user_id: "alex123", keywords: "to play", page: 1, page_size: 50 }) +client.getAll({ user_id: "alex", keywords: "to play", page: 1, page_size: 50 }) .then(memories => console.log(memories)) .catch(error => console.error(error)); ``` ```bash cURL # Get memories with specific categories -curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex123&categories=likes" \ +curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex&categories=likes" \ -H "Authorization: Token your-api-key" # Get memories with multiple categories -curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex123&categories=likes,food_preferences" \ +curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex&categories=likes,food_preferences" \ -H "Authorization: Token your-api-key" # Custom pagination with categories -curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex123&categories=likes&page=1&page_size=50" \ +curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex&categories=likes&page=1&page_size=50" \ -H "Authorization: Token your-api-key" # Get memories with specific keywords -curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex123&keywords=to play&page=1&page_size=50" \ +curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex&keywords=to play&page=1&page_size=50" \ -H "Authorization: Token your-api-key" ``` @@ -1213,7 +1217,7 @@ curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex123&keywords=to play&p { "id": "06d8df63-7bd2-4fad-9acb-60871bcecee0", "memory": "Likes pizza and pasta", - "user_id": "alex123", + "user_id": "alex", "hash": "d2088c936e259f2f5d2d75543d31401c", "metadata": null, "immutable": false, @@ -1224,7 +1228,7 @@ curl -X GET "https://api.mem0.ai/v1/memories/?user_id=alex123&keywords=to play&p { "id": "b4229775-d860-4ccb-983f-0f628ca112f5", "memory": "Likes to travel to beach destinations", - "user_id": "alex123", + "user_id": "alex", "hash": "d2088c936e259f2f5d2d75543d31401c", "metadata": null, "immutable": false, @@ -1585,7 +1589,7 @@ curl -X GET "https://api.mem0.ai/v1/memories//history/" \ ], "old_memory":"None", "new_memory":"Turned vegetarian.", - "user_id":"alex123456", + "user_id":"alex", "event":"ADD", "metadata":"None", "created_at":"2024-07-26T01:02:41.737310-07:00",