
    h                     N    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y)    )AnyDictTuple)
Comparator
Comparison	OperationOperatorStructuredQueryVisitorc                   V   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y)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j                  |      }|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likezComparator 'z/' is not currently supported in Supabase Vector)
r   EQNEGTGTELTLTELIKEget	Exception)selfr   postgrest_comparators      m/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/query_constructors/supabase.py_map_comparatorz(SupabaseVectorTranslator._map_comparator    s     MM4MM5MM4NNEMM4NNEOOV 
 #j/ 	  'zl +/ / 
 $#    valuec                 &    t        |t              ryy)Nz->>z->)
isinstancestr)r#   r(   s     r%   _get_json_operatorz+SupabaseVectorTranslator._get_json_operator8   s    eS!r'   	operationc                     |j                   D cg c]  }|j                  |        }}|j                  j                   ddj	                  |       dS c c}w )N(,))	argumentsacceptoperatorr(   join)r#   r-   argargss       r%   visit_operationz(SupabaseVectorTranslator.visit_operation>   sS    ,5,?,?@S

4 @@$$**+1SXXd^,<A>> As   A
comparisonc                    t        |j                  t              rb| j                  t	        t
        j                  |j                  D cg c]$  }t        |j                  |j                  |      & c}            S dj                  | j                   | j                  |j                         |j                   | j                  |j                         |j                   g      S c c}w )N)r   	attributer(   )r4   r2   .)r*   r(   listr8   r   r	   ANDr   r   r;   r5   r   r,   r&   )r#   r9   r(   s      r%   visit_comparisonz)SupabaseVectorTranslator.visit_comparisonB   s    j&&-''%\\ &0%5%5 " #'1'<'<&0&:&:"'
  xx''()@)@AQAQ)R(ST^ThThSij''
(=(=>?##$
 	
s   )C)structured_queryc                 v    |j                   i }nd|j                   j                  |       i}|j                  |fS )Npostgrest_filter)filterr3   query)r#   r@   kwargss      r%   visit_structured_queryz/SupabaseVectorTranslator.visit_structured_queryZ   sB     ""*F(*:*A*A*H*H*NOF%%v--r'   N)__name__
__module____qualname____doc__r	   r>   ORallowed_operatorsr   r   r   r   r   r   r   r    allowed_comparatorsr   r+   __annotations__r&   r   r,   r   r8   r   r?   r
   r   r   rF    r'   r%   r   r      s    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   rO   r'   r%   <module>rR      s#    # # T.w T.r'   