o
    Jjg                     @  s   d dl mZ d dlmZmZmZmZmZmZm	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 G d	d
 d
eZdS )    )annotations)AnyDictListOptionalSequenceTupleType)AsyncCallbackManagerForChainRunCallbackManagerForChainRun)Document)
Embeddings)VectorStore)
ConfigDict)RouterChainc                   @  sz   e Zd ZU dZded< dgZded< eddd	Zed#ddZ		d$d%ddZ
	d$d&ddZed'dd Zed'd!d"ZdS )(EmbeddingRouterChainz4Chain that uses embeddings to route between options.r   vectorstorequery	List[str]routing_keysTforbid)arbitrary_types_allowedextrareturnc                 C  s   | j S )zTWill be whatever keys the LLM chain prompt expects.

        :meta private:
        )r   )self r   `/var/www/html/zoom/venv/lib/python3.10/site-packages/langchain/chains/router/embedding_router.py
input_keys   s   zEmbeddingRouterChain.input_keysNinputsDict[str, Any]run_manager$Optional[CallbackManagerForChainRun]c                   s>   d  fdd| jD }| jj|dd} |d jd dS )	N, c                      g | ]} | qS r   r   .0kr   r   r   
<listcomp>)       z.EmbeddingRouterChain._call.<locals>.<listcomp>   r&   r   namenext_inputsdestination)joinr   r   similarity_searchmetadatar   r   r    _inputresultsr   r'   r   _call$   s   zEmbeddingRouterChain._call)Optional[AsyncCallbackManagerForChainRun]c                   sF   d  fdd| jD }| jj|ddI d H } |d jd dS )	Nr"   c                   r#   r   r   r$   r'   r   r   r(   2   r)   z/EmbeddingRouterChain._acall.<locals>.<listcomp>r*   r+   r   r,   r-   )r0   r   r   asimilarity_searchr2   r3   r   r'   r   _acall-   s   zEmbeddingRouterChain._acallnames_and_descriptions#Sequence[Tuple[str, Sequence[str]]]vectorstore_clsType[VectorStore]
embeddingsr   kwargsr   c           
      K  sP   g }|D ]\}}|D ]}| t|d|id q
q|||}	| dd|	i|S )Convenience constructor.r,   page_contentr2   r   Nr   )appendr   from_documents
clsr:   r<   r>   r?   	documentsr,   descriptionsdescriptionr   r   r   r   from_names_and_descriptions6   s   	z0EmbeddingRouterChain.from_names_and_descriptionsc           
        sX   g }|D ]\}}|D ]}| t|d|id qq|||I dH }	| dd|	i|S )r@   r,   rA   Nr   r   )rC   r   afrom_documentsrE   r   r   r   afrom_names_and_descriptionsH   s   	z1EmbeddingRouterChain.afrom_names_and_descriptions)r   r   )N)r   r   r    r!   r   r   )r   r   r    r7   r   r   )
r:   r;   r<   r=   r>   r   r?   r   r   r   )__name__
__module____qualname____doc____annotations__r   r   model_configpropertyr   r6   r9   classmethodrJ   rL   r   r   r   r   r      s$   
 
	r   N)
__future__r   typingr   r   r   r   r   r   r	   langchain_core.callbacksr
   r   langchain_core.documentsr   langchain_core.embeddingsr   langchain_core.vectorstoresr   pydanticr   langchain.chains.router.baser   r   r   r   r   r   <module>   s    $