29 lines
805 B
Python
29 lines
805 B
Python
"""
|
|
brain/search.py — Semantic search over the thought database.
|
|
|
|
Generates an embedding for the query text, then runs pgvector similarity
|
|
search. All logic is thin wrappers over database.py primitives.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
async def semantic_search(
|
|
query: str,
|
|
threshold: float = 0.7,
|
|
limit: int = 10,
|
|
user_id: str | None = None,
|
|
) -> list[dict]:
|
|
"""
|
|
Embed the query and return matching thoughts ranked by similarity.
|
|
Returns an empty list if Brain DB is unavailable.
|
|
"""
|
|
from .embeddings import get_embedding
|
|
from .database import search_thoughts
|
|
|
|
embedding = await get_embedding(query)
|
|
return await search_thoughts(embedding, threshold=threshold, limit=limit, user_id=user_id)
|