mem0ai-azure-mysql 0.1.116.6__tar.gz → 0.1.116.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/PKG-INFO +1 -1
  2. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/memory/graph_memory.py +44 -20
  3. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/memory/main.py +6 -6
  4. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/memory/utils.py +2 -2
  5. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/pyproject.toml +1 -1
  6. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/.gitignore +0 -0
  7. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/README.md +0 -0
  8. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/__init__.py +0 -0
  9. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/client/__init__.py +0 -0
  10. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/client/main.py +0 -0
  11. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/client/project.py +0 -0
  12. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/client/utils.py +0 -0
  13. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/__init__.py +0 -0
  14. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/base.py +0 -0
  15. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/dbs/__init__.py +0 -0
  16. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/dbs/base.py +0 -0
  17. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/dbs/mysql.py +0 -0
  18. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/embeddings/__init__.py +0 -0
  19. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/embeddings/base.py +0 -0
  20. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/enums.py +0 -0
  21. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/llms/__init__.py +0 -0
  22. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/llms/anthropic.py +0 -0
  23. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/llms/aws_bedrock.py +0 -0
  24. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/llms/azure.py +0 -0
  25. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/llms/base.py +0 -0
  26. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/llms/deepseek.py +0 -0
  27. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/llms/lmstudio.py +0 -0
  28. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/llms/ollama.py +0 -0
  29. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/llms/openai.py +0 -0
  30. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/llms/vllm.py +0 -0
  31. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/prompts.py +0 -0
  32. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/__init__.py +0 -0
  33. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/azure_ai_search.py +0 -0
  34. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/baidu.py +0 -0
  35. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/chroma.py +0 -0
  36. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/databricks.py +0 -0
  37. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/elasticsearch.py +0 -0
  38. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/faiss.py +0 -0
  39. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/langchain.py +0 -0
  40. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/milvus.py +0 -0
  41. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/mongodb.py +0 -0
  42. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/opensearch.py +0 -0
  43. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/pgvector.py +0 -0
  44. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/pinecone.py +0 -0
  45. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/qdrant.py +0 -0
  46. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/redis.py +0 -0
  47. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/supabase.py +0 -0
  48. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/upstash_vector.py +0 -0
  49. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/vertex_ai_vector_search.py +0 -0
  50. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/configs/vector_stores/weaviate.py +0 -0
  51. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/dbs/__init__.py +0 -0
  52. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/dbs/base.py +0 -0
  53. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/dbs/configs.py +0 -0
  54. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/dbs/mysql.py +0 -0
  55. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/embeddings/__init__.py +0 -0
  56. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/embeddings/aws_bedrock.py +0 -0
  57. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/embeddings/azure_openai.py +0 -0
  58. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/embeddings/base.py +0 -0
  59. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/embeddings/configs.py +0 -0
  60. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/embeddings/gemini.py +0 -0
  61. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/embeddings/huggingface.py +0 -0
  62. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/embeddings/langchain.py +0 -0
  63. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/embeddings/lmstudio.py +0 -0
  64. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/embeddings/mock.py +0 -0
  65. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/embeddings/ollama.py +0 -0
  66. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/embeddings/openai.py +0 -0
  67. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/embeddings/together.py +0 -0
  68. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/embeddings/vertexai.py +0 -0
  69. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/graphs/__init__.py +0 -0
  70. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/graphs/configs.py +0 -0
  71. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/graphs/neptune/__init__.py +0 -0
  72. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/graphs/neptune/base.py +0 -0
  73. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/graphs/neptune/main.py +0 -0
  74. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/graphs/tools.py +0 -0
  75. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/graphs/utils.py +0 -0
  76. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/__init__.py +0 -0
  77. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/anthropic.py +0 -0
  78. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/aws_bedrock.py +0 -0
  79. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/azure_openai.py +0 -0
  80. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/azure_openai_structured.py +0 -0
  81. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/base.py +0 -0
  82. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/configs.py +0 -0
  83. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/deepseek.py +0 -0
  84. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/gemini.py +0 -0
  85. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/groq.py +0 -0
  86. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/langchain.py +0 -0
  87. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/litellm.py +0 -0
  88. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/lmstudio.py +0 -0
  89. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/ollama.py +0 -0
  90. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/openai.py +0 -0
  91. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/openai_structured.py +0 -0
  92. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/sarvam.py +0 -0
  93. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/together.py +0 -0
  94. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/vllm.py +0 -0
  95. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/llms/xai.py +0 -0
  96. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/memory/__init__.py +0 -0
  97. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/memory/base.py +0 -0
  98. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/memory/kuzu_memory.py +0 -0
  99. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/memory/memgraph_memory.py +0 -0
  100. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/memory/setup.py +0 -0
  101. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/memory/storage.py +0 -0
  102. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/memory/telemetry.py +0 -0
  103. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/proxy/__init__.py +0 -0
  104. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/proxy/main.py +0 -0
  105. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/utils/factory.py +0 -0
  106. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/__init__.py +0 -0
  107. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/azure_ai_search.py +0 -0
  108. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/baidu.py +0 -0
  109. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/base.py +0 -0
  110. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/chroma.py +0 -0
  111. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/configs.py +0 -0
  112. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/databricks.py +0 -0
  113. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/elasticsearch.py +0 -0
  114. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/faiss.py +0 -0
  115. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/langchain.py +0 -0
  116. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/milvus.py +0 -0
  117. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/mongodb.py +0 -0
  118. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/opensearch.py +0 -0
  119. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/pgvector.py +0 -0
  120. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/pinecone.py +0 -0
  121. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/qdrant.py +0 -0
  122. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/redis.py +0 -0
  123. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/supabase.py +0 -0
  124. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/upstash_vector.py +0 -0
  125. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/vertex_ai_vector_search.py +0 -0
  126. {mem0ai_azure_mysql-0.1.116.6 → mem0ai_azure_mysql-0.1.116.8}/mem0/vector_stores/weaviate.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mem0ai-azure-mysql
3
- Version: 0.1.116.6
3
+ Version: 0.1.116.8
4
4
  Summary: Long-term memory for AI Agents with Azure DefaultAzureCredential authentication and MySQL history database support
5
5
  Requires-Python: <4.0,>=3.9
6
6
  Requires-Dist: azure-identity>=1.23.1
@@ -76,7 +76,7 @@ class MemoryGraph:
76
76
  self.threshold = self.config.graph_store.config.similarity_threshold
77
77
  self.top_k = self.config.graph_store.config.top_k
78
78
 
79
- def add(self, data, filters):
79
+ def add(self, data, metadata, filters):
80
80
  """
81
81
  Adds data to the graph.
82
82
 
@@ -92,7 +92,7 @@ class MemoryGraph:
92
92
  # TODO: Batch queries with APOC plugin
93
93
  # TODO: Add more filter support
94
94
  deleted_entities = self._delete_entities(to_be_deleted, filters)
95
- added_entities = self._add_entities(to_be_added, filters, entity_type_map)
95
+ added_entities = self._add_entities(to_be_added, metadata, filters, entity_type_map)
96
96
 
97
97
  return {"deleted_entities": deleted_entities, "added_entities": added_entities}
98
98
 
@@ -129,6 +129,7 @@ class MemoryGraph:
129
129
  "relationship": item[1],
130
130
  "destination": item[2],
131
131
  "score": item[3] if len(item) > 3 else 0.0,
132
+ "metadata": item[4] if len(item) > 4 else {},
132
133
  }
133
134
  )
134
135
 
@@ -143,13 +144,9 @@ class MemoryGraph:
143
144
  @time_perf
144
145
  def rerank(self, search_output, query):
145
146
  if not self.config.graph_store.config.rerank:
146
- search_outputs_sequence = [
147
- [item["source"], item["relationship"], item["destination"]] for item in search_output
147
+ return [
148
+ [item["source"], item["relationship"], item["destination"], 0.0, item.get("metadata", {})] for item in search_output
148
149
  ]
149
- bm25 = BM25Okapi(search_outputs_sequence)
150
-
151
- tokenized_query = query.split(" ")
152
- return bm25.get_top_n(tokenized_query, search_outputs_sequence, n=5)
153
150
 
154
151
  # Only cohere is supported for now
155
152
  rerank_config = self.config.graph_store.config.rerank.config
@@ -172,7 +169,8 @@ class MemoryGraph:
172
169
  original_output["source"],
173
170
  original_output["relationship"],
174
171
  original_output["destination"],
175
- result.relevance_score
172
+ result.relevance_score,
173
+ original_output["metadata"],
176
174
  ])
177
175
  return reranked_results
178
176
 
@@ -338,14 +336,14 @@ class MemoryGraph:
338
336
  CALL {{
339
337
  WITH n, row
340
338
  MATCH (n)-[r]->(m {self.node_label} {{{node_props_str}}})
341
- RETURN n.name AS source, elementId(n) AS source_id, type(r) AS relationship, elementId(r) AS relation_id, m.name AS destination, elementId(m) AS destination_id
339
+ RETURN n.name AS source, elementId(n) AS source_id, n.note_ids AS source_note_ids, type(r) AS relationship, elementId(r) AS relation_id, m.name AS destination, elementId(m) AS destination_id, m.note_ids AS destination_note_ids
342
340
  UNION
343
341
  WITH n, row
344
342
  MATCH (n)<-[r]-(m {self.node_label} {{{node_props_str}}})
345
- RETURN m.name AS source, elementId(m) AS source_id, type(r) AS relationship, elementId(r) AS relation_id, n.name AS destination, elementId(n) AS destination_id
343
+ RETURN m.name AS source, elementId(m) AS source_id, m.note_ids AS source_note_ids, type(r) AS relationship, elementId(r) AS relation_id, n.name AS destination, elementId(n) AS destination_id, n.note_ids AS destination_note_ids
346
344
  }}
347
- WITH distinct source, source_id, relationship, relation_id, destination, destination_id, similarity
348
- RETURN source, source_id, relationship, relation_id, destination, destination_id, similarity
345
+ WITH distinct source, source_id, relationship, relation_id, destination, destination_id, similarity, source_note_ids, destination_note_ids
346
+ RETURN source, source_id, relationship, relation_id, destination, destination_id, similarity, {{note_ids: source_note_ids + destination_note_ids}} AS metadata
349
347
  ORDER BY similarity DESC
350
348
  LIMIT {limit}
351
349
  """
@@ -373,6 +371,12 @@ class MemoryGraph:
373
371
  key = (rel["source"], rel["relationship"], rel["destination"])
374
372
  if key not in seen:
375
373
  seen.add(key)
374
+
375
+ original_metadata = rel.get("metadata", {})
376
+ rel["metadata"] = {
377
+ "note_ids": list(set(original_metadata.get("note_ids", []))),
378
+ }
379
+
376
380
  unique_relations.append(rel)
377
381
 
378
382
  return unique_relations
@@ -471,7 +475,7 @@ class MemoryGraph:
471
475
  return results
472
476
 
473
477
  @time_perf
474
- def _add_entities(self, to_be_added, filters, entity_type_map):
478
+ def _add_entities(self, to_be_added, metadata, filters, entity_type_map):
475
479
  """Add the new entities to the graph. Merge the nodes if they already exist."""
476
480
  user_id = filters["user_id"]
477
481
  agent_id = filters.get("agent_id", None)
@@ -486,6 +490,12 @@ class MemoryGraph:
486
490
  entities_to_embed = list(entities_to_embed)
487
491
  embeddings = self.embedding_model.embed_in_batch(entities_to_embed)
488
492
  embedding_map = {entity: embedding for entity, embedding in zip(entities_to_embed, embeddings)}
493
+
494
+ # metadata
495
+ note_id = metadata.pop("note_id", "")
496
+ if type(note_id) != str:
497
+ note_id = str(note_id)
498
+ note_ids = [note_id] if note_id else []
489
499
 
490
500
  for item in to_be_added:
491
501
  # entities
@@ -523,14 +533,17 @@ class MemoryGraph:
523
533
  MATCH (source)
524
534
  WHERE elementId(source) = $source_id
525
535
  SET source.mentions = coalesce(source.mentions, 0) + 1
536
+ SET source.note_ids = coalesce(source.note_ids, []) + $note_ids
526
537
  WITH source
527
538
  MERGE (destination {destination_label} {{{merge_props_str}}})
528
539
  ON CREATE SET
529
540
  destination.created = timestamp(),
530
- destination.mentions = 1
541
+ destination.mentions = 1,
542
+ destination.note_ids = $note_ids
531
543
  {destination_extra_set}
532
544
  ON MATCH SET
533
- destination.mentions = coalesce(destination.mentions, 0) + 1
545
+ destination.mentions = coalesce(destination.mentions, 0) + 1,
546
+ destination.note_ids = coalesce(destination.note_ids, []) + $note_ids
534
547
  WITH source, destination
535
548
  CALL db.create.setNodeVectorProperty(destination, 'embedding', $destination_embedding)
536
549
  WITH source, destination
@@ -548,6 +561,7 @@ class MemoryGraph:
548
561
  "destination_name": destination,
549
562
  "destination_embedding": dest_embedding,
550
563
  "user_id": user_id,
564
+ "note_ids": note_ids,
551
565
  }
552
566
  if agent_id:
553
567
  params["agent_id"] = agent_id
@@ -567,14 +581,17 @@ class MemoryGraph:
567
581
  MATCH (destination)
568
582
  WHERE elementId(destination) = $destination_id
569
583
  SET destination.mentions = coalesce(destination.mentions, 0) + 1
584
+ SET destination.note_ids = coalesce(destination.note_ids, []) + $note_ids
570
585
  WITH destination
571
586
  MERGE (source {source_label} {{{merge_props_str}}})
572
587
  ON CREATE SET
573
588
  source.created = timestamp(),
574
- source.mentions = 1
589
+ source.mentions = 1,
590
+ source.note_ids = $note_ids
575
591
  {source_extra_set}
576
592
  ON MATCH SET
577
- source.mentions = coalesce(source.mentions, 0) + 1
593
+ source.mentions = coalesce(source.mentions, 0) + 1,
594
+ source.note_ids = coalesce(source.note_ids, []) + $note_ids
578
595
  WITH source, destination
579
596
  CALL db.create.setNodeVectorProperty(source, 'embedding', $source_embedding)
580
597
  WITH source, destination
@@ -592,6 +609,7 @@ class MemoryGraph:
592
609
  "source_name": source,
593
610
  "source_embedding": source_embedding,
594
611
  "user_id": user_id,
612
+ "note_ids": note_ids,
595
613
  }
596
614
  if agent_id:
597
615
  params["agent_id"] = agent_id
@@ -603,10 +621,12 @@ class MemoryGraph:
603
621
  MATCH (source)
604
622
  WHERE elementId(source) = $source_id
605
623
  SET source.mentions = coalesce(source.mentions, 0) + 1
624
+ SET source.note_ids = coalesce(source.note_ids, []) + $note_ids
606
625
  WITH source
607
626
  MATCH (destination)
608
627
  WHERE elementId(destination) = $destination_id
609
628
  SET destination.mentions = coalesce(destination.mentions, 0) + 1
629
+ SET destination.note_ids = coalesce(destination.note_ids, []) + $note_ids
610
630
  MERGE (source)-[r:{relationship}]->(destination)
611
631
  ON CREATE SET
612
632
  r.created_at = timestamp(),
@@ -620,6 +640,7 @@ class MemoryGraph:
620
640
  "source_id": source_node_search_result[0]["elementId(source_candidate)"],
621
641
  "destination_id": destination_node_search_result[0]["elementId(destination_candidate)"],
622
642
  "user_id": user_id,
643
+ "note_ids": note_ids,
623
644
  }
624
645
  if agent_id:
625
646
  params["agent_id"] = agent_id
@@ -642,7 +663,8 @@ class MemoryGraph:
642
663
  cypher = f"""
643
664
  MERGE (source {source_label} {{{source_props_str}}})
644
665
  ON CREATE SET source.created = timestamp(),
645
- source.mentions = 1
666
+ source.mentions = 1,
667
+ source.note_ids = $note_ids
646
668
  {source_extra_set}
647
669
  ON MATCH SET source.mentions = coalesce(source.mentions, 0) + 1
648
670
  WITH source
@@ -650,7 +672,8 @@ class MemoryGraph:
650
672
  WITH source
651
673
  MERGE (destination {destination_label} {{{dest_props_str}}})
652
674
  ON CREATE SET destination.created = timestamp(),
653
- destination.mentions = 1
675
+ destination.mentions = 1,
676
+ destination.note_ids = $note_ids
654
677
  {destination_extra_set}
655
678
  ON MATCH SET destination.mentions = coalesce(destination.mentions, 0) + 1
656
679
  WITH source, destination
@@ -668,6 +691,7 @@ class MemoryGraph:
668
691
  "source_embedding": source_embedding,
669
692
  "dest_embedding": dest_embedding,
670
693
  "user_id": user_id,
694
+ "note_ids": note_ids,
671
695
  }
672
696
  if agent_id:
673
697
  params["agent_id"] = agent_id
@@ -258,7 +258,7 @@ class Memory(MemoryBase):
258
258
 
259
259
  with concurrent.futures.ThreadPoolExecutor() as executor:
260
260
  future1 = executor.submit(self._add_to_vector_store, messages, processed_metadata, effective_filters, infer)
261
- future2 = executor.submit(self._add_to_graph, messages, effective_filters)
261
+ future2 = executor.submit(self._add_to_graph, messages, processed_metadata, effective_filters)
262
262
 
263
263
  concurrent.futures.wait([future1, future2])
264
264
 
@@ -454,14 +454,14 @@ class Memory(MemoryBase):
454
454
  return returned_memories
455
455
 
456
456
  @time_perf
457
- def _add_to_graph(self, messages, filters):
457
+ def _add_to_graph(self, messages, metadata, filters):
458
458
  added_entities = []
459
459
  if self.enable_graph:
460
460
  if filters.get("user_id") is None:
461
461
  filters["user_id"] = "user"
462
462
 
463
463
  data = "\n".join([msg["content"] for msg in messages if "content" in msg and msg["role"] != "system"])
464
- added_entities = self.graph.add(data, filters)
464
+ added_entities = self.graph.add(data, metadata, filters)
465
465
 
466
466
  return added_entities
467
467
 
@@ -1100,7 +1100,7 @@ class AsyncMemory(MemoryBase):
1100
1100
  vector_store_task = asyncio.create_task(
1101
1101
  self._add_to_vector_store(messages, processed_metadata, effective_filters, infer)
1102
1102
  )
1103
- graph_task = asyncio.create_task(self._add_to_graph(messages, effective_filters))
1103
+ graph_task = asyncio.create_task(self._add_to_graph(messages, processed_metadata, effective_filters))
1104
1104
 
1105
1105
  vector_store_result, graph_result = await asyncio.gather(vector_store_task, graph_task)
1106
1106
 
@@ -1308,14 +1308,14 @@ class AsyncMemory(MemoryBase):
1308
1308
  return returned_memories
1309
1309
 
1310
1310
  @time_perf
1311
- async def _add_to_graph(self, messages, filters):
1311
+ async def _add_to_graph(self, messages, metadata, filters):
1312
1312
  added_entities = []
1313
1313
  if self.enable_graph:
1314
1314
  if filters.get("user_id") is None:
1315
1315
  filters["user_id"] = "user"
1316
1316
 
1317
1317
  data = "\n".join([msg["content"] for msg in messages if "content" in msg and msg["role"] != "system"])
1318
- added_entities = await asyncio.to_thread(self.graph.add, data, filters)
1318
+ added_entities = await asyncio.to_thread(self.graph.add, data, metadata, filters)
1319
1319
 
1320
1320
  return added_entities
1321
1321
 
@@ -197,7 +197,7 @@ def time_perf(func):
197
197
  result = await func(*args, **kwargs)
198
198
  end = time.perf_counter()
199
199
  elapsed = end - start
200
- logger.debug(f"[Mem0 time perf][{func.__name__}] executed in {elapsed:.6f} seconds")
200
+ logger.warning(f"[Mem0 time perf][{func.__name__}] executed in {elapsed:.6f} seconds")
201
201
  return result
202
202
  return async_wrapper
203
203
  else:
@@ -207,6 +207,6 @@ def time_perf(func):
207
207
  result = func(*args, **kwargs)
208
208
  end = time.perf_counter()
209
209
  elapsed = end - start
210
- logger.debug(f"[Mem0 time perf][{func.__name__}] executed in {elapsed:.6f} seconds")
210
+ logger.warning(f"[Mem0 time perf][{func.__name__}] executed in {elapsed:.6f} seconds")
211
211
  return result
212
212
  return sync_wrapper
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "mem0ai-azure-mysql"
7
- version = "0.1.116.6"
7
+ version = "0.1.116.8"
8
8
  description = "Long-term memory for AI Agents with Azure DefaultAzureCredential authentication and MySQL history database support"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9,<4.0"