
    Ig                      d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZ d dlZd dlmZmZ d dlmZ d dlm Z  d dl!m"Z" d dl#m$Z$ d d	l%m&Z& d d
l'm(Z( d dl)m*Z*m+Z+ d dl,m-Z-  ej\                         Z/e
r"d dl0m1Z1m2Z2 d dl3m4Z4 d dl3m1Z5 d dl6m7Z7m8Z8m9Z9m:Z:m;Z;  e&ddd      Z< e&ddd      Z= e&ddd      Z> e&ddd      Z?dZ@	 	 	 	 	 	 	 	 	 	 	 	 	 d&	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d'dZA G d de(      ZB G d de$      ZC	 	 	 	 d(d ZD	 	 	 	 d)d!ZE	 	 d*	 	 	 	 	 	 	 	 	 d+d"ZF	 	 d*	 	 	 	 	 	 	 	 	 d+d#ZGd,d$ZHd-d.d%ZIy)/    )annotationsN)TYPE_CHECKINGAnyCallableClassVar
CollectionDictIterableListLiteralOptionalTupleTypeUnioncast)#AsyncCallbackManagerForRetrieverRunCallbackManagerForRetrieverRun)Document)
Embeddings)LangChainException)BaseRetriever)get_from_env)VectorStore)
ConfigDictmodel_validator)maximal_marginal_relevance)SearchClientSearchItemPaged)AsyncSearchItemPagedr   )CorsOptionsScoringProfileSearchFieldSemanticConfigurationVectorSearchAZURESEARCH_FIELDS_IDid)keyenv_keydefaultAZURESEARCH_FIELDS_CONTENTcontent!AZURESEARCH_FIELDS_CONTENT_VECTORcontent_vectorAZURESEARCH_FIELDS_TAGmetadatai  c                ~  012 ddl m0m}m} ddlm} ddlm}m} ddl	m
} ddlm
} ddlm} ddlm}m}m}m}m}m}m}m}m}m} m}!m}"m}# |xs i }|
xs g }
|5|j9                         dk(  r |       }$|$j;                  d	       n ||      }$n |0fd
      }$n |       }$ || |$|      }%	 |%j=                  |       |s |d%| ||$|d#|S  |d%| ||$|d#|S # |$ r ||D &ci c]  }&|&j>                  |&j@                   nc c}&w c}&1|
D 'ci c]  }'|'j>                  |'j@                   nc c}'w c}'2tC        2jE                               tC        1jE                               z
  D (ci c]  \  }}(|2|    nc c}(}w })}}(tG        |)      dkD  rEd$12fd}*djI                  |)D +cg c]
  }+ |*|+       nc c}+w c}+      },tK        d|) d|,       |
}|i |  |d|!jL                   |ddd|"jN                               |d|!jP                   ||"jN                              g |#dd       |#dd      g      }|rtS        |tT              s|g} |||      }-n,|r( || | |tV              g             }. ||.g!      }-nd }- |||||-||	|"      }/|%jY                  |/       Y w xY w)&Nr   )AccessTokenAzureKeyCredentialTokenCredential)ResourceNotFoundError)DefaultAzureCredentialInteractiveBrowserCredentialr    )SearchIndexClient)#ExhaustiveKnnAlgorithmConfigurationExhaustiveKnnParametersHnswAlgorithmConfigurationHnswParametersSearchIndexr$   SemanticFieldSemanticPrioritizedFieldsSemanticSearchr%   VectorSearchAlgorithmKindVectorSearchAlgorithmMetricVectorSearchProfileINTERACTIVEz!https://search.azure.com/.defaultc                 R     t        t        j                               dz         S )Ni  )inttime)scopeskwargsr2   azure_ad_access_tokens     i/var/www/html/answerous/venv/lib/python3.12/site-packages/langchain_community/vectorstores/azuresearch.py<lambda>z$_get_search_client.<locals>.<lambda>   s!    k%s499;'7$'>'     )endpoint
credential
user_agent)namec           
         |  dj                  | d       dj                  |        dj                  |        d| j                          d
S )Nz current type: 'MISSINGz'. It has to be 'z#' or you can point to a different 'z;' field name by using the env variable 'AZURESEARCH_FIELDS_')getupper)xfields_typesmandatory_fieldss    rK   fmt_errz#_get_search_client.<locals>.fmt_err   sk    #-l.>.>q).L-M N))9)=)=a)@(A B++;+?+?+B*C DFFGggi[PQSrM   
z2You need to specify at least the following fields z; or provide alternative field names in the env variables.

r*      i  i  )mef_construction	ef_searchmetric)rQ   kind
parametersdefault_exhaustive_knn)r`   myHnswProfile)rQ   algorithm_configuration_namemyExhaustiveKnnProfile)
algorithmsprofiles)configurationsdefault_configuration_name)
field_name)content_fields)rQ   prioritized_fields)ri   )rQ   fieldsvector_searchsemantic_searchscoring_profilesdefault_scoring_profilecors_options)rN   
index_namerO   rP   )rW   strreturnru    )-azure.core.credentialsr2   r3   r4   azure.core.exceptionsr5   azure.identityr6   r7   azure.search.documentsr   azure.search.documents.aioazure.search.documents.indexesr8   %azure.search.documents.indexes.modelsr9   r:   r;   r<   r=   r$   r>   r?   r@   r%   rA   rB   rC   rV   	get_token	get_indexrQ   typesetitemslenjoin
ValueErrorHNSWCOSINEEXHAUSTIVE_KNN
isinstancelistFIELDS_CONTENTcreate_index)3rN   rt   r(   rJ   semantic_configuration_namern   ro   semantic_configurationsrq   rr   default_fieldsrP   rs   async_ additional_search_client_optionsr3   r4   r5   r6   r7   r   AsyncSearchClientr8   r9   r:   r;   r<   r=   r$   r>   r?   r@   r%   rA   rB   rC   rO   index_clientfdfvaluemissing_fieldsrZ   rW   errorrp   semantic_configurationindexr2   rX   rY   s3      `                                            @@@rK   _get_search_clientr   Q   sX   & XW;S3L@     (H'M2$#)rN 99;-'57J  !DE+C0J		*$

 ,-
&7jZ'La)J/D  
!!!	

 /
 	
 ! 
!!!	

 /
 	
U ! _)4:;qAFFAFFN;;L;IJR 0JJ #&&6&<&<&>"?l((*+#,C %c** N 
 >"Q& 		~"F!71:"F"FG H%& '%%*G-  $F (.&6;;#1,/&)#>#E#E	$	 856EE#:#>#E#E$( (,5> (55M	)MB #5t<+B*C',6+FO )%:0#<$1^$L#M$&" -=S<TUO #O '+-$;%
 	!!%(_)sC   2C   J<,D
J<D65?J<4F.J<2G
C7J<;J<c                  0   e Zd ZdZ	 	 	 	 	 	 	 	 d8dddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d9dZd:dZed;d       Zd<dZ	 d=dd	 	 	 	 	 	 	 	 	 d>d	Z		 d=dd	 	 	 	 	 	 	 	 	 d>d
Z
	 d=dd	 	 	 	 	 	 	 d?dZ	 d=dd	 	 	 	 	 	 	 d?dZd=d@dZd=d@dZ	 dAdd	 	 	 	 	 	 	 	 	 dBdZdd	 	 	 	 	 	 	 dCdZ	 dAdd	 	 	 	 	 	 	 	 	 dBdZdd	 	 	 	 	 	 	 dCdZ	 dAdd	 	 	 	 	 	 	 	 	 dDdZ	 dAdd	 	 	 	 	 	 	 	 	 dDdZ	 dAdd	 	 	 	 	 	 	 	 	 dEdZ	 dAdd	 	 	 	 	 	 	 	 	 dEdZ	 	 dF	 	 	 	 	 	 	 	 	 dGdZ	 	 dF	 	 	 	 	 	 	 	 	 dGdZ	 	 	 dHdd	 	 	 	 	 	 	 	 	 	 	 	 	 dIdZ	 	 	 dHdd	 	 	 	 	 	 	 	 	 	 	 	 	 dIdZdAdJd Z	 dA	 	 	 	 	 	 	 dJd!Z	 	 dF	 	 	 	 	 	 	 	 	 dGd"Z	 	 dF	 	 	 	 	 	 	 	 	 dGd#Z	 dAdd	 	 	 	 	 	 	 	 	 dDd$Z	 dAdd	 	 	 	 	 	 	 	 	 dDd%Z 	 	 	 dHdd	 	 	 	 	 	 	 	 	 	 	 	 	 dId&Z!	 	 	 dHdd	 	 	 	 	 	 	 	 	 	 	 	 	 dId'Z"dd	 	 	 	 	 	 	 	 	 	 	 dKd(Z#dd	 	 	 	 	 	 	 	 	 	 	 dLd)Z$	 dA	 	 	 	 	 	 	 dJd*Z%	 dA	 	 	 	 	 	 	 dJd+Z&	 	 dMdd	 	 	 	 	 	 	 	 	 	 	 dNd,Z'	 	 dMdd	 	 	 	 	 	 	 	 	 	 	 dNd-Z(	 dAdd	 	 	 	 	 	 	 	 	 dOd.Z)	 dAdd	 	 	 	 	 	 	 	 	 dOd/Z*e+	 	 	 	 	 	 dP	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dQd2       Z,e+	 	 	 	 	 	 dP	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dQd3       Z-e+	 d=d0d0d1dd4	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dRd5       Z.e+	 d=d0d0d1dd4	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dRd6       Z/dSd7Z0y)TAzureSearchz&`Azure Cognitive Search` vector store.N)vector_search_dimensionsr   rJ   c                  	 ddl m}m}m}m} 	 || _        t        | j                  t              r| j                  j                  | _	        n| j                  | _	         |t        |j                  dd       |t        |j                         |t        |j                  |j                        d|xs t!        | j                  d            d	       |t"        |j                        g}d
}d|v r|d   r|d|d   z   z  }t%        ||||||||	|
|||||      | _        t%        ||||||||	|
||||d      | _        || _        || _        |r|n|| _        || _        || _        || _        || _        || _        || _        |	| _        |
| _        || _         || _!        || _"        || _#        y # t
        $ r}t        d      |d }~ww xY w)Nr   )SearchableFieldr#   SearchFieldDataTypeSimpleFieldzeUnable to import azure.search.documents. Please install with `pip install -U azure-search-documents`.T)rQ   r   r(   
filterable)rQ   r   Textrd   )rQ   r   
searchabler   vector_search_profile_name	langchainrP    )
r   rn   ro   r   rq   rr   r   rP   rs   r   )
r   rn   ro   r   rq   rr   r   rP   rs   r   )$r~   r   r#   r   r   ImportErrorembedding_functionr   r   embed_query	FIELDS_IDStringr   FIELDS_CONTENT_VECTORr   Singler   FIELDS_METADATAr   clientasync_clientsearch_typer   rn   _azure_search_endpoint_azure_search_key_index_name_semantic_configuration_name_fields_vector_search_semantic_configurations_scoring_profiles_default_scoring_profile_default_fields_user_agent_cors_options)selfazure_search_endpointazure_search_keyrt   r   r   r   rn   ro   r   rq   rr   rs   r   r   rJ   rI   r   r#   r   r   er   rP   s                           rK   __init__zAzureSearch.__init__  s!   ,	  	4"4d--z:#66BBD#66D (//	 #(// *(334G4N4NO)A *1t''/0+: $(//'
0 !
6!f\&:#| 444J(!!(C'$;-$;)!%-M
  /!!(C'$;-$;)!%
  '+F( &fN&;#!1%,G)+(?%!1(?%-%)s  	; 	s   F+ +	G4G  Gc                   t        | d      r&| j                  r| j                  j                          t        | d      r| j                  ry	 t	        j
                         }|j                         r*|j                  | j                  j                                y |j                  | j                  j                                y y y # t        $ r{ t	        j                         }t	        j                  |       	 |j                  | j                  j                                |j                          Y y # |j                          w xY ww xY w)Nr   r   )hasattrr   closer   asyncioget_event_loop
is_runningcreate_taskrun_until_completeRuntimeErrornew_event_loopset_event_loop)r   loops     rK   __del__zAzureSearch.__del__  s    4"t{{KK 4(T->->!--/??$$$T%6%6%<%<%>? ++D,=,=,C,C,EF .?(   !--/&&t,!++D,=,=,C,C,EFJJLDJJL!s+   AC )C 2E
9)D4"E
4EE
c                R    t        | j                  t              r| j                  S d S N)r   r   r   )r   s    rK   
embeddingszAzureSearch.embeddings  s.    
 $11:> ##	
 	
rM   c                   K   | j                   r#| j                   j                  |       d {   S  t        t        | j                        |      S 7 $wr   )r   aembed_queryr   r   r   )r   texts     rK   _aembed_queryzAzureSearch._aembed_query  sD     ??55d;;;:4$"9"9:4@@ <s   +AA%Akeysc                  t        | j                  t              r&	 | j                  j                  t	        |            }n|D cg c]  }| j                  |       }}t        |      dk(  rt        j                  d       g S |s#d|v rt        |d         t        |      k(  r|d   }| j                  t        ||      ||      S # t
        $ r1 |D cg c]  }| j                  j                  |       nc c}w }}Y w xY wc c}w )z$Add texts data to an existing index.r   Nothing to insert, skipping.idsr   )r   r   r   embed_documentsr   NotImplementedErrorr   r   loggerdebugadd_embeddingszipr   texts	metadatasr   rI   r   rW   s          rK   	add_textszAzureSearch.add_texts  s     d--z:U!44DDT%[Q
 ?DD$11!4DJDz?aLL78I
 5F?VE]1Cs:1V%=D""3uj#994"PP ' UNSTd55AA!DTT
TU Es#   $C DD"C76D Dc               T  K   t        | j                  t              r.	 | j                  j                  t	        |             d {   }n|D cg c]  }| j                  |       }}t        |      dk(  rt        j                  d       g S |s#d|v rt        |d         t        |      k(  r|d   }| j                  t        ||      ||       d {   S 7 # t
        $ r: |D cg c]&  }| j                  j                  |       d {  7  ( nc c}w }}Y w xY wc c}w 7 Qw)Nr   r   r   r   )r   r   r   aembed_documentsr   r   r   r   r   r   aadd_embeddingsr   r   s          rK   
aadd_textszAzureSearch.aadd_texts  s     d--z:#'#:#:#K#KDQVK#XX
 ?DD$11!4DJDz?aLL78I
 5F?VE]1Cs:1V%=D))#eZ*@)RV)WWW% Y& KPFG$11>>qAAA 
 
 E Xsk   D('C CC 
D(D!'A-D(D&D(C D(#DDDDD(D	D(c                  g }g }t        |      D ]  \  }\  }}|r||   }	nKt        t        j                               }	t	        j
                  t        |	d            j                  d      }	|r||   ni }
ddt        |	t        |t        t        j                  |t        j                        j                         t        t!        j"                  |
      i}|
r\|
j%                         D ci c].  \  }}|| j&                  D cg c]  }|j(                   c}v r||0 }}}}|j+                  |       |j-                  |       |j-                  |	       t/        |      t0        k(  sZ| j2                  j5                  |      }t7        d |D              st9        |      g } t/        |      dk(  r|S | j2                  j5                  |      }t7        d	 |D              r|S t9        |      c c}w c c}}}w )
$Add embeddings to an existing index.utf-8ascii@search.actionuploaddtype	documentsc              3  4   K   | ]  }|j                     y wr   	succeeded.0rs     rK   	<genexpr>z-AzureSearch.add_embeddings.<locals>.<genexpr>       911;;9   r   c              3  4   K   | ]  }|j                     y wr   r   r   s     rK   r   z-AzureSearch.add_embeddings.<locals>.<genexpr>       -qq{{-r   )	enumerateru   uuiduuid4base64urlsafe_b64encodebytesdecoder   r   r   nparrayfloat32tolistr   jsondumpsr   rn   rQ   updateappendr   MAX_UPLOAD_BATCH_SIZEr   upload_documentsallr   r   text_embeddingsr   r   r   datair   	embeddingr(   r0   dockvrW   additional_fieldsresponses                    rK   r   zAzureSearch.add_embeddings  s     $-o$> #	 A i1g$**,'..uS'/BCJJ7S'0y|bH !(3%rxx	'L'S'S'UH!5C  !) 0% %1T[[9QVV99 qD%! %
 

,-KKJJsO4y11;;77$7G999,X66G#	L t9>J ;;//$/?-H--J$X..1 :%s   ,G8
G3	G8
3G8
c               ,  K   g }g }t        |      D ]  \  }\  }}|r||   nt        t        j                               }	t	        j
                  t        |	d            j                  d      }	|r||   ni }
ddt        |	t        |t        t        j                  |t        j                        j                         t        t!        j"                  |
      i}|
r\|
j%                         D ci c].  \  }}|| j&                  D cg c]  }|j(                   c}v r||0 }}}}|j+                  |       |j-                  |       |j-                  |	       t/        |      t0        k(  sY| j2                  j5                  |       d{   }t7        d |D              st9        |      g } t/        |      d	k(  r|S | j2                  j5                  |       d{   }t7        d
 |D              r|S t9        |      c c}w c c}}}w 7 7 1w)r   r   r   r   r   r   r   Nc              3  4   K   | ]  }|j                     y wr   r   r   s     rK   r   z.AzureSearch.aadd_embeddings.<locals>.<genexpr>I  r   r   r   c              3  4   K   | ]  }|j                     y wr   r   r   s     rK   r   z.AzureSearch.aadd_embeddings.<locals>.<genexpr>U  r  r   )r  ru   r  r  r  r  r  r  r   r   r   r	  r
  r  r  r   r  r  r   rn   rQ   r  r  r   r  r   r  r  r   r  s                    rK   r   zAzureSearch.aadd_embeddings!  s      $-o$> 	 A i!$q's4::<'8C**5g+>?FFwOC'0y|bH !(3%rxx	'L'S'S'UH!5C  !) 0% %1T[[9QVV99 qD%! %
 

,-KKJJsO4y11!%!2!2!C!Cd!C!SS999,X66?	D t9>J **;;d;KK-H--J$X..1 :% T LsP   C+H-H	
H	H	
 A	H+H
HAH H!#HH	
	HHc                    |r=| j                   j                  |D cg c]
  }t        |i c}      }t        |      dkD  S yc c}w )Delete by vector ID.

        Args:
            ids: List of ids to delete.

        Returns:
            bool: True if deletion is successful,
            False otherwise.
        r   F)r   delete_documentsr   r   r   r   rI   r  ress        rK   deletezAzureSearch.deleteZ  sA     ++../L1A/LMCs8a< 0Ms   Ac                   K   |rA| j                   j                  |D cg c]  }d|i c}       d{   }t        |      dkD  S yc c}w 7 w)r"  r'   Nr   F)r   r#  r   r$  s        rK   adeletezAzureSearch.adeletej  sM      ))::s;S!T1I;STTCs8a< <TTs   AA
AAAr\   )r   c                   |xs | j                   }|dk(  r | j                  |fd|i|}|S |dk(  r | j                  |fd|i|}|S |dk(  r | j                  |fd|i|}|S t	        d| d      N
similarityr  hybridsemantic_hybridsearch_type of  not allowed.)r   ro   hybrid_searchsemantic_hybrid_searchr   r   queryr  r   rI   docss         rK   similarity_searchzAzureSearch.similarity_searchz  s     "5T%5%5,&%4%%e;q;F;D  H$%4%%e;q;F;D
 	 --.4..uDDVDD  {m=IJJrM   )r  c                   |j                  d| j                        }|dk(  r | j                  |fd|i|S |dk(  r | j                  |fd|i|S |dk(  r | j                  |fd|i|S t        d| d      )$Run similarity search with distance.r   r+  r  r,  r-  r.  r/  )rU   r   vector_search_with_scorehybrid_search_with_score!semantic_hybrid_search_with_scorer   r   r3  r  rI   r   s        rK   similarity_search_with_scorez(AzureSearch.similarity_search_with_score  s     jj0@0@A,&0400F!FvFFH$0400F!FvFF--9499%O1OOO{m=IJJrM   c               ,  K   |xs | j                   }|dk(  r | j                  |fd|i| d {   }|S |dk(  r | j                  |fd|i| d {   }|S |dk(  r | j                  |fd|i| d {   }|S t	        d| d      7 ]7 ;7 wr*  )r   avector_searchahybrid_searchasemantic_hybrid_searchr   r2  s         rK   asimilarity_searchzAzureSearch.asimilarity_search  s      "5T%5%5,&,,,UBaB6BBD  H$,,,UBaB6BBD
 	 --555eKqKFKKD  {m=IJJ CBKs3   .BB#BB#B8B9BBBc               8  K   |j                  d| j                        }|dk(  r | j                  |fd|i| d{   S |dk(  r | j                  |fd|i| d{   S |dk(  r | j                  |fd|i| d{   S t        d| d      7 W7 77 w)	r7  r   r+  r  Nr,  r-  r.  r/  )rU   r   avector_search_with_scoreahybrid_search_with_score"asemantic_hybrid_search_with_scorer   r;  s        rK   asimilarity_search_with_scorez)AzureSearch.asimilarity_search_with_score  s      jj0@0@A,&777MMfMMMH$777MMfMMM--@@@V!VvVVV{m=IJJ NMVs3   :BB!BB!B BBBB)score_thresholdc               p     | j                   |fd|i|}||S |D cg c]  }|d   |k\  s| c}S c c}w Nr     r8  r   r3  r  rG  rI   resultr   s          rK   'similarity_search_with_relevance_scoresz3AzureSearch.similarity_search_with_relevance_scores  X     /..uDDVD & 	
 $?qt'>!?	
 @   33c                  K    | j                   |fd|i| d {   }||S |D cg c]  }|d   |k\  s| c}S 7 !c c}w wrI  rC  rL  s          rK   (asimilarity_search_with_relevance_scoresz4AzureSearch.asimilarity_search_with_relevance_scores  e      6t55eKqKFKK & 	
 $?qt'>!?	
 L @    A=A??AA)filtersc               `    | j                  |||      }|D cg c]  \  }}|	 c}}S c c}}w )\  
        Returns the most similar indexed documents to the query text.

        Args:
            query (str): The query text for which to find similar documents.
            k (int): The number of documents to return. Default is 4.

        Returns:
            List[Document]: A list of documents that are most similar to the query text.
        r  rV  rK  r   r3  r  rV  rI   docs_and_scoresr  _s           rK   ro   zAzureSearch.vector_search  s3     77G7T"12Q222s   *c               |   K   | j                  |||       d{   }|D cg c]  \  }}|	 c}}S 7 c c}}w w)rX  rY  NrR  rZ  s           rK   r>  zAzureSearch.avector_search  sJ      !% > >Q !? !
 
 #22Q22
 3s   <4	<6<<c                h    | j                  |      } | j                  |d|fd|i|}t        |      S )  Return docs most similar to query.

        Args:
            query (str): Text to look up documents similar to.
            k (int, optional): Number of Documents to return. Defaults to 4.
            filters (str, optional): Filtering expression. Defaults to None.

        Returns:
            List[Tuple[Document, float]]: List of Documents most similar
                to the query and score for each
         rV  r   _simple_search_results_to_documentsr   r3  r  rV  rI   r  resultss          rK   r8  z$AzureSearch.vector_search_with_score  s?    $ $$U+	%$%%iQRR6R$W--rM   c                   K   | j                  |       d{   } | j                  |d|fd|i| d{   }t        |       d{   S 7 67 7 w)r_  Nr`  rV  r   _asimple_search_aresults_to_documentsrd  s          rK   rC  z%AzureSearch.avector_search_with_score  sj     $ ,,U33	,,,r1
&-
17
 
 ,G444 4
 51   AAAAA	A
AAAc                   | j                  |      } | j                  |d|fd|i|}t        |t        j                  |      ||      S )"  Perform a search and return results that are reordered by MMR.

        Args:
            query (str): Text to look up documents similar to.
            k (int, optional): How many results to give. Defaults to 4.
            fetch_k (int, optional): Total results to select k from.
                Defaults to 20.
            lambda_mult: Number between 0 and 1 that determines the degree
                        of diversity among the results with 0 corresponding
                        to maximum diversity and 1 to minimum diversity.
                        Defaults to 0.5
            filters (str, optional): Filtering expression. Defaults to None.

        Returns:
            List[Tuple[Document, float]]: List of Documents most similar
                to the query and score for each
        r`  rV  query_embeddinglambda_multr  r   rb  0_reorder_results_with_maximal_marginal_relevancer	  r
  	r   r3  r  fetch_kro  rV  rI   r  re  s	            rK   (max_marginal_relevance_search_with_scorez4AzureSearch.max_marginal_relevance_search_with_score,  sU    6 $$U+	%$%%iWXgXQWX?RXXi%8kUV
 	
rM   c                  K   | j                  |       d{   } | j                  |d|fd|i| d{   }t        |t        j                  |      ||       d{   S 7 M7 07 w)rl  Nr`  rV  rm  r   rh  1_areorder_results_with_maximal_marginal_relevancer	  r
  rr  s	            rK   )amax_marginal_relevance_search_with_scorez5AzureSearch.amax_marginal_relevance_search_with_scoreN  s     6 ,,U33	,,,r7
,3
7=
 
 GHHY/#	
 
 	
 4

1   A+A%A+A')A+ A)!A+'A+)A+c                b     | j                   |fd|i|}|D cg c]  \  }}|	 c}}S c c}}w )rX  r  r9  r   r3  r  rI   r[  r  r\  s          rK   r0  zAzureSearch.hybrid_searchu  s8     8$77MMfM"12Q222s   +c                ~   K    | j                   |fd|i| d{   }|D cg c]  \  }}|	 c}}S 7 c c}}w w)rX  r  NrD  r|  s          rK   r?  zAzureSearch.ahybrid_search  sE      !? > >u T TV TT"12Q22 U2s   =5	=7==c                h    | j                  |      } | j                  |||fd|i|}t        |      S )!  Return docs most similar to query with a hybrid query.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.

        Returns:
            List of Documents most similar to the query and score for each
        rV  ra  rd  s          rK   r9  z$AzureSearch.hybrid_search_with_score  s?    " $$U+	%$%%iU7UfU$W--rM   c                   K   | j                  |       d{   } | j                  |||fd|i| d{   }t        |       d{   S 7 67 7 w)r  NrV  rg  rd  s          rK   rD  z%AzureSearch.ahybrid_search_with_score  sj     " ,,U33	,,,ua
)0
4:
 
 ,G444 4
 5rj  c               p     | j                   |fd|i|}||S |D cg c]  }|d   |k\  s| c}S c c}w rI  r{  rL  s          rK   #hybrid_search_with_relevance_scoresz/AzureSearch.hybrid_search_with_relevance_scores  rO  rP  c                  K    | j                   |fd|i| d {   }||S |D cg c]  }|d   |k\  s| c}S 7 !c c}w wrI  r~  rL  s          rK   $ahybrid_search_with_relevance_scoresz0AzureSearch.ahybrid_search_with_relevance_scores  rT  rU  c                   | j                  |      } | j                  |||fd|i|}t        |t        j                  |      ||      S )  Return docs most similar to query with a hybrid query
            and reorder results by MMR.

        Args:
            query (str): Text to look up documents similar to.
            k (int, optional): Number of Documents to return. Defaults to 4.
            fetch_k (int, optional): Total results to select k from.
                Defaults to 20.
            lambda_mult: Number between 0 and 1 that determines the degree
                        of diversity among the results with 0 corresponding
                        to maximum diversity and 1 to minimum diversity.
                        Defaults to 0.5
            filters (str, optional): Filtering expression. Defaults to None.

        Returns:
            List of Documents most similar to the query and score for each
        rV  rm  rp  rr  s	            rK   /hybrid_max_marginal_relevance_search_with_scorez;AzureSearch.hybrid_max_marginal_relevance_search_with_score  s`    8 $$U+	%$%%ug
/6
:@
 @RXXi%8kUV
 	
rM   c                  K   | j                  |       d{   } | j                  |||fd|i| d{   }t        |t        j                  |      ||       d{   S 7 M7 07 w)r  NrV  rm  rv  rr  s	            rK   0ahybrid_max_marginal_relevance_search_with_scorez<AzureSearch.ahybrid_max_marginal_relevance_search_with_score  s     8 ,,U33	,,,ug
/6
:@
 
 GHHY/#	
 
 	
 4

ry  c          
         ddl m}  | j                  j                  d| |t	        j
                  |t        j                        j                         |t              g||d|S )  Perform vector or hybrid search in the Azure search index.

        Args:
            embedding: A vector embedding to search in the vector space.
            text_query: A full-text search query expression;
                Use "*" or omit this parameter to perform only vector search.
            k: Number of documents to return.
            filters: Filtering expression.
        Returns:
            Search items
        r   VectorizedQueryr   vectork_nearest_neighborsrn   search_textvector_queriesfiltertoprw   )	azure.search.documents.modelsr  r   searchr	  r
  r  r  r   r   r  
text_queryr  rV  rI   r  s          rK   rb  zAzureSearch._simple_search,  si    ( 	B!t{{!! 
"88IRZZ@GGI()0 
 
 	
rM   c          
        K   ddl m}  | j                  j                  d| |t	        j
                  |t        j                        j                         |t              g||d| d{   S 7 w)r  r   r  r   r  r  Nrw   )	r  r  r   r  r	  r
  r  r  r   r  s          rK   rh  zAzureSearch._asimple_searchP  sy     ( 	B-T&&-- 
"88IRZZ@GGI()0 
 
 
 	
 
s   A*A3,A1-A3c                d     | j                   |fd|i|}|D cg c]  \  }}}|
 c}}S c c}}w )  
        Returns the most similar indexed documents to the query text.

        Args:
            query (str): The query text for which to find similar documents.
            k (int): The number of documents to return. Default is 4.
            filters: Filtering expression.

        Returns:
            List[Document]: A list of documents that are most similar to the query text.
        r  ,semantic_hybrid_search_with_score_and_rerankr|  s          rK   r1  z"AzureSearch.semantic_hybrid_searcht  sF     L$KK

 
 &55	Q555s   ,c                   K    | j                   |fd|i| d{   }|D cg c]  \  }}}|
 c}}S 7 c c}}w w)r  r  N-asemantic_hybrid_search_with_score_and_rerankr|  s          rK   r@  z#AzureSearch.asemantic_hybrid_search  sV      !S R R!
!
 !
 
 &55	Q55
 6s   >6	>8>>c                    | j                   |fd|i|}|dk(  r!|D 	cg c]  \  }}}	|||k\  r||f c}	}}S |dk(  r!|D 	
cg c]  \  }}	}
||
|k\  r||
f c}
}	}S yc c}	}}w c c}
}	}w )  
        Returns the most similar indexed documents to the query text.

        Args:
            query (str): The query text for which to find similar documents.
            k (int): The number of documents to return. Default is 4.
            score_type: Must either be "score" or "reranker_score".
                Defaulted to "score".
            filters: Filtering expression.

        Returns:
            List[Tuple[Document, float]]: A list of documents and their
                corresponding scores.
        r  scoreNreranker_scorer  r   r3  r  
score_typerG  rI   r[  r  r  r\  r  s              rK   r:  z-AzureSearch.semantic_hybrid_search_with_score  s    . L$KK

 
   &5 !C"*e.F e 
 ++ /> *CN"*n.O n%  ,s   A#A*c                  K    | j                   |fd|i| d{   }|dk(  r!|D 	cg c]  \  }}}	|||k\  r||f c}	}}S |dk(  r!|D 	
cg c]  \  }}	}
||
|k\  r||
f c}
}	}S y7 Qc c}	}}w c c}
}	}w w)r  r  Nr  r  r  r  s              rK   rE  z.AzureSearch.asemantic_hybrid_search_with_score  s     . !S R R!
!
 !
 
   &5 !C"*e.F e 
 ++ /> *CN"*n.O n%  ,
s,   A=A-A=A/A=A6'A=/A=c               *   ddl m}  | j                  j                  d| |t	        j
                  | j                  |      t        j                        j                         |t              g|d| j                  dd|d|}|j                         xs g }i }|D ](  }	|	j                  |	j                  d||	j                  <   * |D 
cg c]/  }
t        |
j!                  t"              i t$        |
v rt$        |
j!                  t$              ini t&        |
v rt)        j*                  |
t&                 n,|
j-                         D ci c]  \  }}|t        k7  r|| c}}|
j/                  d	      rA|
j/                  d	i g      d   j                  |
j/                  d	i g      d   j                  dni |j/                  |
j/                  t$        d
      d
      d      t1        |
d         t1        |
d         f2 }}}
}|S c c}}w c c}}}
w )L  Return docs most similar to query with a hybrid query.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            filters: Filtering expression.

        Returns:
            List of Documents most similar to the query and score for each
        r   r  r   r  semantic
extractiver  r  r  
query_typer   query_captionquery_answerr  r   
highlights@search.captionsr`  captionsanswerspage_contentr0   @search.score@search.reranker_scorerw   )r  r  r   r  r	  r
  r   r  r  r   r   get_answersr   r  r(   r   popr   r   r   r  loadsr   rU   float)r   r3  r  rV  rI   r  re  semantic_answerssemantic_answers_dictsemantic_answerrM  r  r4  s                rK   r  z8AzureSearch.semantic_hybrid_search_with_score_and_rerank  sA    	B$$++$$ 
88D$4$4U$;2::NUUW()0 !(,(H(H&%
 
$ #..06B&(/ 	O',,-88:!/"5"56	` "U+
 +
T Q !'N!;!  )F2 '

9(=>!#	!  /&8 !JJvo'>? -3LLN"$(Aq#$(=#= !"1"!2 $*::.@#A -3JJ7IB4,P()-&&*d28**=ORTQU2V()3&&0j!" &('<'@'@ &

9b 9 "(!$J f_-.f567O(+
 +
X ?"+
s   A<H	HB#HHc                 K   ddl m} | j                  |       d{   } | j                  j                  d| |t        j                  |t
        j                        j                         |t              g|d| j                  dd|d| d{   }|j                          d{   xs g }i }	|D ](  }
|
j                  |
j                  d	|	|
j                  <   * |2 cg c3 d{   }t        |j!                  t"              i t$        |v rt$        |j!                  t$              ini t&        |v rt)        j*                  |t&                 n,|j-                         D ci c]  \  }}|t        k7  r|| c}}|j/                  d
      rA|j/                  d
i g      d   j                  |j/                  d
i g      d   j                  d	ni |	j/                  |j/                  t$        d      d      d      t1        |d         t1        |d         f77 7 7 }7 <c c}}w 6 nc c}}}w }}}}|S w)r  r   r  Nr   r  r  r  r  r  r  r`  r  r  r  r  rw   )r  r  r   r   r  r	  r
  r  r  r   r   r  r   r  r(   r   r  r   r   r   r  r  r   rU   r  )r   r3  r  rV  rI   r  r  re  r  r  r  rM  r  r4  s                 rK   r  z9AzureSearch.asemantic_hybrid_search_with_score_and_rerank?  sn     	B))%000))00 
88F"**=DDF()0 !(,(H(H&%
 
 
$ #*"5"5"77>B&(/ 	O',,-88:!/"5"56	` !(U+
 +
T Q !'N!;!  )F2 '

9(=>!#	!  /&8 !JJvo'>? -3LLN"$(Aq#$(=#= !"1"!2 $*::.@#A -3JJ7IB4,P()-&&*d28**=ORTQU2V()3&&0j!" &('<'@'@ &

9b 9 "(!$J f_-.f567O(9 1
$ 8+
"+
 +
 +
X sx   IH"A5IH%I+H(,=I)H6+H4
/H+0H4
3A7H6*H. B"H6"I%I(I+H4
.H65Ir`  langchain-indexc	                L     | ||||f||d|	}
 |
j                   ||fi |	 |
S N)rn   rJ   )r   clsr   r  r   r   r   rJ   rt   rn   rI   azure_searchs              rK   
from_textszAzureSearch.from_texts  sP     !	

 "7
 
 	ui:6:rM   c	                h   K    | ||||f||d|	}
 |
j                   ||fi |	 d {    |
S 7 wr  )r   r  s              rK   afrom_textszAzureSearch.afrom_texts  s`      !	

 "7
 
 &l%%eYA&AAA 	Bs   '202)r   r   rt   rn   c          
        K   t        |      \  }}	|	t        d      t        |	d         }
 | d||||||
d|} |j                  ||fi | d {    |S 7 wNz0Cannot create AzureSearch from empty embeddings.rJ  )r   r   rt   r   rn   r   rw   )_peekr   r   r   r  r  r  r   r   r   rt   rn   rI   first_text_embeddingr   r  s               rK   afrom_embeddingszAzureSearch.afrom_embeddings  s      16o0F--'OPP#&';A'>#?  
"7-!(%=
 
 +l**?IPPPP 	Qs   AAAAc          
         t        |      \  }}	|	t        d      t        |	d         }
 | d||||||
d|} |j                  ||fi | |S r  )r  r   r   r   r  s               rK   from_embeddingszAzureSearch.from_embeddings  s     16o0F--'OPP#&';A'>#?  
"7-!(%=
 
 	$##OYI&IrM   c                    |j                  dd      xs g }|j                  | j                                t        dd| i|d|iS )a  Return AzureSearchVectorStoreRetriever initialized from this VectorStore.

        Args:
            search_type (Optional[str]): Defines the type of search that
                the Retriever should perform.
                Can be "similarity" (default), "hybrid", or
                    "semantic_hybrid".
            search_kwargs (Optional[Dict]): Keyword arguments to pass to the
                search function. Can include things like:
                    score_threshold: Minimum relevance threshold
                        for similarity_score_threshold
                    fetch_k: Amount of documents to pass to MMR algorithm (Default: 20)
                    lambda_mult: Diversity of results returned by MMR;
                        1 for minimum diversity and 0 for maximum. (Default: 0.5)
                    filter: Filter by document metadata

        Returns:
            AzureSearchVectorStoreRetriever: Retriever class for VectorStore.
        tagsNvectorstorerw   )r  extend_get_retriever_tagsAzureSearchVectorStoreRetriever)r   rI   r  s      rK   as_retrieverzAzureSearch.as_retriever  sG    ( zz&$'-2D,,./.U4U6UPTUUrM   )r,  NNNNNNN) r   ru   r   ru   rt   ru   r   zUnion[Callable, Embeddings]r   ru   r   Optional[str]rn   Optional[List[SearchField]]ro   Optional[VectorSearch]r   COptional[Union[SemanticConfiguration, List[SemanticConfiguration]]]rq   Optional[List[ScoringProfile]]rr   r  rs   Optional[CorsOptions]r   zOptional[int]r   Optional[Dict[str, Any]]rJ   r  rI   r   )rv   None)rv   zOptional[Embeddings])r   ru   rv   List[float]r   )
r   zIterable[str]r   Optional[List[dict]]r   Optional[List[str]]rI   r   rv   	List[str])r  !Iterable[Tuple[str, List[float]]]r   r  r   r  rv   r  )r   r  rI   r   rv   bool)r\   )
r3  ru   r  rF   r   r  rI   r   rv   List[Document])r3  ru   r  rF   rI   r   rv   List[Tuple[Document, float]])
r3  ru   r  rF   rG  Optional[float]rI   r   rv   r  )
r3  ru   r  rF   rV  r  rI   r   rv   r  )r\   N)
r3  ru   r  rF   rV  r  rI   r   rv   r  )r\            ?)r3  ru   r  rF   rs  rF   ro  r  rV  r  rI   r   rv   r  )r3  ru   r  rF   rI   r   rv   r  )r  r  r  ru   r  rF   rV  r  rI   r   rv   zSearchItemPaged[dict])r  r  r  ru   r  rF   rV  r  rI   r   rv   zAsyncSearchItemPaged[dict])r\   r  )r3  ru   r  rF   r  z"Literal['score', 'reranker_score']rG  r  rI   r   rv   r  )
r3  ru   r  rF   rV  r  rI   r   rv   z#List[Tuple[Document, float, float]])Nr`  r`  Nr  N)r  Type[AzureSearch]r   r  r  r   r   r  r   ru   r   ru   rJ   r  rt   ru   rn   r  rI   r   rv   r   )r  r  r  r  r  r   r   r  r   ru   r   ru   rt   ru   rn   r  rI   r   rv   r   )rI   r   rv   r  )1__name__
__module____qualname____doc__r   r   propertyr   r   r   r   r   r   r&  r(  r5  r<  rA  rF  rN  rS  ro   r>  r8  rC  rt  rx  r0  r?  r9  rD  r  r  r  r  rb  rh  r1  r@  r:  rE  r  r  classmethodr  r  r  r  r  rw   rM   rK   r   r     sp   0 $59.204 ;?15.2v*" 37EI/3'v*"v* v* 	v*
 8v* v* &3v* ,v* .v*"
v* 9v* "/v* ,v*" #0#v*$ +C%v*&  -'v*( )v*p!2 
 
A +/Q
 %)QQ (Q
 "Q Q 
QB +/X
 %)XX (X
 "X X 
XB +/;/
 %);/:;/ (;/
 ";/ 
;/@ +/7/
 %)7/:7/ (7/
 "7/ 
7/r & 
 &* 
 #  
( '(KK #K36K	%K" 
 &* 
 #  
( '(KK #K36K	%K" 

 ,0

 

 )
 
 
&
$ 

 ,0

 

 )
 
 
&
  $%3BF33 32?3RU3	3" $%3BF33 32?3RU3	3* !%	.. . 	.
 . 
&.4 !%	55 5 	5
 5 
&58   
 "& 
 
  
 	 

  
  
  
 
& 
J  %
 "&%
%
 %
 	%

 %
 %
 %
 
&%
N3 $%33 3033	3& !%	.. . 	.
 . 
&.2 !%	55 5 	5
 5 
&56 

 ,0

 

 )
 
 
&
$ 

 ,0

 

 )
 
 
&
$  #
 "&#
#
 #
 	#

 #
 #
 #
 
&#
P  &
 "&&
&
 &
 	&

 &
 &
 &
 
&&
\ "&"
"
 "
 	"
 "
 "
 
"
T "&"
"
 "
 	"
 "
 "
 
$"
J $%66 6036	6( $%66 6036	6, 9@	% ,0%% % 7	% )% % 
&%T 9@	% ,0%% % 7	% )% % 
&%P $%UBFUU U2?URUU	,Up $%VBFVV V2?VRUV	,Vp 
 +/%' "/3+.2  (	
  #   -  ,  
 2 
 +/%' "/3+.2  (	
  #   -  ,  
 2 
 +/	 &( "+.2:  (	  #   ,  
 : 
 +/	 &( "+.2:  (	  #   ,  
 <VrM   r   c                      e Zd ZU dZded<   	 dZded<   	 dZded	<   	 i Zd
ed<   	 dZded<    e	d      Z
 ed      edd              Z	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZy)r  z-Retriever that uses `Azure Cognitive Search`.r   r  r,  ru   r   r\   rF   r  dictsearch_kwargs)r+  similarity_score_thresholdr,  hybrid_score_thresholdr-  semantic_hybrid_score_thresholdzClassVar[Collection[str]]allowed_search_typesT)arbitrary_types_allowedbefore)modec                j    d|v r.|d   }|| j                   vrt        d| d| j                          |S )zValidate search type.r   r.  z  not allowed. Valid values are: )r  r   )r  valuesr   s      rK   validate_search_typez4AzureSearchVectorStoreRetriever.validate_search_typeC  sS     F" /K#":":: %k]2R//02  rM   c                   i | j                   |}| j                  dk(  r+ | j                  j                  |fd| j                  i|}|S | j                  dk(  r= | j                  j
                  |fd| j                  i|D cg c]  \  }}|	 }}}|S | j                  dk(  r+ | j                  j                  |fd| j                  i|}|S | j                  dk(  r= | j                  j                  |fd| j                  i|D cg c]  \  }}|	 }}}|S | j                  dk(  r+ | j                  j                  |fd| j                  i|}|S | j                  dk(  r= | j                  j                  |fd| j                  i|D cg c]  \  }}|	 }}}|S t        d| j                   d	      c c}}w c c}}w c c}}w 
Nr+  r  r  r,  r  r-  r  r.  r/  )r  r   r  ro   r  rN  r0  r  r1  r:  r   )r   r3  run_managerrI   paramsr4  r  r\  s           rK   _get_relevant_documentsz7AzureSearchVectorStoreRetriever._get_relevant_documentsP  s-    2D&&1&1|+14##11%L466LVLD8 7 !== Wd..VV!VV'-C D 4 ) )14##11%L466LVLD& % !99 Sd..RR!VV'-C D "  !22:4##::5UDFFUfUD  !BB Qd..PP!VV'-C D   t/?/?.@NOO3s   F<GGc               *  K   i | j                   |}| j                  dk(  r3 | j                  j                  |fd| j                  i| d {   }|S | j                  dk(  rG | j                  j
                  |fd| j                  i| d {   }|D cg c]  \  }}|	 }}}|S | j                  dk(  r3 | j                  j                  |fd| j                  i| d {   }|S | j                  dk(  rG | j                  j                  |fd| j                  i| d {   }|D cg c]  \  }}|	 }}}|S | j                  dk(  r3 | j                  j                  |fd| j                  i| d {   }|S | j                  dk(  rE | j                  j                  |fd| j                  i| d {   D cg c]  \  }}|	 }}}|S t        d| j                   d	      7 7 ec c}}w 7 7 c c}}w 7 7 Jc c}}w wr  )r  r   r  r>  r  rS  r?  r  r@  rE  r   )	r   r3  r  rI   r  r4  r[  r  r\  s	            rK   _aget_relevant_documentsz8AzureSearchVectorStoreRetriever._aget_relevant_documentsw  sn     2D&&1&1|+8))88S$&&SFSSD< ; !==Od&&OO!VV'-  
 '66FCC6D6. - )8))88S$&&SFSSD* ) !99Kd&&KK!VV'-  
 '66FCC6D6  !22A))AA#) D  !BB %XD$4$4$W$W%!VV%'-% C D   t/?/?.@NOO; T 7S 7s   AHG2AHG5	HG8&A H&G>'AH(H)	H2H>A H>H	?AH HHHH5H8HHHHHN)r  r	   rv   r   )r3  ru   r  r   rI   r   rv   r  )r3  ru   r  r   rI   r   rv   r  )r  r  r  r  __annotations__r   r  r  r  r   model_configr   r  r  r  r	  rw   rM   rK   r  r  !  s    7?K- AsJ(M473   $L (#	  $	%% 4% 	%
 
%N(( 9	(
 ( 
(rM   r  c                \    | D cg c]  }t        |      t        |d         f }}|S c c}w Nr  _result_to_documentr  re  rM  r4  s      rK   rc  rc    sF     
   '&)*	
D  Ks    )c                t   K   | 2 cg c3 d {   }t        |      t        |d         f#7 6 }}|S c c}w wr  r  r  s      rK   ri  ri    sU      $ 
   '&)*	
 D  Ks$   83.,
.3.3	8c                ,  K   | 2 cg c3 d {   }t        |      t        |d         |t           f+7 &6 nc c}w }}t        t        t        |       \  }}}t        ||||      }	g }
|	D ]#  }|dk(  r |
S |
j                  ||   ||   f       % |
S wNr  )r  ro  r  r  r   mapr   r   r   r  re  rn  ro  r  rM  r4  r   scoresvectorsnew_orderingretrW   s               rK   rw  rw    s      $  	  '&)*()	
  D  "%T3:!6Ivw .A;L
 )+C .7 J 	

IaL&),-	. Js'   B864
6#868ABc                   | D cg c]#  }t        |      t        |d         |t           f% }}|sg S t        t        t        |       \  }}}t        ||||      }	g }
|	D ]#  }|dk(  r |
S |
j                  ||   ||   f       % |
S c c}w r  r  r  s               rK   rq  rq    s      	  '&)*()	
D  	!$T3:!6Ivw .A;L
 )+C .7 J 	

IaL&),-	. J3s   (Bc                x   t         | v r>t        | t            t              r
| t            }nNt        j                  | t                  }n1| j                         D ci c]  \  }}|t        t        fvr|| }}}t        | v rt        | j                  t              i}ni }t        | t           i ||      S c c}}w )Nr  )r   r   r  r  r  r   r   r   r   r  r   )rM  fields_metadatar(   r   	fields_ids        rK   r  r     s    & f_-t4$_5O"jj)@AO %lln
U0.AA J
 
 F

9 56		N+


 
s   B6c                    	 t        |       }t        |      }t        j                  |g|      } | |fS # t        $ r | |fcY S w xY wr   )iternext	itertoolschainStopIteration)iterabler*   iteratorr   s       rK   r  r    sO    !>X??E7H5 !  !s   03 AA)NNNNNNNNNr   NFN) rN   ru   rt   ru   r(   r  rJ   r  r   r  rn   r  ro   r  r   r  rq   r  rr   r  r   r  rP   r  rs   r  r   r  r   r  rv   z&Union[SearchClient, AsyncSearchClient])re  SearchItemPaged[Dict]rv   r  )re  zAsyncSearchItemPaged[Dict]rv   r  )r  r\   )
re  r(  rn  z
np.ndarrayro  r  r  rF   rv   r  )rM  r	   rv   r   r   )r&  r
   r*   zOptional[Any]rv   zTuple[Iterable, Any])J
__future__r   r   r  r#  r  loggingrG   r  typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   numpyr	  langchain_core.callbacksr   r   langchain_core.documentsr   langchain_core.embeddingsr   langchain_core.exceptionsr   langchain_core.retrieversr   langchain_core.utilsr   langchain_core.vectorstoresr   pydanticr   r   &langchain_community.vectorstores.utilsr   	getLoggerr   r{   r   r   r|   r   r   r~   r!   r"   r#   r$   r%   r   r   r   r   r  r   r   r  rc  ri  rw  rq  r  r  rw   rM   rK   <module>r7     s   "          "  . 0 8 3 - 3 0 M				D  )@$	 $(
 %+/ 
  *BJ   +/15*.,0 	7;-126 +*.AE#q
q
q
 
q
 )	q

 "/q
 (q
 *q
q
 5q
 +q
 0q
 q
 (q
  !q
" '?#q
$ ,%q
hYV+ YVx(~m ~B
"
!

'
!
  	"  	
 "H 	 "     	 
 " F6!rM   