From 69bb96c80f265447e7e36a1af9f2939c4c21c256 Mon Sep 17 00:00:00 2001 From: Marcus Virginia Date: Thu, 28 Mar 2024 20:04:27 -0500 Subject: [PATCH] community[patch]: surrealdb handle for empty metadata and allow collection names with complex characters (#17374) - **Description:** Handle for empty metadata and allow collection names with complex characters - **Issue:** #17057 - **Dependencies:** `surrealdb` --------- Co-authored-by: Bagatur <22008038+baskaryan@users.noreply.github.com> --- .../vectorstores/surrealdb.py | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/libs/community/langchain_community/vectorstores/surrealdb.py b/libs/community/langchain_community/vectorstores/surrealdb.py index 34f002305e..7e48ea1e29 100644 --- a/libs/community/langchain_community/vectorstores/surrealdb.py +++ b/libs/community/langchain_community/vectorstores/surrealdb.py @@ -220,26 +220,38 @@ class SurrealDBStore(VectorStore): "k": k, "score_threshold": kwargs.get("score_threshold", 0), } - query = """select id, text, metadata, - vector::similarity::cosine(embedding,{embedding}) as similarity - from {collection} - where vector::similarity::cosine(embedding,{embedding}) >= {score_threshold} - order by similarity desc LIMIT {k} - """.format(**args) - results = await self.sdb.query(query) + query = f""" + select + id, + text, + metadata, + vector::similarity::cosine(embedding, $embedding) as similarity + from ⟨{args["collection"]}⟩ + where vector::similarity::cosine(embedding, $embedding) >= $score_threshold + order by similarity desc LIMIT $k; + """ + results = await self.sdb.query(query, args) if len(results) == 0: return [] + result = results[0] + + if result["status"] != "OK": + from surrealdb.ws import SurrealException + + err = result.get("result", "Unknown Error") + raise SurrealException(err) + return [ ( Document( - page_content=result["text"], - metadata={"id": result["id"], **result["metadata"]}, + page_content=doc["text"], + metadata={"id": doc["id"], **(doc.get("metadata", None) or {})}, ), - result["similarity"], + doc["similarity"], ) - for result in results[0]["result"] + for doc in result["result"] ] async def asimilarity_search_with_relevance_scores(