
    dh              
       z    S SK JrJrJr  S SKJr  S SKJr  S SKJ	r	  S\S\S\S\\\
      4S	 jr " S
 S\	\5      rg)    )AnyCallableList)
Embeddings)
ConfigDict)SelfHostedPipelinepipelineargskwargsreturnc                     U " U0 UD6$ )zInference function to send to the remote hardware.

Accepts a sentence_transformer model_id and
returns a list of embeddings for each document in the batch.
 )r	   r
   r   s      b/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/embeddings/self_hosted.py_embed_documentsr   	   s     T$V$$    c                       \ rS rSr% Sr\r\\S'    Sr	\
\S'    \" SS9rS\\   S	\\\      4S
 jrS\S	\\   4S jrSrg)SelfHostedEmbeddings   a  Custom embedding models on self-hosted remote hardware.

Supported hardware includes auto-launched instances on AWS, GCP, Azure,
and Lambda, as well as servers specified
by IP address and SSH credentials (such as on-prem, or another
cloud like Paperspace, Coreweave, etc.).

To use, you should have the ``runhouse`` python package installed.

Example using a model load function:
    .. code-block:: python

        from langchain_community.embeddings import SelfHostedEmbeddings
        from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
        import runhouse as rh

        gpu = rh.cluster(name="rh-a10x", instance_type="A100:1")
        def get_pipeline():
            model_id = "facebook/bart-large"
            tokenizer = AutoTokenizer.from_pretrained(model_id)
            model = AutoModelForCausalLM.from_pretrained(model_id)
            return pipeline("feature-extraction", model=model, tokenizer=tokenizer)
        embeddings = SelfHostedEmbeddings(
            model_load_fn=get_pipeline,
            hardware=gpu
            model_reqs=["./", "torch", "transformers"],
        )
Example passing in a pipeline path:
    .. code-block:: python

        from langchain_community.embeddings import SelfHostedHFEmbeddings
        import runhouse as rh
        from transformers import pipeline

        gpu = rh.cluster(name="rh-a10x", instance_type="A100:1")
        pipeline = pipeline(model="bert-base-uncased", task="feature-extraction")
        rh.blob(pickle.dumps(pipeline),
            path="models/pipeline.pkl").save().to(gpu, path="models")
        embeddings = SelfHostedHFEmbeddings.from_pipeline(
            pipeline="models/pipeline.pkl",
            hardware=gpu,
            model_reqs=["./", "torch", "transformers"],
        )
inference_fnNinference_kwargsforbid)extratextsr   c                     [        [        S U5      5      nU R                  U R                  U5      n[	        U[         5      (       d  UR                  5       $ U$ )zCompute doc embeddings using a HuggingFace transformer model.

Args:
    texts: The list of texts to embed.s

Returns:
    List of embeddings, one for each text.
c                 &    U R                  SS5      $ )N
 )replace)xs    r   <lambda>6SelfHostedEmbeddings.embed_documents.<locals>.<lambda>R   s    199T3#7r   )listmapclientpipeline_ref
isinstancetolist)selfr   
embeddingss      r   embed_documents$SelfHostedEmbeddings.embed_documentsI   sN     S7?@[[!2!2E:
*d++$$&&r   textc                     UR                  SS5      nU R                  U R                  U5      n[        U[        5      (       d  UR                  5       $ U$ )zCompute query embeddings using a HuggingFace transformer model.

Args:
    text: The text to embed.

Returns:
    Embeddings for the text.
r   r   )r   r$   r%   r&   r"   r'   )r(   r,   r)   s      r   embed_query SelfHostedEmbeddings.embed_queryX   sL     ||D#&[[!2!2D9
*d++$$&&r   r   )__name__
__module____qualname____firstlineno____doc__r   r   r   __annotations__r   r   r   model_configr   strfloatr*   r.   __static_attributes__r   r   r   r   r      si    +Z .L(-N c ?LT#Y 4U3D  U r   r   N)typingr   r   r   langchain_core.embeddingsr   pydanticr   $langchain_community.llms.self_hostedr   r8   r   r   r   r   r   <module>r>      sO    & & 0  C%s %3 %# %$tE{BS %S-z Sr   