feat: Deduplicate and optimize memory similarity threshold (#389)
Co-authored-by: Rafael Uzarowski <uzarowski.rafael@proton.me>
ehl0wr0ld committed
May 19, 2025 at 14:40 UTC
6eeb706cb1fbd7f5c2b3510659e8938f1fb17eb1
5 files changed
+14
-11
python/tools/knowledge_tool.py
+4
-1
@@ -5,8 +5,11 @@ from python.helpers.tool import Tool, Response
5
from python.helpers.print_style import PrintStyle
6
from python.helpers.errors import handle_error
7
from python.helpers.searxng import search as searxng
8
+from python.tools.memory_load import DEFAULT_THRESHOLD as DEFAULT_MEMORY_THRESHOLD
9
10
SEARCH_ENGINE_RESULTS = 10
11
+
12
+
13
class Knowledge(Tool):
14
async def execute(self, question="", **kwargs):
15
# Create tasks for all three search methods
@@ -66,7 +69,7 @@ class Knowledge(Tool):
69
async def mem_search(self, question: str):
70
db = await memory.Memory.get(self.agent)
71
docs = await db.search_similarity_threshold(
69
- query=question, limit=5, threshold=0.5
72
+ query=question, limit=5, threshold=DEFAULT_MEMORY_THRESHOLD
73
)
74
text = memory.Memory.format_docs_plain(docs)
75
return "\n\n".join(text)
python/tools/memory_delete.py
+4
-3
@@ -1,12 +1,13 @@
1
from python.helpers.memory import Memory
2
from python.helpers.tool import Tool, Response
3
4
-class MemoryForget(Tool):
4
+
5
+class MemoryDelete(Tool):
6
7
async def execute(self, ids="", **kwargs):
8
db = await Memory.get(self.agent)
9
ids = [id.strip() for id in ids.split(",") if id.strip()]
10
dels = await db.delete_documents_by_ids(ids=ids)
11
11
- result = self.agent.read_prompt("fw.memories_deleted.md", memory_count=len(dels))
12
- return Response(message=result, break_loop=False)
\ No newline at end of file
12
+ result = self.agent.read_prompt("fw.memories_deleted.md", memory_count=len(dels))
13
+ return Response(message=result, break_loop=False)
python/tools/memory_forget.py
+3
-3
@@ -1,7 +1,7 @@
1
from python.helpers.memory import Memory
2
from python.helpers.tool import Tool, Response
3
+from python.tools.memory_load import DEFAULT_THRESHOLD
4
4
-DEFAULT_THRESHOLD = 0.75
5
6
class MemoryForget(Tool):
7
@@ -9,5 +9,5 @@ class MemoryForget(Tool):
9
db = await Memory.get(self.agent)
10
dels = await db.delete_documents_by_query(query=query, threshold=threshold, filter=filter)
11
12
- result = self.agent.read_prompt("fw.memories_deleted.md", memory_count=len(dels))
13
- return Response(message=result, break_loop=False)
\ No newline at end of file
12
+ result = self.agent.read_prompt("fw.memories_deleted.md", memory_count=len(dels))
13
+ return Response(message=result, break_loop=False)
python/tools/memory_load.py
+3
-2
@@ -1,9 +1,10 @@
1
from python.helpers.memory import Memory
2
from python.helpers.tool import Tool, Response
3
4
-DEFAULT_THRESHOLD = 0.6
4
+DEFAULT_THRESHOLD = 0.7
5
DEFAULT_LIMIT = 10
6
7
+
8
class MemoryLoad(Tool):
9
10
async def execute(self, query="", threshold=DEFAULT_THRESHOLD, limit=DEFAULT_LIMIT, filter="", **kwargs):
@@ -16,4 +17,4 @@ class MemoryLoad(Tool):
17
text = "\n\n".join(Memory.format_docs_plain(docs))
18
result = str(text)
19
19
- return Response(message=result, break_loop=False)
\ No newline at end of file
20
+ return Response(message=result, break_loop=False)
python/tools/memory_save.py
-2
@@ -1,8 +1,6 @@
1
from python.helpers.memory import Memory
2
from python.helpers.tool import Tool, Response
3
4
-DEFAULT_THRESHOLD = 0.5
5
-DEFAULT_LIMIT = 5
4
5
class MemorySave(Tool):
6