Initial commit: Pegas Memory (PG + Qdrant + Memgraph, MCP server, 14 tools)

This commit is contained in:
n1kt4r committed 2026-10-15 13:40:06 +05:00
commit 83e77ea8c9
24 files changed
+2201

No files matched your search

+34
View File
@@ -0,0 +1,34 @@
"""Семантическая дедупликация атомов по эмбеддингам.
Наивный дедуп по content_hash ловит только точные повторы. LLM генерирует
вариации одного факта — их ловим по косинусной близости эмбеддингов в Qdrant.
"""
from __future__ import annotations
from . import config
DEFAULT_THRESHOLD = float(getattr(config, "DEDUP_THRESHOLD", "0.90"))
def find_duplicate(text: str, threshold: float = DEFAULT_THRESHOLD, top_k: int = 3) -> int | None:
"""Найти существующий атом, близкий к text (косинус > threshold).
Возвращает atom_id дубликата или None.
"""
from . import qdrant_store
hits = qdrant_store.search(text, top_k=top_k)
if not hits:
return None
best = hits[0]
if best["score"] >= threshold:
return int(best["id"])
return None
def duplicate_score(text: str, top_k: int = 3) -> tuple[int | None, float]:
"""Вернуть (atom_id, score) лучшего совпадения (id=None если ниже порога)."""
from . import qdrant_store
hits = qdrant_store.search(text, top_k=top_k)
if not hits:
return None, 0.0
best = hits[0]
return int(best["id"]), best["score"]