o
    Q5i                     @   s   d dl Z d dlmZ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mZmZmZmZmZmZ ejrMd d	lmZ d d
lmZ e jdkrVddini ZedddieG dd dZdS )    N)asdict	dataclassfield)zip_longest)Optionaldeepcopy)CHECK_PYDANTIC)MANAGER)DeviceDeviceIDDtypeEmbeddingDtypeInferenceEnginePoolingMethodLoadingStrategy)r   )
ConfigDict)   
   kw_onlyTfrozenc                   @   s  e Zd ZU dZejd Zeed< ej	d Z	e
ed< ejd Zee ed< ejd Zeed< eejd  Zeed< ejd Zeed< d	Zeed
< eejd  Zeed< edd dZeed< ejd Zeed< ejd Zeed< eejd  Zeed< eejd  Zeed< ejd Zeed< eej d  Z eed< ej!d Z!eed< dZ"ee# ed< dd Z$dd Z%dd Z&dd  Z'e(d!e)d  fd"d#Z*dS )$
EngineArgsa  Creating a Async EmbeddingEngine object.

    Args:
        model_name_or_path, str:  Defaults to "michaelfeil/bge-small-en-v1.5".
        batch_size, int: Defaults to 32.
        revision, str: Defaults to None.
        trust_remote_code, bool: Defaults to True.
        engine, InferenceEngine or str: backend for inference.
            Defaults to InferenceEngine.torch.
        model_warmup, bool: decide if warmup with max batch size . Defaults to True.
        vector_disk_cache_path, str: file path to folder of cache.
            Defaults to "" - default no caching.
        device, Device or str: device to use for inference. Defaults to Device.auto.
        device_id, DeviceID or str: device index to use for inference.
            Defaults to [], no preferred placement.
        compile, bool: compile model for better performance. Defaults to False.
        bettertransformer, bool: use bettertransformer. Defaults to True.
        dtype, Dtype or str: data type to use for inference. Defaults to Dtype.auto.
        pooling_method, PoolingMethod or str: pooling method to use. Defaults to PoolingMethod.auto.
        lengths_via_tokenize, bool: schedule by token usage. Defaults to False.
        served_model_name, str: Defaults to readable name of model_name_or_path.
    r   model_name_or_path
batch_sizerevisiontrust_remote_codeenginemodel_warmup vector_disk_cache_pathdevicec                   C   s   t tjd S )Nr   )r   r
   	device_id r"   r"   _/lsinfo/ai/hellotax_ai/llm_service/venv_embed/lib/python3.10/site-packages/infinity_emb/args.py<lambda>?   s    zEngineArgs.<lambda>)default_factoryr!   compilebettertransformerdtypepooling_methodlengths_via_tokenizeembedding_dtypeserved_model_nameN_loading_strategyc              
   C   s  t | jtst| dt| j  t | jts.| jd u r$t| dtj n
t| dt| j  t | jt	s>t| dt	| j t | j
tsNt| dt| j
  t | jts^t| dt| j  t | jtsnt| dt| j  | jst| dd| jdd	d   | jd ur| jd
krt| dd  t | jtrt| d| jr| j d| jdd nd
 tjrtddtdddtG dd dt}|di | j | jd u r|    d S t | jt!rt| dt"di | j d S d S )Nr   r    r!   r(   r)   r+   r,   /r   r   r   _T)arbitrary_types_allowed)r   configc                   @   s   e Zd Zdd ZdS )z4EngineArgs.__post_init__.<locals>.EngineArgsPydanticc                 S   s   d S Nr"   selfr"   r"   r#   __post_init__w   s   zBEngineArgs.__post_init__.<locals>.EngineArgsPydantic.__post_init__N)__name__
__module____qualname__r6   r"   r"   r"   r#   EngineArgsPydantics   s    r:   r-   r"   )#
isinstancer   r   object__setattr__r    r   autor!   r   r(   r   r)   r   r+   r   r,   joinr   splitr   r   boolreplacer	   is_availabledataclass_pydanticr   dataclass_argsr   __dict__r-   update_loading_strategydictr   )r5   r:   r"   r"   r#   r6   J   sV   


zEngineArgs.__post_init__c                 C      t | S r3   )r   r4   r"   r"   r#   to_dict      zEngineArgs.to_dictc                 C   s$   ddl m} t| d||  | S )z,Assign a device id to the EngineArgs object.r   )loading_strategyr-   )infinity_emb.inferencerL   r<   r=   get_loading_strategy)r5   rL   r"   r"   r#   rG      s   z"EngineArgs.update_loading_strategyc                 C   rI   r3   r   r4   r"   r"   r#   copy   rK   zEngineArgs.copyreturnc                 C   sH   dd t tjtjtjtjtjtjtjtj	tj
tjtjtjtjtjD S )z7Create a list of EngineArgs from environment variables.c                 S   sL   g | ]"\}}}}}}}}}	}
}}}}t |||||||||	|
||||d qS ))r   r   r   r   r   r   r    r&   r'   r(   r)   r*   r+   r,   )r   ).0r   r   r   r   r   r   r    r&   r'   r(   r)   r*   r+   r,   r"   r"   r#   
<listcomp>   s&    z'EngineArgs.from_env.<locals>.<listcomp>)r   r
   model_idr   r   r   r   r   r    r&   r'   r(   r)   r*   r+   r,   )clsr"   r"   r#   from_env   s$   zEngineArgs.from_env)+r7   r8   r9   __doc__r
   rS   r   str__annotations__r   intr   r   r   rA   r   r   r   r   r   r    r   r!   r   r&   r'   r   r(   r   r)   r*   r   r+   r,   r-   r   r6   rJ   rG   rO   classmethodlistrU   r"   r"   r"   r#   r      s2   
 9r   r"   )sysdataclassesr   r   r   	itertoolsr   typingr   rO   r   infinity_emb._optional_importsr	   infinity_emb.envr
   infinity_emb.primitivesr   r   r   r   r   r   r   rC   pydantic.dataclassesrD   pydanticr   version_inforE   r   r"   r"   r"   r#   <module>   s   $
