Code formatting (#2153)

This commit is contained in:
Dev Khant
2025-01-16 12:33:56 +05:30
committed by GitHub
parent e12273c7cb
commit a4b085553a
4 changed files with 33 additions and 37 deletions

View File

@@ -30,7 +30,7 @@ Here's the parameters available for configuring pgvector:
| Parameter | Description | Default Value | | Parameter | Description | Default Value |
| --- | --- | --- | | --- | --- | --- |
| `dbname` | The name of the database | `postgres` | | `dbname` | The name of the | `postgres` |
| `collection_name` | The name of the collection | `mem0` | | `collection_name` | The name of the collection | `mem0` |
| `embedding_model_dims` | Dimensions of the embedding model | `1536` | | `embedding_model_dims` | Dimensions of the embedding model | `1536` |
| `user` | User name to connect to the database | `None` | | `user` | User name to connect to the database | `None` |

View File

@@ -44,8 +44,6 @@ Mem0's memory implementation for Large Language Models (LLMs) offers several adv
- **Entity Relationships**: Mem0 can understand and relate entities across different interactions, unlike RAG which retrieves information from static documents. This leads to a deeper understanding of context and relationships. - **Entity Relationships**: Mem0 can understand and relate entities across different interactions, unlike RAG which retrieves information from static documents. This leads to a deeper understanding of context and relationships.
- **Recency, Relevancy, and Decay**: Mem0 uses custom search algorithms to prioritize recent interactions and gradually forgets outdated information, ensuring the memory remains relevant and up-to-date for more accurate responses.
- **Contextual Continuity**: Mem0 retains information across sessions, maintaining continuity in conversations and interactions, which is essential for long-term engagement applications like virtual companions or personalized learning assistants. - **Contextual Continuity**: Mem0 retains information across sessions, maintaining continuity in conversations and interactions, which is essential for long-term engagement applications like virtual companions or personalized learning assistants.
- **Adaptive Learning**: Mem0 improves its personalization based on user interactions and feedback, making the memory more accurate and tailored to individual users over time. - **Adaptive Learning**: Mem0 improves its personalization based on user interactions and feedback, making the memory more accurate and tailored to individual users over time.

View File

@@ -114,9 +114,9 @@ class MemoryClient:
if response.status_code == 200: if response.status_code == 200:
data = response.json() data = response.json()
if data.get('org_id') and data.get('project_id'): if data.get("org_id") and data.get("project_id"):
self.org_id = data.get('org_id') self.org_id = data.get("org_id")
self.project_id = data.get('project_id') self.project_id = data.get("project_id")
except httpx.HTTPStatusError: except httpx.HTTPStatusError:
raise ValueError("Invalid API Key. Please get a valid API Key from https://app.mem0.ai") raise ValueError("Invalid API Key. Please get a valid API Key from https://app.mem0.ai")
@@ -407,7 +407,7 @@ class MemoryClient:
return response.json() return response.json()
@api_error_handler @api_error_handler
def get_project(self, fields: Optional[List[str]]=None) -> Dict[str, Any]: def get_project(self, fields: Optional[List[str]] = None) -> Dict[str, Any]:
"""Get instructions or categories for the current project. """Get instructions or categories for the current project.
Args: Args:
@@ -433,7 +433,9 @@ class MemoryClient:
return response.json() return response.json()
@api_error_handler @api_error_handler
def update_project(self, custom_instructions: Optional[str]=None, custom_categories: Optional[List[str]]=None) -> Dict[str, Any]: def update_project(
self, custom_instructions: Optional[str] = None, custom_categories: Optional[List[str]] = None
) -> Dict[str, Any]:
"""Update the project settings. """Update the project settings.
Args: Args:
@@ -451,15 +453,23 @@ class MemoryClient:
raise ValueError("org_id and project_id must be set to update instructions or categories") raise ValueError("org_id and project_id must be set to update instructions or categories")
if custom_instructions is None and custom_categories is None: if custom_instructions is None and custom_categories is None:
raise ValueError("Currently we only support updating custom_instructions or custom_categories, so you must provide at least one of them") raise ValueError(
"Currently we only support updating custom_instructions or custom_categories, so you must provide at least one of them"
)
payload = self._prepare_params({"custom_instructions": custom_instructions, "custom_categories": custom_categories}) payload = self._prepare_params(
{"custom_instructions": custom_instructions, "custom_categories": custom_categories}
)
response = self.client.patch( response = self.client.patch(
f"/api/v1/orgs/organizations/{self.org_id}/projects/{self.project_id}/", f"/api/v1/orgs/organizations/{self.org_id}/projects/{self.project_id}/",
json=payload, json=payload,
) )
response.raise_for_status() response.raise_for_status()
capture_client_event("client.update_project", self, {"custom_instructions": custom_instructions, "custom_categories": custom_categories}) capture_client_event(
"client.update_project",
self,
{"custom_instructions": custom_instructions, "custom_categories": custom_categories},
)
return response.json() return response.json()
def chat(self): def chat(self):
@@ -744,35 +754,38 @@ class AsyncMemoryClient:
return response.json() return response.json()
@api_error_handler @api_error_handler
async def get_project(self, fields: Optional[List[str]]=None) -> Dict[str, Any]: async def get_project(self, fields: Optional[List[str]] = None) -> Dict[str, Any]:
if not (self.sync_client.org_id and self.sync_client.project_id): if not (self.sync_client.org_id and self.sync_client.project_id):
raise ValueError("org_id and project_id must be set to access instructions or categories") raise ValueError("org_id and project_id must be set to access instructions or categories")
params = self._prepare_params({"fields": fields}) params = self._prepare_params({"fields": fields})
response = await self.async_client.get( response = await self.async_client.get(
f"/api/v1/orgs/organizations/{self.sync_client.org_id}/projects/{self.sync_client.project_id}/", f"/api/v1/orgs/organizations/{self.sync_client.org_id}/projects/{self.sync_client.project_id}/",
params=params, params=params,
) )
response.raise_for_status() response.raise_for_status()
capture_client_event( capture_client_event("async_client.get_project", self.sync_client, {"fields": fields})
"async_client.get_project", self.sync_client, {"fields": fields}
)
return response.json() return response.json()
@api_error_handler @api_error_handler
async def update_project(self, custom_instructions: Optional[str], custom_categories: Optional[List[str]]) -> Dict[str, Any]: async def update_project(
self, custom_instructions: Optional[str], custom_categories: Optional[List[str]]
) -> Dict[str, Any]:
if not (self.sync_client.org_id and self.sync_client.project_id): if not (self.sync_client.org_id and self.sync_client.project_id):
raise ValueError("org_id and project_id must be set to update instructions or categories") raise ValueError("org_id and project_id must be set to update instructions or categories")
payload = self.sync_client._prepare_params({"custom_instructions": custom_instructions, "custom_categories": custom_categories}) payload = self.sync_client._prepare_params(
{"custom_instructions": custom_instructions, "custom_categories": custom_categories}
)
response = await self.async_client.patch( response = await self.async_client.patch(
f"/api/v1/orgs/organizations/{self.sync_client.org_id}/projects/{self.sync_client.project_id}/", f"/api/v1/orgs/organizations/{self.sync_client.org_id}/projects/{self.sync_client.project_id}/",
json=payload, json=payload,
) )
response.raise_for_status() response.raise_for_status()
capture_client_event( capture_client_event(
"async_client.update_project", self.sync_client, {"custom_instructions": custom_instructions, "custom_categories": custom_categories} "async_client.update_project",
self.sync_client,
{"custom_instructions": custom_instructions, "custom_categories": custom_categories},
) )
return response.json() return response.json()

View File

@@ -5,9 +5,7 @@ try:
from elasticsearch import Elasticsearch from elasticsearch import Elasticsearch
from elasticsearch.helpers import bulk from elasticsearch.helpers import bulk
except ImportError: except ImportError:
raise ImportError( raise ImportError("Elasticsearch requires extra dependencies. Install with `pip install elasticsearch`") from None
"Elasticsearch requires extra dependencies. Install with `pip install elasticsearch`"
) from None
from pydantic import BaseModel from pydantic import BaseModel
@@ -127,14 +125,7 @@ class ElasticsearchDB(VectorStoreBase):
# Exact match filters for memory isolation # Exact match filters for memory isolation
*({"term": {f"payload.{k}": v}} for k, v in (filters or {}).items()), *({"term": {f"payload.{k}": v}} for k, v in (filters or {}).items()),
# KNN vector search # KNN vector search
{ {"knn": {"vector": {"vector": query, "k": limit}}},
"knn": {
"vector": {
"vector": query,
"k": limit
}
}
}
] ]
} }
} }
@@ -144,13 +135,7 @@ class ElasticsearchDB(VectorStoreBase):
results = [] results = []
for hit in response["hits"]["hits"]: for hit in response["hits"]["hits"]:
results.append( results.append(OutputData(id=hit["_id"], score=hit["_score"], payload=hit["_source"].get("payload", {})))
OutputData(
id=hit["_id"],
score=hit["_score"],
payload=hit["_source"].get("payload", {})
)
)
return results return results