a
    bg                     @   s   d Z ddlmZmZ ddlmZmZmZmZm	Z	m
Z
 ejdejdejdejdejdejd	ejd
iZejgZeeeef eedddZG dd de
ZdS )zELogic for converting internal query language to a valid Milvus query.    )TupleUnion)
Comparator
Comparison	OperationOperatorStructuredQueryVisitorz==>z>=<z<=inlike)value
comparatorreturnc                 C   s:   t | tr.|tju r d|  dS d|  dS nt| S dS )a  Convert a value to a string and add double quotes if it is a string.

    It required for comparators involving strings.

    Args:
        value: The value to convert.
        comparator: The comparator.

    Returns:
        The converted value as a string.
    "z%"N)
isinstancestrr   LIKE)r   r    r   {/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/query_constructors/milvus.pyprocess_value   s
    

r   c                   @   s   e Zd ZdZejejejgZe	j
e	je	je	je	je	je	jgZeee	f edddZeedddZeedd	d
Zeeeef dddZdS )MilvusTranslatorzCTranslate Milvus internal query language elements to valid filters.)funcr   c                 C   s(   |  | |j}t|tr"t| }| S )N)Z_validate_funcr   r   r   COMPARATOR_TO_BER)selfr   r   r   r   r   _format_funcF   s
    

zMilvusTranslator._format_func)	operationr   c                    s   |j tv r@t|jdkr@ |j }|d |jd   d S |j tv r`td|j j dn: fdd|jD } |j }dd	| d	 | d S d S )
N   (r   )r   z&" can have only one argument in Milvusc                    s   g | ]}|  qS r   )accept).0argr   r   r   
<listcomp>V       z4MilvusTranslator.visit_operation.<locals>.<listcomp> )	operatorUNARY_OPERATORSlen	argumentsr   r!   
ValueErrorr   join)r   r   r(   argsr   r$   r   visit_operationM   s    
z MilvusTranslator.visit_operation)
comparisonr   c                 C   s<   |  |j}t|j|j}|j}d| d | d | d S )Nz( r'   z ))r   r   r   r   	attribute)r   r0   r   Zprocessed_valuer1   r   r   r   visit_comparisonZ   s    z!MilvusTranslator.visit_comparison)structured_queryr   c                 C   s*   |j d u ri }nd|j | i}|j|fS )Nexpr)filterr!   query)r   r3   kwargsr   r   r   visit_structured_querya   s    
z'MilvusTranslator.visit_structured_queryN)__name__
__module____qualname____doc__r   ANDNOTORZallowed_operatorsr   EQGTGTELTLTEINr   Zallowed_comparatorsr   r   r   r   r/   r   r2   r   r   dictr8   r   r   r   r   r   5   s    

r   N)r<   typingr   r   Zlangchain_core.structured_queryr   r   r   r   r   r	   r@   rA   rB   rC   rD   rE   r   r   r>   r)   intfloatr   r   r   r   r   r   r   <module>   s    

