
    Ng                   z   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@	 	 	 	 	 	 	 	 	 	 	 	 	 dVdWd7ZA G d8 d9e(          ZB G d: d;e$          ZCdXd?ZDdYdAZE	 	 dZd[dJZF	 	 dZd[dKZGd\dOZHd]d^dUZIdS )_    )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  	langchainFendpointstr
index_namer(   Optional[str]azure_ad_access_tokensemantic_configuration_namefieldsOptional[List[SearchField]]vector_searchOptional[VectorSearch]semantic_configurationsCOptional[Union[SemanticConfiguration, List[SemanticConfiguration]]]scoring_profilesOptional[List[ScoringProfile]]default_scoring_profiledefault_fields
user_agentcors_optionsOptional[CorsOptions]async_bool additional_search_client_optionsOptional[Dict[str, Any]]return&Union[SearchClient, AsyncSearchClient]c                n  +,-. ddl m+m}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}# |pi }|
pg }
|D|                                dk    r  |            }$|$                    d	           n( ||          }$n |+fd
          }$n
 |            }$ || |$|          }%	 |%                    |           n# |$ r |d |D             ,d |
D             ..fdt?          .                                           t?          ,                                           z
  D             }&tC          |&          dk    r=d+,.fd-d"                    -fd|&D                       }'tG          d|& d|'           n|
}|j |  |d|!j$         |ddd|"j%                             |d|!j&         ||"j%                            g |#d d!           |#d"d!          g#          }|r&tO          |tP                    s|g} |||$          }(n9|r5 || | |tR          %          g&          '          }) ||)g(          }(nd }( |||||(||	|)          }*|%*                    |*           Y nw xY w|s |d,| ||$|d*|S  |d,| ||$|d*|S )-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                 ^     t          t          j                              dz             S )Ni  )inttime)scopeskwargsrL   r6   s     h/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/vectorstores/azuresearch.py<lambda>z$_get_search_client.<locals>.<lambda>   s+    kk%s49;;'7'7$'>' '     )r2   
credentialrB   namec                (    i | ]}|j         |j        S  ri   type).0fs     rd   
<dictcomp>z&_get_search_client.<locals>.<dictcomp>   s    ;;;qAFAF;;;rf   c                (    i | ]}|j         |j        S rk   rl   )rn   dfs     rd   rp   z&_get_search_client.<locals>.<dictcomp>   s    JJJRJJJrf   c                (    i | ]\  }}||         S rk   rk   )rn   r(   valuemandatory_fieldss      rd   rp   z&_get_search_client.<locals>.<dictcomp>   s5       C %c*  rf   xr3   rI   c           
         |  d                     | d           d                     |            d                     |            d|                                  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)rv   fields_typesru   s    rd   fmt_errz#_get_search_client.<locals>.fmt_err   s     S Sl.>.>q).L.L S S)9)=)=a)@)@S S+;+?+?+B+BS S GHggiiS S Srf   
c                &    g | ]} |          S rk   rk   )rn   rv   r}   s     rd   
<listcomp>z&_get_search_client.<locals>.<listcomp>   s!    "F"F"F!771::"F"F"Frf   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)ri   kind
parametersdefault_exhaustive_knn)r   myHnswProfile)ri   algorithm_configuration_namemyExhaustiveKnnProfile)
algorithmsprofiles)configurationsdefault_configuration_name)
field_name)content_fields)ri   prioritized_fields)r   )ri   r8   r:   semantic_searchr>   r@   rC   )r2   r4   rg   rB   )rv   r3   rI   r3   rk   )+azure.core.credentialsrL   rM   rN   azure.core.exceptionsrO   azure.identityrP   rQ   azure.search.documentsr   azure.search.documents.aioazure.search.documents.indexesrR   %azure.search.documents.indexes.modelsrS   rT   rU   rV   rW   r$   rX   rY   rZ   r%   r[   r\   r]   r{   	get_token	get_indexsetitemslenjoin
ValueErrorHNSWCOSINEEXHAUSTIVE_KNN
isinstancelistFIELDS_CONTENTcreate_index)/r2   r4   r(   r6   r7   r8   r:   r<   r>   r@   rA   rB   rC   rE   rG   rM   rN   rO   rP   rQ   r   AsyncSearchClientrR   rS   rT   rU   rV   rW   r$   rX   rY   rZ   r%   r[   r\   r]   rg   index_clientmissing_fieldserrorr   semantic_configurationindexrL   r|   r}   ru   s/      `                                       @@@@rd   _get_search_clientr   Q   s   & XWWWWWWWWW;;;;;;SSSSSSSS333333LLLLLL@@@@@@                               (H'M2$#)rN 99;;-''5577J  !DEEEE++C00JJ		*$_    
 


 ,+--
&7&7jZ' ' 'La)J////  _) _) _);;F;;;LJJ>JJJ   "%&6&<&<&>&>"?"?l((**++#,  N
 >""Q&&       		"F"F"F"F~"F"F"FGG -%- -%*- -   '" $F (L..&6;#1>,/&)#>#E	$ $ $	 	 	 8756E#:#:#>#E$ $ $  ( (',5>   ('55M  	)  MB # 	#5t<< D+B*C',n6+F  OO ) 	#%:%:0#<#<$1M^$L$L$L#M$ $ $& & &" -n=S<TUUUOO #O '+-$;%
 
 
 	!!%(((((_)B  
| 
!!!	
 

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

 /
 
 	
s   C F6JJc                  0   e Zd ZdZ	 	 	 	 	 	 	 	 d}ddddd~d Zdd#Zedd%            Zdd(Z	 ddd)dd1Z		 ddd)dd2Z
	 ddd)dd5Z	 ddd)dd6Zddd9Zddd:Z	 ddd<ddAZd;dBddDZ	 ddd<ddEZd;dBddFZ	 dddGddJZ	 dddGddKZ	 dddLddNZ	 dddLddOZ	 	 dddPZ	 	 dddQZ	 	 	 dddLddWZ	 	 	 dddLddXZdddYZ	 dddZZ	 	 ddd[Z	 	 ddd\Z	 dddGdd]Z	 dddGdd^Z 	 	 	 dddLdd_Z!	 	 	 dddLdd`Z"ddLdddZ#ddLddfZ$	 dddgZ%	 dddhZ&	 	 dddGddlZ'	 	 dddGddmZ(	 dddLddoZ)	 dddLddpZ*e+	 	 	 	 	 	 dddv            Z,e+	 	 	 	 	 	 dddw            Z-e+	 ddqdqdrddxddy            Z.e+	 ddqdqdrddxddz            Z/dd|Z0dS )AzureSearchz&`Azure Cognitive Search` vector store.hybridN)vector_search_dimensionsrG   r6   azure_search_endpointr3   azure_search_keyr4   embedding_functionUnion[Callable, Embeddings]search_typer7   r5   r8   r9   r:   r;   r<   r=   r>   r?   r@   rC   rD   r   Optional[int]rG   rH   r6   rc   r   c                  	 ddl m}m}m}m} n"# t
          $ r}t          d          |d }~ww xY w	 || _        t          | j        t                    r| j        j	        | _	        n| j        | _	         |t          |j        dd           |t          |j                   |t          |                    |j                  d|p!t!          | 	                    d                    d	           |t"          |j                  g}d
}d|v r|d         r|d|d         z   z  }t%          ||||||||	|
|||||          | _        t%          ||||||||	|
||||d          | _        || _        || _        |r|n|| _        || _        || _        || _        || _        || _        || _        |	| _        |
| _        || _         || _!        || _"        || _#        d S )Nr   )SearchableFieldr#   SearchFieldDataTypeSimpleFieldzeUnable to import azure.search.documents. Please install with `pip install -U azure-search-documents`.T)ri   rm   r(   
filterablerl   Textr   )ri   rm   
searchabler   vector_search_profile_namer1   rB    )
r7   r8   r:   r<   r>   r@   rA   rB   rC   rG   )
r7   r8   r:   r<   r>   r@   rA   rB   rC   rE   )$r   r   r#   r   r   ImportErrorr   r   r   embed_query	FIELDS_IDStringr   FIELDS_CONTENT_VECTORr   Singler   FIELDS_METADATAr   clientasync_clientr   r7   r8   _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)selfr   r   r4   r   r   r7   r8   r:   r<   r>   r@   rC   r   rG   r6   rc   r   r#   r   r   erA   rB   s                           rd   __init__zAzureSearch.__init__  s   ,	              	 	 	;  	 	4"4d-z:: 	7#6BD#6D K(/	   O#(/   K*(334G4NOO)A *1t''//00+:   O$(/  '
0 !
6!!f\&:!#| 444J(!!(C'$;-$;)!%-M
 
 
  /!!(C'$;-$;)!%
 
 
  '+F( &:ffN&;#!1%,G)+(?%!1(?%-%)s    
.).rI   Nonec                   t          | d          r | j        r| j                                         t          | d          r| j        r	 t	          j                    }|                                r.|                    | j                                                   d S |                    | j                                                   d S # t          $ r t	          j
                    }t	          j        |           	 |                    | j                                                   |                                 Y d S # |                                 w xY ww xY wd S d S )Nr   r   )hasattrr   closer   asyncioget_event_loop
is_runningcreate_taskrun_until_completeRuntimeErrornew_event_loopset_event_loop)r   loops     rd   __del__zAzureSearch.__del__  sd   4"" 	 t{ 	 K 4(( 	!T-> 	!!-//??$$ G$$T%6%<%<%>%>????? ++D,=,C,C,E,EFFFFF ! ! !-//&t,,,!++D,=,C,C,E,EFFFJJLLLLLLDJJLLLL!	! 	! 	! 	!s+   AC  ,C 1E ,E,EEEOptional[Embeddings]c                H    t          | j        t                    r| j        nd S N)r   r   r   )r   s    rd   
embeddingszAzureSearch.embeddings  s)    
 $1:>>D##	
rf   textList[float]c                   K   | j         r | j                             |           d {V S  t          t          | j                  |          S r   )r   aembed_queryr   r   r   )r   r   s     rd   _aembed_queryzAzureSearch._aembed_query  sV      ? 	A55d;;;;;;;;;:4$"9::4@@@rf   keystextsIterable[str]	metadatasOptional[List[dict]]r   Optional[List[str]]	List[str]c                   t           j        t                    rG	  j                            t	          |                    }n,# t
          $ r  fd|D             }Y nw xY w fd|D             }t          |          dk    rt                              d           g S |s2d|v r.t          |d                   t          |          k    r|d         } 	                    t          ||          ||          S )z$Add texts data to an existing index.c                D    g | ]}j                             |          S rk   )r   r   rn   rv   r   s     rd   r   z)AzureSearch.add_texts.<locals>.<listcomp>  s*    TTTd5AA!DDTTTrf   c                :    g | ]}                     |          S rk   r   r   s     rd   r   z)AzureSearch.add_texts.<locals>.<listcomp>  '    DDD$11!44DDDrf   r   Nothing to insert, skipping.idsr   )r   r   r   embed_documentsr   NotImplementedErrorr   loggerdebugadd_embeddingszipr   r   r   r   rc   r   s   `     rd   	add_textszAzureSearch.add_texts  s    d-z:: 	EU!4DDT%[[QQ

& U U UTTTTeTTT


U EDDDeDDDJz??aLL7888I
  	!5F??VE]1C1Cs:1V1V%=D""3uj#9#994"PPPs   'A A A c                  K   t           j        t                    rS	  j                            t	          |                     d {V }n2# t
          $ r  fd|D              d {V }Y nw xY w fd|D             }t          |          dk    rt                              d           g S |s2d|v r.t          |d                   t          |          k    r|d         } 	                    t          ||          ||           d {V S )Nc                T   K   g | ]"}j                             |           d {V #S r   )r   r   r   s     rd   r   z*AzureSearch.aadd_texts.<locals>.<listcomp>  sM         FG$1>>qAAAAAAAA  rf   c                :    g | ]}                     |          S rk   r   r   s     rd   r   z*AzureSearch.aadd_texts.<locals>.<listcomp>  r   rf   r   r   r  r   )r   r   r   aembed_documentsr   r  r   r  r  aadd_embeddingsr  r  s   `     rd   
aadd_textszAzureSearch.aadd_texts  sn      d-z:: 	E#'#:#K#KDQVKK#X#XXXXXXX

&      KP        



 EDDDeDDDJz??aLL7888I
  	!5F??VE]1C1Cs:1V1V%=D))#eZ*@*@)RV)WWWWWWWWWs   -A A.-A.text_embeddings!Iterable[Tuple[str, List[float]]]c                   g }g }t          |          D ]\  }\  }}|r	||         }	nUt          t          j                              }	t	          j        t          |	d                                        d          }	|r||         ni }
ddt          |	t          |t          t          j        |t          j                                                  t          t!          j        |
          i}|
r5 fd|
                                D             }|                    |           |                    |           |                    |	           t+          |          t,          k    rE j                            |          }t3          d |D                       st5          |          g }t+          |          d	k    r|S  j                            |          }t3          d
 |D                       r|S t5          |          )$Add embeddings to an existing index.utf-8ascii@search.actionuploaddtypec                B    i | ]\  }}|d  j         D             v ||S )c                    g | ]	}|j         
S rk   rh   rn   rv   s     rd   r   z9AzureSearch.add_embeddings.<locals>.<dictcomp>.<listcomp>      999QV999rf   r8   rn   kvr   s      rd   rp   z.AzureSearch.add_embeddings.<locals>.<dictcomp>  E     % % %199T[99999 q999rf   	documentsc              3  $   K   | ]}|j         V  d S r   	succeededrn   rs     rd   	<genexpr>z-AzureSearch.add_embeddings.<locals>.<genexpr>  $      9911;999999rf   r   c              3  $   K   | ]}|j         V  d S r   r&  r(  s     rd   r*  z-AzureSearch.add_embeddings.<locals>.<genexpr>  $      --qq{------rf   )	enumerater3   uuiduuid4base64urlsafe_b64encodebytesdecoder   r   r   nparrayfloat32tolistr   jsondumpsr   updateappendr   MAX_UPLOAD_BATCH_SIZEr   upload_documentsallr   r   r  r   r   r  datair   	embeddingr(   r0   docadditional_fieldsresponses   `             rd   r  zAzureSearch.add_embeddings  s     $-o$>$> #	 #	 A i T1g$*,,''.uS'/B/BCCJJ7SS'08y||bH !(3%rx	'L'L'L'S'S'U'UH!5!5C  .% % % % ( 0 0% % %!
 

,---KKJJsOOO4yy111;77$7GG9999999 7,X666 t99>>J ;//$/??--H----- 	/J$X...rf   c               &   K   g }g }t          |          D ]\  }\  }}|r||         nt          t          j                              }	t	          j        t          |	d                                        d          }	|r||         ni }
ddt          |	t          |t          t          j        |t          j                                                  t          t!          j        |
          i}|
r5 fd|
                                D             }|                    |           |                    |           |                    |	           t+          |          t,          k    rK j                            |           d{V }t3          d	 |D                       st5          |          g }t+          |          d
k    r|S  j                            |           d{V }t3          d |D                       r|S t5          |          )r  r  r  r  r  r  c                B    i | ]\  }}|d  j         D             v ||S )c                    g | ]	}|j         
S rk   rh   r  s     rd   r   z:AzureSearch.aadd_embeddings.<locals>.<dictcomp>.<listcomp>@  r  rf   r  r  s      rd   rp   z/AzureSearch.aadd_embeddings.<locals>.<dictcomp>=  r"  rf   r#  Nc              3  $   K   | ]}|j         V  d S r   r&  r(  s     rd   r*  z.AzureSearch.aadd_embeddings.<locals>.<genexpr>I  r+  rf   r   c              3  $   K   | ]}|j         V  d S r   r&  r(  s     rd   r*  z.AzureSearch.aadd_embeddings.<locals>.<genexpr>U  r-  rf   )r.  r3   r/  r0  r1  r2  r3  r4  r   r   r   r5  r6  r7  r8  r   r9  r:  r   r;  r<  r   r=  r   r>  r?  r   r@  s   `             rd   r  zAzureSearch.aadd_embeddings!  s1       $-o$>$> 	 	 A i!8$q''s4:<<'8'8C*5g+>+>??FFwOOC'08y||bH !(3%rx	'L'L'L'S'S'U'UH!5!5C  .% % % % ( 0 0% % %!
 

,---KKJJsOOO4yy111!%!2!C!Cd!C!S!SSSSSSS9999999 7,X666 t99>>J *;;d;KKKKKKKK--H----- 	/J$X...rf   r  rF   c                x    |r7| j                             d |D                       }t          |          dk    S dS )Delete by vector ID.

        Args:
            ids: List of ids to delete.

        Returns:
            bool: True if deletion is successful,
            False otherwise.
        c                     g | ]}t           |iS rk   )r   rn   rB  s     rd   r   z&AzureSearch.delete.<locals>.<listcomp>e  s    /L/L/L1A/L/L/Lrf   r   F)r   delete_documentsr   r   r  rc   ress       rd   deletezAzureSearch.deleteZ  sE      	+../L/L/L/L/LMMCs88a<5rf   c                   K   |r=| j                             d |D                        d{V }t          |          dk    S dS )rM  c                    g | ]}d |iS )r'   rk   rO  s     rd   r   z'AzureSearch.adelete.<locals>.<listcomp>u  s    ;S;S;S!T1I;S;S;Srf   Nr   F)r   rP  r   rQ  s       rd   adeletezAzureSearch.adeletej  s\        	)::;S;Ss;S;S;STTTTTTTTCs88a<5rf   r   )r   queryr   r`   List[Document]c                   |p| j         }|dk    r | j        |fd|i|}nA|dk    r | j        |fd|i|}n*|dk    r | j        |fd|i|}nt	          d| d          |S N
similarityr   r   semantic_hybridsearch_type of  not allowed.)r   r:   hybrid_searchsemantic_hybrid_searchr   r   rW  r   r   rc   docss         rd   similarity_searchzAzureSearch.similarity_searchz  s     "5T%5,&&%4%e;;q;F;;DDH$$%4%e;;q;F;;DD---.4.uDDDVDDDDI{IIIJJJrf   )r   List[Tuple[Document, float]]c                   |                     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^  )rz   r   vector_search_with_scorehybrid_search_with_score!semantic_hybrid_search_with_scorer   r   rW  r   rc   r   s        rd   similarity_search_with_scorez(AzureSearch.similarity_search_with_score  s     jj0@AA,&&040FF!FvFFFH$$040FF!FvFFF---949%OO1OOOOI{IIIJJJrf   c                  K   |p| j         }|dk    r | j        |fd|i| d {V }nM|dk    r | j        |fd|i| d {V }n0|dk    r | j        |fd|i| d {V }nt	          d| d          |S rZ  )r   avector_searchahybrid_searchasemantic_hybrid_searchr   ra  s         rd   asimilarity_searchzAzureSearch.asimilarity_search  s       "5T%5,&&,,UBBaB6BBBBBBBBDDH$$,,UBBaB6BBBBBBBBDD---55eKKqKFKKKKKKKKDDI{IIIJJJrf   c               
  K   |                     d| j                  }|dk    r | j        |fd|i| d{V S |dk    r | j        |fd|i| d{V S |dk    r | j        |fd|i| d{V S t          d| d          )	rf  r   r[  r   Nr   r\  r]  r^  )rz   r   avector_search_with_scoreahybrid_search_with_score"asemantic_hybrid_search_with_scorer   rj  s        rd   asimilarity_search_with_scorez)AzureSearch.asimilarity_search_with_score  s       jj0@AA,&&77MMMfMMMMMMMMMH$$77MMMfMMMMMMMMM---@@VV!VvVVVVVVVVVI{IIIJJJrf   )score_thresholdrv  Optional[float]c               H     | j         |fd|i|}|nfd|D             S )Nr   c                ,    g | ]}|d          k    |S    rk   rn   r)  rv  s     rd   r   zGAzureSearch.similarity_search_with_relevance_scores.<locals>.<listcomp>  '    ???qt'>'>!'>'>'>rf   rg  r   rW  r   rv  rc   results      `  rd   'similarity_search_with_relevance_scoresz3AzureSearch.similarity_search_with_relevance_scores  O     /.uDDDVDD & F????V???	
rf   c               X   K    | j         |fd|i| d {V }|nfd|D             S )Nr   c                ,    g | ]}|d          k    |S rz  rk   r|  s     rd   r   zHAzureSearch.asimilarity_search_with_relevance_scores.<locals>.<listcomp>  r}  rf   rr  r  s      `  rd   (asimilarity_search_with_relevance_scoresz4AzureSearch.asimilarity_search_with_relevance_scores  e       6t5eKKqKFKKKKKKKK & F????V???	
rf   )filtersr  c               J    |                      |||          }d |D             S )\  
        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   r  c                    g | ]\  }}|S rk   rk   rn   rD  _s      rd   r   z-AzureSearch.vector_search.<locals>.<listcomp>      222Q222rf   r~  r   rW  r   r  rc   docs_and_scoress         rd   r:   zAzureSearch.vector_search  s2     77G7TT22/2222rf   c               Z   K   |                      |||           d{V }d |D             S )r  r  Nc                    g | ]\  }}|S rk   rk   r  s      rd   r   z.AzureSearch.avector_search.<locals>.<listcomp>  r  rf   r  r  s         rd   rm  zAzureSearch.avector_search  s]       !% > >Q !? !
 !
 
 
 
 
 
 
 32/2222rf   c                n    |                      |          } | 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
         r  r   _simple_search_results_to_documentsr   rW  r   r  rc   rC  resultss          rd   rg  z$AzureSearch.vector_search_with_score  sH    $ $$U++	%$%iQRRR6RR$W---rf   c                   K   |                      |           d{V } | j        |d|fd|i| d{V }t          |           d{V S )r  Nr  r  r   _asimple_search_aresults_to_documentsr  s          rd   rr  z%AzureSearch.avector_search_with_score  s      $ ,,U33333333	,,r1
 
&-
17
 
 
 
 
 
 
 
 ,G444444444rf            ?fetch_klambda_multfloatc                   |                      |          } | 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  r  query_embeddingr  r   r   r  0_reorder_results_with_maximal_marginal_relevancer5  r6  	r   rW  r   r  r  r  rc   rC  r  s	            rd   (max_marginal_relevance_search_with_scorez4AzureSearch.max_marginal_relevance_search_with_score,  sf    6 $$U++	%$%iWXXgXQWXX?RXi%8%8kUV
 
 
 	
rf   c                  K   |                      |           d{V } | j        |d|fd|i| d{V }t          |t          j        |          ||           d{V S )r  Nr  r  r  r   r  1_areorder_results_with_maximal_marginal_relevancer5  r6  r  s	            rd   )amax_marginal_relevance_search_with_scorez5AzureSearch.amax_marginal_relevance_search_with_scoreN  s      6 ,,U33333333	,,r7
 
,3
7=
 
 
 
 
 
 
 
 GHY//#	
 
 
 
 
 
 
 
 
 	
rf   c                :     | j         |fd|i|}d |D             S )r  r   c                    g | ]\  }}|S rk   rk   r  s      rd   r   z-AzureSearch.hybrid_search.<locals>.<listcomp>  r  rf   rh  r   rW  r   rc   r  s        rd   r_  zAzureSearch.hybrid_searchu  s7     8$7MMMfMM22/2222rf   c                J   K    | j         |fd|i| d{V }d |D             S )r  r   Nc                    g | ]\  }}|S rk   rk   r  s      rd   r   z.AzureSearch.ahybrid_search.<locals>.<listcomp>  r  rf   rs  r  s        rd   rn  zAzureSearch.ahybrid_search  sM       !? >u T T TV T TTTTTTT22/2222rf   c                n    |                      |          } | 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
        r  r  r  s          rd   rh  z$AzureSearch.hybrid_search_with_score  sH    " $$U++	%$%iUU7UfUU$W---rf   c                   K   |                      |           d{V } | j        |||fd|i| d{V }t          |           d{V S )r  Nr  r  r  s          rd   rs  z%AzureSearch.ahybrid_search_with_score  s      " ,,U33333333	,,ua
 
)0
4:
 
 
 
 
 
 
 
 ,G444444444rf   c               H     | j         |fd|i|}|nfd|D             S )Nr   c                ,    g | ]}|d          k    |S rz  rk   r|  s     rd   r   zCAzureSearch.hybrid_search_with_relevance_scores.<locals>.<listcomp>  r}  rf   r  r  s      `  rd   #hybrid_search_with_relevance_scoresz/AzureSearch.hybrid_search_with_relevance_scores  r  rf   c               X   K    | j         |fd|i| d {V }|nfd|D             S )Nr   c                ,    g | ]}|d          k    |S rz  rk   r|  s     rd   r   zDAzureSearch.ahybrid_search_with_relevance_scores.<locals>.<listcomp>  r}  rf   r  r  s      `  rd   $ahybrid_search_with_relevance_scoresz0AzureSearch.ahybrid_search_with_relevance_scores  r  rf   c                   |                      |          } | 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
        r  r  r  r  s	            rd   /hybrid_max_marginal_relevance_search_with_scorez;AzureSearch.hybrid_max_marginal_relevance_search_with_score  su    8 $$U++	%$%ug
 
/6
:@
 
 @RXi%8%8kUV
 
 
 	
rf   c                  K   |                      |           d{V } | j        |||fd|i| d{V }t          |t          j        |          ||           d{V S )r  Nr  r  r  r  s	            rd   0ahybrid_max_marginal_relevance_search_with_scorez<AzureSearch.ahybrid_max_marginal_relevance_search_with_score  s      8 ,,U33333333	,,ug
 
/6
:@
 
 
 
 
 
 
 
 GHY//#	
 
 
 
 
 
 
 
 
 	
rf   rC  
text_querySearchItemPaged[dict]c          
         ddl m}  | j        j        d| |t	          j        |t          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_neighborsr8   search_textvector_queriesfiltertoprk   )	azure.search.documents.modelsr  r   searchr5  r6  r7  r8  r   r   rC  r  r   r  rc   r  s          rd   r  zAzureSearch._simple_search,  s    ( 	BAAAAA!t{! 
"8IRZ@@@GGII()0   
 
 
 
 	
rf   AsyncSearchItemPaged[dict]c          
        K   ddl m}  | j        j        d| |t	          j        |t          j                                                  |t                    g||d| d{V S )r  r   r  r  r  r  Nrk   )	r  r  r   r  r5  r6  r7  r8  r   r  s          rd   r  zAzureSearch._asimple_searchP  s      ( 	BAAAAA-T&- 
"8IRZ@@@GGII()0   
 
 
 
 
 
 
 
 
 
 	
rf   c                :     | j         |fd|i|}d |D             S )  
        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   c                    g | ]\  }}}|	S rk   rk   r  s      rd   r   z6AzureSearch.semantic_hybrid_search.<locals>.<listcomp>      555	Q555rf   ,semantic_hybrid_search_with_score_and_rerankr  s        rd   r`  z"AzureSearch.semantic_hybrid_searcht  sG     L$K
 

 
 
 65_5555rf   c                J   K    | j         |fd|i| d{V }d |D             S )r  r   Nc                    g | ]\  }}}|	S rk   rk   r  s      rd   r   z7AzureSearch.asemantic_hybrid_search.<locals>.<listcomp>  r  rf   -asemantic_hybrid_search_with_score_and_rerankr  s        rd   ro  z#AzureSearch.asemantic_hybrid_search  si       !S R!
 !
!
 !
 !
 
 
 
 
 
 
 65_5555rf   score
score_type"Literal['score', 'reranker_score']c               x     | j         |fd|i|}|dk    rfd|D             S |dk    rfd|D             S dS )  
        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   r  c                0    g | ]\  }}}|k    ||fS r   rk   rn   rD  r  r  rv  s       rd   r   zAAzureSearch.semantic_hybrid_search_with_score.<locals>.<listcomp>  =       !C"*e.F.F e.F.F.Frf   reranker_scorec                0    g | ]\  }}}|k    ||fS r   rk   rn   rD  r  r  rv  s       rd   r   zAAzureSearch.semantic_hybrid_search_with_score.<locals>.<listcomp>  >       *CN"*n.O.O n%.O.O.Orf   Nr  r   rW  r   r  rv  rc   r  s       `  rd   ri  z-AzureSearch.semantic_hybrid_search_with_score  s    . L$K
 

 
 
      %4   
 +++   .=    ,+rf   c                  K    | j         |fd|i| d{V }|dk    rfd|D             S |dk    rfd|D             S dS )r  r   Nr  c                0    g | ]\  }}}|k    ||fS r   rk   r  s       rd   r   zBAzureSearch.asemantic_hybrid_search_with_score.<locals>.<listcomp>  r  rf   r  c                0    g | ]\  }}}|k    ||fS r   rk   r  s       rd   r   zBAzureSearch.asemantic_hybrid_search_with_score.<locals>.<listcomp>  r  rf   r  r  s       `  rd   rt  z.AzureSearch.asemantic_hybrid_search_with_score  s      . !S R!
 !
!
 !
 !
 
 
 
 
 
 
      %4   
 +++   .=    ,+rf   #List[Tuple[Document, float, float]]c                 
 ddl m}  | j        j        d
| |t	          j        |                     |          t          j                                                  |t                    g|d| j
        dd|d|}|                                pg }i 
|D ]}|j        |j        d
|j        <   
fd	|D             }	|	S )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_typer7   query_captionquery_answerr  r   
highlightsc                   g | ]S}t          |                    t                    i t          |v r!t          |                    t                    ini t          |v rt          j        |t                             nd  |                                D             |                    d          rE|                    di g          d         j	        |                    di g          d         j
        dni                     |                    t          d          d          d          t          |d                   t          |d                   fUS )	c                0    i | ]\  }}|t           k    ||S rk   r   rn   r   r!  s      rd   rp   zWAzureSearch.semantic_hybrid_search_with_score_and_rerank.<locals>.<listcomp>.<dictcomp>  4     " " "$(Aq#$(=#=#= !"1#=#=#=rf   @search.captionsr   r  r  captionsanswerspage_contentr0   @search.score@search.reranker_scorer   popr   r   r   r9  loadsr   rz   r   r  r  rn   r  semantic_answers_dicts     rd   r   zLAzureSearch.semantic_hybrid_search_with_score_and_rerank.<locals>.<listcomp>  s    +
 +
 +
T Q !'N!;!;!  )F22 '

9(=(=>>!#	!  /&88 !Jvo'>???" ",2LLNN" " "!2 $*::.@#A#A	!(,2JJ7IB4,P,P()-&&*28**=ORTQU2V2V()3&&0!" !" !" &('<'@'@ &

9b 9 9 "( ( !$ $ $J f_-..f5677O(+
 +
 +
rf   rk   )r  r  r   r  r5  r6  r   r7  r8  r   r7   get_answersr   r  r(   )r   rW  r   r  rc   r  r  semantic_answerssemantic_answerrb  r  s             @rd   r  z8AzureSearch.semantic_hybrid_search_with_score_and_rerank  s/    	BAAAAA$$+$ 
8D$4$4U$;$;2:NNNUUWW()0   !(,(H&%
 
 
 
$ #..006B&(/ 	 	O',-8: :!/"566
+
 +
 +
 +
T "U+
 +
 +
X rf   c                 K   ddl m} |                     |           d{V } | j        j        d| |t          j        |t
          j                                                  |t                    g|d| j
        dd|d| d{V }|                                 d{V pg }i |D ]}	|	j        |	j        d	|	j        <   fd
|2              d{V }
|
S )r  r   r  Nr  r  r  r  r  r  c                  K   g | 3 d {V 	 }t          |                    t                    i t          |v r!t          |                    t                    ini t          |v rt          j        |t                             nd |                                D             |                    d          rE|                    di g          d         j	        |                    di g          d         j
        dni                     |                    t          d          d          d          t          |d                   t          |d	                   fZ6 S )
Nc                0    i | ]\  }}|t           k    ||S rk   r   r  s      rd   rp   zXAzureSearch.asemantic_hybrid_search_with_score_and_rerank.<locals>.<listcomp>.<dictcomp>v  r  rf   r  r   r  r  r  r  r	  r
  r  r  s     rd   r   zMAzureSearch.asemantic_hybrid_search_with_score_and_rerank.<locals>.<listcomp>i  s      +
 +
 +
 +
 +
 +
 +
 +
 +
T Q !'N!;!;!  )F22 '

9(=(=>>!#	!  /&88 !Jvo'>???" ",2LLNN" " "!2 $*::.@#A#A	!(,2JJ7IB4,P,P()-&&*28**=ORTQU2V2V()3&&0!" !" !" &('<'@'@ &

9b 9 9 "( ( !$ $ $J f_-..f5677O(+
 +
 +
 +
s   E rk   )r  r  r   r   r  r5  r6  r7  r8  r   r7   r  r   r  r(   )r   rW  r   r  rc   r  r  r  r  r  rb  r  s              @rd   r  z9AzureSearch.asemantic_hybrid_search_with_score_and_rerank?  s      	BAAAAA))%000000000)0 
8F"*===DDFF()0   !(,(H&%
 
 
 
 
 
 
 
 
 
$ #*"5"5"7"7777777>B&(/ 	 	O',-8: :!/"566
+
 +
 +
 +
T !(U+
 +
 +
 +
 +
 +
 +
 +
 +
X rf   r  langchain-indexclsType[AzureSearch]r   c	                B     | ||||f||d|	}
 |
j         ||fi |	 |
S N)r8   r6   )r	  r  r   rC  r   r   r   r6   r4   r8   rc   azure_searchs              rd   
from_textszAzureSearch.from_texts  sb     s!	

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

 "7
 
 
 
 &l%eYAA&AAAAAAAAArf   )r   r   r4   r8   c          
        K   t          |          \  }}	|	t          d          t          |	d                   }
 | d||||||
d|} |j        ||fi | d {V  |S Nz0Cannot create AzureSearch from empty embeddings.r{  )r   r   r4   r   r8   r   rk   )_peekr   r   r  r  r  rC  r   r   r   r4   r8   rc   first_text_embeddingr   r  s               rd   afrom_embeddingszAzureSearch.afrom_embeddings  s       16o0F0F--'OPPP#&';A'>#?#? s 
"7-!(%=
 
 
 
 +l*?IPPPPPPPPPPPrf   c          
         t          |          \  }}	|	t          d          t          |	d                   }
 | d||||||
d|} |j        ||fi | |S r!  )r"  r   r   r  r#  s               rd   from_embeddingszAzureSearch.from_embeddings  s     16o0F0F--'OPPP#&';A'>#?#? s 
"7-!(%=
 
 
 
 	$#OYII&IIIrf   AzureSearchVectorStoreRetrieverc                    |                     dd          pg }|                    |                                            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vectorstorerk   )r  extend_get_retriever_tagsr(  )r   rc   r*  s      rd   as_retrieverzAzureSearch.as_retriever  s_    ( zz&$''-2D,,..///.UU4U6UUPTUUUUrf   )r   NNNNNNN) r   r3   r   r3   r4   r3   r   r   r   r3   r7   r5   r8   r9   r:   r;   r<   r=   r>   r?   r@   r5   rC   rD   r   r   rG   rH   r6   r5   rc   r   )rI   r   )rI   r   )r   r3   rI   r   r   )
r   r   r   r   r   r   rc   r   rI   r   )r  r  r   r   r   r   rI   r   )r  r   rc   r   rI   rF   )r   )
rW  r3   r   r`   r   r5   rc   r   rI   rX  )rW  r3   r   r`   rc   r   rI   rd  )
rW  r3   r   r`   rv  rw  rc   r   rI   rd  )
rW  r3   r   r`   r  r5   rc   r   rI   rX  )r   N)
rW  r3   r   r`   r  r5   rc   r   rI   rd  )r   r  r  )rW  r3   r   r`   r  r`   r  r  r  r5   rc   r   rI   rd  )rW  r3   r   r`   rc   r   rI   rX  )rC  r   r  r3   r   r`   r  r5   rc   r   rI   r  )rC  r   r  r3   r   r`   r  r5   rc   r   rI   r  )r   r  )rW  r3   r   r`   r  r  rv  rw  rc   r   rI   rd  )
rW  r3   r   r`   r  r5   rc   r   rI   r  )Nr  r  Nr  N)r  r  r   r   rC  r   r   r   r   r3   r   r3   r6   r5   r4   r3   r8   r9   rc   r   rI   r   )r  r  r  r  rC  r   r   r   r   r3   r   r3   r4   r3   r8   r9   rc   r   rI   r   )rc   r   rI   r(  )1__name__
__module____qualname____doc__r   r   propertyr   r   r	  r  r  r  rS  rV  rc  rk  rp  ru  r  r  r:   rm  rg  rr  r  r  r_  rn  rh  rs  r  r  r  r  r  r  r`  ro  ri  rt  r  r  classmethodr  r  r%  r'  r.  rk   rf   rd   r   r     sM       00 $59.204 ;?15.2v*" 37EI/3'v* v* v* v* v* v*p! ! ! !2 
 
 
 X
A A A A +/Q
 %)Q Q Q Q Q QB +/X
 %)X X X X X XB +/;/
 %);/ ;/ ;/ ;/ ;/ ;/@ +/7/
 %)7/ 7/ 7/ 7/ 7/ 7/r         & 
 &*     ( '(K K K K K K" 
 &*     ( '(K K K K K K" 

 ,0
 
 
 
 
 
$ 

 ,0
 
 
 
 
 
  $%3BF3 3 3 3 3 3" $%3BF3 3 3 3 3 3* !%	. . . . .4 !%	5 5 5 5 58   
 "& 
  
  
  
  
  
J  %
 "&%
 %
 %
 %
 %
 %
N3 3 3 3 3 $%3 3 3 3 3& !%	. . . . .2 !%	5 5 5 5 56 

 ,0
 
 
 
 
 
$ 

 ,0
 
 
 
 
 
$  #
 "&#
 #
 #
 #
 #
 #
P  &
 "&&
 &
 &
 &
 &
 &
\ "&"
 "
 "
 "
 "
 "
T "&"
 "
 "
 "
 "
 "
J $%6 6 6 6 6( $%6 6 6 6 6, 9@	% ,0% % % % % %T 9@	% ,0% % % % % %P $%UBFU U U U U Up $%VBFV V V V V Vp 
 +/%' "/3+.2    [2 
 +/%' "/3+.2    [2 
 +/	 &( "+.2     [: 
 +/	 &( "+.2     [<V V V V V Vrf   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d S )$r(  z-Retriever that uses `Azure Cognitive Search`.r   r+  r   r3   r   r   r`   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)modevaluesr	   rI   r   c                d    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  r?  r   s      rd   validate_search_typez4AzureSearchVectorStoreRetriever.validate_search_typeC  sa     F"" /K#"::: 2k 2 2/2 2   rf   rW  run_managerr   rc   rX  c                P   i | j         |}| j        dk    r | j        j        |fd| j        i|}n| j        dk    r%d  | j        j        |fd| j        i|D             }n| j        dk    r | j        j        |fd| j        i|}n| j        dk    r%d  | j        j        |fd| j        i|D             }nn| j        dk    r | j        j        |fd| j        i|}nH| j        d	k    r%d
  | j        j	        |fd| j        i|D             }nt          d| j         d          |S )Nr[  r   r8  c                    g | ]\  }}|S rk   rk   r  s      rd   r   zKAzureSearchVectorStoreRetriever._get_relevant_documents.<locals>.<listcomp>[  ,       C   rf   r   r9  c                    g | ]\  }}|S rk   rk   r  s      rd   r   zKAzureSearchVectorStoreRetriever._get_relevant_documents.<locals>.<listcomp>d  rE  rf   r\  r:  c                    g | ]\  }}|S rk   rk   r  s      rd   r   zKAzureSearchVectorStoreRetriever._get_relevant_documents.<locals>.<listcomp>m  rE  rf   r]  r^  )r7  r   r+  r:   r   r  r_  r  r`  ri  r   )r   rW  rB  rc   paramsrb  s         rd   _get_relevant_documentsz7AzureSearchVectorStoreRetriever._get_relevant_documentsP  s    2D&1&1|++14#1%LL46LVLLDD!=== Vd.V !V'-   DD ))14#1%LL46LVLLDD!999 Rd.R !V'-   DD !222:4#:5UUDFUfUUDD!BBB Pd.P !V'-   DD Nt/?NNNOOOrf   r   c                 K   i | j         |}| j        dk    r" | j        j        |fd| j        i| d {V }n| j        dk    r- | j        j        |fd| j        i| d {V }d |D             }n| j        dk    r! | j        j        |fd| j        i| d {V }n| j        dk    r- | j        j        |fd| j        i| d {V }d |D             }nz| j        dk    r! | j        j        |fd| j        i| d {V }nN| j        d	k    r+d
  | j        j	        |fd| j        i| d {V D             }nt          d| j         d          |S )Nr[  r   r8  c                    g | ]\  }}|S rk   rk   r  s      rd   r   zLAzureSearchVectorStoreRetriever._aget_relevant_documents.<locals>.<listcomp>      666FCC666rf   r   r9  c                    g | ]\  }}|S rk   rk   r  s      rd   r   zLAzureSearchVectorStoreRetriever._aget_relevant_documents.<locals>.<listcomp>  rL  rf   r\  r:  c                    g | ]\  }}|S rk   rk   r  s      rd   r   zLAzureSearchVectorStoreRetriever._aget_relevant_documents.<locals>.<listcomp>  rE  rf   r]  r^  )r7  r   r+  rm  r   r  rn  r  ro  rt  r   )r   rW  rB  rc   rH  rb  r  s          rd   _aget_relevant_documentsz8AzureSearchVectorStoreRetriever._aget_relevant_documentsw  s      2D&1&1|++8)8SS$&SFSSSSSSSSDD!===Od&O !V'-        
 76o666DD))8)8SS$&SFSSSSSSSSDD!999Kd&K !V'-        
 76o666DD!222A)A #)       DD !BBB $WD$4$W% %!V%'-% %        DD Nt/?NNNOOOrf   N)r?  r	   rI   r   )rW  r3   rB  r   rc   r   rI   rX  )rW  r3   rB  r   rc   r   rI   rX  )r/  r0  r1  r2  __annotations__r   r   r7  r;  r   model_configr   r4  rA  rI  rO  rk   rf   rd   r(  r(  !  s        77?K- AJJJJ(M7     : $  L _(###	 	 	 [ $#	% % % %N( ( ( ( ( (rf   r(  r  SearchItemPaged[Dict]rd  c                    d | D             }|S )Nc                V    g | ]&}t          |          t          |d                    f'S r	  _result_to_documentr  rn   r  s     rd   r   z)_results_to_documents.<locals>.<listcomp>  sG       
   ''&)**	
  rf   rk   r  rb  s     rd   r  r    s)     
   D Krf   AsyncSearchItemPaged[Dict]c                .   K   d | 2              d {V }|S )Nc                h   K   g | 3 d {V 	 }t          |          t          |d                   f-6 S Nr	  rV  rX  s     rd   r   z*_aresults_to_documents.<locals>.<listcomp>  sn               
   ''&)**	
   s   2rk   rY  s     rd   r  r    sK       
 $        D Krf   r  r   r  
np.ndarrayr  r  r   r`   c                   K   d | 2              d {V }t          t          t          |           \  }}}t          ||||          }g }	|D ]-}
|
dk    r n$|	                    ||
         ||
         f           .|	S )Nc                   K   g | 3 d {V 	 }t          |          t          |d                   |t                   f96 S r]  rW  r  r   rX  s     rd   r   zE_areorder_results_with_maximal_marginal_relevance.<locals>.<listcomp>  sw                	  ''&)**()	
   s   >r   r  mapr   r  r   r<  r  r  r  r   rb  r$  scoresvectorsnew_orderingretrv   s              rd   r  r    s        $        D "%T3:!6!6Ivw .A;  L
 )+C . .77E

IaL&),----Jrf   c                    d | D             }|sg S t          t          t          |           \  }}}t          ||||          }g }	|D ]-}
|
dk    r n$|	                    ||
         ||
         f           .|	S )Nc                n    g | ]2}t          |          t          |d                    |t                   f3S rU  ra  rX  s     rd   r   zD_reorder_results_with_maximal_marginal_relevance.<locals>.<listcomp>  sP        	  ''&)**()	
  rf   rb  rc  rd  rf  s              rd   r  r    s        D  	!$T3:!6!6Ivw .A;  L
 )+C . .77E

IaL&),----Jrf   r  r	   r   c                   t           | v rNt          | t                    t                    r| t                    }n>t          j        | t                              }nd |                                 D             }t          | v r"t          |                     t                    i}ni }t          | t                   i ||          S )Nc                :    i | ]\  }}|t           t          fv||S rk   )r   r   )rn   r(   rt   s      rd   rp   z'_result_to_document.<locals>.<dictcomp>  s9     
 
 
U0.AAA AAArf   r  )
r   r   r6  r9  r  r   r   r  r   r   )r  fields_metadata	fields_ids      rd   rW  rW     s    &  f_-t44 	B$_5OO"j)@AAOO
 
$llnn
 
 
 F

9 5 56			N+


   rf   iterabler
   r*   Optional[Any]Tuple[Iterable, Any]c                    	 t          |           }t          |          }t          j        |g|          } | |fS # t          $ r | |fcY S w xY wr   )iternext	itertoolschainStopIteration)rq  r*   iteratorrt   s       rd   r"  r"    sf    !>>X?E7H55 ! ! !    !s   7: A
A)NNNNNNNNNr1   NFN) r2   r3   r4   r3   r(   r5   r6   r5   r7   r5   r8   r9   r:   r;   r<   r=   r>   r?   r@   r5   rA   r9   rB   r5   rC   rD   rE   rF   rG   rH   rI   rJ   )r  rR  rI   rd  )r  rZ  rI   rd  )r  r   )
r  rR  r  r^  r  r  r   r`   rI   rd  )r  r	   rI   r   r   )rq  r
   r*   rr  rI   rs  )J
__future__r   r   r1  rw  r9  loggingra   r/  typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   numpyr5  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(  r  r  r  r  rW  r"  rk   rf   rd   <module>r     s_   " " " " " "                                         "            . - - - - - 0 0 0 0 0 0 8 8 8 8 8 8 3 3 3 3 3 3 - - - - - - 3 3 3 3 3 3 0 0 0 0 0 0 0 0 M M M M M M				 DDDDDDDD                        L)@$  	 $(  
 %+/   
 , *BJ     +/15*.,0 	7;-126 +*.AE#q
 q
 q
 q
 q
hYV YV YV YV YV+ YV YV YVx(~ ~ ~ ~ ~m ~ ~ ~B
 
 
 

 
 
 
  	    H 	         F   6! ! ! ! ! ! !rf   