powermem 0.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.
Files changed (123) hide show
  1. powermem/__init__.py +103 -0
  2. powermem/agent/__init__.py +35 -0
  3. powermem/agent/abstract/__init__.py +22 -0
  4. powermem/agent/abstract/collaboration.py +259 -0
  5. powermem/agent/abstract/context.py +187 -0
  6. powermem/agent/abstract/manager.py +232 -0
  7. powermem/agent/abstract/permission.py +217 -0
  8. powermem/agent/abstract/privacy.py +267 -0
  9. powermem/agent/abstract/scope.py +199 -0
  10. powermem/agent/agent.py +791 -0
  11. powermem/agent/components/__init__.py +18 -0
  12. powermem/agent/components/collaboration_coordinator.py +645 -0
  13. powermem/agent/components/permission_controller.py +586 -0
  14. powermem/agent/components/privacy_protector.py +767 -0
  15. powermem/agent/components/scope_controller.py +685 -0
  16. powermem/agent/factories/__init__.py +16 -0
  17. powermem/agent/factories/agent_factory.py +266 -0
  18. powermem/agent/factories/config_factory.py +308 -0
  19. powermem/agent/factories/memory_factory.py +229 -0
  20. powermem/agent/implementations/__init__.py +16 -0
  21. powermem/agent/implementations/hybrid.py +728 -0
  22. powermem/agent/implementations/multi_agent.py +1040 -0
  23. powermem/agent/implementations/multi_user.py +1020 -0
  24. powermem/agent/types.py +53 -0
  25. powermem/agent/wrappers/__init__.py +14 -0
  26. powermem/agent/wrappers/agent_memory_wrapper.py +427 -0
  27. powermem/agent/wrappers/compatibility_wrapper.py +520 -0
  28. powermem/config_loader.py +318 -0
  29. powermem/configs.py +249 -0
  30. powermem/core/__init__.py +19 -0
  31. powermem/core/async_memory.py +1493 -0
  32. powermem/core/audit.py +258 -0
  33. powermem/core/base.py +165 -0
  34. powermem/core/memory.py +1567 -0
  35. powermem/core/setup.py +162 -0
  36. powermem/core/telemetry.py +215 -0
  37. powermem/integrations/__init__.py +17 -0
  38. powermem/integrations/embeddings/__init__.py +13 -0
  39. powermem/integrations/embeddings/aws_bedrock.py +100 -0
  40. powermem/integrations/embeddings/azure_openai.py +55 -0
  41. powermem/integrations/embeddings/base.py +31 -0
  42. powermem/integrations/embeddings/config/base.py +132 -0
  43. powermem/integrations/embeddings/configs.py +31 -0
  44. powermem/integrations/embeddings/factory.py +48 -0
  45. powermem/integrations/embeddings/gemini.py +39 -0
  46. powermem/integrations/embeddings/huggingface.py +41 -0
  47. powermem/integrations/embeddings/langchain.py +35 -0
  48. powermem/integrations/embeddings/lmstudio.py +29 -0
  49. powermem/integrations/embeddings/mock.py +11 -0
  50. powermem/integrations/embeddings/ollama.py +53 -0
  51. powermem/integrations/embeddings/openai.py +49 -0
  52. powermem/integrations/embeddings/qwen.py +102 -0
  53. powermem/integrations/embeddings/together.py +31 -0
  54. powermem/integrations/embeddings/vertexai.py +54 -0
  55. powermem/integrations/llm/__init__.py +18 -0
  56. powermem/integrations/llm/anthropic.py +87 -0
  57. powermem/integrations/llm/base.py +132 -0
  58. powermem/integrations/llm/config/anthropic.py +56 -0
  59. powermem/integrations/llm/config/azure.py +56 -0
  60. powermem/integrations/llm/config/base.py +62 -0
  61. powermem/integrations/llm/config/deepseek.py +56 -0
  62. powermem/integrations/llm/config/ollama.py +56 -0
  63. powermem/integrations/llm/config/openai.py +79 -0
  64. powermem/integrations/llm/config/qwen.py +68 -0
  65. powermem/integrations/llm/config/qwen_asr.py +46 -0
  66. powermem/integrations/llm/config/vllm.py +56 -0
  67. powermem/integrations/llm/configs.py +26 -0
  68. powermem/integrations/llm/deepseek.py +106 -0
  69. powermem/integrations/llm/factory.py +118 -0
  70. powermem/integrations/llm/gemini.py +201 -0
  71. powermem/integrations/llm/langchain.py +65 -0
  72. powermem/integrations/llm/ollama.py +106 -0
  73. powermem/integrations/llm/openai.py +166 -0
  74. powermem/integrations/llm/openai_structured.py +80 -0
  75. powermem/integrations/llm/qwen.py +207 -0
  76. powermem/integrations/llm/qwen_asr.py +171 -0
  77. powermem/integrations/llm/vllm.py +106 -0
  78. powermem/integrations/rerank/__init__.py +20 -0
  79. powermem/integrations/rerank/base.py +43 -0
  80. powermem/integrations/rerank/config/__init__.py +7 -0
  81. powermem/integrations/rerank/config/base.py +27 -0
  82. powermem/integrations/rerank/configs.py +23 -0
  83. powermem/integrations/rerank/factory.py +68 -0
  84. powermem/integrations/rerank/qwen.py +159 -0
  85. powermem/intelligence/__init__.py +17 -0
  86. powermem/intelligence/ebbinghaus_algorithm.py +354 -0
  87. powermem/intelligence/importance_evaluator.py +361 -0
  88. powermem/intelligence/intelligent_memory_manager.py +284 -0
  89. powermem/intelligence/manager.py +148 -0
  90. powermem/intelligence/plugin.py +229 -0
  91. powermem/prompts/__init__.py +29 -0
  92. powermem/prompts/graph/graph_prompts.py +217 -0
  93. powermem/prompts/graph/graph_tools_prompts.py +469 -0
  94. powermem/prompts/importance_evaluation.py +246 -0
  95. powermem/prompts/intelligent_memory_prompts.py +163 -0
  96. powermem/prompts/templates.py +193 -0
  97. powermem/storage/__init__.py +14 -0
  98. powermem/storage/adapter.py +896 -0
  99. powermem/storage/base.py +109 -0
  100. powermem/storage/config/base.py +13 -0
  101. powermem/storage/config/oceanbase.py +58 -0
  102. powermem/storage/config/pgvector.py +52 -0
  103. powermem/storage/config/sqlite.py +27 -0
  104. powermem/storage/configs.py +159 -0
  105. powermem/storage/factory.py +59 -0
  106. powermem/storage/migration_manager.py +438 -0
  107. powermem/storage/oceanbase/__init__.py +8 -0
  108. powermem/storage/oceanbase/constants.py +162 -0
  109. powermem/storage/oceanbase/oceanbase.py +1384 -0
  110. powermem/storage/oceanbase/oceanbase_graph.py +1441 -0
  111. powermem/storage/pgvector/__init__.py +7 -0
  112. powermem/storage/pgvector/pgvector.py +420 -0
  113. powermem/storage/sqlite/__init__.py +0 -0
  114. powermem/storage/sqlite/sqlite.py +218 -0
  115. powermem/storage/sqlite/sqlite_vector_store.py +311 -0
  116. powermem/utils/__init__.py +35 -0
  117. powermem/utils/utils.py +605 -0
  118. powermem/version.py +23 -0
  119. powermem-0.1.0.dist-info/METADATA +187 -0
  120. powermem-0.1.0.dist-info/RECORD +123 -0
  121. powermem-0.1.0.dist-info/WHEEL +5 -0
  122. powermem-0.1.0.dist-info/licenses/LICENSE +206 -0
  123. powermem-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,53 @@
1
+ from enum import Enum
2
+
3
+
4
+ class MemoryType(Enum):
5
+ SEMANTIC = "semantic_memory"
6
+ EPISODIC = "episodic_memory"
7
+ PROCEDURAL = "procedural_memory"
8
+ WORKING = "working_memory"
9
+ SHORT_TERM = "short_term_memory"
10
+ LONG_TERM = "long_term_memory"
11
+ PUBLIC_SHARED = "public_shared_memory"
12
+ PRIVATE_AGENT = "private_agent_memory"
13
+ COLLABORATIVE = "collaborative_memory"
14
+ GROUP_CONSENSUS = "group_consensus_memory"
15
+
16
+
17
+ class MemoryScope(Enum):
18
+ PRIVATE = "private"
19
+ AGENT_GROUP = "agent_group"
20
+ USER_GROUP = "user_group"
21
+ PUBLIC = "public"
22
+ RESTRICTED = "restricted"
23
+
24
+
25
+ class AccessPermission(Enum):
26
+ READ = "read"
27
+ WRITE = "write"
28
+ DELETE = "delete"
29
+ ADMIN = "admin"
30
+
31
+
32
+ class PrivacyLevel(Enum):
33
+ STANDARD = "standard"
34
+ SENSITIVE = "sensitive"
35
+ CONFIDENTIAL = "confidential"
36
+
37
+
38
+ class CollaborationType(Enum):
39
+ SYNCHRONOUS = "synchronous"
40
+ ASYNCHRONOUS = "asynchronous"
41
+
42
+
43
+ class CollaborationStatus(Enum):
44
+ ACTIVE = "active"
45
+ INACTIVE = "inactive"
46
+ PENDING = "pending"
47
+
48
+
49
+ class CollaborationLevel(Enum):
50
+ ISOLATED = "isolated"
51
+ COLLABORATIVE = "collaborative"
52
+
53
+
@@ -0,0 +1,14 @@
1
+ """
2
+ Wrapper classes for agent memory management system.
3
+
4
+ This module provides wrapper classes that provide unified interfaces
5
+ and compatibility layers for the agent memory management system.
6
+ """
7
+
8
+ from .agent_memory_wrapper import AgentMemoryWrapper
9
+ from .compatibility_wrapper import CompatibilityWrapper
10
+
11
+ __all__ = [
12
+ "AgentMemoryWrapper",
13
+ "CompatibilityWrapper"
14
+ ]
@@ -0,0 +1,427 @@
1
+ """
2
+ Agent Memory Wrapper
3
+
4
+ Provides a unified interface for the new agent memory system,
5
+ abstracting away the complexity of different memory managers.
6
+ """
7
+
8
+ import logging
9
+ from typing import Any, Dict, List, Optional
10
+ from datetime import datetime
11
+
12
+ from typing import Any, Dict
13
+ from powermem.agent.abstract.manager import AgentMemoryManagerBase
14
+ from powermem.agent.factories.memory_factory import MemoryFactory
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+
19
+ class AgentMemoryWrapper:
20
+ """
21
+ Agent memory wrapper that provides a unified interface for the new agent memory system.
22
+
23
+ This wrapper abstracts away the complexity of different memory managers and provides
24
+ a consistent interface for all agent memory operations.
25
+ """
26
+
27
+ def __init__(self, config: Dict[str, Any]):
28
+ """
29
+ Initialize the agent memory wrapper.
30
+
31
+ Args:
32
+ config: Memory configuration object
33
+ """
34
+ self.config = config
35
+ self.agent_memory_manager: Optional[AgentMemoryManagerBase] = None
36
+ self.initialized = False
37
+
38
+ def initialize(self) -> None:
39
+ """
40
+ Initialize the agent memory wrapper.
41
+ """
42
+ try:
43
+ if not hasattr(self.config, 'agent_memory') or not self.config.agent_memory.enabled:
44
+ logger.info("Agent memory management is not enabled")
45
+ return
46
+
47
+ # Create memory manager using factory
48
+ self.agent_memory_manager = MemoryFactory.create_from_config(self.config)
49
+ self.initialized = True
50
+
51
+ logger.info(f"Agent memory wrapper initialized with {self.config.agent_memory.mode} mode")
52
+
53
+ except Exception as e:
54
+ logger.error(f"Failed to initialize agent memory wrapper: {e}")
55
+ self.agent_memory_manager = None
56
+ self.initialized = False
57
+
58
+ def is_enabled(self) -> bool:
59
+ """
60
+ Check if agent memory management is enabled.
61
+
62
+ Returns:
63
+ True if enabled, False otherwise
64
+ """
65
+ return (
66
+ hasattr(self.config, 'agent_memory') and
67
+ self.config.agent_memory.enabled and
68
+ self.agent_memory_manager is not None
69
+ )
70
+
71
+ def add_memory(
72
+ self,
73
+ content: str,
74
+ agent_id: str,
75
+ context: Optional[Dict[str, Any]] = None,
76
+ metadata: Optional[Dict[str, Any]] = None
77
+ ) -> Dict[str, Any]:
78
+ """
79
+ Add a new memory.
80
+
81
+ Args:
82
+ content: Memory content
83
+ agent_id: ID of the agent/user
84
+ context: Optional context information
85
+ metadata: Optional metadata
86
+
87
+ Returns:
88
+ Dictionary containing the result
89
+ """
90
+ if not self.is_enabled():
91
+ return {"error": "Agent memory management is not enabled"}
92
+
93
+ try:
94
+ return self.agent_memory_manager.process_memory(
95
+ content=content,
96
+ agent_id=agent_id,
97
+ context=context,
98
+ metadata=metadata
99
+ )
100
+ except Exception as e:
101
+ logger.error(f"Failed to add memory: {e}")
102
+ return {"error": str(e)}
103
+
104
+ def get_memories(
105
+ self,
106
+ agent_id: str,
107
+ query: Optional[str] = None,
108
+ filters: Optional[Dict[str, Any]] = None
109
+ ) -> List[Dict[str, Any]]:
110
+ """
111
+ Get memories for an agent/user.
112
+
113
+ Args:
114
+ agent_id: ID of the agent/user
115
+ query: Optional query string
116
+ filters: Optional filters
117
+
118
+ Returns:
119
+ List of memory dictionaries
120
+ """
121
+ if not self.is_enabled():
122
+ return []
123
+
124
+ try:
125
+ return self.agent_memory_manager.get_memories(
126
+ agent_id=agent_id,
127
+ query=query,
128
+ filters=filters
129
+ )
130
+ except Exception as e:
131
+ logger.error(f"Failed to get memories: {e}")
132
+ return []
133
+
134
+ def update_memory(
135
+ self,
136
+ memory_id: str,
137
+ agent_id: str,
138
+ updates: Dict[str, Any]
139
+ ) -> Dict[str, Any]:
140
+ """
141
+ Update a memory.
142
+
143
+ Args:
144
+ memory_id: ID of the memory
145
+ agent_id: ID of the agent/user
146
+ updates: Updates to apply
147
+
148
+ Returns:
149
+ Dictionary containing the result
150
+ """
151
+ if not self.is_enabled():
152
+ return {"error": "Agent memory management is not enabled"}
153
+
154
+ try:
155
+ return self.agent_memory_manager.update_memory(
156
+ memory_id=memory_id,
157
+ agent_id=agent_id,
158
+ updates=updates
159
+ )
160
+ except Exception as e:
161
+ logger.error(f"Failed to update memory: {e}")
162
+ return {"error": str(e)}
163
+
164
+ def delete_memory(
165
+ self,
166
+ memory_id: str,
167
+ agent_id: str
168
+ ) -> Dict[str, Any]:
169
+ """
170
+ Delete a memory.
171
+
172
+ Args:
173
+ memory_id: ID of the memory
174
+ agent_id: ID of the agent/user
175
+
176
+ Returns:
177
+ Dictionary containing the result
178
+ """
179
+ if not self.is_enabled():
180
+ return {"error": "Agent memory management is not enabled"}
181
+
182
+ try:
183
+ return self.agent_memory_manager.delete_memory(
184
+ memory_id=memory_id,
185
+ agent_id=agent_id
186
+ )
187
+ except Exception as e:
188
+ logger.error(f"Failed to delete memory: {e}")
189
+ return {"error": str(e)}
190
+
191
+ def share_memory(
192
+ self,
193
+ memory_id: str,
194
+ from_agent: str,
195
+ to_agents: List[str],
196
+ permissions: Optional[List[str]] = None
197
+ ) -> Dict[str, Any]:
198
+ """
199
+ Share a memory with other agents/users.
200
+
201
+ Args:
202
+ memory_id: ID of the memory
203
+ from_agent: ID of the agent/user sharing
204
+ to_agents: List of agent/user IDs to share with
205
+ permissions: Optional permissions
206
+
207
+ Returns:
208
+ Dictionary containing the result
209
+ """
210
+ if not self.is_enabled():
211
+ return {"error": "Agent memory management is not enabled"}
212
+
213
+ try:
214
+ return self.agent_memory_manager.share_memory(
215
+ memory_id=memory_id,
216
+ from_agent=from_agent,
217
+ to_agents=to_agents,
218
+ permissions=permissions
219
+ )
220
+ except Exception as e:
221
+ logger.error(f"Failed to share memory: {e}")
222
+ return {"error": str(e)}
223
+
224
+ def get_context_info(self, agent_id: str) -> Dict[str, Any]:
225
+ """
226
+ Get context information for an agent/user.
227
+
228
+ Args:
229
+ agent_id: ID of the agent/user
230
+
231
+ Returns:
232
+ Dictionary containing context information
233
+ """
234
+ if not self.is_enabled():
235
+ return {"error": "Agent memory management is not enabled"}
236
+
237
+ try:
238
+ return self.agent_memory_manager.get_context_info(agent_id=agent_id)
239
+ except Exception as e:
240
+ logger.error(f"Failed to get context info: {e}")
241
+ return {"error": str(e)}
242
+
243
+ def update_memory_decay(self) -> Dict[str, Any]:
244
+ """
245
+ Update memory decay.
246
+
247
+ Returns:
248
+ Dictionary containing the result
249
+ """
250
+ if not self.is_enabled():
251
+ return {"error": "Agent memory management is not enabled"}
252
+
253
+ try:
254
+ return self.agent_memory_manager.update_memory_decay()
255
+ except Exception as e:
256
+ logger.error(f"Failed to update memory decay: {e}")
257
+ return {"error": str(e)}
258
+
259
+ def cleanup_forgotten_memories(self) -> Dict[str, Any]:
260
+ """
261
+ Clean up forgotten memories.
262
+
263
+ Returns:
264
+ Dictionary containing the result
265
+ """
266
+ if not self.is_enabled():
267
+ return {"error": "Agent memory management is not enabled"}
268
+
269
+ try:
270
+ return self.agent_memory_manager.cleanup_forgotten_memories()
271
+ except Exception as e:
272
+ logger.error(f"Failed to cleanup forgotten memories: {e}")
273
+ return {"error": str(e)}
274
+
275
+ def get_memory_statistics(self) -> Dict[str, Any]:
276
+ """
277
+ Get memory statistics.
278
+
279
+ Returns:
280
+ Dictionary containing memory statistics
281
+ """
282
+ if not self.is_enabled():
283
+ return {"error": "Agent memory management is not enabled"}
284
+
285
+ try:
286
+ return self.agent_memory_manager.get_memory_statistics()
287
+ except Exception as e:
288
+ logger.error(f"Failed to get memory statistics: {e}")
289
+ return {"error": str(e)}
290
+
291
+ def check_permission(
292
+ self,
293
+ agent_id: str,
294
+ memory_id: str,
295
+ permission: str
296
+ ) -> bool:
297
+ """
298
+ Check if an agent/user has a specific permission.
299
+
300
+ Args:
301
+ agent_id: ID of the agent/user
302
+ memory_id: ID of the memory
303
+ permission: Permission to check
304
+
305
+ Returns:
306
+ True if the agent/user has the permission, False otherwise
307
+ """
308
+ if not self.is_enabled():
309
+ return False
310
+
311
+ try:
312
+ return self.agent_memory_manager.check_permission(
313
+ agent_id=agent_id,
314
+ memory_id=memory_id,
315
+ permission=permission
316
+ )
317
+ except Exception as e:
318
+ logger.error(f"Failed to check permission: {e}")
319
+ return False
320
+
321
+ def get_manager_info(self) -> Dict[str, Any]:
322
+ """
323
+ Get information about the current memory manager.
324
+
325
+ Returns:
326
+ Dictionary containing manager information
327
+ """
328
+ if not self.is_enabled():
329
+ return {
330
+ "enabled": False,
331
+ "manager_type": None,
332
+ "mode": None,
333
+ }
334
+
335
+ return {
336
+ "enabled": True,
337
+ "manager_type": self.agent_memory_manager.get_manager_type(),
338
+ "mode": self.config.agent_memory.mode,
339
+ "initialized": self.agent_memory_manager.is_initialized(),
340
+ }
341
+
342
+ def switch_mode(self, new_mode: str) -> Dict[str, Any]:
343
+ """
344
+ Switch to a new memory management mode.
345
+
346
+ Args:
347
+ new_mode: New mode to switch to
348
+
349
+ Returns:
350
+ Dictionary containing the result
351
+ """
352
+ if not hasattr(self.config, 'agent_memory'):
353
+ return {"error": "Agent memory configuration not found"}
354
+
355
+ try:
356
+ # Update configuration
357
+ self.config.agent_memory.mode = new_mode
358
+
359
+ # Recreate memory manager
360
+ self.agent_memory_manager = MemoryFactory.create_from_config(self.config)
361
+
362
+ logger.info(f"Switched agent memory mode to {new_mode}")
363
+
364
+ return {
365
+ "success": True,
366
+ "new_mode": new_mode,
367
+ "manager_type": self.agent_memory_manager.get_manager_type(),
368
+ "timestamp": datetime.now().isoformat(),
369
+ }
370
+
371
+ except Exception as e:
372
+ logger.error(f"Failed to switch mode: {e}")
373
+ return {"error": str(e)}
374
+
375
+ def get_available_modes(self) -> List[str]:
376
+ """
377
+ Get list of available memory management modes.
378
+
379
+ Returns:
380
+ List of available modes
381
+ """
382
+ return ["multi_agent", "multi_user", "hybrid"]
383
+
384
+ def validate_configuration(self) -> Dict[str, Any]:
385
+ """
386
+ Validate the current configuration.
387
+
388
+ Returns:
389
+ Dictionary containing validation results
390
+ """
391
+ try:
392
+ if not hasattr(self.config, 'agent_memory'):
393
+ return {
394
+ "valid": False,
395
+ "error": "Agent memory configuration not found",
396
+ }
397
+
398
+ agent_config = self.config.agent_memory
399
+
400
+ # Check mode validity
401
+ valid_modes = ["multi_agent", "multi_user", "hybrid"]
402
+ if agent_config.mode not in valid_modes:
403
+ return {
404
+ "valid": False,
405
+ "error": f"Invalid mode: {agent_config.mode}",
406
+ }
407
+
408
+ # Check if manager can be created
409
+ try:
410
+ test_manager = MemoryFactory.create_from_config(self.config)
411
+ return {
412
+ "valid": True,
413
+ "mode": agent_config.mode,
414
+ "enabled": agent_config.enabled,
415
+ "manager_type": test_manager.get_manager_type(),
416
+ }
417
+ except Exception as e:
418
+ return {
419
+ "valid": False,
420
+ "error": f"Failed to create manager: {str(e)}",
421
+ }
422
+
423
+ except Exception as e:
424
+ return {
425
+ "valid": False,
426
+ "error": str(e),
427
+ }