
    Q
ig                         d dl Z d dlmZ d dlmZmZmZmZ d dlm	Z	m
Z
mZmZmZ d dlmZ d dlmZ d dlmZ  G d d	e	          Z G d
 de	          Z G d de          Z G d de	          Z G d de          ZdS )    N)Enum)AnyDictListOptional)	BaseModel
ConfigDictFieldfield_validatormodel_validator)	AnnotatedROUTE_VECTOR_FIELD_NAME)IndexSchemac                      e Zd ZU dZeed<   	 ee         ed<   	  ei           Ze	ee
f         ed<   	 dZee eddd	
          f         ed<   	  ed          ed                         Z ed          ed                         ZdS )RoutezJModel representing a routing path with associated metadata and thresholds.name
referencesdefaultmetadatag      ?Tr      )strictgtledistance_thresholdc                 P    |r|                                 st          d          |S )NzRoute name must not be empty)strip
ValueErrorclsvs     C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\redisvl/extensions/router/schema.pyname_must_not_be_emptyzRoute.name_must_not_be_empty   s/      	=		 	=;<<<    c                 x    |st          d          t          d |D                       rt          d          |S )NzReferences must not be emptyc              3   @   K   | ]}|                                  V  d S )N)r   ).0refs     r#   	<genexpr>z5Route.references_must_not_be_empty.<locals>.<genexpr>$   s,      ,,3399;;,,,,,,r%   z(All references must be non-empty strings)r   anyr    s     r#   references_must_not_be_emptyz"Route.references_must_not_be_empty   sO      	=;<<<,,!,,,,, 	IGHHHr%   N)__name__
__module____qualname____doc__str__annotations__r   r
   r   r   r   r   r   floatr   classmethodr$   r,    r%   r#   r   r      s         TT
III S	2$uR000Hd38n000-KN	%dqQ)G)G)G"GHNNN4_V  [ 
 _\""  [ #"  r%   r   c                   ^    e Zd ZU dZdZee         ed<   	  ed          Z	ee
         ed<   dS )
RouteMatchz=Model representing a matched route with distance information.Nr   r   distance)r-   r.   r/   r0   r   r   r1   r2   r
   r8   r3   r5   r%   r#   r7   r7   )   sP         GGD(3-! %d 3 3 3Hhuo333JJr%   r7   c                   "    e Zd ZdZdZ	 dZ	 dZdS )DistanceAggregationMethodz-Enumeration for distance aggregation methods.avgminsumN)r-   r.   r/   r0   r;   r<   r=   r5   r%   r#   r:   r:   2   s+        77
C6
C6
C22r%   r:   c                       e Zd ZU dZ	 dZee edd          f         ed<   	  ee	j
                  Ze	ed<    ed	
          Z ed          edeeef         deeef         fd                        ZdS )RoutingConfigz#Configuration for routing behavior.   Tr   )r   r   max_kr   aggregation_methodignore)extrabefore)modevaluesreturnc                 p    d|v r1t          j        dt          d           |                    d           |S )Nr   zcThe 'distance_threshold' field is deprecated and will be ignored. Set distance_threshold per Route.r   )
stacklevel)warningswarnDeprecationWarningpop)r!   rG   s     r#   remove_distance_thresholdz'RoutingConfig.remove_distance_thresholdI   sK      6))Mu"   
 JJ+,,,r%   N)r-   r.   r/   r0   rA   r   intr
   r2   r:   r;   rB   r	   model_configr   r4   r   r1   r   rO   r5   r%   r#   r?   r?   =   s         --667E9S%%t22223777849E)-5 5 51    :H---L_(###tCH~ $sCx.    [ $#  r%   r?   c                   6    e Zd ZdZedededefd            ZdS )SemanticRouterIndexSchemaz+Customized index schema for SemanticRouter.r   vector_dimsdtypec                 X     | ||ddddddddddt           dd	|d
|ddg          S )a  Create an index schema based on router name and vector dimensions.

        Args:
            name (str): The name of the index.
            vector_dims (int): The dimensions of the vectors.

        Returns:
            SemanticRouterIndexSchema: The constructed index schema.
        )r   prefixreference_idtag)r   type
route_name	referencetextvectorflatcosine)	algorithmdimsdistance_metricdatatype)r   rZ   attrs)indexfieldsr   )r!   r   rT   rU   s       r#   from_paramsz%SemanticRouterIndexSchema.from_paramsY   st     s400'77%u55$f553$%+ ++3$)	 	 		
 
 
 	
r%   N)r-   r.   r/   r0   r4   r1   rP   rh   r5   r%   r#   rS   rS   V   sM        55
s 
 
S 
 
 
 [
 
 
r%   rS   )rK   enumr   typingr   r   r   r   pydanticr   r	   r
   r   r   typing_extensionsr   redisvl.extensions.constantsr   redisvl.schemar   r   r7   r:   r?   rS   r5   r%   r#   <module>ro      s          , , , , , , , , , , , , S S S S S S S S S S S S S S ' ' ' ' ' ' @ @ @ @ @ @ & & & & & &    I   :K K K K K K K K3 3 3 3 3 3 3 3    I   2
 
 
 
 
 
 
 
 
 
r%   