Skip to content

Commit 6d60068

Browse files
Fix memory search extraction and retrieve fallbacks (#1318)
1 parent 5fa2a7f commit 6d60068

File tree

14 files changed

+1669
-328
lines changed

14 files changed

+1669
-328
lines changed

src/praisonai-agents/praisonaiagents/agent/agent.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4025,17 +4025,28 @@ def _get_knowledge_context(self, query: str, use_rag: bool = False) -> tuple:
40254025
return "", None
40264026

40274027
# Normalize results format (filter out None values, handle None metadata)
4028-
if isinstance(search_results, dict) and 'results' in search_results:
4028+
# Normalize results format (filter out None values, handle None metadata)
4029+
if hasattr(search_results, "results") and isinstance(getattr(search_results, "results"), list):
4030+
search_results = getattr(search_results, "results")
4031+
elif isinstance(search_results, dict) and 'results' in search_results:
4032+
search_results = search_results['results']
4033+
4034+
if isinstance(search_results, list):
40294035
results = []
4030-
for r in search_results['results']:
4036+
for r in search_results:
40314037
if r is None:
40324038
continue
4033-
text = r.get('memory', '') or ''
4034-
metadata = r.get('metadata') or {} # Handle None metadata
4039+
if isinstance(r, dict):
4040+
text = r.get('memory', '') or r.get('text', '') or ''
4041+
metadata = r.get('metadata') or {}
4042+
else:
4043+
text = getattr(r, 'text', None) or getattr(r, 'memory', None) or ''
4044+
metadata = getattr(r, 'metadata', None)
4045+
if metadata is None:
4046+
metadata = {}
4047+
40354048
if text:
4036-
results.append({"text": text, "metadata": metadata})
4037-
elif isinstance(search_results, list):
4038-
results = [{"text": str(r), "metadata": {}} for r in search_results if r is not None and str(r)]
4049+
results.append({"text": str(text), "metadata": metadata})
40394050
else:
40404051
results = [{"text": str(search_results), "metadata": {}}] if search_results else []
40414052

src/praisonai-agents/praisonaiagents/knowledge/adapters/__init__.py

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,42 @@
44
Provides adapter implementations for various knowledge backends.
55
All adapters implement KnowledgeStoreProtocol.
66
7-
Adapters are lazy-loaded to avoid importing heavy dependencies.
7+
Adapters are now registered via the adapter registry to enable
8+
protocol-driven knowledge backend resolution.
89
"""
910

1011
from typing import TYPE_CHECKING
1112

1213
if TYPE_CHECKING:
1314
from .mem0_adapter import Mem0Adapter
1415

15-
# Lazy loading for adapters
16+
# Import registry functions
17+
from .registry import (
18+
register_knowledge_adapter,
19+
register_knowledge_factory,
20+
get_knowledge_adapter,
21+
list_knowledge_adapters,
22+
get_first_available_knowledge_adapter,
23+
has_knowledge_adapter,
24+
)
25+
26+
# Import factory functions for heavy adapters
27+
from .factories import (
28+
create_mem0_knowledge_adapter,
29+
create_mongodb_knowledge_adapter,
30+
create_chroma_knowledge_adapter,
31+
create_sqlite_knowledge_adapter,
32+
)
33+
34+
# Register core adapter factories (lightweight, no heavy dependencies)
35+
register_knowledge_factory("sqlite", create_sqlite_knowledge_adapter)
36+
37+
# Register heavy adapter factories (lazy-loaded via factories)
38+
register_knowledge_factory("mem0", create_mem0_knowledge_adapter)
39+
register_knowledge_factory("mongodb", create_mongodb_knowledge_adapter)
40+
register_knowledge_factory("chroma", create_chroma_knowledge_adapter)
41+
42+
# Lazy loading for adapters (backward compatibility)
1643
_LAZY_IMPORTS = {
1744
"Mem0Adapter": ("praisonaiagents.knowledge.adapters.mem0_adapter", "Mem0Adapter"),
1845
"MongoDBKnowledgeAdapter": ("praisonaiagents.knowledge.adapters.mongodb_adapter", "MongoDBKnowledgeAdapter"),
@@ -31,10 +58,24 @@ def __getattr__(name: str):
3158

3259
def __dir__():
3360
"""List available attributes."""
34-
return list(_LAZY_IMPORTS.keys())
61+
return list(_LAZY_IMPORTS.keys()) + [
62+
"register_knowledge_adapter",
63+
"register_knowledge_factory",
64+
"get_knowledge_adapter",
65+
"list_knowledge_adapters",
66+
"get_first_available_knowledge_adapter",
67+
"has_knowledge_adapter",
68+
]
3569

3670

3771
__all__ = [
3872
"Mem0Adapter",
3973
"MongoDBKnowledgeAdapter",
74+
# Registry functions
75+
"register_knowledge_adapter",
76+
"register_knowledge_factory",
77+
"get_knowledge_adapter",
78+
"list_knowledge_adapters",
79+
"get_first_available_knowledge_adapter",
80+
"has_knowledge_adapter",
4081
]

0 commit comments

Comments
 (0)