mem0ai-azure-mysql 0.1.116.1__tar.gz → 0.1.116.2__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.1 → mem0ai_azure_mysql-0.1.116.2}/PKG-INFO +2 -1
  2. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/graphs/configs.py +18 -0
  3. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/memory/graph_memory.py +55 -9
  4. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/pyproject.toml +3 -2
  5. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/.gitignore +0 -0
  6. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/README.md +0 -0
  7. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/__init__.py +0 -0
  8. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/client/__init__.py +0 -0
  9. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/client/main.py +0 -0
  10. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/client/project.py +0 -0
  11. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/client/utils.py +0 -0
  12. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/__init__.py +0 -0
  13. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/base.py +0 -0
  14. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/dbs/__init__.py +0 -0
  15. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/dbs/base.py +0 -0
  16. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/dbs/mysql.py +0 -0
  17. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/embeddings/__init__.py +0 -0
  18. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/embeddings/base.py +0 -0
  19. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/enums.py +0 -0
  20. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/llms/__init__.py +0 -0
  21. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/llms/anthropic.py +0 -0
  22. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/llms/aws_bedrock.py +0 -0
  23. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/llms/azure.py +0 -0
  24. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/llms/base.py +0 -0
  25. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/llms/deepseek.py +0 -0
  26. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/llms/lmstudio.py +0 -0
  27. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/llms/ollama.py +0 -0
  28. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/llms/openai.py +0 -0
  29. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/llms/vllm.py +0 -0
  30. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/prompts.py +0 -0
  31. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/__init__.py +0 -0
  32. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/azure_ai_search.py +0 -0
  33. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/baidu.py +0 -0
  34. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/chroma.py +0 -0
  35. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/databricks.py +0 -0
  36. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/elasticsearch.py +0 -0
  37. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/faiss.py +0 -0
  38. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/langchain.py +0 -0
  39. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/milvus.py +0 -0
  40. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/mongodb.py +0 -0
  41. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/opensearch.py +0 -0
  42. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/pgvector.py +0 -0
  43. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/pinecone.py +0 -0
  44. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/qdrant.py +0 -0
  45. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/redis.py +0 -0
  46. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/supabase.py +0 -0
  47. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/upstash_vector.py +0 -0
  48. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/vertex_ai_vector_search.py +0 -0
  49. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/configs/vector_stores/weaviate.py +0 -0
  50. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/dbs/__init__.py +0 -0
  51. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/dbs/base.py +0 -0
  52. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/dbs/configs.py +0 -0
  53. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/dbs/mysql.py +0 -0
  54. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/embeddings/__init__.py +0 -0
  55. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/embeddings/aws_bedrock.py +0 -0
  56. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/embeddings/azure_openai.py +0 -0
  57. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/embeddings/base.py +0 -0
  58. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/embeddings/configs.py +0 -0
  59. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/embeddings/gemini.py +0 -0
  60. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/embeddings/huggingface.py +0 -0
  61. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/embeddings/langchain.py +0 -0
  62. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/embeddings/lmstudio.py +0 -0
  63. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/embeddings/mock.py +0 -0
  64. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/embeddings/ollama.py +0 -0
  65. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/embeddings/openai.py +0 -0
  66. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/embeddings/together.py +0 -0
  67. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/embeddings/vertexai.py +0 -0
  68. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/graphs/__init__.py +0 -0
  69. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/graphs/neptune/__init__.py +0 -0
  70. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/graphs/neptune/base.py +0 -0
  71. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/graphs/neptune/main.py +0 -0
  72. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/graphs/tools.py +0 -0
  73. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/graphs/utils.py +0 -0
  74. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/__init__.py +0 -0
  75. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/anthropic.py +0 -0
  76. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/aws_bedrock.py +0 -0
  77. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/azure_openai.py +0 -0
  78. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/azure_openai_structured.py +0 -0
  79. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/base.py +0 -0
  80. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/configs.py +0 -0
  81. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/deepseek.py +0 -0
  82. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/gemini.py +0 -0
  83. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/groq.py +0 -0
  84. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/langchain.py +0 -0
  85. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/litellm.py +0 -0
  86. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/lmstudio.py +0 -0
  87. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/ollama.py +0 -0
  88. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/openai.py +0 -0
  89. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/openai_structured.py +0 -0
  90. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/sarvam.py +0 -0
  91. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/together.py +0 -0
  92. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/vllm.py +0 -0
  93. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/llms/xai.py +0 -0
  94. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/memory/__init__.py +0 -0
  95. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/memory/base.py +0 -0
  96. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/memory/kuzu_memory.py +0 -0
  97. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/memory/main.py +0 -0
  98. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/memory/memgraph_memory.py +0 -0
  99. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/memory/setup.py +0 -0
  100. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/memory/storage.py +0 -0
  101. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/memory/telemetry.py +0 -0
  102. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/memory/utils.py +0 -0
  103. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/proxy/__init__.py +0 -0
  104. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/proxy/main.py +0 -0
  105. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/utils/factory.py +0 -0
  106. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/__init__.py +0 -0
  107. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/azure_ai_search.py +0 -0
  108. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/baidu.py +0 -0
  109. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/base.py +0 -0
  110. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/chroma.py +0 -0
  111. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/configs.py +0 -0
  112. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/databricks.py +0 -0
  113. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/elasticsearch.py +0 -0
  114. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/faiss.py +0 -0
  115. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/langchain.py +0 -0
  116. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/milvus.py +0 -0
  117. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/mongodb.py +0 -0
  118. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/opensearch.py +0 -0
  119. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/pgvector.py +0 -0
  120. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/pinecone.py +0 -0
  121. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/qdrant.py +0 -0
  122. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/redis.py +0 -0
  123. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/supabase.py +0 -0
  124. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/upstash_vector.py +0 -0
  125. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/vertex_ai_vector_search.py +0 -0
  126. {mem0ai_azure_mysql-0.1.116.1 → mem0ai_azure_mysql-0.1.116.2}/mem0/vector_stores/weaviate.py +0 -0
@@ -1,10 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mem0ai-azure-mysql
3
- Version: 0.1.116.1
3
+ Version: 0.1.116.2
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
7
7
  Requires-Dist: azure-search-documents>=11.5.3
8
+ Requires-Dist: cohere>=5.17.0
8
9
  Requires-Dist: langchain-neo4j>=0.4.0
9
10
  Requires-Dist: openai<1.100.0,>=1.90.0
10
11
  Requires-Dist: posthog>=3.5.0
@@ -5,12 +5,24 @@ from pydantic import BaseModel, Field, field_validator, model_validator
5
5
  from mem0.llms.configs import LlmConfig
6
6
 
7
7
 
8
+ class RerankConfig(BaseModel):
9
+ provider: str = Field(
10
+ description="Provider of the rerank model (e.g., 'openai', 'azure', 'cohere')",
11
+ default="cohere",
12
+ )
13
+ config: Optional[dict] = Field(
14
+ description="Configuration for the specific rerank model", default={}
15
+ )
16
+
8
17
  class Neo4jConfig(BaseModel):
9
18
  url: Optional[str] = Field(None, description="Host address for the graph database")
10
19
  username: Optional[str] = Field(None, description="Username for the graph database")
11
20
  password: Optional[str] = Field(None, description="Password for the graph database")
12
21
  database: Optional[str] = Field(None, description="Database for the graph database")
13
22
  base_label: Optional[bool] = Field(None, description="Whether to use base node label __Entity__ for all entities")
23
+ similarity_threshold: float = Field(0.7, description="Threshold for the similarity of nodes")
24
+ top_k: int = Field(5, description="Number of top scored results to return")
25
+ rerank: Optional[RerankConfig] = Field(None, description="Rerank configuration")
14
26
 
15
27
  @model_validator(mode="before")
16
28
  def check_host_port_or_path(cls, values):
@@ -21,6 +33,12 @@ class Neo4jConfig(BaseModel):
21
33
  )
22
34
  if not url or not username or not password:
23
35
  raise ValueError("Please provide 'url', 'username' and 'password'.")
36
+
37
+ if values.get("rerank") is not None:
38
+ values["rerank"] = RerankConfig(**values.get("rerank"))
39
+ if values["rerank"].provider not in ("cohere"):
40
+ raise ValueError("Invalid rerank provider. Supported providers are: cohere")
41
+
24
42
  return values
25
43
 
26
44
 
@@ -1,4 +1,7 @@
1
1
  import logging
2
+ import time
3
+
4
+ import cohere
2
5
 
3
6
  from mem0.memory.utils import format_entities, sanitize_relationship_for_cypher
4
7
 
@@ -70,7 +73,8 @@ class MemoryGraph:
70
73
  llm_config = self.config.llm.config
71
74
  self.llm = LlmFactory.create(self.llm_provider, llm_config)
72
75
  self.user_id = None
73
- self.threshold = 0.7
76
+ self.threshold = self.config.graph_store.config.similarity_threshold
77
+ self.top_k = self.config.graph_store.config.top_k
74
78
 
75
79
  def add(self, data, filters):
76
80
  """
@@ -106,28 +110,70 @@ class MemoryGraph:
106
110
  - "contexts": List of search results from the base data store.
107
111
  - "entities": List of related graph data based on the query.
108
112
  """
113
+ start_time = time.perf_counter()
114
+ logger.info(f"Searching for query in neo4j: {query} with filters: {filters}")
109
115
  entity_type_map = self._retrieve_nodes_from_data(query, filters)
110
116
  search_output = self._search_graph_db(node_list=list(entity_type_map.keys()), filters=filters)
111
117
 
112
118
  if not search_output:
113
119
  return []
114
120
 
115
- search_outputs_sequence = [
116
- [item["source"], item["relationship"], item["destination"]] for item in search_output
117
- ]
118
- bm25 = BM25Okapi(search_outputs_sequence)
119
-
120
- tokenized_query = query.split(" ")
121
- reranked_results = bm25.get_top_n(tokenized_query, search_outputs_sequence, n=5)
121
+ reranked_results = self.rerank(search_output, query)
122
122
 
123
123
  search_results = []
124
124
  for item in reranked_results:
125
- search_results.append({"source": item[0], "relationship": item[1], "destination": item[2]})
125
+ search_results.append(
126
+ {
127
+ "source": item[0],
128
+ "relationship": item[1],
129
+ "destination": item[2],
130
+ "score": item[3] if len(item) > 3 else 0.0,
131
+ }
132
+ )
126
133
 
127
134
  logger.info(f"Returned {len(search_results)} search results")
128
135
 
136
+ end_time = time.perf_counter()
137
+ # print milliseconds
138
+ print(f"Search took {(end_time - start_time) * 1000:.2f} ms")
139
+
129
140
  return search_results
130
141
 
142
+ def rerank(self, search_output, query):
143
+ if not self.config.graph_store.config.rerank:
144
+ search_outputs_sequence = [
145
+ [item["source"], item["relationship"], item["destination"]] for item in search_output
146
+ ]
147
+ bm25 = BM25Okapi(search_outputs_sequence)
148
+
149
+ tokenized_query = query.split(" ")
150
+ return bm25.get_top_n(tokenized_query, search_outputs_sequence, n=5)
151
+
152
+ # Only cohere is supported for now
153
+ rerank_config = self.config.graph_store.config.rerank.config
154
+ co = cohere.ClientV2(
155
+ api_key=rerank_config.get("api_key"),
156
+ base_url=rerank_config.get("base_url"),
157
+ )
158
+ docs = [f'{item["source"]} {item["relationship"]} {item["destination"]}' for item in search_output]
159
+ response = co.rerank(
160
+ model=rerank_config.get("model"),
161
+ query=query,
162
+ documents=docs,
163
+ top_n=self.top_k,
164
+ )
165
+
166
+ reranked_results = []
167
+ for result in response.results:
168
+ original_output = search_output[result.index]
169
+ reranked_results.append([
170
+ original_output["source"],
171
+ original_output["relationship"],
172
+ original_output["destination"],
173
+ result.relevance_score
174
+ ])
175
+ return reranked_results
176
+
131
177
  def delete_all(self, filters):
132
178
  # Build node properties for filtering
133
179
  node_props = ["user_id: $user_id"]
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "mem0ai-azure-mysql"
7
- version = "0.1.116.1"
7
+ version = "0.1.116.2"
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"
@@ -20,7 +20,8 @@ dependencies = [
20
20
  "azure-search-documents>=11.5.3",
21
21
  "pymysql",
22
22
  "langchain-neo4j>=0.4.0",
23
- "rank-bm25>=0.2.2"
23
+ "rank-bm25>=0.2.2",
24
+ "cohere>=5.17.0",
24
25
  ]
25
26
 
26
27
  [project.optional-dependencies]