
    vj73                     R   d dl Z d dlmZmZ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mZ d dlmZ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mZ d dlmZm Z  d dl!m"Z" ddl#m$Z$ ddl%m&Z&  ed          Z' e            Z(	 	 d+dZ)	 	 d+dede*de+fdZ,dddddddedf	de*dee*ee*         eee         f         de*de*de*de*dee*         dee*         de$fd Z-	 	 d,de*d"e*d#e*d$e.fd%Z/d& Z0dee*ee*         eee         f         d'ee*         d(ee*ef         dee*         fd)Z1d(ede*fd*Z2dS )-    N)AnyDictListOptionalUnion)snapshot_downloadDEFAULT_MODEL_FOR_PIPELINE)Model)
ConfigDictcheck_config)DEFAULT_MODEL_REVISIONInvokeTasks
ThirdParty)read_config)is_transformers_available)
get_logger)register_modelhub_reporegister_plugins_repo)Registrybuild_from_cfg)is_embedding_task   )Pipeline)is_official_hub_path	pipelinesc                    t          | t                    rlt          | |          r\t          j                            |           s<t          j        t          j        i}|||t          j        <   t          | |||          } nt          | t                    rt          | d         t                    rt          t          |                     D ]}t          | |         |          rit          j                            | |                   sDt          j        t          j        i}|||t          j        <   t          | |         ||          | |<   | S )z normalize the input model, to ensure that a model str is a valid local path: in other words,
    for model represented by a model id, the model shall be downloaded locally
    N)revision
user_agentignore_file_patternr   )r   r    )
isinstancestrr   ospathexistsr   KEYPIPELINEr   r   listrangelen)modelmodel_revisionthird_partyr!   r    idxs         l/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/modelscope/pipelines/builder.pynormalize_model_inputr1      sQ    % P"6un"M"M Pw~~e$$ 		9 *fo6J&-8
:>*%'%$7	9 9 9E
 
E4	 	  	PZa#%>%> 	PU$$ 	P 	PC##J"$ $ P,.GNN5:,F,FP %j&/:
*1<Jz~..#JJP P Pc
L    cfg	task_namedefault_argsc                 2    t          | t          ||          S )a#   build pipeline given model config dict.

    Args:
        cfg (:obj:`ConfigDict`): config dict for model object.
        task_name (str, optional):  task name, refer to
            :obj:`Tasks` for more details.
        default_args (dict, optional): Default initialization arguments.
    )	group_keyr5   )r   	PIPELINES)r3   r4   r5   s      r0   build_pipeliner9   :   s(     Y),H H H Hr2   taskr,   config_filepipeline_name	frameworkdevicer-   r!   returnc	                 t   | |t          d          d}
|"t          |t                    s2t          |t                    rt          |d         t                    rt	          ||          rt          |t                    rt          ||          nt          |d         |          }|r*|                    di                               dd          }|t|	                    d          }| 0|                                 t          j
        t          j        fv r|d}|r+|	                    d	          d
|	d	<   t          |||	          }||dk    r|	                    t          j                  }||	                    t          j                   t!          ||||          }t#          |                    d                     t%          ||                    dd                     |rd|i}
nE	 t'          |           |j        }
n,# t*          $ r1}t,                              t          |                     Y d}~nd}~ww xY wn|t          |t                    r|d         n|}t1          |d          sot          |j                  }	 t'          |           |j        |_        n># t*          $ r1}t,                              t          |                     Y d}~nd}~ww xY w|j                            d          r|j        }
n+t7          |           \  }}t!          ||          }d|i}
nd|i}
|
sIt9          |           r:	 ddlm}  |dd|i|	S # t>          $ r t,                               d            w xY w|
sPtC                      rB	 ddlm"}  |d| |||d|	S # t>          $ r!}t,          #                    d           |d}~ww xY w|sd}||
d<   ||
d<   tI          |
          }tK          |	|           |	r|&                    |	           |||_'        tQ          ||           S )a   Factory method to build an obj:`Pipeline`.


    Args:
        task (str): Task name defining which pipeline will be returned.
        model (str or List[str] or obj:`Model` or obj:list[`Model`]): (list of) model name or model object.
        preprocessor: preprocessor object.
        config_file (str, optional): path to config file.
        pipeline_name (str, optional): pipeline class name or alias name.
        framework (str, optional): framework type.
        model_revision: revision of model(s) if getting from model hub, for multiple models, expecting
        all models to have the same revision
        device (str, optional): whether to use gpu or cpu is used to do inference.
        ignore_file_pattern(`str` or `List`, *optional*, default to `None`):
            Any file pattern to be ignored in downloading, like exact file names or file extensions.

    Return:
        pipeline (obj:`Pipeline`): pipeline object for certain task.

    Examples:
        >>> # Using default model for a task
        >>> p = pipeline('image-classification')
        >>> # Using pipeline with a model name
        >>> p = pipeline('text-classification', model='damo/distilbert-base-uncased')
        >>> # Using pipeline with a model object
        >>> resnet = Model.from_pretrained('Resnet')
        >>> p = pipeline('image-classification', model=resnet)
        >>> # Using pipeline with a list of model names
        >>> p = pipeline('audio-kws', model=['damo/audio-tts', 'damo/auto-tts2'])
    Nz!task or pipeline_name is requiredr   )r   pipelinetypeexternal_engine_for_llmTllm_frameworkswiftllm)r.   r!   pluginsallow_remoteF)sentence_transformers_pipeliner,   zWe could not find a suitable pipeline from modelscope, so we tried to load it using the sentence_transformers, but that also failed.)hf_pipeline)r:   r,   r=   r>   z{We couldn't find a suitable pipeline from ms, so we tried to load it using the transformers pipeline, but that also failed.gpur>   )r4    ))
ValueErrorr"   r#   r)   r   r   safe_getgetlowerr   text_generationchatexternal_engine_for_llm_checkerr   r'   popr1   r   r   r   rA   AssertionErrorloggerinfohasattr	model_dir__dict__get_default_pipeline_infor   modelscope.utils.hf_utilrI   	Exception	exceptionr   rJ   errorr   clear_llm_infoupdatepreprocessorr9   )r:   r,   rb   r;   r<   r=   r>   r-   r!   kwargspipeline_propsr3   prefer_llm_pipeliner.   efirst_modeldefault_model_reporI   rJ   s                      r0   rA   rA   I   sk   P |-<===NeS!! D	5%&&D	5+5eAh+D+DD	5#ENCCC 0, 8Bs8$ 8$?kN4 4 4 4)4!!H~*? *? *?   G$'LL13%5 %558S5F5F " !(*0**5N*O*O''DJJLL!15:= - - /626/ + ;!::o66>6=F?3(G!>6); ); !(MU,B,B"(**Z^"<"<K".

:>2221&$/,?	A A AE *#,,y*A*ABBB*5+.77>5+I+IK K K ! ,&,m%<NN,$S)))),) , , ,CFF++++++++,_0,d &0&=&=H%((5K;
33 (!+"788( %%%+.<K((% ( ( (KKA''''''''(#''
33 6!,!50I$0O0O-M-)*<nMME$m4NN -0 /55 	OOOOOO11HHHHHH 	 	 	?@ @ @ 		  799 	<<<<<<; #	 
     	 	 	LL)* * * G		  #N7%N8
^
$
$C6=))) 

6'#....sT   ;H 
I'I		IJ4 4
K/>'K**K/M! !&NN. .
O8OOF
model_namemodelhub_name	overwritec                 P    |s| t           vsJ d|  d            ||ft           | <   dS )z Add default model for a task.

    Args:
        task (str): task name.
        model_name (str): model_name.
        modelhub_name (str): name for default modelhub.
        overwrite (bool): overwrite default info.
    ztask z already has default model.Nr	   )r:   ri   rj   rk   s       r0   add_default_pipeline_inform      sL      655555D555 655 )3M'Bt$$$r2   c                     | t           vr:t          t          j        |                                                    d         }d}nt           |          \  }}||fS )z Get default info for certain task.

    Args:
        task (str): task name.

    Return:
        A tuple: first element is pipeline name(model_name), second element
            is modelhub name.
    r   N)r
   r)   r8   moduleskeys)r:   r<   default_models      r0   r[   r[      sW     ---Y.t499;;<<Q?'A$'G$}-''r2   r   rc   c           	      x   ddl m}m} ddlm} t          | t                    r| d         } t          | t                    s| j        } |	                    dd          }|dk    r	 dd	l
m} n# t          $ r	 dd	lm} Y nw xY wt          j                            |           r ||           }n| }	  ||          }	|	d         j        }
n<# t$          $ r/}t&                              d
| d| d|            d }
Y d }~nd }~ww xY w|
rdS |	                    | |ddd          }
|                    |
          rdS d S )Nr   )ModelTypeHelperLLMAdapterRegistry   )get_model_id_from_cacher   rD    rE   )get_model_info_metaz Cannot using llm_framework with z, ignoring llm_framework=z : rF   T-)with_adaptersplit	use_cache)nlp.llm_pipeliners   rt   hub.check_modelrv   r"   r)   r#   rY   rO   swift.modelrx   ImportError	swift.llmr$   r%   r&   
model_typer]   rV   warningcontains)r,   r   rc   rs   rt   rv   rD   rx   model_idrW   r   rf   s               r0   rS   rS     s    FEEEEEEE999999% aeS!!  JJ33M	67777777 	6 	6 	655555555	6 7>>%   	..u55HHH	&&x00Da+JJ 	 	 	NN Kh K K5BK KGHK K L L LJJJJJJ	  	5 $$xd# % G GJ"":.. u s*   %A, ,A?>A?0C	 	
D%C==Dc                     ddl m} |                     dd            |dk    r|                     dd            |                                 d S )Nr   )rs   rC   rF   rD   )"modelscope.utils.model_type_helperrs   rT   clear_cache)rc   r<   rs   s      r0   r`   r`   6  s`    BBBBBB
JJ($///

?D)))!!!!!r2   )NN)NF)3r$   typingr   r   r   r   r    modelscope.hub.snapshot_downloadr   modelscope.metainfor
   modelscope.models.baser   modelscope.utils.configr   r   modelscope.utils.constantr   r   r   r   modelscope.utils.hubr   modelscope.utils.import_utilsr   modelscope.utils.loggerr   modelscope.utils.pluginsr   r   modelscope.utils.registryr   r   modelscope.utils.task_utilsr   baser   utilr   r8   rV   r1   r#   dictr9   rA   boolrm   r[   rS   r`   rL   r2   r0   <module>r      s   
			 3 3 3 3 3 3 3 3 3 3 3 3 3 3 > > > > > > : : : : : : ( ( ( ( ( ( < < < < < < < <3 3 3 3 3 3 3 3 3 3 3 3 , , , , , , C C C C C C . . . . . .= = = = = = = = > > > > > > > > 9 9 9 9 9 9       & & & & & &H[!!		
 '+.2   B %)(,H H
 H!H!%H H H H @D $"&"-C.2\/ \/3 \/#tCy%e<=\/ \/  	\/
 \/ \/ &c]\/ #'s)\/ #\/ \/ \/ \/B 4805C CC C*-C-0C *.C C C C&( ( (($5d3i15e2= ,> $.6sm$ -1cN$ @H}$ $ $ $N"4 " " " " " " "r2   