HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/langchain/chains/hyde/__pycache__/base.cpython-310.pyc
o

���g#�@s�dZddlmZddlmZmZmZmZddlZ	ddl
mZddlm
Z
ddlmZddlmZdd	lmZdd
lmZddlmZddlmZdd
lmZddlmZGdd�dee
�ZdS)zDHypothetical Document Embeddings.

https://arxiv.org/abs/2212.10496
�)�annotations)�Any�Dict�List�OptionalN)�CallbackManagerForChainRun)�
Embeddings)�BaseLanguageModel)�StrOutputParser)�BasePromptTemplate)�Runnable)�
ConfigDict)�Chain)�
PROMPT_MAP)�LLMChainc@s�eZdZUdZded<ded<eddd�Zed/dd��Zed/d
d��Z	d0dd�Z
d1dd�Zd2dd�Z	d3d4d!d"�Z
e		d5d6d+d,��Zed7d-d.��ZdS)8�HypotheticalDocumentEmbedderzrGenerate hypothetical document for query, and then embed that.

    Based on https://arxiv.org/abs/2212.10496
    r�base_embeddingsr�	llm_chainT�forbid)�arbitrary_types_allowed�extra�return�	List[str]cCs|jj��dS)z Input keys for Hyde's LLM chain.�required)r�input_schema�model_json_schema��self�r�E/usr/local/lib/python3.10/dist-packages/langchain/chains/hyde/base.py�
input_keys&sz'HypotheticalDocumentEmbedder.input_keyscCst|jt�r
|jjSdgS)z!Output keys for Hyde's LLM chain.�text)�
isinstancerr�output_keysrrrrr#+sz(HypotheticalDocumentEmbedder.output_keys�texts�List[List[float]]cCs|j�|�S)zCall the base embeddings.)r�embed_documents)rr$rrrr&3sz,HypotheticalDocumentEmbedder.embed_documents�
embeddings�List[float]cCstt�|�jdd��S)z)Combine embeddings into final embeddings.r)�axis)�list�np�array�mean)rr'rrr�combine_embeddings7sz/HypotheticalDocumentEmbedder.combine_embeddingsr!�strcCsR|jd}|j�||i�}t|jt�r||jdg}n|g}|�|�}|�|�S)z1Generate a hypothetical document and embedded it.r)r r�invoker"rr#r&r.)rr!�var_name�result�	documentsr'rrr�embed_query;s


z(HypotheticalDocumentEmbedder.embed_queryN�inputs�Dict[str, Any]�run_manager�$Optional[CallbackManagerForChainRun]�Dict[str, str]cCs$|pt��}|jj|d|��id�S)zCall the internal llm chain.�	callbacks)�config)r�get_noop_managerrr0�	get_child)rr5r7�_run_managerrrr�_callFs�z"HypotheticalDocumentEmbedder._call�llmr	�
prompt_key�
Optional[str]�
custom_prompt�Optional[BasePromptTemplate]�kwargsrcKsb|dur|}n|dur|tvrt|}ntdtt����d���||Bt�B}|d||d�|��S)zILoad and use LLMChain with either a specific prompt key or custom prompt.NzHMust specify prompt_key if custom_prompt not provided. Should be one of �.)rrr)r�
ValueErrorr*�keysr
)�clsr@rrArCrE�promptrrrr�from_llmQs


��z%HypotheticalDocumentEmbedder.from_llmcCsdS)N�
hyde_chainrrrrr�_chain_typehsz(HypotheticalDocumentEmbedder._chain_type)rr)r$rrr%)r'r%rr()r!r/rr()N)r5r6r7r8rr9)NN)r@r	rrrArBrCrDrErrr)rr/)�__name__�
__module__�__qualname__�__doc__�__annotations__r
�model_config�propertyr r#r&r.r4r?�classmethodrKrMrrrrrs.
�


��r)rQ�
__future__r�typingrrrr�numpyr+�langchain_core.callbacksr�langchain_core.embeddingsr�langchain_core.language_modelsr	�langchain_core.output_parsersr
�langchain_core.promptsr�langchain_core.runnablesr�pydanticr
�langchain.chains.baser�langchain.chains.hyde.promptsr�langchain.chains.llmrrrrrr�<module>s