o
    Zh                     @   sH   d dl mZmZmZ d dlmZmZmZmZm	Z	m
Z
 G dd de
ZdS )    )AnyDictTuple)
Comparator
Comparison	OperationOperatorStructuredQueryVisitorc                   @   s   e Zd ZU dZejejgZ	 ej	ej
ejejejejejgZ	 dZeed< dedefddZdedefd	d
ZdedefddZdedefddZdedeeeeef f fddZdS )SupabaseVectorTranslatorz:Translate Langchain filters to Supabase PostgREST filters.metadatametadata_column
comparatorreturnc                 C   sP   t jdt jdt jdt jdt jdt jdt jdi|}|du r&t	d	| d
|S )z
        Maps Langchain comparator to PostgREST comparator:

        https://postgrest.org/en/stable/references/api/tables_views.html#operators
        eqZneqgtZgteltZltelikeNzComparator 'z/' is not currently supported in Supabase Vector)
r   EQNEGTGTELTLTELIKEget	Exception)selfr   Zpostgrest_comparator r   f/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/query_constructors/supabase.py_map_comparator    s   

z(SupabaseVectorTranslator._map_comparatorvaluec                 C   s   t |trdS dS )Nz->>z->)
isinstancestr)r   r!   r   r   r   _get_json_operator8   s   
z+SupabaseVectorTranslator._get_json_operator	operationc                    s.    fdd|j D }|jj dd| dS )Nc                    s   g | ]}|  qS r   )accept).0argr   r   r   
<listcomp>?   s    z<SupabaseVectorTranslator.visit_operation.<locals>.<listcomp>(,))	argumentsoperatorr!   join)r   r%   argsr   r)   r   visit_operation>   s   z(SupabaseVectorTranslator.visit_operation
comparisonc                    sf   t  jtr| ttj fdd jD dS d| j | 	 j  j
 |  j  j gS )Nc                    s   g | ]}t  j j|d qS ))r   	attributer!   )r   r   r4   )r'   r!   r3   r   r   r*   G   s    z=SupabaseVectorTranslator.visit_comparison.<locals>.<listcomp>)r/   r.   .)r"   r!   listr2   r   r   ANDr0   r   r$   r4   r    r   )r   r3   r   r5   r   visit_comparisonB   s   
z)SupabaseVectorTranslator.visit_comparisonstructured_queryc                 C   s*   |j d u ri }nd|j | i}|j|fS )NZpostgrest_filter)filterr&   query)r   r:   kwargsr   r   r   visit_structured_queryZ   s   

z/SupabaseVectorTranslator.visit_structured_queryN)__name__
__module____qualname____doc__r   r8   ORZallowed_operatorsr   r   r   r   r   r   r   r   Zallowed_comparatorsr   r#   __annotations__r    r   r$   r   r2   r   r9   r	   r   r   r>   r   r   r   r   r      s.   
 	r   N)typingr   r   r   Zlangchain_core.structured_queryr   r   r   r   r	   r
   r   r   r   r   r   <module>   s     
