memorisdk 2.0.1__py3-none-any.whl → 2.1.0__py3-none-any.whl

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.

Potentially problematic release.


This version of memorisdk might be problematic. Click here for more details.

Files changed (62) hide show
  1. memori/__init__.py +3 -3
  2. memori/agents/conscious_agent.py +289 -77
  3. memori/agents/memory_agent.py +19 -9
  4. memori/agents/retrieval_agent.py +59 -51
  5. memori/config/manager.py +7 -7
  6. memori/config/memory_manager.py +25 -25
  7. memori/config/settings.py +13 -6
  8. memori/core/conversation.py +15 -15
  9. memori/core/database.py +14 -13
  10. memori/core/memory.py +376 -105
  11. memori/core/providers.py +25 -25
  12. memori/database/__init__.py +11 -0
  13. memori/database/adapters/__init__.py +11 -0
  14. memori/database/adapters/mongodb_adapter.py +739 -0
  15. memori/database/adapters/mysql_adapter.py +8 -8
  16. memori/database/adapters/postgresql_adapter.py +6 -6
  17. memori/database/adapters/sqlite_adapter.py +6 -6
  18. memori/database/auto_creator.py +8 -9
  19. memori/database/connection_utils.py +5 -5
  20. memori/database/connectors/__init__.py +11 -0
  21. memori/database/connectors/base_connector.py +18 -19
  22. memori/database/connectors/mongodb_connector.py +527 -0
  23. memori/database/connectors/mysql_connector.py +13 -15
  24. memori/database/connectors/postgres_connector.py +12 -12
  25. memori/database/connectors/sqlite_connector.py +11 -11
  26. memori/database/models.py +2 -2
  27. memori/database/mongodb_manager.py +1402 -0
  28. memori/database/queries/base_queries.py +3 -4
  29. memori/database/queries/chat_queries.py +3 -5
  30. memori/database/queries/entity_queries.py +3 -5
  31. memori/database/queries/memory_queries.py +3 -5
  32. memori/database/query_translator.py +11 -11
  33. memori/database/schema_generators/__init__.py +11 -0
  34. memori/database/schema_generators/mongodb_schema_generator.py +666 -0
  35. memori/database/schema_generators/mysql_schema_generator.py +2 -4
  36. memori/database/search/__init__.py +11 -0
  37. memori/database/search/mongodb_search_adapter.py +653 -0
  38. memori/database/search/mysql_search_adapter.py +8 -8
  39. memori/database/search/sqlite_search_adapter.py +6 -6
  40. memori/database/search_service.py +17 -17
  41. memori/database/sqlalchemy_manager.py +10 -12
  42. memori/integrations/__init__.py +1 -1
  43. memori/integrations/anthropic_integration.py +1 -3
  44. memori/integrations/litellm_integration.py +23 -6
  45. memori/integrations/openai_integration.py +31 -3
  46. memori/tools/memory_tool.py +10 -9
  47. memori/utils/exceptions.py +58 -58
  48. memori/utils/helpers.py +11 -12
  49. memori/utils/input_validator.py +10 -12
  50. memori/utils/logging.py +4 -4
  51. memori/utils/pydantic_models.py +57 -57
  52. memori/utils/query_builder.py +20 -20
  53. memori/utils/security_audit.py +28 -28
  54. memori/utils/security_integration.py +9 -9
  55. memori/utils/transaction_manager.py +20 -19
  56. memori/utils/validators.py +6 -6
  57. {memorisdk-2.0.1.dist-info → memorisdk-2.1.0.dist-info}/METADATA +22 -12
  58. memorisdk-2.1.0.dist-info/RECORD +71 -0
  59. memorisdk-2.0.1.dist-info/RECORD +0 -66
  60. {memorisdk-2.0.1.dist-info → memorisdk-2.1.0.dist-info}/WHEEL +0 -0
  61. {memorisdk-2.0.1.dist-info → memorisdk-2.1.0.dist-info}/licenses/LICENSE +0 -0
  62. {memorisdk-2.0.1.dist-info → memorisdk-2.1.0.dist-info}/top_level.txt +0 -0
@@ -2,7 +2,7 @@
2
2
  PostgreSQL connector for Memori v1.0
3
3
  """
4
4
 
5
- from typing import Any, Dict, List, Optional
5
+ from typing import Any
6
6
 
7
7
  from loguru import logger
8
8
 
@@ -44,7 +44,7 @@ class PostgreSQLConnector(BaseDatabaseConnector):
44
44
  """Detect database type from connection config"""
45
45
  return DatabaseType.POSTGRESQL
46
46
 
47
- def _build_connection_string(self, config: Dict[str, Any]) -> str:
47
+ def _build_connection_string(self, config: dict[str, Any]) -> str:
48
48
  """Build PostgreSQL connection string from config dict"""
49
49
  try:
50
50
  user = config.get("user", "postgres")
@@ -156,8 +156,8 @@ class PostgreSQLConnector(BaseDatabaseConnector):
156
156
  raise DatabaseError(f"Failed to connect to PostgreSQL database: {e}")
157
157
 
158
158
  def execute_query(
159
- self, query: str, params: Optional[List] = None
160
- ) -> List[Dict[str, Any]]:
159
+ self, query: str, params: list | None = None
160
+ ) -> list[dict[str, Any]]:
161
161
  """Execute a query and return results"""
162
162
  try:
163
163
  with self.get_connection() as conn:
@@ -177,7 +177,7 @@ class PostgreSQLConnector(BaseDatabaseConnector):
177
177
  except Exception as e:
178
178
  raise DatabaseError(f"Failed to execute query: {e}")
179
179
 
180
- def execute_insert(self, query: str, params: Optional[List] = None) -> str:
180
+ def execute_insert(self, query: str, params: list | None = None) -> str:
181
181
  """Execute an insert query and return the inserted row ID"""
182
182
  try:
183
183
  with self.get_connection() as conn:
@@ -206,7 +206,7 @@ class PostgreSQLConnector(BaseDatabaseConnector):
206
206
  except Exception as e:
207
207
  raise DatabaseError(f"Failed to execute insert: {e}")
208
208
 
209
- def execute_update(self, query: str, params: Optional[List] = None) -> int:
209
+ def execute_update(self, query: str, params: list | None = None) -> int:
210
210
  """Execute an update query and return number of affected rows"""
211
211
  try:
212
212
  with self.get_connection() as conn:
@@ -222,7 +222,7 @@ class PostgreSQLConnector(BaseDatabaseConnector):
222
222
  except Exception as e:
223
223
  raise DatabaseError(f"Failed to execute update: {e}")
224
224
 
225
- def execute_delete(self, query: str, params: Optional[List] = None) -> int:
225
+ def execute_delete(self, query: str, params: list | None = None) -> int:
226
226
  """Execute a delete query and return number of affected rows"""
227
227
  try:
228
228
  with self.get_connection() as conn:
@@ -238,7 +238,7 @@ class PostgreSQLConnector(BaseDatabaseConnector):
238
238
  except Exception as e:
239
239
  raise DatabaseError(f"Failed to execute delete: {e}")
240
240
 
241
- def execute_transaction(self, queries: List[tuple]) -> bool:
241
+ def execute_transaction(self, queries: list[tuple]) -> bool:
242
242
  """Execute multiple queries in a transaction"""
243
243
  try:
244
244
  with self.get_connection() as conn:
@@ -268,7 +268,7 @@ class PostgreSQLConnector(BaseDatabaseConnector):
268
268
  logger.error(f"Connection test failed: {e}")
269
269
  return False
270
270
 
271
- def initialize_schema(self, schema_sql: Optional[str] = None):
271
+ def initialize_schema(self, schema_sql: str | None = None):
272
272
  """Initialize PostgreSQL database schema"""
273
273
  try:
274
274
  if not schema_sql:
@@ -326,7 +326,7 @@ class PostgreSQLConnector(BaseDatabaseConnector):
326
326
  return False
327
327
 
328
328
  def create_full_text_index(
329
- self, table: str, columns: List[str], index_name: str
329
+ self, table: str, columns: list[str], index_name: str
330
330
  ) -> str:
331
331
  """Create PostgreSQL GIN index for full-text search"""
332
332
  # Validate inputs
@@ -344,7 +344,7 @@ class PostgreSQLConnector(BaseDatabaseConnector):
344
344
  tsvector_expr = " || ' ' || ".join(columns)
345
345
  return f"CREATE INDEX {index_name} ON {table} USING gin(to_tsvector('english', {tsvector_expr}))"
346
346
 
347
- def get_database_info(self) -> Dict[str, Any]:
347
+ def get_database_info(self) -> dict[str, Any]:
348
348
  """Get PostgreSQL database information and capabilities"""
349
349
  try:
350
350
  with self.get_connection() as conn:
@@ -392,7 +392,7 @@ class PostgreSQLConnector(BaseDatabaseConnector):
392
392
  "error": str(e),
393
393
  }
394
394
 
395
- def _split_postgresql_statements(self, schema_sql: str) -> List[str]:
395
+ def _split_postgresql_statements(self, schema_sql: str) -> list[str]:
396
396
  """Split SQL schema into individual statements handling PostgreSQL syntax"""
397
397
  statements = []
398
398
  current_statement = []
@@ -4,7 +4,7 @@ SQLite connector for Memori v1.0
4
4
 
5
5
  import sqlite3
6
6
  from pathlib import Path
7
- from typing import Any, Dict, List, Optional
7
+ from typing import Any
8
8
 
9
9
  from loguru import logger
10
10
 
@@ -68,8 +68,8 @@ class SQLiteConnector(BaseDatabaseConnector):
68
68
  raise DatabaseError(f"Failed to connect to SQLite database: {e}")
69
69
 
70
70
  def execute_query(
71
- self, query: str, params: Optional[List] = None
72
- ) -> List[Dict[str, Any]]:
71
+ self, query: str, params: list | None = None
72
+ ) -> list[dict[str, Any]]:
73
73
  """Execute a query and return results"""
74
74
  try:
75
75
  with self.get_connection() as conn:
@@ -89,7 +89,7 @@ class SQLiteConnector(BaseDatabaseConnector):
89
89
  except Exception as e:
90
90
  raise DatabaseError(f"Failed to execute query: {e}")
91
91
 
92
- def execute_insert(self, query: str, params: Optional[List] = None) -> str:
92
+ def execute_insert(self, query: str, params: list | None = None) -> str:
93
93
  """Execute an insert query and return the inserted row ID"""
94
94
  try:
95
95
  with self.get_connection() as conn:
@@ -105,7 +105,7 @@ class SQLiteConnector(BaseDatabaseConnector):
105
105
  except Exception as e:
106
106
  raise DatabaseError(f"Failed to execute insert: {e}")
107
107
 
108
- def execute_update(self, query: str, params: Optional[List] = None) -> int:
108
+ def execute_update(self, query: str, params: list | None = None) -> int:
109
109
  """Execute an update query and return number of affected rows"""
110
110
  try:
111
111
  with self.get_connection() as conn:
@@ -121,7 +121,7 @@ class SQLiteConnector(BaseDatabaseConnector):
121
121
  except Exception as e:
122
122
  raise DatabaseError(f"Failed to execute update: {e}")
123
123
 
124
- def execute_delete(self, query: str, params: Optional[List] = None) -> int:
124
+ def execute_delete(self, query: str, params: list | None = None) -> int:
125
125
  """Execute a delete query and return number of affected rows"""
126
126
  try:
127
127
  with self.get_connection() as conn:
@@ -137,7 +137,7 @@ class SQLiteConnector(BaseDatabaseConnector):
137
137
  except Exception as e:
138
138
  raise DatabaseError(f"Failed to execute delete: {e}")
139
139
 
140
- def execute_transaction(self, queries: List[tuple]) -> bool:
140
+ def execute_transaction(self, queries: list[tuple]) -> bool:
141
141
  """Execute multiple queries in a transaction"""
142
142
  try:
143
143
  with self.get_connection() as conn:
@@ -166,7 +166,7 @@ class SQLiteConnector(BaseDatabaseConnector):
166
166
  logger.error(f"Connection test failed: {e}")
167
167
  return False
168
168
 
169
- def initialize_schema(self, schema_sql: Optional[str] = None):
169
+ def initialize_schema(self, schema_sql: str | None = None):
170
170
  """Initialize SQLite database schema"""
171
171
  try:
172
172
  if not schema_sql:
@@ -221,7 +221,7 @@ class SQLiteConnector(BaseDatabaseConnector):
221
221
  return False
222
222
 
223
223
  def create_full_text_index(
224
- self, table: str, columns: List[str], index_name: str
224
+ self, table: str, columns: list[str], index_name: str
225
225
  ) -> str:
226
226
  """Create SQLite FTS5 virtual table"""
227
227
  # Validate inputs
@@ -236,7 +236,7 @@ class SQLiteConnector(BaseDatabaseConnector):
236
236
  columns_str = ", ".join(columns)
237
237
  return f"CREATE VIRTUAL TABLE {index_name} USING fts5({columns_str})"
238
238
 
239
- def get_database_info(self) -> Dict[str, Any]:
239
+ def get_database_info(self) -> dict[str, Any]:
240
240
  """Get SQLite database information and capabilities"""
241
241
  try:
242
242
  with self.get_connection() as conn:
@@ -280,7 +280,7 @@ class SQLiteConnector(BaseDatabaseConnector):
280
280
  "error": str(e),
281
281
  }
282
282
 
283
- def _split_sqlite_statements(self, schema_sql: str) -> List[str]:
283
+ def _split_sqlite_statements(self, schema_sql: str) -> list[str]:
284
284
  """Split SQL schema into individual statements handling SQLite syntax"""
285
285
  statements = []
286
286
  current_statement = []
memori/database/models.py CHANGED
@@ -4,7 +4,7 @@ Provides cross-database compatibility using SQLAlchemy ORM
4
4
  """
5
5
 
6
6
  from datetime import datetime
7
- from typing import Any, Dict
7
+ from typing import Any
8
8
 
9
9
  from sqlalchemy import (
10
10
  JSON,
@@ -386,7 +386,7 @@ class DatabaseManager:
386
386
  """Get database session"""
387
387
  return self.SessionLocal()
388
388
 
389
- def get_database_info(self) -> Dict[str, Any]:
389
+ def get_database_info(self) -> dict[str, Any]:
390
390
  """Get database information"""
391
391
  return {
392
392
  "database_type": self.engine.dialect.name,