40 lines
879 B
Python
40 lines
879 B
Python
import hashlib
|
|
from dataclasses import dataclass
|
|
|
|
|
|
def content_hash(content: str) -> str:
|
|
return hashlib.sha256(content.encode()).hexdigest()
|
|
|
|
|
|
@dataclass
|
|
class SyncStats:
|
|
added: int = 0
|
|
updated: int = 0
|
|
deleted: int = 0
|
|
unchanged: int = 0
|
|
|
|
|
|
@dataclass
|
|
class VectorHit:
|
|
id: str
|
|
kind: str
|
|
ref: str
|
|
title: str
|
|
content: str
|
|
metadata: dict
|
|
similarity: float
|
|
|
|
|
|
def hit_from_metadata(similarity: float, metadata: dict | None) -> VectorHit:
|
|
"""Build a transport-neutral hit from the metadata returned by a vector adapter."""
|
|
md = metadata or {}
|
|
return VectorHit(
|
|
id=md.get("record_key", ""),
|
|
kind=md.get("record_kind", md.get("kind", "")),
|
|
ref=md.get("ref", ""),
|
|
title=md.get("title", ""),
|
|
content=md.get("content", ""),
|
|
metadata=md,
|
|
similarity=float(similarity),
|
|
)
|