
    Ng                     V    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e
          ZdS )    )AnyDictTuple)
Comparator
Comparison	OperationOperatorStructuredQueryVisitorc                   
   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ZdedefdZd	edefd
ZdedefdZdedeeeeef         f         fdZdS )SupabaseVectorTranslatorz:Translate Langchain filters to Supabase PostgREST filters.metadatametadata_column
comparatorreturnc                    t           j        dt           j        dt           j        dt           j        dt           j        dt           j        dt           j        di                    |          }|t          d	| d
          |S )z
        Maps Langchain comparator to PostgREST comparator:

        https://postgrest.org/en/stable/references/api/tables_views.html#operators
        eqneqgtgteltltelikeNzComparator 'z/' is not currently supported in Supabase Vector)
r   EQNEGTGTELTLTELIKEget	Exception)selfr   postgrest_comparators      k/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/query_constructors/supabase.py_map_comparatorz(SupabaseVectorTranslator._map_comparator    s     M4M5M4NEM4NEOV 
 #j// 	  '/z / / /  
 $#    valuec                 4    t          |t                    rdS dS )Nz->>z->)
isinstancestr)r#   r(   s     r%   _get_json_operatorz+SupabaseVectorTranslator._get_json_operator8   s    eS!! 	54r'   	operationc                 t      fd|j         D             }|j        j         dd                    |           dS )Nc                 :    g | ]}|                               S  )accept).0argr#   s     r%   
<listcomp>z<SupabaseVectorTranslator.visit_operation.<locals>.<listcomp>?   s%    @@@S

4  @@@r'   (,))	argumentsoperatorr(   join)r#   r-   argss   `  r%   visit_operationz(SupabaseVectorTranslator.visit_operation>   sF    @@@@I,?@@@$*>>SXXd^^>>>>r'   
comparisonc                 t   t          j        t                    r?|                     t	          t
          j        fdj        D                                 S d                    | j         | 	                    j                   j
         |                     j                   j         g          S )Nc                 H    g | ]}t          j        j        |           S ))r   	attributer(   )r   r   r@   )r2   r(   r=   s     r%   r4   z=SupabaseVectorTranslator.visit_comparison.<locals>.<listcomp>G   sI        " #'1'<&0&:"'    r'   )r9   r8   .)r*   r(   listr<   r   r	   ANDr:   r   r,   r@   r&   r   )r#   r=   s    `r%   visit_comparisonz)SupabaseVectorTranslator.visit_comparisonB   s    j&-- 	''%\    &0%5  
 
 
   xx'j)@)@AQ)R)RjT^Thjj''
(=>>@#%
 
 	
r'   structured_queryc                 `    |j         i }nd|j                             |           i}|j        |fS )Npostgrest_filter)filterr1   query)r#   rE   kwargss      r%   visit_structured_queryz/SupabaseVectorTranslator.visit_structured_queryZ   s>     "*FF(*:*A*H*H*N*NOF%v--r'   N)__name__
__module____qualname____doc__r	   rC   ORallowed_operatorsr   r   r   r   r   r   r   r    allowed_comparatorsr   r+   __annotations__r&   r   r,   r   r<   r   rD   r
   r   r   rK   r0   r'   r%   r   r      s.        DD!x{3. 	 1%OS%%%$* $ $ $ $ $0     ? ?s ? ? ? ?
: 
# 
 
 
 
0. /.	sDcN"	#. . . . . .r'   r   N)typingr   r   r   langchain_core.structured_queryr   r   r   r	   r
   r   r   r0   r'   r%   <module>rV      s    # # # # # # # # # #               T. T. T. T. T.w T. T. T. T. T.r'   