feat(private): memorie riservate escluse dalle ricerche standard
- gateway: campo private (bool) in MemoryIn; filtro must_not private=true di default in search_filter; include_private in SearchIn per ricerche esplicite; campo private esposto in format_results - estensione: parametro private in qmem_store, include_private in qmem_search (con descrizioni e avvertenze sui prompt dei modelli) - testato su brain: record private invisibile alla ricerca standard, visibile solo con include_private=true; topic esplicito da solo non sblocca - deploy: /opt/memory/gateway ricostruito (container memory-gateway)
This commit is contained in:
+8
-1
@@ -18,7 +18,13 @@ def search_filter(body: SearchIn) -> qm.Filter | None:
|
||||
must.append(qm.FieldCondition(key=key, match=qm.MatchValue(value=value)))
|
||||
if not body.include_superseded:
|
||||
must.append(qm.IsEmptyCondition(is_empty=qm.PayloadField(key="superseded_by")))
|
||||
return qm.Filter(must=must) if must else None
|
||||
must_not: list[Any] = []
|
||||
if not body.include_private:
|
||||
# default: esclude i record riservati (private=true) dalle ricerche standard
|
||||
must_not.append(qm.FieldCondition(key="private", match=qm.MatchValue(value=True)))
|
||||
if must or must_not:
|
||||
return qm.Filter(must=must or None, must_not=must_not or None)
|
||||
return None
|
||||
|
||||
|
||||
def search(qdrant: Any, collection: str, body: SearchIn, vector: list[float], sparse: Any) -> list[Any]:
|
||||
@@ -64,6 +70,7 @@ def format_results(hits: list[Any]) -> list[dict]:
|
||||
"parent_id": h.payload.get("parent_id"),
|
||||
"level": h.payload.get("level"),
|
||||
"topic": h.payload.get("topic"),
|
||||
"private": h.payload.get("private", False),
|
||||
"links": h.payload.get("links"),
|
||||
}
|
||||
for h in hits
|
||||
|
||||
Reference in New Issue
Block a user