
    {h
                      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l0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8 d dl7m5Z9 d dl:m;Z;m<Z<m=Z=m>Z>m?Z?  e&ddd      Z@ e&ddd      ZA e&ddd      ZB e&ddd      ZCdZD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d(	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d)dZE G d de(      ZF G d  d!e$      ZG	 	 	 	 d*d"ZH	 	 	 	 d+d#ZI	 	 d,	 	 	 	 	 	 	 	 	 d-d$ZJ	 	 d,	 	 	 	 	 	 	 	 	 d-d%ZKd.d&ZLd/d0d'ZMy)1    )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)TokenCredential)AsyncTokenCredential)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                  567 ddl m5m}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} ddlm}m}m}m}m}m}m} m}!m}"m}#m}$m}%m}&  G 5fd	d
|      }'|xs i }|
xs g }
|9|j;                         dk(  r |       }(|(j=                  d       |(})n. ||      }(|(})n#| |'|      }(|(})n|xs  |       }(|xs  |       }) |d&| |(|d|}*	 |*j?                  |       |s |d&| ||(|d%|S  |d&| ||)|d%|S # |$ r ||D +ci c]  }+|+j@                  |+jB                   nc c}+w c}+6|
D ,ci c]  },|,j@                  |,jB                   nc c},w c},7tE        7jG                               tE        6jG                               z
  D -ci c]  \  }}-|7|    nc c}-}w }.}}-tI        |.      dkD  rEd'67fd}/djK                  |.D 0cg c]
  }0 |/|0       nc c}0w c}0      }1tM        d|. d|1       |
}|i |# |d|$jN                   |ddd|%jP                               |d|$jR                   ||%jP                              g |&dd       |&dd      g      }|rtU        |tV              s|g} |"||      }2n,|r( || |! | tX               g!      "      }3 |"|3g#      }2nd }2 |||||2||	|$      }4|*j[                  |4       Y w xY w)(Nr   )AccessTokenAzureKeyCredentialr   )ResourceNotFoundError)DefaultAzureCredentialInteractiveBrowserCredential)r7   r"   )SearchIndexClient)#ExhaustiveKnnAlgorithmConfigurationExhaustiveKnnParametersHnswAlgorithmConfigurationHnswParametersSearchIndexr&   SemanticFieldSemanticPrioritizedFieldsSemanticSearchr'   VectorSearchAlgorithmKindVectorSearchAlgorithmMetricVectorSearchProfilec                  B    e Zd Zd fdZdddd	 	 	 	 	 	 	 	 	 	 	 ddZy)6_get_search_client.<locals>.AzureBearerTokenCredentialc                ^     |t        t        j                               dz         | _        y )Ni  )inttime_token)selftokenr4   s     f/var/www/html/engine/venv/lib/python3.12/site-packages/langchain_community/vectorstores/azuresearch.py__init__z?_get_search_client.<locals>.AzureBearerTokenCredential.__init__   s!    %eS-=-DEDK    NF)claims	tenant_id
enable_caec                   | j                   S N)rJ   )rK   rP   rQ   rR   scopeskwargss         rM   	get_tokenz@_get_search_client.<locals>.AzureBearerTokenCredential.get_token   s     ;;rO   )rL   str)rU   rX   rP   Optional[str]rQ   rY   rR   boolrV   r   returnr4   )__name__
__module____qualname__rN   rW   )r4   s   rM   AzureBearerTokenCredentialrF      sS    	F %)'+$		 "	 %		
 	 	 	rO   r_   INTERACTIVEz!https://search.azure.com/.default)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    rM   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rO   
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)rd   kind
parametersdefault_exhaustive_knn)rs   myHnswProfile)rd   algorithm_configuration_namemyExhaustiveKnnProfile)
algorithmsprofiles)configurationsdefault_configuration_name)
field_name)content_fields)rd   prioritized_fields)r|   )rd   fieldsvector_searchsemantic_searchscoring_profilesdefault_scoring_profilecors_options)ra   
index_namerb   rc    )rj   rX   r[   rX   ).azure.core.credentialsr4   r5   r   azure.core.exceptionsr6   azure.identityr7   r8   azure.identity.aioazure.search.documentsr   azure.search.documents.aioazure.search.documents.indexesr9   %azure.search.documents.indexes.modelsr:   r;   r<   r=   r>   r&   r?   r@   rA   r'   rB   rC   rD   ri   rW   	get_indexrd   typesetitemslenjoin
ValueErrorHNSWCOSINEEXHAUSTIVE_KNN
isinstancelistFIELDS_CONTENTcreate_index)8ra   r   r*   azure_ad_access_tokensemantic_configuration_namer   r   semantic_configurationsr   r   default_fieldsrc   r   async_ additional_search_client_optionsazure_credentialazure_async_credentialr5   r   r6   r7   r8   AsyncDefaultAzureCredentialr   AsyncSearchClientr9   r:   r;   r<   r=   r>   r&   r?   r@   rA   r'   rB   rC   rD   r_   rb   async_credentialindex_clientfdfvaluemissing_fieldsrm   rj   errorr   semantic_configurationindexr4   rk   rl   s8                                                        @@@rM   _get_search_clientr   S   s   * XW;SX3L@    _  (H'M2$#)rN 99;-'57J  !DE)+C0J)		*/0EF
%%A)?)A
1R5P5R&7 '' +	'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   D K D/.K ;E?K F)(.K G&
%C7K K c                  <   e Zd ZdZ	 	 	 	 	 	 	 	 d8ddd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   r   r   r   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)rd   r   r*   
filterable)rd   r   Textrw   )rd   r   
searchabler   vector_search_profile_name	langchainrc    )r   r   r   r   r   r   r   rc   r   r   r   )r   r   r   r   r   r   r   rc   r   r   r   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   r   _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)rK   azure_search_endpointazure_search_keyr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   r   r%   r   r   er   rc   s                             rM   rN   zAzureSearch.__init__   s*   0	  	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'$;-$;)!%-#9!
$ '+F( &fN&;#!1%,G)+(?%!1(?%-%)y  	; 	s   F. .	G7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)rK   loops     rM   __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 rT   )r   r   r   )rK   s    rM   
embeddingszAzureSearch.embeddings  s.    
 $11:> ##	
 	
rO   c                   K   | j                   r#| j                   j                  |       d {   S  t        t        | j                        |      S 7 $wrT   )r   aembed_queryr   r   r   )rK   texts     rM   _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rK   texts	metadatasr   rV   r   rj   s          rM   	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          rM   
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rT   	succeeded.0rs     rM   	<genexpr>z-AzureSearch.add_embeddings.<locals>.<genexpr>-       911;;9   r   c              3  4   K   | ]  }|j                     y wrT   r  r  s     rM   r  z-AzureSearch.add_embeddings.<locals>.<genexpr>9       -qq{{-r  )	enumeraterX   uuiduuid4base64urlsafe_b64encodebytesdecoder   r   r   nparrayfloat32tolistr   jsondumpsr   r   rd   updateappendr   MAX_UPLOAD_BATCH_SIZEr   upload_documentsallr   rK   text_embeddingsr   r   r   datair   	embeddingr*   r2   dockvrj   additional_fieldsresponses                    rM   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rT   r  r  s     rM   r  z.AzureSearch.aadd_embeddings.<locals>.<genexpr>f  r  r  r   c              3  4   K   | ]  }|j                     y wrT   r  r  s     rM   r  z.AzureSearch.aadd_embeddings.<locals>.<genexpr>r  r  r  )r  rX   r  r  r  r  r  r  r   r   r   r  r  r  r  r   r   r!  r   r   rd   r"  r#  r   r$  r   r%  r&  r   r'  s                    rM   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   rK   r   rV   r*  ress        rM   deletezAzureSearch.deletew  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)r5  r)   Nr   F)r   r6  r   r7  s        rM   adeletezAzureSearch.adelete  sM      ))::s;S!T1I;STTCs8a< <TTs   AA
AAAro   )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   r   hybrid_searchsemantic_hybrid_searchr   rK   queryr-  r   rV   docss         rM   similarity_searchzAzureSearch.similarity_search  s     "5T%5%5,&%4%%e;q;F;D  H$%4%%e;q;F;D
 	 --.4..uDDVDD  {m=IJJrO   )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@  rA  rB  )popr   vector_search_with_scorehybrid_search_with_score!semantic_hybrid_search_with_scorer   rK   rF  r-  rV   r   s        rM   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JrO   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   rE  s         rM   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)	rJ  r   r>  r-  Nr?  r@  rA  rB  )rh   r   avector_search_with_scoreahybrid_search_with_score"asemantic_hybrid_search_with_scorer   rO  s        rM   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-     rL  rK   rF  r-  r[  rV   resultr  s          rM   '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r]  rW  r`  s          rM   (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-  rj  r_  rK   rF  r-  rj  rV   docs_and_scoresr,  _s           rM   r   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)rl  rm  Nrf  rn  s           rM   rR  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
         rj  r   _simple_search_results_to_documentsrK   rF  r-  rj  rV   r+  resultss          rM   rL  z$AzureSearch.vector_search_with_score  s?    $ $$U+	%$%%iQRR6R$W--rO   c                   K   | j                  |       d{   } | j                  |d|fd|i| d{   }t        |       d{   S 7 67 7 w)rs  Nrt  rj  r   _asimple_search_aresults_to_documentsrx  s          rM   rW  z%AzureSearch.avector_search_with_score1  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
        rt  rj  query_embeddinglambda_multr-  r   rv  0_reorder_results_with_maximal_marginal_relevancer  r  	rK   rF  r-  fetch_kr  rj  rV   r+  ry  s	            rM   (max_marginal_relevance_search_with_scorez4AzureSearch.max_marginal_relevance_search_with_scoreJ  sU    6 $$U+	%$%%iWXgXQWX?RXXi%8kUV
 	
rO   c                  K   | j                  |       d{   } | j                  |d|fd|i| d{   }t        |t        j                  |      ||       d{   S 7 M7 07 w)r  Nrt  rj  r  r   r|  1_areorder_results_with_maximal_marginal_relevancer  r  r  s	            rM   )amax_marginal_relevance_search_with_scorez5AzureSearch.amax_marginal_relevance_search_with_scorel  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 )rl  r-  rM  rK   rF  r-  rV   ro  r,  rp  s          rM   rC  zAzureSearch.hybrid_search  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)rl  r-  NrX  r  s          rM   rS  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
        rj  ru  rx  s          rM   rM  z$AzureSearch.hybrid_search_with_score  s?    " $$U+	%$%%iU7UfU$W--rO   c                   K   | j                  |       d{   } | j                  |||fd|i| d{   }t        |       d{   S 7 67 7 w)r  Nrj  r{  rx  s          rM   rX  z%AzureSearch.ahybrid_search_with_score  sj     " ,,U33	,,,ua
)0
4:
 
 ,G444 4
 5r~  c               p     | j                   |fd|i|}||S |D cg c]  }|d   |k\  s| c}S c c}w r]  r  r`  s          rM   #hybrid_search_with_relevance_scoresz/AzureSearch.hybrid_search_with_relevance_scores  rc  rd  c                  K    | j                   |fd|i| d {   }||S |D cg c]  }|d   |k\  s| c}S 7 !c c}w wr]  r  r`  s          rM   $ahybrid_search_with_relevance_scoresz0AzureSearch.ahybrid_search_with_relevance_scores  rh  ri  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
        rj  r  r  r  s	            rM   /hybrid_max_marginal_relevance_search_with_scorez;AzureSearch.hybrid_max_marginal_relevance_search_with_score  s`    8 $$U+	%$%%ug
/6
:@
 @RXXi%8kUV
 	
rO   c                  K   | j                  |       d{   } | j                  |||fd|i| d{   }t        |t        j                  |      ||       d{   S 7 M7 07 w)r  Nrj  r  r  r  s	            rM   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

r  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_neighborsr   search_textvector_queriesfiltertopr   )	azure.search.documents.modelsr  r   searchr  r  r  r  r   rK   r+  
text_queryr-  rj  rV   r  s          rM   rv  zAzureSearch._simple_searchJ  si    ( 	B!t{{!! 
"88IRZZ@GGI()0 
 
 	
rO   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  Nr   )	r  r  r   r  r  r  r  r  r   r  s          rM   r|  zAzureSearch._asimple_searchn  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          rM   rD  z"AzureSearch.semantic_hybrid_search  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          rM   rT  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  rK   rF  r-  
score_typer[  rV   ro  r,  r  rp  r  s              rM   rN  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              rM   rY  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.captionsrt  captionsanswerspage_contentr2   @search.score@search.reranker_scorer   )r  r  r   r  r  r  r   r  r  r   r   get_answersr   r  r*   r   rK  r   r   r   r   loadsr   rh   float)rK   rF  r-  rj  rV   r  ry  semantic_answerssemantic_answers_dictsemantic_answerra  r.  rG  s                rM   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  rt  r  r  r  r  r   )r  r  r   r   r  r  r  r  r  r   r   r  r   r  r*   r   rK  r   r   r   r   r  r   rh   r  )rK   rF  r-  rj  rV   r  r  ry  r  r  r  ra  r.  rG  s                 rM   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rt  langchain-indexc	                L     | ||||f||d|	}
 |
j                   ||fi |	 |
S N)r   r   )r   clsr   r+  r   r   r   r   r   r   rV   azure_searchs              rM   
from_textszAzureSearch.from_texts  sP     !	

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

 "7
 
 &l%%eYA&AAA 	Bs   '202)r   r   r   r   c          
        K   t        |      \  }}	|	t        d      t        |	d         }
 | d||||||
d|} |j                  ||fi | d {    |S 7 wNz0Cannot create AzureSearch from empty embeddings.r^  )r   r   r   r   r   r   r   )_peekr   r   r   r  r(  r+  r   r   r   r   r   rV   first_text_embeddingr   r  s               rM   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               rM   from_embeddingszAzureSearch.from_embeddings  s     16o0F--'OPP#&';A'>#?  
"7-!(%=
 
 	$##OYI&IrO   c                    |j                  d| j                        }||d<   |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]): Overrides the type of search that
                the Retriever should perform. Defaults to `self.search_type`.
                Can be "similarity", "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.
        r   tagsNvectorstorer   )rh   r   rK  extend_get_retriever_tagsAzureSearchVectorStoreRetriever)rK   rV   r   r  s       rM   as_retrieverzAzureSearch.as_retriever&  sg    & jj0@0@A +}zz&$'-2D,,./.U4U6UPTUUrO   )r?  NNNNNNN)$r   rX   r   rY   r   rX   r   zUnion[Callable, Embeddings]r   rX   r   rY   r   Optional[List[SearchField]]r   Optional[VectorSearch]r   COptional[Union[SemanticConfiguration, List[SemanticConfiguration]]]r   Optional[List[ScoringProfile]]r   rY   r   Optional[CorsOptions]r   zOptional[int]r   Optional[Dict[str, Any]]r   rY   r   Optional[TokenCredential]r   Optional[AsyncTokenCredential]rV   r   )r[   None)r[   zOptional[Embeddings])r   rX   r[   List[float]rT   )
r   zIterable[str]r   Optional[List[dict]]r   Optional[List[str]]rV   r   r[   	List[str])r(  !Iterable[Tuple[str, List[float]]]r   r  r   r  r[   r  )r   r  rV   r   r[   rZ   )ro   )
rF  rX   r-  rH   r   rY   rV   r   r[   List[Document])rF  rX   r-  rH   rV   r   r[   List[Tuple[Document, float]])
rF  rX   r-  rH   r[  Optional[float]rV   r   r[   r  )
rF  rX   r-  rH   rj  rY   rV   r   r[   r  )ro   N)
rF  rX   r-  rH   rj  rY   rV   r   r[   r  )ro            ?)rF  rX   r-  rH   r  rH   r  r  rj  rY   rV   r   r[   r  )rF  rX   r-  rH   rV   r   r[   r  )r+  r  r  rX   r-  rH   rj  rY   rV   r   r[   zSearchItemPaged[dict])r+  r  r  rX   r-  rH   rj  rY   rV   r   r[   zAsyncSearchItemPaged[dict])ro   r  )rF  rX   r-  rH   r  z"Literal['score', 'reranker_score']r[  r  rV   r   r[   r  )
rF  rX   r-  rH   rj  rY   rV   r   r[   z#List[Tuple[Document, float, float]])Nrt  rt  Nr  N)r  Type[AzureSearch]r   r  r+  r   r   r  r   rX   r   rX   r   rY   r   rX   r   r  rV   r   r[   r   )r  r  r(  r  r+  r   r   r  r   rX   r   rX   r   rX   r   r  rV   r   r[   r   )rV   r   r[   r  )1r\   r]   r^   __doc__rN   r   propertyr   r   r   r   r   r   r9  r;  rH  rP  rU  rZ  rb  rg  r   rR  rL  rW  r  r  rC  rS  rM  rX  r  r  r  r  rv  r|  rD  rT  rN  rY  r  r  classmethodr  r  r  r  r  r   rO   rM   r   r     s   0 $59.204 ;?15.2{*" 37EI/36:AE+{*"{* ({* 	{*
 8{* {* &3{* ,{* .{*"
{* 9{* "/{* ,{*" #0#{*$ +C%{*&  -'{*( 4){** !?+{*, -{*z!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rO   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?  rX   r   ro   rH   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   rA  z  not allowed. Valid values are: )r  r   )r  valuesr   s      rM   validate_search_typez4AzureSearchVectorStoreRetriever.validate_search_typec  sS     F" /K#":":: %k]2R//02  rO   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  rA  rB  )r  r   r  r   r-  rb  rC  r  rD  rN  r   )rK   rF  run_managerrV   paramsrG  r,  rp  s           rM   _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  rR  r-  rg  rS  r  rT  rY  r   )	rK   rF  r  rV   r  rG  ro  r,  rp  s	            rM   _aget_relevant_documentsz8AzureSearchVectorStoreRetriever._aget_relevant_documents  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	   r[   r   )rF  rX   r  r   rV   r   r[   r  )rF  rX   r  r   rV   r   r[   r  )r\   r]   r^   r  __annotations__r   r-  r  r  r   model_configr   r  r  r  r  r   rO   rM   r  r  A  s    7?K- AsJ(M473   $L (#	  $	%% 4% 	%
 
%N(( 9	(
 ( 
(rO   r  c                \    | D cg c]  }t        |      t        |d         f }}|S c c}w Nr  _result_to_documentr  ry  ra  rG  s      rM   rw  rw    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      rM   r}  r}    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-  r  r  r  r   mapr   r   r   r#  ry  r  r  r-  ra  rG  r	  scoresvectorsnew_orderingretrj   s               rM   r  r    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               rM   r  r    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   rK  r   )ra  fields_metadatar*   r   	fields_ids        rM   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rT   )iternext	itertoolschainStopIteration)iterabler,   iteratorr   s       rM   r  r  ;  sO    !>X??E7H5 !  !s   03 AA)NNNNNNNNNz"langchain-comm-python-azure-searchNFNNN)$ra   rX   r   rX   r*   rY   r   rY   r   rY   r   r  r   r  r   r  r   r  r   rY   r   r  rc   rY   r   r  r   rZ   r   r  r   r  r   r  r[   z&Union[SearchClient, AsyncSearchClient])ry  SearchItemPaged[Dict]r[   r  )ry  zAsyncSearchItemPaged[Dict]r[   r  )r  ro   )
ry  r8  r  z
np.ndarrayr  r  r-  rH   r[   r  )ra  r	   r[   r   rT   )r6  r
   r,   zOptional[Any]r[   zTuple[Iterable, Any])N
__future__r   r   r  r3  r   loggingrI   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   azure.core.credentials_asyncr   r   r   r    r   r!   r   r   r#   r$   r%   r&   r'   r   r   r   r   r$  r   r   r  rw  r}  r  r  r  r  r   rO   rM   <module>rH     s   "          "  . 0 8 3 - 3 0 M				6AD  )@$	 $(
 %+/ 
  *BJ   +/15*.,0 	7;-126 D*.AE26=A'G
G
G
 
G
 )	G

 "/G
 (G
 *G
G
 5G
 +G
 0G
 G
 (G
  !G
" '?#G
$ 0%G
& ;'G
( ,)G
TaV+ aVH)~m ~B
"
!

'
!
  	"  	
 "H 	 "     	 
 " F6!rO   