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.
- memori/__init__.py +3 -3
- memori/agents/conscious_agent.py +289 -77
- memori/agents/memory_agent.py +19 -9
- memori/agents/retrieval_agent.py +59 -51
- memori/config/manager.py +7 -7
- memori/config/memory_manager.py +25 -25
- memori/config/settings.py +13 -6
- memori/core/conversation.py +15 -15
- memori/core/database.py +14 -13
- memori/core/memory.py +376 -105
- memori/core/providers.py +25 -25
- memori/database/__init__.py +11 -0
- memori/database/adapters/__init__.py +11 -0
- memori/database/adapters/mongodb_adapter.py +739 -0
- memori/database/adapters/mysql_adapter.py +8 -8
- memori/database/adapters/postgresql_adapter.py +6 -6
- memori/database/adapters/sqlite_adapter.py +6 -6
- memori/database/auto_creator.py +8 -9
- memori/database/connection_utils.py +5 -5
- memori/database/connectors/__init__.py +11 -0
- memori/database/connectors/base_connector.py +18 -19
- memori/database/connectors/mongodb_connector.py +527 -0
- memori/database/connectors/mysql_connector.py +13 -15
- memori/database/connectors/postgres_connector.py +12 -12
- memori/database/connectors/sqlite_connector.py +11 -11
- memori/database/models.py +2 -2
- memori/database/mongodb_manager.py +1402 -0
- memori/database/queries/base_queries.py +3 -4
- memori/database/queries/chat_queries.py +3 -5
- memori/database/queries/entity_queries.py +3 -5
- memori/database/queries/memory_queries.py +3 -5
- memori/database/query_translator.py +11 -11
- memori/database/schema_generators/__init__.py +11 -0
- memori/database/schema_generators/mongodb_schema_generator.py +666 -0
- memori/database/schema_generators/mysql_schema_generator.py +2 -4
- memori/database/search/__init__.py +11 -0
- memori/database/search/mongodb_search_adapter.py +653 -0
- memori/database/search/mysql_search_adapter.py +8 -8
- memori/database/search/sqlite_search_adapter.py +6 -6
- memori/database/search_service.py +17 -17
- memori/database/sqlalchemy_manager.py +10 -12
- memori/integrations/__init__.py +1 -1
- memori/integrations/anthropic_integration.py +1 -3
- memori/integrations/litellm_integration.py +23 -6
- memori/integrations/openai_integration.py +31 -3
- memori/tools/memory_tool.py +10 -9
- memori/utils/exceptions.py +58 -58
- memori/utils/helpers.py +11 -12
- memori/utils/input_validator.py +10 -12
- memori/utils/logging.py +4 -4
- memori/utils/pydantic_models.py +57 -57
- memori/utils/query_builder.py +20 -20
- memori/utils/security_audit.py +28 -28
- memori/utils/security_integration.py +9 -9
- memori/utils/transaction_manager.py +20 -19
- memori/utils/validators.py +6 -6
- {memorisdk-2.0.1.dist-info → memorisdk-2.1.0.dist-info}/METADATA +22 -12
- memorisdk-2.1.0.dist-info/RECORD +71 -0
- memorisdk-2.0.1.dist-info/RECORD +0 -66
- {memorisdk-2.0.1.dist-info → memorisdk-2.1.0.dist-info}/WHEEL +0 -0
- {memorisdk-2.0.1.dist-info → memorisdk-2.1.0.dist-info}/licenses/LICENSE +0 -0
- {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
|
|
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:
|
|
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:
|
|
160
|
-
) ->
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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) ->
|
|
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) ->
|
|
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
|
|
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:
|
|
72
|
-
) ->
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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) ->
|
|
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) ->
|
|
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
|
|
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) ->
|
|
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,
|