mirror of
https://github.com/QuivrHQ/quivr.git
synced 2024-12-15 09:32:22 +03:00
fix: 🐛 search (#2045)
fixed public brains avaiable # Description Please include a summary of the changes and the related issue. Please also include relevant motivation and context. ## Checklist before requesting a review Please delete options that are not relevant. - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my code - [ ] I have commented hard-to-understand areas - [ ] I have ideally added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged ## Screenshots (if appropriate):
This commit is contained in:
parent
127f197e74
commit
6ed4248d35
@ -64,7 +64,7 @@ class BrainfulChat(ChatInterface):
|
|||||||
else:
|
else:
|
||||||
embeddings = OpenAIEmbeddings()
|
embeddings = OpenAIEmbeddings()
|
||||||
vector_store = CustomSupabaseVectorStore(
|
vector_store = CustomSupabaseVectorStore(
|
||||||
supabase_client, embeddings, table_name="vectors"
|
supabase_client, embeddings, table_name="vectors", user_id=user_id
|
||||||
)
|
)
|
||||||
# Get the first question from the chat_question
|
# Get the first question from the chat_question
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ class BrainfulChat(ChatInterface):
|
|||||||
history = chat_service.get_chat_history(chat_id)
|
history = chat_service.get_chat_history(chat_id)
|
||||||
if history:
|
if history:
|
||||||
question = history[0].user_message
|
question = history[0].user_message
|
||||||
list_brains = vector_store.find_brain_closest_query(question)
|
list_brains = vector_store.find_brain_closest_query(user_id, question)
|
||||||
if list_brains:
|
if list_brains:
|
||||||
brain_id_to_use = list_brains[0]["id"]
|
brain_id_to_use = list_brains[0]["id"]
|
||||||
else:
|
else:
|
||||||
|
@ -13,6 +13,7 @@ class CustomSupabaseVectorStore(SupabaseVectorStore):
|
|||||||
"""A custom vector store that uses the match_vectors table instead of the vectors table."""
|
"""A custom vector store that uses the match_vectors table instead of the vectors table."""
|
||||||
|
|
||||||
brain_id: str = "none"
|
brain_id: str = "none"
|
||||||
|
user_id: str = "none"
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
@ -20,12 +21,15 @@ class CustomSupabaseVectorStore(SupabaseVectorStore):
|
|||||||
embedding: Embeddings,
|
embedding: Embeddings,
|
||||||
table_name: str,
|
table_name: str,
|
||||||
brain_id: str = "none",
|
brain_id: str = "none",
|
||||||
|
user_id: str = "none",
|
||||||
):
|
):
|
||||||
super().__init__(client, embedding, table_name)
|
super().__init__(client, embedding, table_name)
|
||||||
self.brain_id = brain_id
|
self.brain_id = brain_id
|
||||||
|
self.user_id = user_id
|
||||||
|
|
||||||
def find_brain_closest_query(
|
def find_brain_closest_query(
|
||||||
self,
|
self,
|
||||||
|
user_id: str,
|
||||||
query: str,
|
query: str,
|
||||||
k: int = 6,
|
k: int = 6,
|
||||||
table: str = "match_brain",
|
table: str = "match_brain",
|
||||||
@ -33,11 +37,14 @@ class CustomSupabaseVectorStore(SupabaseVectorStore):
|
|||||||
) -> [dict]:
|
) -> [dict]:
|
||||||
vectors = self._embedding.embed_documents([query])
|
vectors = self._embedding.embed_documents([query])
|
||||||
query_embedding = vectors[0]
|
query_embedding = vectors[0]
|
||||||
|
logger.info("🤯🤯")
|
||||||
|
|
||||||
res = self._client.rpc(
|
res = self._client.rpc(
|
||||||
table,
|
table,
|
||||||
{
|
{
|
||||||
"query_embedding": query_embedding,
|
"query_embedding": query_embedding,
|
||||||
"match_count": k,
|
"match_count": k,
|
||||||
|
"p_user_id": str(self.user_id),
|
||||||
},
|
},
|
||||||
).execute()
|
).execute()
|
||||||
|
|
||||||
|
34
supabase/migrations/20240121195523_fix-public.sql
Normal file
34
supabase/migrations/20240121195523_fix-public.sql
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
create type "public"."thumbs" as enum ('up', 'down');
|
||||||
|
|
||||||
|
drop function if exists "public"."match_brain"(query_embedding vector, match_count integer);
|
||||||
|
|
||||||
|
alter table "public"."chat_history" add column "user_feedback" thumbs;
|
||||||
|
|
||||||
|
set check_function_bodies = off;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION public.match_brain(query_embedding vector, match_count integer, p_user_id uuid)
|
||||||
|
RETURNS TABLE(id uuid, name text, similarity double precision)
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $function$
|
||||||
|
BEGIN
|
||||||
|
RETURN QUERY
|
||||||
|
SELECT
|
||||||
|
b.brain_id,
|
||||||
|
b.name,
|
||||||
|
1 - (b.meaning <=> query_embedding) as similarity
|
||||||
|
FROM
|
||||||
|
brains b
|
||||||
|
LEFT JOIN
|
||||||
|
brains_users bu ON b.brain_id = bu.brain_id
|
||||||
|
WHERE
|
||||||
|
(b.status = 'public') OR
|
||||||
|
(bu.user_id = p_user_id AND bu.rights IN ('Owner', 'Editor', 'Viewer'))
|
||||||
|
ORDER BY
|
||||||
|
b.meaning <=> query_embedding
|
||||||
|
LIMIT
|
||||||
|
match_count;
|
||||||
|
END;
|
||||||
|
$function$
|
||||||
|
;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user