Ë
    µŒja@  ã                  ó²   — d dl mZ d dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ erd dlZ G d	„ d
e«      Zy)é    )ÚannotationsN)Úrepeat)	ÚTYPE_CHECKINGÚAnyÚDictÚIterableÚListÚOptionalÚTupleÚTypeÚUnion)ÚDocument)Ú
Embeddings)ÚVectorStore)Úmaximal_marginal_relevancec                  ó*  — e Zd ZdZ	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zedd„«       Z	 	 d	 	 	 	 	 	 	 	 	 dd„Ze	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Z		 	 	 	 	 	 	 	 dd„Z
	 	 d	 	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 	 	 dd	„Z	 	 d	 	 	 	 	 	 	 	 	 dd
„Z	 	 	 	 	 	 dd„Z	 	 	 d 	 	 	 	 	 	 	 	 	 	 	 d!d„Z	 	 d	 	 	 	 	 	 	 	 	 d"d„Ze	 d#	 	 	 	 	 d$d„«       Ze	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d%d„«       Z	 	 	 d&	 	 	 	 	 	 	 	 	 	 	 d'd„Z	 	 	 d&	 	 	 	 	 	 	 	 	 	 	 d(d„Zd#d)d„Zy)*ÚSupabaseVectorStoreaî  `Supabase Postgres` vector store.

    It assumes you have the `pgvector`
    extension installed and a `match_documents` (or similar) function. For more details:
    https://integrations.langchain.com/vectorstores?integration_name=SupabaseVectorStore

    You can implement your own `match_documents` function in order to limit the search
    space to a subset of documents based on your own authorization or business logic.

    Note that the Supabase Python client does not yet support async operations.

    If you'd like to use `max_marginal_relevance_search`, please review the instructions
    below on modifying the `match_documents` function to return matched embeddings.


    Examples:

    .. code-block:: python

        from langchain_community.embeddings.openai import OpenAIEmbeddings
        from langchain_core.documents import Document
        from langchain_community.vectorstores import SupabaseVectorStore
        from supabase.client import create_client

        docs = [
            Document(page_content="foo", metadata={"id": 1}),
        ]
        embeddings = OpenAIEmbeddings()
        supabase_client = create_client("my_supabase_url", "my_supabase_key")
        vector_store = SupabaseVectorStore.from_documents(
            docs,
            embeddings,
            client=supabase_client,
            table_name="documents",
            query_name="match_documents",
            chunk_size=500,
        )

    To load from an existing table:

    .. code-block:: python

        from langchain_community.embeddings.openai import OpenAIEmbeddings
        from langchain_community.vectorstores import SupabaseVectorStore
        from supabase.client import create_client


        embeddings = OpenAIEmbeddings()
        supabase_client = create_client("my_supabase_url", "my_supabase_key")
        vector_store = SupabaseVectorStore(
            client=supabase_client,
            embedding=embeddings,
            table_name="documents",
            query_name="match_documents",
        )

    Nc                óœ   — 	 ddl }|| _        || _        |xs d| _        |xs d| _        |xs d| _        y# t        $ r t        d«      ‚w xY w)z Initialize with supabase client.r   NzXCould not import supabase python package. Please install it with `pip install supabase`.Ú	documentsÚmatch_documentséô  )ÚsupabaseÚImportErrorÚ_clientÚ
_embeddingÚ
table_nameÚ
query_nameÚ
chunk_size)ÚselfÚclientÚ	embeddingr   r   r   r   s          ús/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/supabase.pyÚ__init__zSupabaseVectorStore.__init__X   sc   € ð	Ûð ˆŒØ&/ˆŒØ$Ò3¨ˆŒØ$Ò9Ð(9ˆŒØ$Ò+¨ˆ�øô ò 	ÜðAóð ð	ús	   ‚6 ¶Ac                ó   — | j                   S ©N)r   )r   s    r"   Ú
embeddingszSupabaseVectorStore.embeddingsq   s   € à�‰Ðó    c                óü   — |xs+ |D �cg c]  }t        t        j                  «       «      ‘Œ! c}}| j                  ||«      }| j                  j                  t        |«      «      }| j                  |||«      S c c}w r%   )ÚstrÚuuidÚuuid4Ú_texts_to_documentsr   Úembed_documentsÚlistÚadd_vectors)r   ÚtextsÚ	metadatasÚidsÚkwargsÚ_ÚdocsÚvectorss           r"   Ú	add_textszSupabaseVectorStore.add_textsu   sl   € ð Ò7±Ó7±¨A”cœ$Ÿ*™*›,Õ'°Ñ7ˆØ×'Ñ'¨¨yÓ9ˆà—/‘/×1Ñ1´$°u³+Ó>ˆØ×Ñ ¨¨sÓ3Ð3ùò	 8s   ‰$A9c	                ó$  — |st        d«      ‚|st        d«      ‚|j                  |«      }
|D �cg c]  }t        t        j                  «       «      ‘Œ! }}| j                  ||«      } | j                  |||
|||fi |	¤Ž  | |||||¬«      S c c}w )z9Return VectorStore initialized from texts and embeddings.zSupabase client is required.z)Supabase document table_name is required.)r    r!   r   r   r   )Ú
ValueErrorr-   r)   r*   r+   r,   Ú_add_vectors)Úclsr0   r!   r1   r    r   r   r   r2   r3   r&   r4   r5   s                r"   Ú
from_textszSupabaseVectorStore.from_texts‚   s«   € ñ ÜÐ;Ó<Ð<áÜÐHÓIÐIà×.Ñ.¨uÓ5ˆ
Ù*/Ó0©% QŒs”4—:‘:“<Õ ¨%ˆÐ0Ø×&Ñ& u¨iÓ8ˆØˆ×ÑØ�J 
¨D°#°zñ	
ØEKò	
ñ ØØØ!Ø!Ø!ô
ð 	
ùò 1s   °$Bc                ój   — | j                  | j                  | j                  |||| j                  «      S r%   )r:   r   r   r   )r   r6   r   r2   s       r"   r/   zSupabaseVectorStore.add_vectors¦   s0   € ð × Ñ Ø�L‰L˜$Ÿ/™/¨7°I¸sÀDÇOÁOó
ð 	
r'   c                ód   — | j                   j                  |«      } | j                  |f||dœ|¤ŽS ©N)ÚkÚfilter)r   Úembed_queryÚsimilarity_search_by_vector©r   Úqueryr@   rA   r3   Úvectors         r"   Úsimilarity_searchz%SupabaseVectorStore.similarity_search°   s7   € ð —‘×,Ñ,¨UÓ3ˆØ/ˆt×/Ñ/°ÐU¸!ÀFÑUÈfÑUÐUr'   c                óf   —  | j                   |f||dœ|¤Ž}|D ��cg c]  \  }}|‘Œ	 }}}|S c c}}w r?   )Ú1similarity_search_by_vector_with_relevance_scores)	r   r!   r@   rA   r3   ÚresultÚdocr4   r   s	            r"   rC   z/SupabaseVectorStore.similarity_search_by_vectorº   sQ   € ð H�×GÑGØð
Ø 6ñ
Ø-3ñ
ˆñ (.Ô.¡v™V˜S !’S vˆ	Ñ.àÐùó /s   œ-c                ód   — | j                   j                  |«      } | j                  |f||dœ|¤ŽS r?   )r   rB   rI   rD   s         r"   Ú'similarity_search_with_relevance_scoresz;SupabaseVectorStore.similarity_search_with_relevance_scoresÉ   sB   € ð —‘×,Ñ,¨UÓ3ˆØEˆt×EÑEØð
Ø ñ
Ø*0ñ
ð 	
r'   c                ó,   — t        |¬«      }|r||d<   |S )N)Úquery_embeddingrA   )Údict)r   rE   rA   Úrets       r"   Ú
match_argszSupabaseVectorStore.match_argsÕ   s   € ô #°5Ô9ˆÙØ"ˆC�‰MØˆ
r'   c           
     óX  — |rb|j                  «       D ]O  \  }}t        |t        «      sŒd|v sŒ|d   }dj                  d„ |D «       «      }	d|› d|	› d�}
|r
d|› d|
› d�}ŒN|
}ŒQ | j	                  ||«      }| j
                  j                  | j                  |«      }|r%|j                  j                  d	d|› d�«      |_        |j                  j                  d
|«      |_        |j                  «       }|j                  D �cg c]R  }|j                  d«      r?t        |j                  di «      |j                  dd«      ¬«      |j                  dd«      f‘ŒT }}|�A|D ��cg c]  \  }}||k\  r||f‘Œ }}}t        |«      dk(  rt        j                   d|› �«       |S c c}w c c}}w )Nz$inÚ,c              3  ó:   K  — | ]  }d t        |«      › d �–— Œ y­w)Ú'N)r)   )Ú.0Úvs     r"   Ú	<genexpr>zXSupabaseVectorStore.similarity_search_by_vector_with_relevance_scores.<locals>.<genexpr>ì   s   è ø€ Ð)KÁ¸A¨A¬c°!«f¨X°Q¬-Áùs   ‚zmetadata->>z IN (Ú)Ú(z) and (ÚandÚlimitÚcontentÚmetadataÚ ©r_   Úpage_contentÚ
similarityç        r   zDNo relevant docs were retrieved using the relevance score threshold )ÚitemsÚ
isinstancerP   ÚjoinrR   r   Úrpcr   ÚparamsÚsetÚexecuteÚdataÚgetr   ÚlenÚwarningsÚwarn)r   rE   r@   rA   Úpostgrest_filterÚscore_thresholdÚkeyÚvalueÚ	in_valuesÚ
values_strÚ
new_filterÚmatch_documents_paramsÚquery_builderÚresÚsearchÚmatch_resultrK   rc   s                     r"   rI   zESupabaseVectorStore.similarity_search_by_vector_with_relevance_scoresÝ   sè  € ñ Ø$Ÿl™lžn‘
��UÜ˜e¤TÕ*¨u¸ª~à % e¡�Ià!$§¡Ñ)KÁÓ)KÓ!K�JØ#.¨s¨e°5¸¸ÀAÐ!F�Jñ (Ø-.Ð/?Ð.@ÀÈ
À|ÐSTÐ+UÑ(à+5Ñ(ð -ð "&§¡°¸Ó!?ÐØŸ™×(Ñ(¨¯©Ð:PÓQˆáØ#0×#7Ñ#7×#;Ñ#;Ø˜Ð+Ð,¨AÐ.ó$ˆMÔ ð  -×3Ñ3×7Ñ7¸ÀÓCˆÔà×#Ñ#Ó%ˆð Ÿ(š(ó

ñ #�Ø�z‰z˜)Ô$ô Ø#ŸZ™Z¨
°BÓ7Ø!'§¡¨I°rÓ!:ôð —
‘
˜<¨Ó-òð #ð 	ð 

ð Ð&ñ (4ôá'3‘O�C˜Ø Ò0ð �jÒ!Ø'3ð ñ ô
 �<Ó  AÒ%Ü—‘ð"Ø"1Ð!2ð4ôð
 Ðùò1

ùós   ÄAF!Å#F&c                ó†  — | j                  ||«      }| j                  j                  | j                  |«      }|r%|j                  j                  dd|› d�«      |_        |j                  j                  d|«      |_        |j                  «       }|j                  D �cg c]–  }|j                  d«      rƒt        |j                  di «      |j                  dd«      ¬«      |j                  d	d
«      t        j                  |j                  dd«      j                  d«      t        j                  d¬«      f‘Œ˜ }	}|	S c c}w )Nr\   r[   rZ   r]   r^   r_   r`   ra   rc   rd   r!   z[]rT   )Úsep)rR   r   rh   r   ri   rj   rk   rl   rm   r   ÚnpÚ
fromstringÚstripÚfloat32)
r   rE   r@   rA   rq   rx   ry   rz   r{   r|   s
             r"   Ú0similarity_search_by_vector_returning_embeddingszDSupabaseVectorStore.similarity_search_by_vector_returning_embeddings  s/  € ð "&§¡°¸Ó!?ÐØŸ™×(Ñ(¨¯©Ð:PÓQˆáØ#0×#7Ñ#7×#;Ñ#;Ø˜Ð+Ð,¨AÐ.ó$ˆMÔ ð  -×3Ñ3×7Ñ7¸ÀÓCˆÔà×#Ñ#Ó%ˆð Ÿ(š(ó
ñ #�Ø�z‰z˜)Ô$ô Ø#ŸZ™Z¨
°BÓ7Ø!'§¡¨I°rÓ!:ôð —
‘
˜<¨Ó-ô —‘Ø—J‘J˜{¨BÓ/×5Ñ5°dÓ;¼R¿Z¹ZÈSôòð #ð 	ð 
ð" Ðùò#
s   ÂBD>c                ó~   — |€t        i «      }t        | |«      D ��cg c]  \  }}t        ||¬«      ‘Œ }}}|S c c}}w )z:Return list of Documents from list of texts and metadatas.)rb   r_   )r   Úzipr   )r0   r1   Útextr_   r5   s        r"   r,   z'SupabaseVectorStore._texts_to_documentsA  sS   € ð ÐÜ˜r›
ˆIô #& e¨YÔ"7ô
á"7‘��hô  $°Ö:Ø"7ð 	ñ 
ð
 ˆùó
s   �9c           	     ó2  — t        |«      D ��cg c]+  \  }}||   ||   j                  |||   j                  dœ|¥‘Œ- }	}}g }
t        dt	        |	«      |«      D ]¯  }|	|||z    }| j                  |«      j                  |«      j                  «       }t	        |j                  «      dk(  rt        d«      ‚|j                  D �cg c].  }|j                  d«      sŒt        |j                  d«      «      ‘Œ0 }}|
j                  |«       Œ± |
S c c}}w c c}w )zAdd vectors to Supabase table.)Úidr^   r!   r_   r   zError inserting: No rows addedrˆ   )Ú	enumeraterb   r_   Úrangern   Úfrom_Úupsertrk   rl   Ú	Exceptionrm   r)   Úextend)r    r   r6   r   r2   r   r3   Úidxr!   ÚrowsÚid_listÚiÚchunkrJ   s                 r"   r:   z SupabaseVectorStore._add_vectorsQ  s  € ô( #,¨GÔ"4ô	&
ñ #5‘��Yð ˜#‘hØ$ S™>×6Ñ6Ø&Ø% c™N×3Ñ3ñ	ð
 òð #5ð 	ñ 	&
ð  ˆÜ�qœ#˜d›) ZÖ0ˆAØ˜˜Q ™^Ð,ˆEà—\‘\ *Ó-×4Ñ4°UÓ;×CÑCÓEˆFä�6—;‘;Ó 1Ò$ÜÐ @ÓAÐAð .4¯[ª[ÓH©[¨¸A¿E¹EÀ$½K”3�q—u‘u˜T“{Õ#¨[ˆCÐHà�N‰N˜3Õð 1ð ˆùó1	&
ùò( Is   �0DÃDÃDc                ó  — | j                  ||«      }|D �cg c]  }|d   ‘Œ	 }}|D �cg c]  }|d   ‘Œ	 }	}t        t        j                  |gt        j                  ¬«      |	||¬«      }
|
D �cg c]  }||   ‘Œ	 }}|S c c}w c c}w c c}w )aó  Return docs selected using the maximal marginal relevance.

        Maximal marginal relevance optimizes for similarity to query AND diversity
        among selected documents.

        Args:
            embedding: Embedding to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            fetch_k: Number of Documents to fetch to pass to MMR algorithm.
            lambda_mult: Number between 0 and 1 that determines the degree
                        of diversity among the results with 0 corresponding
                        to maximum diversity and 1 to minimum diversity.
                        Defaults to 0.5.
        Returns:
            List of Documents selected by maximal marginal relevance.
        r   é   )Údtype)r@   Úlambda_mult)rƒ   r   r   Úarrayr‚   )r   r!   r@   Úfetch_kr—   r3   rJ   Ú	doc_tupleÚmatched_documentsÚmatched_embeddingsÚmmr_selectedr’   Úfiltered_documentss                r"   Ú'max_marginal_relevance_search_by_vectorz;SupabaseVectorStore.max_marginal_relevance_search_by_vectorw  s¨   € ð0 ×FÑFØ�wó
ˆñ <BÓB¹6¨i˜Y q›\¸6ÐÐBÙ<BÓC¹F¨y˜i¨›l¸FÐÐCä1Ü�H‰H�i�[¬¯
©
Ô3ØØØ#ô	
ˆñ =IÓI¹L°qÐ/°Ó2¸LÐÐIà!Ð!ùò CùÚCùò Js   —A>©BÁ.Bc                óf   — | j                   j                  |«      }| j                  ||||¬«      }|S )a  Return docs selected using the maximal marginal relevance.

        Maximal marginal relevance optimizes for similarity to query AND diversity
        among selected documents.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            fetch_k: Number of Documents to fetch to pass to MMR algorithm.
            lambda_mult: Number between 0 and 1 that determines the degree
                        of diversity among the results with 0 corresponding
                        to maximum diversity and 1 to minimum diversity.
                        Defaults to 0.5.
        Returns:
            List of Documents selected by maximal marginal relevance.

        `max_marginal_relevance_search` requires that `query_name` returns matched
        embeddings alongside the match documents. The following function
        demonstrates how to do this:

        ```sql
        CREATE FUNCTION match_documents_embeddings(query_embedding vector(1536),
                                                   match_count int)
            RETURNS TABLE(
                id uuid,
                content text,
                metadata jsonb,
                embedding vector(1536),
                similarity float)
            LANGUAGE plpgsql
            AS $$
            # variable_conflict use_column
        BEGIN
            RETURN query
            SELECT
                id,
                content,
                metadata,
                embedding,
                1 -(docstore.embedding <=> query_embedding) AS similarity
            FROM
                docstore
            ORDER BY
                docstore.embedding <=> query_embedding
            LIMIT match_count;
        END;
        $$;
        ```
        )r—   )r   rB   rŸ   )r   rE   r@   r™   r—   r3   r!   r5   s           r"   Úmax_marginal_relevance_searchz1SupabaseVectorStore.max_marginal_relevance_search¡  s>   € ðr —O‘O×/Ñ/°Ó6ˆ	Ø×;Ñ;Ø�q˜'¨{ð <ó 
ˆð ˆr'   c                ó   — |€t        d«      ‚|D �cg c]  }d|i‘Œ }}|D ]V  }| j                  j                  | j                  «      j	                  «       j                  d|d   «      j                  «        ŒX yc c}w )zUDelete by vector IDs.

        Args:
            ids: List of ids to delete.
        NzNo ids provided to delete.rˆ   )r9   r   r‹   r   ÚdeleteÚeqrk   )r   r2   r3   rˆ   r�   Úrows         r"   r£   zSupabaseVectorStore.deleteà  sŒ   € ð ˆ;ÜÐ9Ó:Ð:ñ ó	&
ñ �ð �bòð ð	 	ð &
ó ˆCØ�L‰L×Ñ˜tŸ™Ó/×6Ñ6Ó8×;Ñ;¸DÀ#ÀdÁ)ÓL×TÑTÕVñ ùò&
s   ’A;)r   N)r    úsupabase.client.Clientr!   r   r   r)   r   Úintr   úUnion[str, None]ÚreturnÚNone)r©   r   )NN)
r0   úIterable[str]r1   zOptional[List[Dict[Any, Any]]]r2   úOptional[List[str]]r3   r   r©   ú	List[str])NNr   r   r   N)r;   zType['SupabaseVectorStore']r0   r­   r!   r   r1   zOptional[List[dict]]r    z Optional[supabase.client.Client]r   úOptional[str]r   r¨   r   r§   r2   r¬   r3   r   r©   z'SupabaseVectorStore')r6   úList[List[float]]r   úList[Document]r2   r­   r©   r­   )é   N)
rE   r)   r@   r§   rA   úOptional[Dict[str, Any]]r3   r   r©   r°   )
r!   úList[float]r@   r§   rA   r²   r3   r   r©   r°   )
rE   r)   r@   r§   rA   r²   r3   r   r©   úList[Tuple[Document, float]])rE   r³   rA   r²   r©   zDict[str, Any])NNN)rE   r³   r@   r§   rA   r²   rq   r®   rr   zOptional[float]r©   r´   )
rE   r³   r@   r§   rA   r²   rq   r®   r©   z(List[Tuple[Document, float, np.ndarray]]r%   )r0   r«   r1   z"Optional[Iterable[Dict[Any, Any]]]r©   r°   )r    r¦   r   r)   r6   r¯   r   r°   r2   r­   r   r§   r3   r   r©   r­   )r±   é   g      à?)r!   r³   r@   r§   r™   r§   r—   Úfloatr3   r   r©   r°   )rE   r)   r@   r§   r™   r§   r—   r¶   r3   r   r©   r°   )r2   r¬   r3   r   r©   rª   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   Úpropertyr&   r7   Úclassmethodr<   r/   rG   rC   rM   rR   rI   rƒ   Ústaticmethodr,   r:   rŸ   r¡   r£   © r'   r"   r   r      sñ  „ ñ8ð~ Ø'+ð,à&ð,ð ð,ð ð	,ð
 ð,ð %ð,ð 
ó,ð2 òó ðð 59Ø#'ð	4àð4ð 2ð4ð !ð	4ð
 ð4ð 
ó4ð ð
 +/Ø37Ø$/Ø'8ØØ#'ð!
Ø(ð!
àð!
ð ð!
ð (ð	!
ð
 1ð!
ð "ð!
ð %ð!
ð ð!
ð !ð!
ð ð!
ð 
ò!
ó ð!
ðF
à"ð
ð "ð
ð ð	
ð
 
ó
ð Ø+/ð	VàðVð ðVð )ð	Vð
 ðVð 
óVð Ø+/ð	àðð ðð )ð	ð
 ðð 
óð$ Ø+/ð	

àð

ð ð

ð )ð	

ð
 ð

ð 
&ó

ðØ ðØ*Bðà	óð ,0Ø*.Ø+/ð<àð<ð ð<ð )ð	<ð
 (ð<ð )ð<ð 
&ó<ðD ,0Ø*.ð$àð$ð ð$ð )ð	$ð
 (ð$ð 
2ó$ðL ð 9=ðØðà5ðð 
òó ðð ð#Ø&ð#àð#ð #ð#ð "ð	#ð
 ð#ð ð#ð ð#ð 
ò#ó ð#ðP ØØ ð("àð("ð ð("ð ð	("ð
 ð("ð ð("ð 
ó("ðZ ØØ ð=àð=ð ð=ð ð	=ð
 ð=ð ð=ð 
ó=õ~Wr'   r   )Ú
__future__r   r*   ro   Ú	itertoolsr   Útypingr   r   r   r   r	   r
   r   r   r   Únumpyr   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.vectorstoresr   Ú&langchain_community.vectorstores.utilsr   r   r   r¾   r'   r"   Ú<module>rÇ      sG   ðÝ "ã Û Ý ÷
÷ 
õ 
ó Ý -Ý 0Ý 3å MáÛôVW˜+õ VWr'   