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
@@ -3,24 +3,23 @@ Base database queries and schema operations
3
3
  """
4
4
 
5
5
  from abc import ABC, abstractmethod
6
- from typing import Dict
7
6
 
8
7
 
9
8
  class BaseQueries(ABC):
10
9
  """Abstract base class for database queries"""
11
10
 
12
11
  @abstractmethod
13
- def get_table_creation_queries(self) -> Dict[str, str]:
12
+ def get_table_creation_queries(self) -> dict[str, str]:
14
13
  """Return dictionary of table creation SQL statements"""
15
14
  pass
16
15
 
17
16
  @abstractmethod
18
- def get_index_creation_queries(self) -> Dict[str, str]:
17
+ def get_index_creation_queries(self) -> dict[str, str]:
19
18
  """Return dictionary of index creation SQL statements"""
20
19
  pass
21
20
 
22
21
  @abstractmethod
23
- def get_trigger_creation_queries(self) -> Dict[str, str]:
22
+ def get_trigger_creation_queries(self) -> dict[str, str]:
24
23
  """Return dictionary of trigger creation SQL statements"""
25
24
  pass
26
25
 
@@ -2,27 +2,25 @@
2
2
  Chat history database queries
3
3
  """
4
4
 
5
- from typing import Dict
6
-
7
5
  from .base_queries import BaseQueries
8
6
 
9
7
 
10
8
  class ChatQueries(BaseQueries):
11
9
  """Centralized chat history SQL queries"""
12
10
 
13
- def get_table_creation_queries(self) -> Dict[str, str]:
11
+ def get_table_creation_queries(self) -> dict[str, str]:
14
12
  """Chat table creation queries"""
15
13
  from .base_queries import SchemaQueries
16
14
 
17
15
  return {"chat_history": SchemaQueries.TABLE_CREATION["chat_history"]}
18
16
 
19
- def get_index_creation_queries(self) -> Dict[str, str]:
17
+ def get_index_creation_queries(self) -> dict[str, str]:
20
18
  """Chat index creation queries"""
21
19
  from .base_queries import SchemaQueries
22
20
 
23
21
  return {k: v for k, v in SchemaQueries.INDEX_CREATION.items() if "chat" in k}
24
22
 
25
- def get_trigger_creation_queries(self) -> Dict[str, str]:
23
+ def get_trigger_creation_queries(self) -> dict[str, str]:
26
24
  """Chat trigger creation queries"""
27
25
  return {} # No triggers for chat history currently
28
26
 
@@ -2,15 +2,13 @@
2
2
  Entity and relationship database queries
3
3
  """
4
4
 
5
- from typing import Dict
6
-
7
5
  from .base_queries import BaseQueries
8
6
 
9
7
 
10
8
  class EntityQueries(BaseQueries):
11
9
  """Centralized entity and relationship SQL queries"""
12
10
 
13
- def get_table_creation_queries(self) -> Dict[str, str]:
11
+ def get_table_creation_queries(self) -> dict[str, str]:
14
12
  """Entity table creation queries"""
15
13
  from .base_queries import SchemaQueries
16
14
 
@@ -21,7 +19,7 @@ class EntityQueries(BaseQueries):
21
19
  ],
22
20
  }
23
21
 
24
- def get_index_creation_queries(self) -> Dict[str, str]:
22
+ def get_index_creation_queries(self) -> dict[str, str]:
25
23
  """Entity index creation queries"""
26
24
  from .base_queries import SchemaQueries
27
25
 
@@ -31,7 +29,7 @@ class EntityQueries(BaseQueries):
31
29
  if any(word in k for word in ["entities", "relationships"])
32
30
  }
33
31
 
34
- def get_trigger_creation_queries(self) -> Dict[str, str]:
32
+ def get_trigger_creation_queries(self) -> dict[str, str]:
35
33
  """Entity trigger creation queries"""
36
34
  return {} # No triggers for entities currently
37
35
 
@@ -2,15 +2,13 @@
2
2
  Memory-related database queries
3
3
  """
4
4
 
5
- from typing import Dict
6
-
7
5
  from .base_queries import BaseQueries
8
6
 
9
7
 
10
8
  class MemoryQueries(BaseQueries):
11
9
  """Centralized memory-related SQL queries"""
12
10
 
13
- def get_table_creation_queries(self) -> Dict[str, str]:
11
+ def get_table_creation_queries(self) -> dict[str, str]:
14
12
  """Memory table creation queries"""
15
13
  from .base_queries import SchemaQueries
16
14
 
@@ -20,7 +18,7 @@ class MemoryQueries(BaseQueries):
20
18
  "rules_memory": SchemaQueries.TABLE_CREATION["rules_memory"],
21
19
  }
22
20
 
23
- def get_index_creation_queries(self) -> Dict[str, str]:
21
+ def get_index_creation_queries(self) -> dict[str, str]:
24
22
  """Memory index creation queries"""
25
23
  from .base_queries import SchemaQueries
26
24
 
@@ -30,7 +28,7 @@ class MemoryQueries(BaseQueries):
30
28
  if any(table in k for table in ["short_term", "long_term", "rules"])
31
29
  }
32
30
 
33
- def get_trigger_creation_queries(self) -> Dict[str, str]:
31
+ def get_trigger_creation_queries(self) -> dict[str, str]:
34
32
  """Memory trigger creation queries"""
35
33
  from .base_queries import SchemaQueries
36
34
 
@@ -6,7 +6,7 @@ differences between SQLite, PostgreSQL, and MySQL, particularly for
6
6
  boolean values and other database-specific syntax.
7
7
  """
8
8
 
9
- from typing import Any, Dict, Union
9
+ from typing import Any
10
10
 
11
11
  from loguru import logger
12
12
 
@@ -32,7 +32,7 @@ class QueryParameterTranslator:
32
32
  self.database_type = database_type.lower()
33
33
  logger.debug(f"QueryParameterTranslator initialized for {self.database_type}")
34
34
 
35
- def translate_parameters(self, parameters: Dict[str, Any]) -> Dict[str, Any]:
35
+ def translate_parameters(self, parameters: dict[str, Any]) -> dict[str, Any]:
36
36
  """
37
37
  Translate parameters to be compatible with the target database.
38
38
 
@@ -70,7 +70,7 @@ class QueryParameterTranslator:
70
70
  return None
71
71
 
72
72
  # Handle lists/arrays
73
- if isinstance(value, (list, tuple)):
73
+ if isinstance(value, list | tuple):
74
74
  return [self._translate_value(item) for item in value]
75
75
 
76
76
  # Handle dictionaries
@@ -80,7 +80,7 @@ class QueryParameterTranslator:
80
80
  # Return other values unchanged
81
81
  return value
82
82
 
83
- def _translate_boolean(self, value: bool) -> Union[bool, int]:
83
+ def _translate_boolean(self, value: bool) -> bool | int:
84
84
  """
85
85
  Translate boolean values for database compatibility.
86
86
 
@@ -159,8 +159,8 @@ class QueryParameterTranslator:
159
159
  return True
160
160
 
161
161
  def translate_query_with_parameters(
162
- self, query: str, parameters: Dict[str, Any]
163
- ) -> tuple[str, Dict[str, Any]]:
162
+ self, query: str, parameters: dict[str, Any]
163
+ ) -> tuple[str, dict[str, Any]]:
164
164
  """
165
165
  Translate both query and parameters for database compatibility.
166
166
 
@@ -180,17 +180,17 @@ class QueryParameterTranslator:
180
180
 
181
181
  return query, translated_params
182
182
 
183
- def get_boolean_true(self) -> Union[bool, int]:
183
+ def get_boolean_true(self) -> bool | int:
184
184
  """Get database-appropriate TRUE value."""
185
185
  return self._translate_boolean(True)
186
186
 
187
- def get_boolean_false(self) -> Union[bool, int]:
187
+ def get_boolean_false(self) -> bool | int:
188
188
  """Get database-appropriate FALSE value."""
189
189
  return self._translate_boolean(False)
190
190
 
191
191
 
192
192
  # Convenience functions for common boolean translations
193
- def get_db_boolean(value: bool, database_type: str) -> Union[bool, int]:
193
+ def get_db_boolean(value: bool, database_type: str) -> bool | int:
194
194
  """
195
195
  Get database-appropriate boolean value.
196
196
 
@@ -206,8 +206,8 @@ def get_db_boolean(value: bool, database_type: str) -> Union[bool, int]:
206
206
 
207
207
 
208
208
  def translate_query_params(
209
- parameters: Dict[str, Any], database_type: str
210
- ) -> Dict[str, Any]:
209
+ parameters: dict[str, Any], database_type: str
210
+ ) -> dict[str, Any]:
211
211
  """
212
212
  Convenience function to translate query parameters.
213
213
 
@@ -4,4 +4,15 @@ Schema generators for different database backends
4
4
 
5
5
  from .mysql_schema_generator import MySQLSchemaGenerator
6
6
 
7
+ try:
8
+ from .mongodb_schema_generator import MongoDBSchemaGenerator
9
+
10
+ MONGODB_SCHEMA_AVAILABLE = True
11
+ except ImportError:
12
+ MongoDBSchemaGenerator = None # type: ignore
13
+ MONGODB_SCHEMA_AVAILABLE = False
14
+
7
15
  __all__ = ["MySQLSchemaGenerator"]
16
+
17
+ if MONGODB_SCHEMA_AVAILABLE:
18
+ __all__.append("MongoDBSchemaGenerator")