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.
- powermem/__init__.py +103 -0
- powermem/agent/__init__.py +35 -0
- powermem/agent/abstract/__init__.py +22 -0
- powermem/agent/abstract/collaboration.py +259 -0
- powermem/agent/abstract/context.py +187 -0
- powermem/agent/abstract/manager.py +232 -0
- powermem/agent/abstract/permission.py +217 -0
- powermem/agent/abstract/privacy.py +267 -0
- powermem/agent/abstract/scope.py +199 -0
- powermem/agent/agent.py +791 -0
- powermem/agent/components/__init__.py +18 -0
- powermem/agent/components/collaboration_coordinator.py +645 -0
- powermem/agent/components/permission_controller.py +586 -0
- powermem/agent/components/privacy_protector.py +767 -0
- powermem/agent/components/scope_controller.py +685 -0
- powermem/agent/factories/__init__.py +16 -0
- powermem/agent/factories/agent_factory.py +266 -0
- powermem/agent/factories/config_factory.py +308 -0
- powermem/agent/factories/memory_factory.py +229 -0
- powermem/agent/implementations/__init__.py +16 -0
- powermem/agent/implementations/hybrid.py +728 -0
- powermem/agent/implementations/multi_agent.py +1040 -0
- powermem/agent/implementations/multi_user.py +1020 -0
- powermem/agent/types.py +53 -0
- powermem/agent/wrappers/__init__.py +14 -0
- powermem/agent/wrappers/agent_memory_wrapper.py +427 -0
- powermem/agent/wrappers/compatibility_wrapper.py +520 -0
- powermem/config_loader.py +318 -0
- powermem/configs.py +249 -0
- powermem/core/__init__.py +19 -0
- powermem/core/async_memory.py +1493 -0
- powermem/core/audit.py +258 -0
- powermem/core/base.py +165 -0
- powermem/core/memory.py +1567 -0
- powermem/core/setup.py +162 -0
- powermem/core/telemetry.py +215 -0
- powermem/integrations/__init__.py +17 -0
- powermem/integrations/embeddings/__init__.py +13 -0
- powermem/integrations/embeddings/aws_bedrock.py +100 -0
- powermem/integrations/embeddings/azure_openai.py +55 -0
- powermem/integrations/embeddings/base.py +31 -0
- powermem/integrations/embeddings/config/base.py +132 -0
- powermem/integrations/embeddings/configs.py +31 -0
- powermem/integrations/embeddings/factory.py +48 -0
- powermem/integrations/embeddings/gemini.py +39 -0
- powermem/integrations/embeddings/huggingface.py +41 -0
- powermem/integrations/embeddings/langchain.py +35 -0
- powermem/integrations/embeddings/lmstudio.py +29 -0
- powermem/integrations/embeddings/mock.py +11 -0
- powermem/integrations/embeddings/ollama.py +53 -0
- powermem/integrations/embeddings/openai.py +49 -0
- powermem/integrations/embeddings/qwen.py +102 -0
- powermem/integrations/embeddings/together.py +31 -0
- powermem/integrations/embeddings/vertexai.py +54 -0
- powermem/integrations/llm/__init__.py +18 -0
- powermem/integrations/llm/anthropic.py +87 -0
- powermem/integrations/llm/base.py +132 -0
- powermem/integrations/llm/config/anthropic.py +56 -0
- powermem/integrations/llm/config/azure.py +56 -0
- powermem/integrations/llm/config/base.py +62 -0
- powermem/integrations/llm/config/deepseek.py +56 -0
- powermem/integrations/llm/config/ollama.py +56 -0
- powermem/integrations/llm/config/openai.py +79 -0
- powermem/integrations/llm/config/qwen.py +68 -0
- powermem/integrations/llm/config/qwen_asr.py +46 -0
- powermem/integrations/llm/config/vllm.py +56 -0
- powermem/integrations/llm/configs.py +26 -0
- powermem/integrations/llm/deepseek.py +106 -0
- powermem/integrations/llm/factory.py +118 -0
- powermem/integrations/llm/gemini.py +201 -0
- powermem/integrations/llm/langchain.py +65 -0
- powermem/integrations/llm/ollama.py +106 -0
- powermem/integrations/llm/openai.py +166 -0
- powermem/integrations/llm/openai_structured.py +80 -0
- powermem/integrations/llm/qwen.py +207 -0
- powermem/integrations/llm/qwen_asr.py +171 -0
- powermem/integrations/llm/vllm.py +106 -0
- powermem/integrations/rerank/__init__.py +20 -0
- powermem/integrations/rerank/base.py +43 -0
- powermem/integrations/rerank/config/__init__.py +7 -0
- powermem/integrations/rerank/config/base.py +27 -0
- powermem/integrations/rerank/configs.py +23 -0
- powermem/integrations/rerank/factory.py +68 -0
- powermem/integrations/rerank/qwen.py +159 -0
- powermem/intelligence/__init__.py +17 -0
- powermem/intelligence/ebbinghaus_algorithm.py +354 -0
- powermem/intelligence/importance_evaluator.py +361 -0
- powermem/intelligence/intelligent_memory_manager.py +284 -0
- powermem/intelligence/manager.py +148 -0
- powermem/intelligence/plugin.py +229 -0
- powermem/prompts/__init__.py +29 -0
- powermem/prompts/graph/graph_prompts.py +217 -0
- powermem/prompts/graph/graph_tools_prompts.py +469 -0
- powermem/prompts/importance_evaluation.py +246 -0
- powermem/prompts/intelligent_memory_prompts.py +163 -0
- powermem/prompts/templates.py +193 -0
- powermem/storage/__init__.py +14 -0
- powermem/storage/adapter.py +896 -0
- powermem/storage/base.py +109 -0
- powermem/storage/config/base.py +13 -0
- powermem/storage/config/oceanbase.py +58 -0
- powermem/storage/config/pgvector.py +52 -0
- powermem/storage/config/sqlite.py +27 -0
- powermem/storage/configs.py +159 -0
- powermem/storage/factory.py +59 -0
- powermem/storage/migration_manager.py +438 -0
- powermem/storage/oceanbase/__init__.py +8 -0
- powermem/storage/oceanbase/constants.py +162 -0
- powermem/storage/oceanbase/oceanbase.py +1384 -0
- powermem/storage/oceanbase/oceanbase_graph.py +1441 -0
- powermem/storage/pgvector/__init__.py +7 -0
- powermem/storage/pgvector/pgvector.py +420 -0
- powermem/storage/sqlite/__init__.py +0 -0
- powermem/storage/sqlite/sqlite.py +218 -0
- powermem/storage/sqlite/sqlite_vector_store.py +311 -0
- powermem/utils/__init__.py +35 -0
- powermem/utils/utils.py +605 -0
- powermem/version.py +23 -0
- powermem-0.1.0.dist-info/METADATA +187 -0
- powermem-0.1.0.dist-info/RECORD +123 -0
- powermem-0.1.0.dist-info/WHEEL +5 -0
- powermem-0.1.0.dist-info/licenses/LICENSE +206 -0
- powermem-0.1.0.dist-info/top_level.txt +1 -0
powermem/agent/types.py
ADDED
|
@@ -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
|
+
}
|