Fix vector search parameter ordering for pgvector

%s placeholders in SQL are positional — SELECT score param must come
before WHERE conditions in the params list, not after.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-07 06:41:30 +02:00
parent 82d7bc375f
commit 586c2c4484
+9 -3
View File
@@ -442,17 +442,23 @@ def search(
vec_params2.append(min_importance)
vec_where = " AND ".join(vec_conditions)
qv = np.array(query_emb)
# Pořadí %s musí odpovídat pořadí v SQL:
# 1. WHERE podmínky (vec_params2)
# 2. SELECT score: embedding <=> %s
# 3. ORDER BY: embedding <=> %s
# 4. LIMIT %s
vec_rows = conn.execute(
f"""
SELECT id, mem_type, title, content, summary, tags,
project, source, session_id, importance, created_at,
1 - (embedding <=> %s::vector) AS score
1 - (embedding <=> %s) AS score
FROM kb_memories
WHERE {vec_where}
ORDER BY embedding <=> %s::vector
ORDER BY embedding <=> %s
LIMIT %s
""",
[np.array(query_emb), np.array(query_emb)] + vec_params2 + [limit],
[qv] + vec_params2 + [qv, limit],
).fetchall()
for r in vec_rows: