a
    bg                     @   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< eedddZeeddd	Zeed
ddZeedddZeeeeeef f d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 rLt	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   }/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/query_constructors/supabase.py_map_comparator    s    

z(SupabaseVectorTranslator._map_comparator)valuer   c                 C   s   t |trdS dS d S )Nz->>z->)
isinstancestr)r   r!   r   r   r   _get_json_operator8   s    
z+SupabaseVectorTranslator._get_json_operator)	operationr   c                    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>?       z<SupabaseVectorTranslator.visit_operation.<locals>.<listcomp>(,))	argumentsoperatorr!   join)r   r%   argsr   r)   r   visit_operation>   s    z(SupabaseVectorTranslator.visit_operation)
comparisonr   c                    sf   t  jtr0| 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   r5   )r'   r!   r4   r   r   r*   G   s   z=SupabaseVectorTranslator.visit_comparison.<locals>.<listcomp>)r0   r/   .)r"   r!   listr3   r   r   ANDr1   r   r$   r5   r    r   )r   r4   r   r6   r   visit_comparisonB   s    
z)SupabaseVectorTranslator.visit_comparison)structured_queryr   c                 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   r9   ORZallowed_operatorsr   r   r   r   r   r   r   r   Zallowed_comparatorsr   r#   __annotations__r    r   r$   r   r3   r   r:   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    
