hyongok2's picture
Upload 10 files
017e961 verified
Raw
History Blame Contribute Delete
1.22 kB
from typing import Any, Dict, List, Optional
from qdrant_client import QdrantClient
from qdrant_client.models import Filter, ScoredPoint # pydantic models
from .models import QdrantCfg
def _to_filter(maybe: Optional[Dict[str, Any]]) -> Optional[Filter]:
if not maybe:
return None
# dict ๊ตฌ์กฐ๊ฐ€ Qdrant Filter ์Šคํ‚ค๋งˆ์™€ ํ˜ธํ™˜๋œ๋‹ค๋Š” ๊ฐ€์ •
# (์˜ˆ: {"must": [{"key": "source", "match": {"value": "file.pdf"}}]})
return Filter(**maybe)
def get_client(url: str) -> QdrantClient:
return QdrantClient(url=url)
def ensure_collection(client: QdrantClient, name: str) -> None:
# ์กด์žฌ ํ™•์ธ (์—†์œผ๋ฉด ์˜ˆ์™ธ)
client.get_collection(name)
def query_points(cfg: QdrantCfg, vector: List[float], limit: int, with_payload: bool) -> List[ScoredPoint]:
client = get_client(cfg.url)
ensure_collection(client, cfg.collection)
qf = _to_filter(cfg.query_filter)
res = client.query_points(
collection_name=cfg.collection,
query=vector,
limit=limit,
query_filter=qf,
with_payload=with_payload
)
# Python client๋Š” QueryResponse(points=[...]) ํ˜•ํƒœ๋ฅผ ๋ฐ˜ํ™˜
return list(res.points or [])