§
    *�’jî* ã                  óâ	  — U d dl mZ d dlZd dlZd dlmZ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 d dl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 m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dlm4Z5 d dl6m7Z7 d dl6m8Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZAmBZB d dlCmDZDmEZEmFZF d dlGmHZHmIZImJZJmKZKmLZL d dlMmNZN d dlOmPZP d dlQmRZR 	 d dlmSZS n# eT$ r	 d dl>mSZS Y nw xY w	 d dlmUZU n# eT$ r  G d„ d¦  «        ZUY nw xY w	 d dlmVZVmWZW n%# eT$ r  G d„ d¦  «        ZV G d„ d¦  «        ZWY nw xY w	 d d lmXZX n# eT$ r  G d!„ d"¦  «        ZXY nw xY w	 d d#lmYZY n# eT$ r  G d$„ d%¦  «        ZYY nw xY w	 d d&lmZZZ n# eT$ r  G d'„ d(¦  «        ZZY nw xY w	 d d)lm[Z[ n# eT$ r  G d*„ d+¦  «        Z[Y nw xY wer e;¦   «         rd d,l\m]Z]  e9j^        e_¦  «        Z` ee5¦  «         ed-¦  «        k    Za ee5¦  «         ed.¦  «        k    Zb ee5¦  «         ed/¦  «        k    Zc ee5¦  «         ed0¦  «        k    Zd eeh d1£¦  «        Zfd2Zged3         Zh G d4„ d5e¦  «        Zi G d6„ d7eid8¬9¦  «        ZjekeJejf         Zld®d>„Zmeeeedd?œZnd@eodA<   	 d dBlmpZp ependC<   n# eT$ r Y nw xY wdDdEdFdGœidHfdDdEdIdGœidJfdDdEdIdGœidKfdDdEdIdGœidKfdDdEdIdGœidHfdEdLdGœdEdLdGœdMœdHfd3œZqdNeodO<   e0dPdQfe'dPdRfe2dPdSfe1dPdTfe$dPdUfe.dPdVfe/dPdWfe dXdYfe!dZd[fe%d\d]fe(d^d_fe)d`dafeYdbdcfe3dddefe&dfdgfeWdhdifgZrdjeodk<   dEdFdGœdEdFdGœdlœdHd8fZsdmeodn<   i dodpdqdGœdrdqdGœdsdqdGœdtœdudvf“dwdpdFdGœdrdFdGœdMœdHdvf“dxdpdFdGœdydFdGœdMœdHdvf“dzdpdqdGœdrdqdGœdMœdHdvf“d{dEdFdGœdEdFdGœd|œdHd8f“d}dEdFdGœdEdFdGœd|œdHd8f“d~ddEdFdGœidHd8f“d€ddEdFdGœidHd8f“d�ddEdFdGœidHd8f“d‚ddEdFdGœidHd8f“dƒdEdFdGœdEdFdGœd„œdHd8f“d…dEdFdGœdEdFdGœdEdFdGœdtœdHd8f“d†es“d‡es“dˆes“d‰es“dŠes“esesesesesesd‹œ¥ZtdŒeod�<   dŽd�dEdIdGœidHd8fiZudŒeod�<   dEdIdGœdEdIdGœd|œdKd8fdDdEdIdGœidKd8fd‘œZvdEdIdGœdEdIdGœd|œdKd8fddEdIdGœidKd8fddEdIdGœidKd8fddEdIdGœidKd8fddEdIdGœidKd8fdEdIdGœdEdIdGœdlœdKd8fd’œZweteveweud“œZxd”eod•<   d¯d—„Zyed˜„ ¦   «         Zz G d™„ dšed8¬9¦  «        Z{ G d›„ dœe¦  «        Z|h d�£Z}džeodŸ<   d Z~d¡eod¢<   d°d¥„Zd±d©„Z€ eeh dª£¦  «        Z� eeh d«£¦  «        Z‚ G d¬„ d­eN¦  «        ZƒdS )²é    )ÚannotationsN)ÚCallableÚSequence)Úcontextmanager)Úfields)ÚTYPE_CHECKINGÚAnyÚLiteralÚ	TypedDictÚget_argsÚget_type_hints)Úparse)Ú	Lowercase)r   )Ú
AutoConfigÚ	AutoModelÚAutoModelForCausalLMÚAutoModelForMaskedLMÚ"AutoModelForSequenceClassificationÚAutoProcessorÚBlenderbotConfigÚBlenderbotSmallConfigÚFeatureExtractionMixinÚImageProcessingMixinÚLongT5ConfigÚM2M100ConfigÚMarianConfigÚ	MT5ConfigÚPegasusConfigÚPegasusXConfigÚPretrainedConfigÚPreTrainedModelÚPreTrainedTokenizerBaseÚProcessorMixinÚProphetNetConfigÚSwitchTransformersConfigÚT5ConfigÚ
UdopConfigÚ
UMT5ConfigÚWhisperConfig)Ú__version__)ÚModelOutput)Úlogging)Úis_peft_available)Úfind_adapter_config_file)ÚNotRequired)Úload_onnx_modelÚload_openvino_model)ÚInputFormatterÚformat_modalityÚ raise_unsupported_modality_error)ÚMODALITY_TO_PROCESSOR_ARGÚMessageInputÚModalityÚ	PairInputÚSingleInput)ÚInputModule)Útransformer_kwargs_decorator)Úsuggest_extra_on_exception)ÚSelf)ÚBaseVideoProcessorc                  ó   — e Zd ZdS )r>   N©Ú__name__Ú
__module__Ú__qualname__© ó    ú\C:\Projects\DSCons\.venv\Lib\site-packages\sentence_transformers\base\modules\transformer.pyr>   r>   G   ó   € € € € € ØˆrE   r>   )ÚT5Gemma2ConfigÚT5Gemma2TextConfigc                  ó   — e Zd ZdS )rH   Nr@   rD   rE   rF   rH   rH   O   rG   rE   rH   c                  ó   — e Zd ZdS )rI   Nr@   rD   rE   rF   rI   rI   R   rG   rE   rI   )ÚT5GemmaConfigc                  ó   — e Zd ZdS )rL   Nr@   rD   rE   rF   rL   rL   Z   rG   rE   rL   )ÚMoonshineConfigc                  ó   — e Zd ZdS )rN   Nr@   rD   rE   rF   rN   rN   b   rG   rE   rN   )ÚTimmWrapperConfigc                  ó   — e Zd ZdS )rP   Nr@   rD   rE   rF   rP   rP   j   rG   rE   rP   )ÚPaliGemmaProcessorc                  ó   — e Zd ZdS )rR   Nr@   rD   rE   rF   rR   rR   r   rG   rE   rR   ©Ú
PeftConfigz4.56.1z
5.4.0.dev0ú4.56.2ú5.2.0>   ÚpaddingÚ
max_lengthÚ
truncationÚreturn_tensorsé   )úfeature-extractionúsequence-classificationútext-generationú
any-to-anyú	fill-maskÚ	retrievalc                  ó$   — e Zd ZU ded<   ded<   dS )Ú_ModalityParamsRequiredÚstrÚmethodú
str | NoneÚmethod_output_nameN)rA   rB   rC   Ú__annotations__rD   rE   rF   rd   rd   ‹   s'   € € € € € € Ø€K€K�KØ"Ð"Ð"Ñ"Ð"Ð"rE   rd   c                  ó   — e Zd ZU dZded<   dS )ÚModalityParamsa  Parameters for a single modality entry in the modality config.

    The ``format`` key is only used for the ``"message"`` modality and controls how
    message content is structured: ``"structured"`` (list of typed dicts) or ``"flat"``
    (direct string value).
    zLiteral['structured', 'flat']ÚformatN©rA   rB   rC   Ú__doc__ri   rD   rE   rF   rk   rk   �   s*   € € € € € € ðð ð *Ð)Ð)Ñ)Ð)Ð)rE   rk   F)ÚtotalÚconfigúPretrainedConfig | PeftConfigÚreturnútype[PreTrainedModel]c                ó®  — 	 ddl m} |t          | ¦  «                 S # t          t          f$ r Y nw xY wt          | dd¦  «        }|r!t          t          j        |¦  «        ¦  «        S ddl	}t          | dd¦  «        pg D ]}t          ||d¦  «        }|�|c S Œdt          | dd¦  «        pi v rt          S t          dt          | d	d¦  «        ›d
�¦  «        ‚)a:  Resolve the concrete ``*ForRetrieval`` class (ColPali, ColQwen2, ...) for ``transformer_task="retrieval"``.

    transformers (as of v5.13) has no ``AutoModelForRetrieval``, and ``MODEL_FOR_RETRIEVAL_MAPPING`` is
    incomplete (missing ``colqwen2``), so fall back to the checkpoint's ``architectures`` entry.
    r   )ÚMODEL_FOR_RETRIEVAL_MAPPINGÚbase_model_name_or_pathNÚarchitecturesr   Úauto_mapz9Could not resolve a retrieval model class for model_type Ú
model_typezt. The transformer_task="retrieval" expects a `*ForRetrieval` architecture, e.g. ColPali, ColQwen2 or ColModernVBert.)Ú&transformers.models.auto.modeling_autoru   ÚtypeÚImportErrorÚKeyErrorÚgetattrÚ_resolve_retrieval_model_classr   Úfrom_pretrainedÚtransformersr   Ú
ValueError)rp   ru   rv   r�   ÚarchitectureÚmodel_classs         rF   r   r   ž   s5  € ðØVÐVÐVÐVÐVÐVà*­4°©<¬<Ô8Ð8øÝ�Ð"ð ð ð Øˆðøøøõ
 & fÐ.GÈÑNÔNÐØð cÝ-­jÔ.HÐI`Ñ.aÔ.aÑbÔbÐbàÐÐÐå ¨¸Ñ>Ô>ÐDÀ"ð ð ˆÝ˜l¨L¸$Ñ?Ô?ˆØÐ"ØÐÐÐð #ð
 •w˜v z°4Ñ8Ô8Ð>¸BÐ?Ð?ÝÐå
ð	&ÅGÈFÐT`ÐbfÑDgÔDgð 	&ð 	&ð 	&ñô ð s   ‚ �1°1)r]   r^   r_   ra   rb   zdict[TransformerTask, Any]ÚTRANSFORMER_TASK_TO_AUTO_MODEL)ÚAutoModelForMultimodalLMr`   ÚtextÚforwardÚlast_hidden_state©rf   rh   Útoken_embeddingsÚlogitsÚscoresÚcausal_logitsÚ
embeddings)r‡   Úimagez1dict[TransformerTask, tuple[ModalityConfig, str]]ÚTRANSFORMER_TASK_DEFAULTSr�   ÚT5EncoderModelÚMT5EncoderModelÚUMT5EncoderModelÚUdopEncoderModelÚLongT5EncoderModelÚProphetNetEncoderÚSwitchTransformersEncoderModelz2transformers.models.blenderbot.modeling_blenderbotÚBlenderbotEncoderz>transformers.models.blenderbot_small.modeling_blenderbot_smallÚBlenderbotSmallEncoderz,transformers.models.m2m_100.modeling_m2m_100ÚM2M100Encoderz,transformers.models.pegasus.modeling_pegasusÚPegasusEncoderz0transformers.models.pegasus_x.modeling_pegasus_xÚPegasusXEncoderz0transformers.models.moonshine.modeling_moonshineÚMoonshineEncoderz,transformers.models.whisper.modeling_whisperÚWhisperEncoderz*transformers.models.marian.modeling_marianÚMarianEncoderz.transformers.models.t5gemma2.modeling_t5gemma2ÚT5Gemma2Encoderzlist[tuple[type, str, str]]Ú_ENCODER_ONLY_MODELS)Úaudio©r£   r‡   z tuple[ModalityConfig, str, bool]Ú_AUDIO_MODALITY_CONFIGÚblipÚget_text_featuresÚpooler_outputÚget_image_featuresÚget_multimodal_features)r‡   r�   ©r�   r‡   Úsentence_embeddingTúblip-2Úsam3Úget_vision_featuresÚflavaÚgit)r‡   r«   Úvisual_bertúkosmos-2r«   zgrounding-dinoÚ	paligemmaÚviltÚ
layoutlmv3)r�   r«   ÚideficsÚhubertÚ	moonshineÚsewzsew-dzunispeech-sat)Ú	unispeechÚwav2vec2zwav2vec2-conformerÚwavlmÚwhisperÚvoxtral_realtimez+dict[str, tuple[ModalityConfig, str, bool]]Ú_FEATURE_EXTRACTION_EDGE_CASESr¼   r£   Ú_FILL_MASK_EDGE_CASES)r±   r¾   )r±   r¦   r­   r³   r´   r¿   )r]   r_   r`   ra   z6dict[str, dict[str, tuple[ModalityConfig, str, bool]]]Ú_EDGE_CASE_MODALITY_CONFIGSÚboolc                ó˜   — | €dS t          | t          ¦  «        rdS t          | t          ¦  «        rt          d„ | D ¦   «         ¦  «        S dS )zVCheck whether a tokenizers normalizer (or sequence of normalizers) includes Lowercase.NFTc              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S ©N)Ú
isinstancer   )Ú.0Úns     rF   ú	<genexpr>z!_has_lowercase.<locals>.<genexpr>â  s,   è è € Ð@Ð@°•:˜a¥Ñ+Ô+Ð@Ð@Ð@Ð@Ð@Ð@rE   )rÇ   r   ÚNormalizerSequenceÚany)Ú
normalizers    rF   Ú_has_lowercaserÎ   Û  sZ   € àÐØˆuÝ�*�iÑ(Ô(ð ØˆtÝ�*Õ0Ñ1Ô1ð AÝÐ@Ð@°ZÐ@Ñ@Ô@Ñ@Ô@Ð@Øˆ5rE   c              +  ó>  ‡ K  — ˆ fd„|D ¦   «         }	 |                      ¦   «         D ]\  }}t          ‰ ||¦  «         Œd V — |                      ¦   «         D ]\  }}t          ‰ ||¦  «         Œd S # |                      ¦   «         D ]\  }}t          ‰ ||¦  «         Œw xY w)Nc                ó4   •— i | ]}|t          ‰|d ¦  «        “ŒS rÆ   ©r~   )rÈ   ÚnameÚclss     €rF   ú
<dictcomp>z-set_temporary_class_attrs.<locals>.<dictcomp>è  s'   ø€ ÐFÐFÐF°D�•w˜s D¨$Ñ/Ô/ÐFÐFÐFrE   )ÚitemsÚsetattr)rÓ   Ú	overridesÚ	originalsrÒ   Úvalues   `    rF   Úset_temporary_class_attrsrÚ   æ  sÖ   øè è € àFÐFÐFÐF¸IÐFÑFÔF€Ið&Ø$Ÿ?š?Ñ,Ô,ð 	&ð 	&‰KˆD�%Ý�C˜˜uÑ%Ô%Ð%Ð%Øˆˆˆà$Ÿ?š?Ñ,Ô,ð 	&ð 	&‰KˆD�%Ý�C˜˜uÑ%Ô%Ð%Ð%ð	&ð 	&ø˜9Ÿ?š?Ñ,Ô,ð 	&ð 	&‰KˆD�%Ý�C˜˜uÑ%Ô%Ð%Ð%ð	&øøøs   “/A/ Á/-Bc                  óP   — e Zd ZU dZded<   ded<   ded<   ded<   ded<   ded<   d	S )
ÚProcessingKwargsa|  Keyword arguments applied when *calling* the processor during preprocessing.

    Valid keys: ``"common"``, ``"text"``, ``"audio"``, ``"image"``, ``"video"``, ``"chat_template"``.
    Modality and ``"common"`` kwargs override built-in defaults. ``"chat_template"`` kwargs are
    forwarded to ``apply_chat_template``, except the Sentence Transformers ``restore_suffix`` flag.
    údict[str, Any]Úcommonr‡   r£   r�   ÚvideoÚchat_templateNrm   rD   rE   rF   rÜ   rÜ   ò  sf   € € € € € € ðð ð ÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØ!Ð!Ð!Ñ!Ð!Ð!rE   rÜ   c                  ó<   — e Zd ZU dZded<   ded<   ded<   ded	<   d
S )ÚQueryExpansionConfiga	  ColBERT-style query expansion config. When set, :meth:`Transformer.preprocess` expands every
    ``task="query"`` batch, regardless of the downstream modules: only meaningful with a
    :class:`MultiVectorMask` downstream (which scores the expansion positions), so leave it ``None``
    for dense / sparse / cross-encoder pipelines. Keys:

    * ``strategy``:

      - ``"fixed"`` (classic ColBERT): every query leaves preprocessing at exactly ``length``
        tokens. Shorter queries are padded up to ``length`` and the pads swapped for ``token``
        (defaults to the tokenizer's ``mask_token``), longer queries are truncated down to it.
        ``length`` is both the floor and the ceiling: for query batches it overrides
        ``Transformer.query_length``.
      - ``"min"``: ``length`` is only the floor. Shorter queries are expanded exactly like
        ``"fixed"``, longer queries pass through untruncated instead of silently losing content.
        ``Transformer.query_length`` (or a trainer ``max_length`` override) still applies as the
        ceiling. On corpora where queries stay under ``length``, ``"min"`` and ``"fixed"`` produce
        identical batches.

    * ``attend``: whether the encoder attends to the expansion positions. ``False`` (default,
      classic ColBERT) leaves them at ``attention_mask=0``: the encoder skips them in the forward
      pass, MaxSim still scores them, and they soak up query context via the asymmetric attention
      mask. ``True`` forces ``attention_mask=1`` so the encoder also attends to them, matching
      PyLate's ``attend_to_expansion_tokens``. Used by some ColBERT variants.

    * ``token``: defaults to the tokenizer's ``mask_token``.

    * ``length``: pad target (total tokens after expansion, the width floor). **Required**
      (classic ColBERT uses 32).

    Query expansion exists for classic mask-token checkpoints (PyLate / Stanford-NLP ColBERT):
    their attention-mask surgery and fixed-length pad target cannot be expressed in a chat
    template. Modern chat-template backbones (the colpali-engine ColQwen / ColGemma / ColIdefics
    families) should instead own their query augmentation in the checkpoint's chat template,
    which receives the ``task`` kwarg and can e.g. append the family's suffix tokens for
    ``task == "query"`` renders.
    zLiteral['fixed', 'min']ÚstrategyzNotRequired[bool]ÚattendzNotRequired[str | None]ÚtokenzNotRequired[int]ÚlengthNrm   rD   rE   rF   râ   râ     sO   € € € € € € ð#ð #ðJ &Ð%Ð%Ñ%ØÐÐÑØ"Ð"Ð"Ñ"ØÐÐÑÐÐrE   râ   >   rå   rä   ræ   rã   úset[str]Ú_VALID_QUERY_EXPANSION_KEYS)ÚfixedÚminztuple[str, ...]Ú!_VALID_QUERY_EXPANSION_STRATEGIESÚquery_expansionúQueryExpansionConfig | Nonec                óˆ  — | €dS t          | ¦  «        t          z
  }|r5t          dt          |¦  «        ›dt          t          ¦  «        ›d�¦  «        ‚|                      d¦  «        }|t
          vrt          dt
          ›d|›d�¦  «        ‚|                      dd	¦  «        }t          |t          ¦  «        st          d
|›d�¦  «        ‚|                      d¦  «        }|||dœ}|                      d¦  «        }t          |t          ¦  «        rt          |t          ¦  «        s|dk     rt          d|›d�¦  «        ‚||d<   |S )zwValidate the dict, fill defaults, and return a fully-populated config (or ``None`` for the
    no-expansion case).
    Nz!query_expansion has unknown keys z. Valid keys: ú.rã   z+query_expansion['strategy'] must be one of z, got rä   Fz.query_expansion['attend'] must be a bool, got rå   )rã   rä   rå   ræ   é   úquery_expansion strategy=zu requires 'length': a positive int specifying the pad target (total tokens after expansion). Classic ColBERT uses 32.)	Úsetrè   r‚   ÚsortedÚgetrë   rÇ   rÃ   Úint)rì   Úunknownrã   rä   rå   Ú
normalizedræ   s          rF   Ú_normalize_query_expansionrø   2  s¢  € ð ÐØˆtÝ�/Ñ"Ô"Õ%@Ñ@€GØð 
ÝðDµ°w±´ð Dð DÝ!Õ"=Ñ>Ô>ðDð Dð Dñ
ô 
ð 	
ð ×"Ò" :Ñ.Ô.€HØÕ8Ð8Ð8ÝØrÕ:[ÐrÐrÐemÐrÐrÐrñ
ô 
ð 	
ð × Ò  ¨5Ñ1Ô1€FÝ�f�dÑ#Ô#ð WÝÐUÈ&ÐUÐUÐUÑVÔVÐVØ×Ò Ñ(Ô(€EØ4<ÈÐY^Ð'_Ð'_€JØ× Ò  Ñ*Ô*€FÝ�f�cÑ"Ô"ð 
¥j°½Ñ&>Ô&>ð 
À&È1Â*À*ÝðV¨ð Vð Vð Vñ
ô 
ð 	
ð "€JˆxÑØÐrE   Úmessagesúlist[list[dict[str, Any]]]útuple[list[int], list[int]]c                óh  — g }g }| D ]¨}d}d}|D ]u}|                      dg ¦  «        }t          |t          ¦  «        sŒ.|D ]D}t          |t          ¦  «        r-|                      dd¦  «        }	|	dk    r|dz  }Œ9|	dk    r|dz  }ŒEŒv|                     |¦  «         |                     |¦  «         Œ©||fS )a}  Count images and videos per sample from the message structure.

    Some VLM processors flatten per-sample visual tokens into single tensors (e.g.
    ``pixel_values`` shape ``(total_visual_tokens, hidden_dim)``), losing the per-sample
    association. By counting before the processor call, we get reliable per-sample counts
    that downstream minibatching can use directly.
    r   Úcontentr{   Ú r�   rð   rß   )rô   rÇ   ÚlistÚdictÚappend)
rù   Ú
num_imagesÚ
num_videosÚsample_messagesÚ	img_countÚ	vid_countÚmsgrý   ÚitemÚ	item_types
             rF   Ú_count_media_per_sampler
  T  sú   € ð €JØ€JØ#ð %ð %ˆØˆ	Øˆ	Ø"ð 
	'ð 
	'ˆCØ—g’g˜i¨Ñ,Ô,ˆGÝ˜g¥tÑ,Ô,ð ØØð 'ð '�Ý˜d¥DÑ)Ô)ð 'Ø $§¢¨°Ñ 4Ô 4�IØ  GÒ+Ð+Ø! Q™˜	˜	Ø" gÒ-Ð-Ø! Q™˜	øð'ð 	×Ò˜)Ñ$Ô$Ð$Ø×Ò˜)Ñ$Ô$Ð$Ð$Ø�zÐ!Ð!rE   >	   ÚtaskÚmodalityÚprompt_lengthÚoffset_mappingÚspecial_tokens_maskÚnum_images_per_sampleÚnum_videos_per_sampleÚquery_expansion_positionsÚoverflow_to_sample_mapping>   Ú	input_idsÚreturn_dictÚinputs_embedsÚattention_maskÚtoken_type_idsc                  óÆ  ‡ — e Zd ZU dZdZded<   g d¢Zded<   dddd	œZd
ed<   dZded<   h d£Z	ded<   e
ddddddddddddddddœd£ˆ fd1„¦   «         Zed¤d2„¦   «         Zej        d¥d4„¦   «         Zed¦d5„¦   «         Zej        d§d6„¦   «         Zd¨d9„Zd©d:„Zdªd<„Zed«d=„¦   «         Zej        d¬d>„¦   «         Zed­d@„¦   «         Zed®dB„¦   «         Zed¯dD„¦   «         Zed°dF„¦   «         Zd©dG„Zd±dM„Zd©dN„Z	 	 d²d³dR„Zd´dV„Zdµd[„Zd¶d^„Zd·d`„Zdªda„Z 	 d¸d¹dc„Z!dºdd„Z"dºde„Z#	 d¸d»dh„Z$d¼di„Z%	 	 d²d½dl„Z&	 d¸d¾dp„Z'd¿dr„Z(dÀds„Z)dÁdt„Z*dÂdv„Z+e,dÃdy„¦   «         Z-dÄd{„Z.dÅd}„Z/dÆd‚„Z0dÇd…„Z1dÈd†„Z2dÉdˆ„Z3e,dÊd‹„¦   «         Z4e,dËd�„¦   «         Z5ddŽœdÌd‘„Z6e7	 	 	 	 	 	 	 	 	 	 	 dÍdÎdœ„¦   «         Z8e7	 	 	 	 	 	 	 	 	 	 dÏdÐd�„¦   «         Z9e7	 	 	 	 	 	 dÑdÒˆ fdŸ„¦   «         Z:e,dÓd „¦   «         Z;dÔˆ fd¡„Z<dÕd¢„Z=ˆ xZ>S )ÖÚTransformeraJ"  Hugging Face AutoModel wrapper that handles loading, preprocessing, and inference.

    Loads the appropriate model class (e.g. BERT, RoBERTa, CLIP, Whisper) based on the model configuration
    and the specified ``transformer_task``. Supports text, image, audio, and video modalities depending on
    the underlying model. This module is typically the first module in a
    :class:`~sentence_transformers.sentence_transformer.model.SentenceTransformer`, :class:`~sentence_transformers.sparse_encoder.model.SparseEncoder`,
    or :class:`~sentence_transformers.cross_encoder.model.CrossEncoder` pipeline.

    Args:
        model_name_or_path (str): Hugging Face model name or path to a local model directory.
        transformer_task (str, optional): The task determining which ``AutoModel``-like class to load.
            Supported values:

            - ``"feature-extraction"`` (default): :class:`~transformers.AutoModel`, e.g. used by
              :class:`~sentence_transformers.sentence_transformer.model.SentenceTransformer`.
            - ``"sequence-classification"``: :class:`~transformers.AutoModelForSequenceClassification`,
              e.g. used by :class:`~sentence_transformers.cross_encoder.model.CrossEncoder`.
            - ``"text-generation"``: :class:`~transformers.AutoModelForCausalLM`, e.g. used by generative
              :class:`~sentence_transformers.cross_encoder.model.CrossEncoder` models. Sets the ``tokenizer`` padding_side to "left".
            - ``"any-to-any"``: :class:`~transformers.AutoModelForMultimodalLM`, e.g. used by multimodal generative
              :class:`~sentence_transformers.cross_encoder.model.CrossEncoder` models (requires transformers v5+). Sets the
              ``tokenizer`` padding_side to "left".
            - ``"fill-mask"``: :class:`~transformers.AutoModelForMaskedLM`, e.g. used by
              :class:`~sentence_transformers.sparse_encoder.model.SparseEncoder`.

            Defaults to ``"feature-extraction"``.
        model_kwargs (dict[str, Any], optional): Keyword arguments forwarded to
            ``AutoModel.from_pretrained`` when loading the model. Particularly useful options include:

            - ``torch_dtype``: Override the default ``torch.dtype`` and load the model under a specific
              dtype. Can be ``torch.float16``, ``torch.bfloat16``, ``torch.float32``, or ``"auto"`` to
              use the dtype from the model's ``config.json``.
            - ``attn_implementation``: The attention implementation to use. For example ``"eager"``,
              ``"sdpa"``, or ``"flash_attention_2"``. If you ``pip install kernels``, then
              ``"flash_attention_2"`` should work without having to install ``flash_attn``. It is
              frequently the fastest option. Defaults to ``"sdpa"`` when available (torch>=2.1.1).
            - ``device_map``: Controls how the model is placed across devices, e.g. ``"auto"`` for
              model parallelism, or a single device like ``"cuda:1"`` to load the backbone directly onto one GPU.
            - ``provider``: For ``backend="onnx"``, the ONNX execution provider
              (e.g. ``"CUDAExecutionProvider"``).
            - ``file_name``: For ``backend="onnx"`` or ``"openvino"``, the filename to load
              (e.g. for optimized or quantized models).
            - ``export``: For ``backend="onnx"`` or ``"openvino"``, whether to export the model to the
              backend format. Also set automatically if the exported file doesn't exist.

            See the `PreTrainedModel.from_pretrained
            <https://huggingface.co/docs/transformers/en/main_classes/model#transformers.PreTrainedModel.from_pretrained>`_
            documentation for more details. Defaults to None.
        processor_kwargs (dict[str, Any], optional): Keyword arguments forwarded to
            ``AutoProcessor.from_pretrained`` when loading the processor/tokenizer. See the
            `AutoTokenizer.from_pretrained
            <https://huggingface.co/docs/transformers/en/model_doc/auto#transformers.AutoTokenizer.from_pretrained>`_
            documentation for more details. Defaults to None.
        config_kwargs (dict[str, Any], optional): Keyword arguments forwarded to
            ``AutoConfig.from_pretrained`` when loading the config. See the `AutoConfig.from_pretrained
            <https://huggingface.co/docs/transformers/en/model_doc/auto#transformers.AutoConfig.from_pretrained>`_
            documentation for more details. Defaults to None.
        processing_kwargs (dict[str, dict[str, Any]], optional): Keyword arguments applied when *calling*
            the processor during preprocessing. This is a nested dict whose keys are modality names
            (``"text"``, ``"audio"``, ``"image"``, ``"video"``), ``"common"`` for kwargs shared across all
            modalities, or ``"chat_template"`` for kwargs forwarded to ``apply_chat_template`` (e.g.
            ``{"add_generation_prompt": True}``). Modality and common kwargs override the built-in defaults.
            The ``"chat_template"`` dict also accepts ``"restore_suffix"`` (default ``True``), a Sentence
            Transformers flag: fixed tokens a chat template appends after the content (e.g. an assistant
            prefill) are restored when truncation drops them, so models that read the final token position
            keep working. Saved to and loaded from the model configuration file. Defaults to None.
        backend (str, optional): Backend used for model inference. Can be ``"torch"`` (default), ``"onnx"``,
            or ``"openvino"``. Defaults to ``"torch"``.
        modality_config (dict, optional): Custom modality configuration mapping modality names to method and
            output name dicts. When provided, ``module_output_name`` must also be set. The ``"message"``
            modality entry may include a ``"format"`` key (``"structured"``, ``"flat"``, or ``"auto"``)
            to control how chat-template inputs are formatted. Defaults to None.
        module_output_name (str, optional): The name of the output feature this module creates (e.g.
            ``"token_embeddings"``, ``"scores"``). Required when ``modality_config`` is provided.
            Defaults to None.
        unpad_inputs (bool, optional): Controls whether text-only inputs are concatenated without
            padding for faster inference using flash attention's variable-length functions. Non-text
            inputs (images, audio, video) are always padded normally. If ``None`` (default), unpadding
            is enabled automatically when all prerequisites are met (flash attention with variable-length
            support, ``"torch"`` backend, and the ``"feature-extraction"`` or ``"fill-mask"`` task).
            Set to ``False`` to force
            padding, which is needed for architectures that don't support unpadded inputs (e.g.
            ``qwen2_vl``). Set to ``True`` to request unpadding explicitly. A warning is logged if the
            prerequisites are not met. Defaults to None.
        query_length (int, optional): Per-task text max-length applied when ``task="query"`` reaches
            :meth:`preprocess` (e.g. via :meth:`encode_query`). Content-cap only (truncation). ``None``
            (default) falls back to the tokenizer's ``model_max_length``. Used by ColBERT-style
            retrieval to cap queries shorter than documents. Not the pad target: query expansion
            specifies its pad target via ``query_expansion["length"]``, which overrides this (a
            smaller ``query_length`` raises when the expansion is assigned).
        document_length (int, optional): Per-task text max-length applied when ``task="document"``
            reaches :meth:`preprocess`. ``None`` (default) falls back to the tokenizer's
            ``model_max_length``.
        query_expansion (QueryExpansionConfig, optional): ColBERT-style query expansion config. See
            :class:`QueryExpansionConfig`. ``None`` (default) means no expansion. When set, every
            ``task="query"`` batch is expanded during preprocessing, so only set this with a
            :class:`MultiVectorMask` downstream (leave it ``None`` for dense / sparse /
            cross-encoder pipelines).
        max_seq_length (int, optional): Truncate any inputs longer than this value. Prefer setting
            ``model_max_length`` via ``processor_kwargs`` instead. Defaults to None.
        do_lower_case (bool, optional): If true, lowercases the input (independent of whether the model
            is cased or not). Rarely needed. Defaults to False.
        tokenizer_name_or_path (str, optional): Name or path of the tokenizer. When None,
            ``model_name_or_path`` is used. Deprecated. Defaults to None.
    úsentence_bert_config.jsonre   Úconfig_file_name)Útransformer_taskÚmodality_configÚmodule_output_nameÚprocessing_kwargsÚunpad_inputsÚquery_lengthÚdocument_lengthrì   z	list[str]Úconfig_keysN)r"  r#  rì   rÝ   Ú_DEFAULT_CONFIG_VALUESTrÃ   Úsave_in_root>   r‡   r£   r�   rß   rÞ   rà   rç   Ú_VALID_PROCESSING_KWARGS_KEYSr]   ÚtorchF)r  Úmodel_kwargsÚprocessor_kwargsÚconfig_kwargsr   Úbackendr  r  r!  r"  r#  rì   Úmax_seq_lengthÚdo_lower_caseÚtokenizer_name_or_pathÚmodel_name_or_pathr  ÚTransformerTaskr)  údict[str, Any] | Noner*  r+  r   úProcessingKwargs | Noner,  ú$Literal['torch', 'onnx', 'openvino']r  úModalityConfig | Noner  rg   r!  úbool | Noner"  ú
int | Noner#  rì   rí   r-  r.  r/  rr   ÚNonec          	     ó>  •— t          ¦   «                              ¦   «          |t          vrN|dk    rt          d¦  «        ‚t	          d|› dt          t                               ¦   «         ¦  «        › �¦  «        ‚|| _        |€i }|€i }|€i }|pi | _        t          | j        ¦  «        | j
        z
  }|r3t                               d|› dt          | j
        ¦  «        › d�¦  «         || _        || _        d| _        i | _        i | _        i | _        || _        || _        |                      |||¦  «        \  }}|                      |¦  «         |d	k    r0d
|vr,|j        �t3          d„ |j        D ¦   «         ¦  «        sd|_         | j        |||||fi |¤Ž| _        | j        }t;          ¦   «         r*ddlm} tA          ||¦  «        r| !                    ¦   «         }tE          j#        |j$        ¦  «        }t          |j%        ¦  «        | _&        d | _'        t3          d„ |j%         (                    ¦   «         D ¦   «         ¦  «        s| j&        tR          z  | _'        |�	d|vr||d<   tU          ¦   «         5  tW          j,        |�|n|fi |¤Ž| _-        d d d ¦  «         n# 1 swxY w Y   | j.        ��!d|vrSt_          | j0        d¦  «        r>| j0        j1        dk    r.te          | j.        j3        | j0        j1        ¦  «        | j.        _3        |rÈ| j.        j4        r�| j.        j5        j6        }to          |¦  «        sltq          ¦   «         g}tA          |tr          ¦  «        r|t          |¦  «        z  }n|�| :                    |¦  «         ts          |¦  «        | j.        j5        _6        n/	 || j.        _        n!# tv          $ r || j.        j<        _        Y nw xY w| j        dv rGt_          | j-        d¦  «        rd| j-        _=        t_          | j-        d¦  «        rd| j-        j.        _=        |�!d|v r|d          >                    dd¦  «        }nd}t          | j0        j@        || j-        ¬¦  «        | _A        |�l|| _B        |	€t	          d¦  «        ‚|	| _C        | D                    ¦   «         D ]7\  }}tA          |tŠ          ¦  «        rd|vsd|vrt	          d|›d|›�¦  «        ‚Œ8n-|  F                    | j        | j-        ¦  «        \  | _B        | _C        t           G                    d | jB        › �¦  «         t          | jB                             ¦   «         ¦  «        | jA        _H        |�:t                               d!¦  «         | j-        jI        jJ        | j        j0        _K        |
| _L        || _M        d S )"Nr`   z€The 'any-to-any' transformer task requires transformers v5+. Please upgrade transformers with `pip install transformers>=5.0.0`.zUnsupported transformer_task 'z'. Supported tasks are: z%Unknown keys in `processing_kwargs`: ú. Valid keys are: z. Unknown keys will be ignored. Did you mean to nest them under 'common' or a modality key ('text', 'audio', 'image', 'video')?Fr^   Ú
num_labelsc              3  ó@   K  — | ]}|                      d ¦  «        V — ŒdS )ÚForSequenceClassificationN)Úendswith)rÈ   Úarchs     rF   rÊ   z'Transformer.__init__.<locals>.<genexpr>H  s/   è è € ÐgÐgÈ$˜4Ÿ=š=Ð)DÑEÔEÐgÐgÐgÐgÐgÐgrE   rð   r   ©Ú	PeftModelc              3  óF   K  — | ]}|j         t          j        j        u V — Œd S rÆ   )ÚkindÚinspectÚ	ParameterÚVAR_KEYWORD)rÈ   Úps     rF   rÊ   z'Transformer.__init__.<locals>.<genexpr>_  s/   è è € ÐjÐj¸q�1”6�WÔ.Ô:Ð:ÐjÐjÐjÐjÐjÐjrE   Úmodel_max_lengthÚmax_position_embeddingséÿÿÿÿ©r_   r`   Úpadding_sideÚleftÚ	tokenizerÚmessagerl   Úauto)ry   Úmessage_formatÚ	processorzãLoading the Transformer module with a custom modality_config requires also providing module_output_name with the name of the output feature that this module should create, for example "token_embeddings" or "sentence_embedding".rf   rh   z"Invalid modality_config entry for zQ: each entry must be a dict with 'method' and 'method_output_name' keys, but got zActive modality config: z’The `tokenizer_name_or_path` argument is deprecated and will be removed in a future version. Please use the same path for the model and processor.)NÚsuperÚ__init__r…   r|   r‚   rÿ   Úkeysr  r   rò   r'  ÚloggerÚwarningró   r,  r.  Útrack_media_countsÚ_prompt_length_mappingÚ_method_signature_cacheÚ_chat_template_suffix_cacher"  r#  Ú_load_configÚ%_warn_on_unsupported_attention_configrw   rÌ   r;  Ú_load_modelÚmodelr-   ÚpeftrA  rÇ   Úget_base_modelrD  Ú	signaturerˆ   Ú
parametersÚ_declared_forward_paramsÚmodel_forward_paramsÚvaluesÚ_FORWARD_SAFETY_NET_KEYSr<   r   r€   rR  rN  Úhasattrrp   rI  rê   rH  Úis_fastÚbackend_tokenizerrÍ   rÎ   r   rË   r  ÚAttributeErrorÚbasic_tokenizerrL  rô   r2   ry   Úinput_formatterr  r  rÕ   r   Úinfer_modalitiesÚdebugÚsupported_modalitiesÚ	__class__rA   Útokenizer_classr!  rì   )Úselfr0  r  r)  r*  r+  r   r,  r  r  r!  r"  r#  rì   r-  r.  r/  Úunknown_keysrp   Úis_peft_modelÚforward_modelrA  Úforward_signaturerÍ   Únew_normalizersrQ  Úmodality_keyÚparamsrq  s                               €rF   rT  zTransformer.__init__  s  ø€ õ* 	‰Œ×ÒÑÔÐØÕ#AÐAÐAØ <Ò/Ð/Ý!ðZñô ð õ ð IÐ1Að  Ið  IÕ[_Õ`~÷  aDò  aDñ  aFô  aFñ  \Gô  \Gð  Ið  Iñô ð ð 2BˆÔØÐØˆLØÐ#Ø!ÐØÐ ØˆMØ3DÐ3JÈˆÔÝ˜4Ô1Ñ2Ô2°TÔ5WÑWˆØð 	Ý�NŠNðR¸ð Rð RÝ#)¨$Ô*LÑ#MÔ#MðRð Rð Rñô ð ð ˆŒØ*ˆÔØ"'ˆÔØ&(ˆÔ#Ø<>ˆÔ$ØACˆÔ(ð )ˆÔØ.ˆÔà $× 1Ò 1Ð2DÀgÈ}Ñ ]Ô ]Ñˆ�Ø×2Ò2°6Ñ:Ô:Ð:ð Ð 9Ò9Ð9Ø MÐ1Ð1àÔ$Ð,ÝÐgÐgÐRXÔRfÐgÑgÔgÑgÔgð -ð !"ˆFÔà%�TÔ%ØÐ 0°&¸'À=ð
ð 
ØT`ð
ð 
ˆŒ
ð
 œ
ˆÝÑÔð 	?Ø&Ð&Ð&Ð&Ð&Ð&å˜-¨Ñ3Ô3ð ?Ø -× <Ò <Ñ >Ô >�õ $Ô-¨mÔ.CÑDÔDÐÝ(+Ð,=Ô,HÑ(IÔ(IˆÔ%Ø59ˆÔ!ÝÐjÐjÐDUÔD`×DgÒDgÑDiÔDiÐjÑjÔjÑjÔjð 	aØ(,Ô(EÕH`Ñ(`ˆDÔ%àÐ%Ð*<ÐDTÐ*TÐ*TØ3AÐÐ/Ñ0Ý'Ñ)Ô)ð 	ð 	Ý*Ô:Ø*@Ð*LÐ&Ð&ÐRdðð à"ðð ˆDŒNð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð Œ>Ñ%ð #Ð*:Ð:Ð:Ý˜DœKÐ)BÑCÔCð ;à”KÔ7¸2Ò=Ð=å25Ø”NÔ3°T´[Ô5Xñ3ô 3�”Ô/ð ð Uà”>Ô)ð UØ!%¤Ô!AÔ!L�JÝ)¨*Ñ5Ô5ð jÝ+4©;¬;¨-˜Ý% jÕ2DÑEÔEð ?Ø+­t°JÑ/?Ô/?Ñ?˜O˜OØ'Ð3Ø+×2Ò2°:Ñ>Ô>Ð>ÝFXÐYhÑFiÔFi˜œÔ8ÔCøðUØ7D˜œÔ4Ð4øÝ)ð Uð Uð UØGT˜œÔ6ÔDÐDÐDðUøøøð
 Ô Ð$EÐEÐEõ �t”~ ~Ñ6Ô6ð 5Ø.4�”Ô+Ý�t”~ {Ñ3Ô3ð ?Ø8>�”Ô(Ô5ð Ð&¨9¸Ð+GÐ+GØ,¨YÔ7×;Ò;¸HÀfÑMÔMˆNˆNà#ˆNÝ-Ø”{Ô-¸nÐX\ÔXfð 
ñ  
ô  
ˆÔð Ð&Ø#2ˆDÔ Ø!Ð)Ý ðNñô ð ð
 '9ˆDÔ#Ø(7×(=Ò(=Ñ(?Ô(?ð ð Ñ$�˜fÝ! &­$Ñ/Ô/ð °8À6Ð3IÐ3IÐMaÐioÐMoÐMoÝ$ðV¸\ð Vð VØKQðVð Vñô ð ð Npðð =A×<QÒ<QÐRVÔR\Ð^bÔ^lÑ<mÔ<mÑ9ˆDÔ  $Ô"9Ý�ŠÐF°Ô0DÐFÐFÑGÔGÐGÝ48¸Ô9M×9RÒ9RÑ9TÔ9TÑ4UÔ4UˆÔÔ1à!Ð-Ý�NŠNðHñô ð ð 15´Ô0HÔ0QˆDŒJÔÔ-ð )ˆÔð  /ˆÔÐÐs$   É/JÊJÊJÎN* Î*OÏOc                ó   — | j         S )a  Whether text-only inputs are concatenated without padding for faster inference.

        Non-text inputs (images, audio, video) are always padded normally.
        ``None`` auto-detects, ``False`` forces padding, ``True`` requests unpadding.
        Re-evaluates on every assignment, so it can be changed after loading::

            model = SentenceTransformer("my-model", model_kwargs={"attn_implementation": "flash_attention_2"})
            model[0].unpad_inputs = False  # Force padding for models that need it
        )Ú_unpad_inputs©rs  s    rF   r!  zTransformer.unpad_inputs¾  s   € ð Ô!Ð!rE   rÙ   c                ó²   — || _         |du r	d| _        d S |                      ¦   «         | _        |du r#| j        st                               d¦  «         d S d S d S )NFTzqunpad_inputs=True was set, but the prerequisites for skipping padding are not met. Falling back to padded inputs.)r|  Úcan_flatten_inputsÚ_can_flatten_inputsrV  rW  ©rs  rÙ   s     rF   r!  zTransformer.unpad_inputsË  su   € à"ˆÔØ�Eˆ>ˆ>Ø&+ˆDÔ#Ð#Ð#à&*×&>Ò&>Ñ&@Ô&@ˆDÔ#Ø˜ˆ}ˆ} TÔ%<ˆ}Ý—’ð5ñô ð ð ð ð ˆ}ˆ}ˆ}rE   c                ó   — | j         S )a@  ColBERT-style query expansion config. See :class:`QueryExpansionConfig`. Validated and
        normalized on assignment, so re-setting after construction is safe::

            model[0].query_expansion = {"strategy": "fixed", "attend": True, "length": 32}
            model[0].query_expansion = None  # turn off
        )Ú_query_expansionr}  s    rF   rì   zTransformer.query_expansionØ  s   € ð Ô$Ð$rE   c                óR  — t          |¦  «        }|�Qt          | dd ¦  «        �@|                      |¦  «         |d         s#|                      ¦   «         rt	          d¦  «        ‚t          | dd ¦  «        }|�*|�(||d         k     rt	          d|› d|d         › d�¦  «        ‚|| _        d S )	Nr_  rä   a  FlashAttention-2 is incompatible with query_expansion attend=False. FA2 strips attention_mask=0 positions, so the [MASK] expansion tokens used by MaxSim never receive an attention update. Pass attn_implementation='sdpa' (preserves semantics) or set attend=True (changes semantics).r"  ræ   zquery_length=z+ is smaller than query_expansion['length']=z½. The expansion length is the query width floor, so a smaller query_length cap is contradictory. Drop query_length, raise it to at least the expansion length, or lower the expansion length.)rø   r~   Ú_validate_query_expansion_tokenÚ_is_flash_attention_requestedr‚   rƒ  )rs  rÙ   Ú	expansionr"  s       rF   rì   zTransformer.query_expansionâ  së   € å.¨uÑ5Ô5ˆ	àÐ ¥W¨T°7¸DÑ%AÔ%AÐ%MØ×0Ò0°Ñ;Ô;Ð;Ø˜XÔ&ð ¨4×+MÒ+MÑ+OÔ+Oð Ý ð>ñô ð õ ˜t ^°TÑ:Ô:ˆØÐ  \Ð%=À,ÐQZÐ[cÔQdÒBdÐBdÝð( ð (ð (ÐYbÐckÔYlð (ð (ð (ñô ð ð !*ˆÔÐÐrE   r‡  râ   c                óJ  — | j         €dS |d         }|d         }|€-| j         j        €| j         j        €t          d|›d�¦  «        ‚dS | j                              |¦  «        }| j         j        }|�||k    r*|| j         j        k    rt          d|›d|€dnd	› d
�¦  «        ‚dS dS )a6  Tokenizer-aware checks. The structural ``_normalize_query_expansion`` runs without the
        tokenizer, so this method catches the two silent-wrong-behavior cases that require it:

        * ``token=None`` falls back to ``mask_token_id``, then ``eos_token_id``. If the tokenizer
          has neither, the preprocess swap silently no-ops and the encoder sees raw pad tokens.
        * An explicit ``token`` that isn't in the tokenizer's vocabulary resolves to
          ``unk_token_id`` (or ``None``), silently inserting unk tokens at expansion positions.
        Nrã   rå   rñ   z± with token=None falls back to the tokenizer's mask_token, then its eos_token, but this tokenizer has neither. Set ``query_expansion={..., 'token': '<your_token>'}`` explicitly.zquery_expansion token=z3 isn't in this tokenizer's vocabulary (resolves to r8  Úunk_token_idz°). Check your model family's expected token: PaliGemma uses '<pad>', Qwen2/2.5/3/Omni use '<|endoftext|>', Gemma3 uses '<eos>', Idefics3 / ModernVBERT use '<end_of_utterance>'.)rN  Úmask_token_idÚeos_token_idr‚   Úconvert_tokens_to_idsr‰  Ú	unk_token)rs  r‡  rã   rå   Útoken_idÚunk_ids         rF   r…  z+Transformer._validate_query_expansion_tokenû  s  € ð Œ>Ð!ØˆFØ˜ZÔ(ˆØ˜'Ô"ˆØˆ=ð Œ~Ô+Ð3¸¼Ô8SÐ8[Ý ðY°ð Yð Yð Yñô ð ð
 ˆFØ”>×7Ò7¸Ñ>Ô>ˆØ”Ô,ˆØÐ ¨FÒ 2Ð 2°uÀÄÔ@XÒ7XÐ7XÝðX¨ð Xð XØ (Ð 0�f�f°nðXð Xð Xñô ð ð !3Ð 2Ð7XÐ7XrE   c                ó|  — | j         dvscd| j        vsZ| j        dk    sO t          | j        dd„ ¦  «        ¦   «         r0t          d„ | j                             ¦   «         D ¦   «         ¦  «        rdS 	 dd	lm} dd
l	m
} n+# t          $ r t                               d¦  «         Y dS w xY w|                      ¦   «         sdS  || j        j        ¦  «        \  ^}}}}|€dS t                               d¦  «          |ddd¬¦  «        | _        | j        �| xj        h d£z  c_        |                      ¦   «         | _        dS )aÍ  Determine whether text-only inputs can be flattened (concatenated without padding) for more efficient inference.

        When enabled, text-only inputs are concatenated into a single sequence and processed using flash
        attention's variable-length functions, eliminating padding overhead and significantly speeding up
        inference. Non-text inputs (images, audio, video) are always padded normally, even when this
        returns True.

        This requires:
        1. The ``"feature-extraction"`` or ``"fill-mask"`` task. Position-reading model heads
           (e.g. ``AutoModelForSequenceClassification``, which pools specific positions) are
           incompatible with flattened inputs, but the masked language modelling head is strictly
           position-wise, so its logits stay correct on a flattened sequence.
        2. The ``"text"`` modality must be supported by the model.
        3. All modality call methods must be ``"forward"``. ``get_..._features`` methods apply heads
           that are incompatible with flattened inputs.
        4. The ``"torch"`` backend with an attention-interface-compatible model.
        5. Flash attention with variable-length function support.

        Note: Some architectures don't work with unpadded inputs (e.g. ``qwen2_vl``). Use
        ``unpad_inputs=False`` to disable this optimization for such models.

        Returns:
            bool: True if text-only inputs can be flattened for efficient inference.
        )r]   ra   r‡   r(  Úis_backend_compatiblec                 ó   — dS )NFrD   rD   rE   rF   ú<lambda>z1Transformer._can_flatten_inputs.<locals>.<lambda>9  s   € È€ rE   c              3  ó.   K  — | ]}|d          dk    V — ŒdS )rf   rˆ   NrD   )rÈ   rz  s     rF   rÊ   z2Transformer._can_flatten_inputs.<locals>.<genexpr>:  s,   è è € Ð]Ð]°V�6˜(Ô# yÒ0Ð]Ð]Ð]Ð]Ð]Ð]rE   Fr   )ÚDataCollatorWithFlattening)Úlazy_import_flash_attentionz~Consider upgrading to transformers >= 5.0.0 to skip padding for text-only inputs, which can significantly speed up processing.NzuUsing flattened inputs with flash attention variable-length functions to avoid padding overhead for text-only inputs.T)Úreturn_seq_idxÚreturn_flash_attn_kwargsÚreturn_position_ids>   Úseq_idxÚmax_length_kÚmax_length_qÚcu_seq_lens_kÚcu_seq_lens_q)r  r  r,  r~   r_  rÌ   rf  r�   r•  Ú+transformers.modeling_flash_attention_utilsr–  r|   rV  ro  r†  rp   Ú_attn_implementationÚdata_collatorre  Ú_infer_flatten_position_offsetÚ_flatten_position_offset)rs  r•  r–  Ú_Úflash_varlen_fns        rF   r€  zTransformer._can_flatten_inputs  sÀ  € ð4 Ô!Ð)LÐLÐLØ˜TÔ1Ð1Ð1ØŒ|˜wÒ&Ð&ØN•7˜4œ:Ð'>ÀÀÑNÔNÑPÔPð 'åÐ]Ð]¸tÔ?S×?ZÒ?ZÑ?\Ô?\Ð]Ñ]Ô]Ñ]Ô]ð 'ð �5ð	Ø?Ð?Ð?Ð?Ð?Ð?Ø_Ð_Ð_Ð_Ð_Ð_Ð_øÝð 	ð 	ð 	Ý�LŠLð?ñô ð ð �5�5ð	øøøð ×1Ò1Ñ3Ô3ð 	Ø�5à&AÐ&AÀ$Ä+ÔBbÑ&cÔ&cÑ#Ð ˆˆO˜a !ØÐ"Ø�5å�Šð Dñ	
ô 	
ð 	
ð 8Ð7ØØ%)Ø $ð
ñ 
ô 
ˆÔð Ô$Ð0ØÐ%Ô%ð *ð *ð *ñ Ð%Ô%ð )-×(KÒ(KÑ(MÔ(MˆÔ%Øˆts   Á0A= Á=$B%Â$B%rõ   c                óô   — | j                              ¦   «         D ]]}t          |dd ¦  «        }t          |t          ¦  «        r5t          t          |dd ¦  «        t
          j        j        ¦  «        r|dz   c S Œ^dS )NÚpadding_idxÚposition_embeddingsrð   r   )r_  Úmodulesr~   rÇ   rõ   r(  ÚnnÚ	Embedding)rs  Úmoduler§  s      rF   r¢  z*Transformer._infer_flatten_position_offsete  s„   € ð ”j×(Ò(Ñ*Ô*ð 	'ð 	'ˆFÝ! &¨-¸Ñ>Ô>ˆKÝ˜+¥sÑ+Ô+ð 'µ
Ý˜Ð 5°tÑ<Ô<½e¼hÔ>Pñ1ô 1ð 'ð # Q‘Ð&Ð&Ð&øØˆqrE   c                óä   — | j         �| j         j        S t          | j        j        d¦  «        r| j        j                             ¦   «         }n| j        j        }t          |d¦  «        r|j        S dS )zœThe maximum input sequence length. Reads from the tokenizer if available, otherwise
        falls back to ``max_position_embeddings`` from the model config.NÚget_text_configrI  )rN  rH  rh  r_  rp   r®  rI  )rs  Útext_configs     rF   r-  zTransformer.max_seq_lengthq  st   € ð Œ>Ð%Ø”>Ô2Ð2õ �4”:Ô$Ð&7Ñ8Ô8ð 	,Øœ*Ô+×;Ò;Ñ=Ô=ˆKˆKàœ*Ô+ˆKå�;Ð 9Ñ:Ô:ð 	7ØÔ6Ð6ØˆtrE   c                ó0   — | j         �|| j         _        dS dS )zTSet the maximum input sequence length. Only effective when a tokenizer is available.N)rN  rH  r�  s     rF   r-  zTransformer.max_seq_length‚  s$   € ð Œ>Ð%Ø.3ˆDŒNÔ+Ð+Ð+ð &Ð%rE   r!   c                ó   — | j         S )z!The underlying transformer model.)r_  r}  s    rF   Ú
auto_modelzTransformer.auto_modelˆ  s   € ð ŒzÐrE   r    c                ó   — | j         j        S )z#The underlying model configuration.)r_  rp   r}  s    rF   rp   zTransformer.config�  s   € ð ŒzÔ Ð rE   úlist[Modality]c                óN   — t          | j                             ¦   «         ¦  «        S )z]The list of supported input modalities (e.g. ``"text"``, ``"image"``, ``("image", "text")``).)rÿ   r  rU  r}  s    rF   Ú
modalitieszTransformer.modalities’  s!   € õ �DÔ(×-Ò-Ñ/Ô/Ñ0Ô0Ð0rE   úPreTrainedTokenizerBase | Nonec                óp   — t          | j        t          ¦  «        r| j        S t          | j        dd¦  «        S )zVThe tokenizer, extracted from the processor. Returns ``None`` for non-text processors.rN  N)rÇ   rR  r"   r~   r}  s    rF   rN  zTransformer.tokenizer—  s5   € õ �d”nÕ&=Ñ>Ô>ð 	"Ø”>Ð!Ý�t”~ {°DÑ9Ô9Ð9rE   c                ó.  ‡— 	 ddl mŠ n# t          $ r Y dS w xY wt          | j        dd¦  «        }|€| j        �t          | j        dd¦  «        }t          |t          ¦  «        r|                     ¦   «         n|g}t          ˆfd„|D ¦   «         ¦  «        S )a  Whether the active chat template (the processor's, else the tokenizer's) uses a ``task``
        variable, e.g. to append query augmentation tokens for ``task == "query"`` renders.
        Reuses the template introspection transformers' own kwarg routing is based on.r   )Ú_get_template_variablesTrà   Nc              3  ó\   •K  — | ]&}t          |t          ¦  «        od  ‰|¦  «        v V — Œ'dS )r  N©rÇ   re   )rÈ   rÙ   rº  s     €rF   rÊ   z;Transformer._chat_template_declares_task.<locals>.<genexpr>«  sE   øè è € ÐnÐnÐ[`•:˜e¥SÑ)Ô)ÐV¨fÐ8OÐ8OÐPUÑ8VÔ8VÐ.VÐnÐnÐnÐnÐnÐnrE   )
Ú&transformers.utils.chat_template_utilsrº  r|   r~   rR  rN  rÇ   r   rf  rÌ   )rs  ÚtemplateÚ	templatesrº  s      @rF   Ú_chat_template_declares_taskz(Transformer._chat_template_declares_taskž  s½   ø€ ð	ØVÐVÐVÐVÐVÐVÐVøÝð 	ð 	ð 	à�4�4ð	øøøõ ˜4œ>¨?¸DÑAÔAˆØÐ ¤Ð :Ý˜tœ~¨ÀÑEÔEˆHÝ)3°H½dÑ)CÔ)CÐS�H—O’OÑ%Ô%Ð%È(Èˆ	ÝÐnÐnÐnÐnÐdmÐnÑnÔnÑnÔnÐns   ƒ
 Š
—r  r7   Úprocessor_inputsÚkwargsr	   c                ó¬   — |                      d¦  «        dk    r	| j        �dS | j        o+|dk    p%|dk    o| j                             |d         ¦  «        S )a  Whether to pack variable-length text inputs into a single flat sequence (FA2 unpadding).

        Only safe for text-only inputs, since :class:`DataCollatorWithFlattening` only handles
        ``input_ids`` / ``labels``. Subclasses can override to opt out for specific tasks.
        r  ÚqueryNFr‡   rO  )rô   rì   r  rm  Úis_text_only_messages)rs  r  rÁ  rÂ  s       rF   Ú_should_flatten_inputsz"Transformer._should_flatten_inputs­  sk   € ð �:Š:�fÑÔ Ò(Ð(¨TÔ-AÐ-MØ�5ØÔ&ð 
Ø˜Òð sØ˜IÒ%Ðq¨$Ô*>×*TÒ*TÐUeÐfoÔUpÑ*qÔ*qð	
rE   c                ó€   — 	 ddl m} n# t          $ r Y dS w xY wt          | j        dd¦  «        }|€dS  ||¬¦  «        S )z[Whether the loaded model was configured for FlashAttention-2 (via ``attn_implementation``).r   )Úis_flash_attention_requestedFr   N)Ú"requested_attention_implementation)Útransformers.utils.genericrÈ  r|   r~   rp   )rs  rÈ  Ú	attn_impls      rF   r†  z)Transformer._is_flash_attention_requestedÁ  sq   € ð	ØOÐOÐOÐOÐOÐOÐOøÝð 	ð 	ð 	Ø�5�5ð	øøøå˜DœKÐ)?ÀÑFÔFˆ	ØÐà�5Ø+Ð+ÈyÐYÑYÔYÐYs   ‚	 ‰
–Úinputsú!Sequence[SingleInput | PairInput]Úpromptc                óÎ  ‡— |si S ddi}dddœddii i dœ}| j         j        dk    rd	|d
         d<   |                     d¦  «        }|                     d	¦  «        }|�|}	n|dk    r| j        }	n|dk    r| j        }	nd}	|dk    r| j        nd}
|
�A|
d         dk    r5|�3||
d         k    r't                               d|
d         › d|› d�¦  «         |	�|
€|	|d         d	<   |                      |¦  «        }d|v r| 	                    |d         ¦  «         |D ]4}|                     |¦  «        x}r||          	                    |¦  «         Œ5|
�º|                     d¦  «        pi }|
d         dk    r?d|v sd	|v rt                               d¦  «         |
d         |d         d	<   d	|d         d<   nX|	�Vd	|vrR|	|
d         k     r't                               d|
d         › d|	› d�¦  «         t          |	|
d         ¦  «        |d         d	<   |                     di ¦  «        }|�|                      ¦   «         rd|i|¥}| j                             |¦  «        \  }}}| j        dk    r,|dk    r&|�$|dk    rt                               d|›d�¦  «         |                     ¦   «         D ] \  }}||          	                    |¦  «         Œ! | j        ||fi |¤Ž}|r*|d= |d                              dd¦  «         d|d         d <   d!| j        v rF|d!k    r@|
�|dk    rt'          d"|
d         ›d#�¦  «        ‚| j                             ||¦  «        \  }}n?|| j        vr6t+          ||t-          | j                             ¦   «         ¦  «        d$¦  «         |d!k    r|                      |d!         |¦  «         d}|r+|d!k    r%| j                             |d!         |¦  «        |d!<   n:|r8|dk    r2| j                             |d         |¦  «        |d<    | j        |fi |¤Ž}d}d}| j        r|d!k    rt;          |d!         ¦  «        \  }}t=          ¦   «         5  |                      |||||¬%¦  «        Šddd¦  «         n# 1 swxY w Y   |�'d&‰v r#tA          j!        |t@          j"        ¬'¦  «        ‰d(<   |�'d)‰v r#tA          j!        |t@          j"        ¬'¦  «        ‰d*<   |rlˆfd+„tG          ‰ $                    ¦   «         Ž D ¦   «         }|  %                    |¦  «        Š‰                     d,d¦  «         | j&        r‰d-         | j&        z   ‰d-<   |‰d.<   |�|‰d/<   | j        d0v r|  '                    ‰||¦  «         d1‰d2<   |dk    r| j        nd}
|
��ãd3‰v �rÞd4‰v �rÙ|
d         }‰d4         }‰d3         }|j(        d1         |k     r¢||j(        d1         z
  }t@          j)        j*         +                    |d5|fd5¬6¦  «        }t@          j)        j*         +                    |d5|fd5¬6¦  «        }|‰d4<   |‰d3<   d7‰v r2t@          j)        j*         +                    ‰d7         d5|fd5¬6¦  «        ‰d7<   |d5k    tA          j,        |j(        d1         |j-        ¬8¦  «        |k     z  }|
d         dk    rF| .                    d9¬:¦  «         /                    ¦   «         st                               d;|› d<�¦  «         | j0        �^|
d=         �!| j0         1                    |
d=         ¦  «        }n| j0        j2        }|€| j0        j3        }|�| 4                    ||¦  «        ‰d4<   |‰d><   |
d?         r| 4                    |d1¦  «        ‰d3<   ‰S )@aÌ  Preprocess inputs into model-ready features.

        Args:
            inputs: List of inputs. Can contain strings, dicts with modality keys, PIL images,
                or numpy/torch arrays for audio/video.
            prompt: Optional prompt to prepend to text inputs or inject as a system message.
            processing_kwargs: Per-call overrides for the processor kwargs configured on the module
                via the ``processing_kwargs`` constructor argument. Same nested structure (modality
                keys plus ``"common"`` and ``"chat_template"``). Per-call values are merged on top of
                the instance-level kwargs with shallow per-modality merge, so individual settings
                (e.g. only ``max_length``) can be overridden without replacing the entire modality
                dict. Defaults to None.
            **kwargs: Additional keyword arguments forwarded to prompt length computation
                (e.g. ``task``). Only used when ``prompt`` is provided for text inputs.

        Returns:
            Dictionary containing preprocessed tensors with a ``modality`` key indicating the
            input type and optionally a ``prompt_length`` key for prompt-aware pooling.
        r[   ÚptTÚlongest_first©rX   rZ   rX   ©r‡   r£   r�   rß   r¾   rY   r£   r  NrÄ  Údocumentrã   ré   ræ   z!query_expansion fixes queries to z tokens, so the max_length=z' override is ignored for query batches.r‡   rÞ   zµprocessing_kwargs overrides the text padding or max_length, but query expansion requires a fixed width: re-applying padding='max_length' with the expansion length for query batches.z$query_expansion guarantees at least z! query tokens, so the max_length=z, override is raised to it for query batches.rà   rb   zJThis retrieval model's processor always renders text as a query, but task=zw was requested: these inputs get the query prefix and augmentation tokens. *ForRetrieval models expect image documents.FÚreturn_attention_maskrO  rñ   ad   cannot be combined with a chat-template (message) backbone: queries are rendered through the chat template and then padded / truncated to the expansion length, which destroys the query content. Chat-template backbones should own their query augmentation in the template itself (it receives task='query'), or pin modality_config to the plain text modality.zTransformer module©Úchat_template_kwargsÚimage_grid_thw)Údtyper  Úvideo_grid_thwr  c                óJ   •— g | ]}t          t          ‰|¦  «        ¦  «        ‘Œ S rD   )r   Úzip)rÈ   rf  Úprocessor_outputs     €rF   ú
<listcomp>z*Transformer.preprocess.<locals>.<listcomp>Œ  s,   ø€ ÐlÐlÐlÀ&�$�sÐ#3°VÑ<Ô<Ñ=Ô=ÐlÐlÐlrE   ÚlabelsÚposition_idsr  r  rK  rð   Úlogits_to_keepr  r  r   )rÙ   r  ©ÚdevicerJ  ©Údimz@One or more queries filled the entire query_expansion length of zk tokens: any content beyond it was truncated, as this model always processes queries at exactly this width.rå   r  rä   )5rp   ry   rô   r"  r#  rì   rV  Úwarning_onceÚ_merge_processing_kwargsÚupdateÚmaxrÀ  rm  Úparse_inputsr  rÕ   rÆ  Úpopr  r‚   Úbatch_to_messager4   rÿ   rU  Ú_verify_pair_roles_supportedÚprepend_prompt_to_messagesÚprepend_prompt_to_textsÚ_get_prompt_lengthrX  r
  r<   Ú_call_processorr(  ÚtensorÚlongrÜ  rf  r¡  r£  Ú_verify_left_paddingÚshaperª  Ú
functionalÚpadÚarangerã  rÌ   ÚallrN  rŒ  rŠ  r‹  Úmasked_fill) rs  rÌ  rÎ  r   rÂ  Úcommon_kwargsÚmodality_kwargsr  Úmax_length_overrideÚtask_max_lengthr‡  Úeffective_processing_kwargsry  r×   Útext_overridesr×  r  rÁ  Úextra_modality_kwargsÚextra_kwargsÚshould_flattenr  r  r  Ú
per_sampleÚfloorr  r  ÚmissingÚexpansion_positionsÚexpansion_idrÝ  s                                   @rF   Ú
preprocesszTransformer.preprocessÍ  s7
  ø€ ð4 ð 	ØˆIà)¨4Ð0ˆà $°OÐDÐDØ Ð&ØØð	
ð 
ˆð Œ;Ô! YÒ.Ð.ð 3?ˆO˜GÔ$ YÑ/ð �zŠz˜&Ñ!Ô!ˆØ$Ÿjšj¨Ñ6Ô6ÐØÐ*Ø1ˆOˆOØ�WŠ_ˆ_Ø"Ô/ˆOˆOØ�ZÒÐØ"Ô2ˆOˆOà"ˆOð -1°GªO¨O�DÔ(Ð(Àˆ	àÐ!Ø˜*Ô%¨Ò0Ð0Ø#Ð/Ø# y°Ô':Ò:Ð:å×Òð[°I¸hÔ4Gð [ð [Ø1ð[ð [ð [ñô ð ð Ð&¨9Ð+<Ø4CˆO˜FÔ# LÑ1à&*×&CÒ&CÐDUÑ&VÔ&VÐ#ØÐ2Ð2Ð2Ø× Ò Ð!<¸XÔ!FÑGÔGÐGØ+ð 	@ð 	@ˆLØ7×;Ò;¸LÑIÔIÐIˆyð @Ø Ô-×4Ò4°YÑ?Ô?Ð?øð Ð Ø8×<Ò<¸VÑDÔDÐJÈˆNØ˜Ô$¨Ò/Ð/Ø Ð.Ð.°,À.Ð2PÐ2PÝ×'Ò'ð>ñô ð ð
 9BÀ(Ô8K� Ô'¨Ñ5Ø5A� Ô'¨	Ñ2Ð2Ø Ð,°À^Ð1SÐ1SØ" Y¨xÔ%8Ò8Ð8Ý×'Ò'ðd¸yÈÔ?Rð dð dØ&5ðdð dð dñô ð õ 9<¸OÈYÐW_ÔM`Ñ8aÔ8a� Ô'¨Ñ5à:×>Ò>¸ÐPRÑSÔSÐð Ð × AÒ AÑ CÔ CÐØ$*¨DÐ#IÐ4HÐ#IÐ à<@Ô<P×<]Ò<]Ð^dÑ<eÔ<eÑ9ˆÐ"Ð$9ð Ô  KÒ/Ð/°HÀÒ4FÐ4FÈ4ÐK[Ð`dÐhoÒ`oÐ`oÝ×Òð1Ð]að 1ð 1ð 1ñô ð ð +@×*EÒ*EÑ*GÔ*Gð 	?ð 	?Ñ&ˆL˜,Ø˜LÔ)×0Ò0°Ñ>Ô>Ð>Ð>ð 5˜Ô4°XÐ?OÐZÐZÐSYÐZÐZˆØð 	EØÐ.Ð/Ø˜FÔ#×'Ò'¨	°4Ñ8Ô8Ð8Ø?DˆO˜FÔ#Ð$;Ñ<ð ˜Ô,Ð,Ð,°¸YÒ1FÐ1FØÐ$¨°VÒ);Ð);õ !ð%°	¸*Ô0Eð %ð %ð %ñô ð ð *.Ô)=×)NÒ)NÈxÐYiÑ)jÔ)jÑ&ˆHÐ&Ð&Ø˜TÔ1Ð1Ð1Ý,¨V°X½tÀDÔDX×D]ÒD]ÑD_ÔD_Ñ?`Ô?`ÐbvÑwÔwÐwð �yÒ Ð Ø×-Ò-Ð.>¸yÔ.IÐK_Ñ`Ô`Ð`ð ˆØð 	F�h )Ò+Ð+Ø*.Ô*>×*YÒ*YØ  Ô+¨Vñ+ô +Ð˜YÑ'Ð'ð
 ð 	F˜ FÒ*Ð*Ø'+Ô';×'SÒ'SÐTdÐekÔTlÐntÑ'uÔ'uÐ˜VÑ$Ø3˜DÔ3°FÐEÐE¸fÐEÐEˆMð !%ÐØ $ÐØÔ"ð 	p x°9Ò'<Ð'<Ý;RÐScÐdmÔSnÑ;oÔ;oÑ8Ð!Ð#8å'Ñ)Ô)ð 	ð 	Ø#×3Ò3ØØ ØØØ%9ð  4ñ  ô  Ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð !Ð,Ð1AÐEUÐ1UÐ1UÝ8=¼ÐEZÕbgÔblÐ8mÑ8mÔ8mÐÐ4Ñ5Ø Ð,Ð1AÐEUÐ1UÐ1UÝ8=¼ÐEZÕbgÔblÐ8mÑ8mÔ8mÐÐ4Ñ5àð 	tàlÐlÐlÐlÍCÐQa×QhÒQhÑQjÔQjÐLkÐlÑlÔlˆJØ#×1Ò1°*Ñ=Ô=ÐØ× Ò  ¨4Ñ0Ô0Ð0ØÔ,ð tØ3CÀNÔ3SÐVZÔVsÑ3sÐ  Ñ0à'/Ð˜Ñ$ØÐ$Ø0=Ð˜_Ñ-àÔ Ð$EÐEÐEØ×%Ò%Ð&6¸ÈÑWÔWÐWØ12ÐÐ-Ñ.ð -1°GªO¨O�DÔ(Ð(Àˆ	ØÑ Ð%5Ð9IÐ%IÑ%IÈkÐ]mÐNmÑNmØ˜hÔ'ˆEØ(¨Ô5ˆIØ-Ð.>Ô?ˆNð Œ˜qÔ! EÒ)Ð)Ø )¤/°!Ô"4Ñ4�Ý!œHÔ/×3Ò3°IÀÀ7¸|ÐSTÐ3ÑUÔU�	Ý!&¤Ô!4×!8Ò!8¸È!ÈWÈÐ]^Ð!8Ñ!_Ô!_�Ø09Ð  Ñ-Ø5CÐ Ð!1Ñ2Ø#Ð'7Ð7Ð7Ý9>¼Ô9L×9PÒ9PØ(Ð)9Ô:¸QÀ¸LÐPQð :Qñ :ô :Ð$Ð%5Ñ6ð
 $2°QÒ#6Ý”˜Yœ_¨QÔ/¸Ô8MÐNÑNÔNÐQVÒVñ#Ðð
 ˜Ô$¨Ò/Ð/Ð8K×8OÒ8OÐTVÐ8OÑ8WÔ8W×8[Ò8[Ñ8]Ô8]Ð/Ý×#Ò#ð"ÐW\ð "ð "ð "ñô ð ð
 Œ~Ð)Ø˜WÔ%Ð1Ø#'¤>×#GÒ#GÈ	ÐRYÔHZÑ#[Ô#[�L�Lð $(¤>Ô#?�LØ#Ð+Ø'+¤~Ô'B˜ØÐ+Ø4=×4IÒ4IÐJ]Ð_kÑ4lÔ4lÐ$ [Ñ1Ø<OÐÐ8Ñ9ð ˜Ô"ð hØ5C×5OÒ5OÐPcÐefÑ5gÔ5gÐ Ð!1Ñ2àÐs   ÑQ4Ñ4Q8Ñ;Q8Úmessages_batchrú   r×  c           	     ó>  — | j                              |¦  «        sdS d„ |                     ¦   «         D ¦   «         }| j                              |¦  «        }|€dS t	          | j        dd¦  «        pd}| j         j        dk    rd}nd}t          d|› d	|› d
|› d�¦  «        ‚)aÀ  Raise if the chat template cannot carry the ``query``/``document`` roles a pair is mapped to.

        A template that only branches on ``system``/``user``/``assistant`` renders a pair to an empty
        prompt, so the model would score an input holding neither the query nor the document. Published
        rerankers ship a template that handles both roles, so this is reached when a backbone is used,
        or fine-tuned, without one.
        Nc                ó8   — i | ]\  }}|t           v¯|d k    ¯||“ŒS )Úrestore_suffix©Ú%_APPLY_CHAT_TEMPLATE_TOP_LEVEL_KWARGS©rÈ   ÚkeyrÙ   s      rF   rÔ   z<Transformer._verify_pair_roles_supported.<locals>.<dictcomp>Ú  s?   € ð 
ð 
ð 
á��UØÕ?Ð?Ð?ÀCÐK[ÒD[ÐD[ð �àD[ÐD[ÐD[rE   Úname_or_pathz
this modelÚ
structuredzº    <Query>: {{ (messages | selectattr("role", "eq", "query") | first).content[0].text }}
    <Document>: {{ (messages | selectattr("role", "eq", "document") | first).content[0].text }}
zÌ    <Query>: {{ messages | selectattr("role", "eq", "query") | map(attribute="content") | first }}
    <Document>: {{ messages | selectattr("role", "eq", "document") | map(attribute="content") | first }}
zThe chat template of z) cannot carry a 'query'/'document' pair (zi). Pair inputs are mapped to one message per role, so set a chat template that renders both roles, e.g.:
z¢via `processor_kwargs={"chat_template": ...}` when loading, `model.processor.chat_template = ...` afterwards, or a `chat_template.jinja` file alongside the model.)rm  Úhas_pair_rolesrÕ   Úpair_roles_failurer~   rp   rQ  r‚   )rs  r
  r×  Úprobe_kwargsÚfailureÚ
model_nameÚexamples          rF   rí  z(Transformer._verify_pair_roles_supportedÌ  sû   € ð Ô#×2Ò2°>ÑBÔBð 	ØˆFð
ð 
à2×8Ò8Ñ:Ô:ð
ñ 
ô 
ˆð
 Ô&×9Ò9¸,ÑGÔGˆØˆ?ØˆFÝ˜Tœ[¨.¸$Ñ?Ô?ÐOÀ<ˆ
ØÔÔ.°,Ò>Ð>ðtð ˆGð}ð õ ðO Jð Oð OÐY`ð Oð OàðOð Oð Oñ
ô 
ð 	
rE   rÝ  rü  údict[str, dict[str, Any]]rû  c                óÄ  — |                      d¦  «        }t          |t          j        ¦  «        r|j        dk    rdS |dd…df                              ¦   «         rdS t          d„ |d                               d¦  «        |                      d¦  «        fD ¦   «         d¦  «        }|�d|›d	�}n"t          | j        d
¦  «        rdnd}d|› d|› d�}t          d|z   ¦  «        ‚)aØ  Verify that causal inputs are left-padded, i.e. that every sample ends in a real token.

        Checks the produced ``attention_mask`` rather than ``padding_side``, because the side that
        actually applies can come from the tokenizer attribute or from either the ``"text"`` or
        ``"common"`` processing_kwargs bucket, and which of those wins differs per processor type and
        per call path. The output is the only signal that covers every route.
        r  é   NrJ  c              3  ó*   K  — | ]}|®|dk    ¯
|V — Œd S )NrM  rD   )rÈ   Úsides     rF   rÊ   z3Transformer._verify_left_padding.<locals>.<genexpr>  s9   è è € ð ð àØÐ#¨°ª¨ð à(6¨¨¨ðð rE   r‡   rL  z3Your ``processing_kwargs`` set the padding side to z . Remove it or set it to "left".rN  zprocessor.tokenizerrR  zThe module sets ``zS.padding_side`` to "left" on load, so it was changed afterwards. Restore it with ``z.padding_side = "left"``.zâAt least one sample ends in a padding token, but causal models require left padding so that the last token position is always a real token. This is needed for efficient logit computation (logits_to_keep=1) and for LogitScore. )
rô   rÇ   r(  ÚTensorÚndimrù  Únextrh  rR  r‚   )rs  rÝ  rü  rû  r  Úkwargs_sideÚfixÚpadder_paths           rF   rô  z Transformer._verify_left_paddingõ  sF  € ð *×-Ò-Ð.>Ñ?Ô?ˆÝ˜.­%¬,Ñ7Ô7ð 	¸>Ô;NÐRSÒ;SÐ;SØˆFØ˜!˜!˜!˜R˜%Ô ×$Ò$Ñ&Ô&ð 	ØˆFõ ðð à,¨VÔ4×8Ò8¸ÑHÔHÈ-×J[ÒJ[Ð\jÑJkÔJkÐlðñ ô ð
 ñ
ô 
ˆð Ð"ØwÈÐwÐwÐwˆCˆCå3:¸4¼>È;Ñ3WÔ3WÐhÐ/Ð/Ð]hˆKðL [ð Lð LØ%0ðLð Lð Lð õ ðeàgjñkñ
ô 
ð 	
rE   Úper_callrÜ   c                óD  — |s| j         S t          |¦  «        | j        z
  }|r3t                               d|› dt          | j        ¦  «        › d�¦  «         i }| j        D ]@}| j                              |i ¦  «        }|                     |i ¦  «        }|s|r	i |¥|¥||<   ŒA|S )aŽ  Merge per-call ``processing_kwargs`` on top of the instance-level ``self.processing_kwargs``.

        The merge is shallow per top-level key: for each modality (or ``"common"`` /
        ``"chat_template"``), per-call entries override individual instance entries, leaving
        non-overridden settings intact. Unknown top-level keys in ``per_call`` are warned about
        and ignored.
        z.Unknown keys in per-call `processing_kwargs`: r:  z. Unknown keys will be ignored.)r   rò   r'  rV  ræ  ró   rô   )rs  r%  rt  Úmergedr  Úinstance_valueÚper_call_values          rF   rç  z$Transformer._merge_processing_kwargs   sì   € ð ð 	*ØÔ)Ð)å˜8‘}”} tÔ'IÑIˆØð 	Ý×ÒðoÀð oð oÝ#)¨$Ô*LÑ#MÔ#Mðoð oð oñô ð ð
 $&ˆØÔ5ð 	Cð 	CˆCØ!Ô3×7Ò7¸¸RÑ@Ô@ˆNØ%Ÿ\š\¨#¨rÑ2Ô2ˆNØð C ð CØB ÐB°>ÐB��s‘øØˆrE   Úfeaturesc                ó  ‡ ‡— |                      dd¦  «        }‰ j        |         }|d         }|d         }t          |t          ¦  «        r|f}n$t          |t          ¦  «        rt          |¦  «        }i |¥|¥ddi¥}t          ‰ j        |d¦  «        }|€t          d|› d	�¦  «        ‚|d
k    rI‰ j	        €!ˆ fd„| 
                    ¦   «         D ¦   «         }	n�ˆ fd„| 
                    ¦   «         D ¦   «         }	nl‰ j                              |¦  «        Š‰€0t          t          j        |¦  «        j        ¦  «        Š‰‰ j        |<   ˆfd„| 
                    ¦   «         D ¦   «         }	|�	d|v rd|	d<    |di |	¤Ž}
|
}|�m|D ]j}	 ||         }Œ# t           t"          f$ rK 	 t          ||¦  «        }n6# t$          $ r) t%          d|›dt'          |¦  «        j        › d�¦  «        ‚w xY wY Œgw xY w|j        dk    r)|                     d¦  «                             dd¦  «        }||‰ j        <   d|v rŸd|v r›t3          ¦   «         r�ddlm} t          ‰ j        |¦  «        rr‰ j        j        j        ra|d         j        d         }|d         }t?          j         |‰ j        j        j!        |j"        ¬¦  «        }t?          j#        ||fd¬¦  «        |d<   tI          ‰ j        j%        d¦  «        r ‰ j        j%        j&        rd|
v r|
d         |d<   |S )aÑ  Forward pass through the transformer model.

        Dispatches to the appropriate model method based on the ``modality`` key in ``features``
        and writes the result into ``features[self.module_output_name]``.

        Args:
            features: Input features dictionary produced by :meth:`preprocess`. Must contain the
                keys expected by the underlying model (e.g. ``input_ids``, ``pixel_values``, etc.).
                A ``modality`` key selects the modality config to use. Defaults to ``"text"``
                when absent.
            **kwargs: Additional keyword arguments forwarded to the model method (override features).

        Returns:
            The updated ``features`` dict with the model output stored under ``self.module_output_name``
            (e.g. ``token_embeddings``, ``sentence_embedding``, ``scores``, or ``causal_logits``).
            May also include ``all_layer_embeddings`` if ``output_hidden_states`` is enabled.
        r  r‡   rf   rh   r  TNz#Model does not have the requested 'z' methodrˆ   c                ó@   •— i | ]\  }}|t           vs	|‰j        v ¯||“ŒS rD   )Ú_NON_MODEL_FEATURE_KEYSrd  ©rÈ   r  rÙ   rs  s      €rF   rÔ   z'Transformer.forward.<locals>.<dictcomp>`  sB   ø€ ð #ð #ð #á"˜˜UØÕ"9Ð9Ð9¸SÀDÔDaÐ=aÐ=að ˜à=aÐ=aÐ=arE   c                ó.   •— i | ]\  }}|‰j         v ¯||“ŒS rD   )re  r.  s      €rF   rÔ   z'Transformer.forward.<locals>.<dictcomp>f  s.   ø€ Ð"wÐ"wÐ"w±*°#°uÐVYÐ]aÔ]vÐVvÐVv 3¨ÐVvÐVvÐVvrE   c                ó$   •— i | ]\  }}|‰v ¯	||“ŒS rD   rD   )rÈ   r  rÙ   Úmethod_paramss      €rF   rÔ   z'Transformer.forward.<locals>.<dictcomp>l  s+   ø€ ÐgÐgÐg©j¨c°5ÐRUÐYfÐRfÐRf˜s EÐRfÐRfÐRfrE   Úhidden_statesÚoutput_hidden_stateszCould not access output key z% via indexing or attribute access on rï   é   r  rð   r  r  r   r@  râ  rä  Úall_layer_embeddingsrD   )'rô   r  rÇ   re   rÿ   Útupler~   r_  r‚   re  rÕ   rZ  rò   rD  rb  rc  r}   Ú	TypeErrorrk  r{   rA   r   ÚflattenÚ	transposer  r-   r`  rA  Úactive_peft_configÚis_prompt_learningrõ  r(  ÚonesÚnum_virtual_tokensrã  Úcatrh  rp   r3  )rs  r*  rÂ  Úmodality_nameÚmodality_paramsÚmethod_namerh   Ú
all_kwargsÚmodel_methodÚfiltered_kwargsÚmodel_outputÚ	embeddingÚ
output_keyrA  Ú
batch_sizer  Úprefix_attention_maskr1  s   `                @rF   rˆ   zTransformer.forward:  sñ  øø€ ð& #+§,¢,¨z¸6Ñ"BÔ"BˆØÔ.¨}Ô=ˆØ% hÔ/ˆØ,Ð-AÔBÐÝÐ(­#Ñ.Ô.ð 	;Ø"4Ð!6ÐÐÝÐ*­DÑ1Ô1ð 	;Ý!&Ð'9Ñ!:Ô!:Ðð A˜Ð@ FÐ@¨M¸4Ð@Ð@ˆ
Ý˜tœz¨;¸Ñ=Ô=ˆØÐÝÐXÀ;ÐXÐXÐXÑYÔYÐYà˜)Ò#Ð#ØÔ(Ð0ð#ð #ð #ð #à&0×&6Ò&6Ñ&8Ô&8ð#ñ #ô #��ð #xÐ"wÐ"wÐ"wÀ
×@PÒ@PÑ@RÔ@RÐ"wÑ"wÔ"w��à Ô8×<Ò<¸[ÑIÔIˆMØÐ$Ý #¥GÔ$5°lÑ$CÔ$CÔ$NÑ OÔ O�Ø<I�Ô,¨[Ñ9ØgÐgÐgÐg¸J×<LÒ<LÑ<NÔ<NÐgÑgÔgˆOð Ð)¨oÐASÐ.SÐ.SØ6:ˆOÐ2Ñ3à#�|Ð6Ð6 oÐ6Ð6ˆà ˆ	ØÐ)Ø0ð ð �
ðØ )¨*Ô 5�I�IøÝ ¥)Ð,ð 	ð 	ð 	ðÝ$+¨I°zÑ$BÔ$B˜	˜	øÝ)ð ð ð Ý,ð>¸:ð >ð >Ý"& y¡/¤/Ô":ð>ð >ð >ñô ð ðøøøð "˜	ð		øøøð Œ>˜QÒÐð "×)Ò)¨!Ñ,Ô,×6Ò6°q¸!Ñ<Ô<ˆIà,5ˆ�Ô(Ñ)ð ˜(Ð"Ð"Ð'7¸8Ð'CÐ'CÕHYÑH[ÔH[Ð'CØ&Ð&Ð&Ð&Ð&Ð&å˜$œ* iÑ0Ô0ð g°T´ZÔ5RÔ5eð gØ% kÔ2Ô8¸Ô;�
Ø!)Ð*:Ô!;�Ý(-¬
Ø ¤
Ô =Ô PÐYgÔYnð)ñ )ô )Ð%õ .3¬YÐ8MÈ~Ð7^ÐdeÐ-fÑ-fÔ-f�Ð)Ñ*õ �D”JÔ%Ð'=Ñ>Ô>ð	Mà”
Ô!Ô6ð	Mð   <Ð/Ð/à/;¸OÔ/LˆHÐ+Ñ,àˆs*   Å?FÆG$ÆF+Æ*G$Æ+3GÇG$Ç#G$c                ó²  ‡ — t          ‰ j        j        t          ¦  «        r‰ j        j        j        S ‰ j        dk    r,t          ‰ j        j        dd¦  «        �‰ j        j        j        S ˆ fd„} |‰ j        j        ¦  «        x}�|S t          ‰ j        j        d¦  «        r |‰ j        j        j	        ¦  «        x}�|S t          ‰ j        j        d¦  «        rQ‰ j        j        j
                             ¦   «         D ]-}t          ‰ j        j        |¦  «        } ||¦  «        x}�|c S Œ.t          dt          ‰ j        j        ¦  «        j        › d�¦  «        ‚)	a  Get the output embedding dimension from the transformer model.

        Returns:
            int: The hidden dimension size of the model's embeddings.

        Raises:
            ValueError: If the embedding dimension cannot be determined from the model config.
        rb   Úembedding_dimNc                ó>  •— t          | d¦  «        r‰j        dk    r| j        S t          | d¦  «        r| j        S dD ]H}t          | |¦  «        r6t	          | |¦  «        }t          |t          ¦  «        r|r
|d         c S ŒD|c S ŒIt          | d¦  «        r| j        S d S )NÚprojection_dimr¬   Úhidden_size)Úneck_hidden_sizesÚhidden_sizesÚ
embed_dimsrJ  Ú
hidden_dim)rh  r  rM  rN  r~   rÇ   rÿ   rR  )rp   Ú	attr_namerÙ   rs  s      €rF   Úget_hidden_size_from_configzHTransformer.get_embedding_dimension.<locals>.get_hidden_size_from_config³  sÛ   ø€ õ �vÐ/Ñ0Ô0ð -°TÔ5LÐPdÒ5dÐ5dØÔ,Ð,å�v˜}Ñ-Ô-ð *ØÔ)Ð)ØPð %ð %�	Ý˜6 9Ñ-Ô-ð %Ý# F¨IÑ6Ô6�EÝ! %­Ñ.Ô.ð %Ø ð -Ø#(¨¤9Ð,Ð,Ð,ð-ð  %˜˜˜ð%õ �v˜|Ñ,Ô,ð )ØÔ(Ð(Ø�4rE   r¯  Úsub_configszHCould not determine embedding dimension from model config. Config type: rï   )rÇ   r_  rp   rP   Únum_featuresr  r~   rK  rh  r¯  rU  rU  r‚   r{   rA   )rs  rT  rN  Úsub_config_nameÚ
sub_configs   `    rF   Úget_embedding_dimensionz#Transformer.get_embedding_dimension¢  s†  ø€ õ �d”jÔ'Õ):Ñ;Ô;ð 	2Ø”:Ô$Ô1Ð1ð Ô  KÒ/Ð/µG¸D¼JÔ<MÈÐ`dÑ4eÔ4eÐ4qØ”:Ô$Ô2Ð2ð	ð 	ð 	ð 	ð 	ð* 7Ð6°t´zÔ7HÑIÔIÐIˆKÐVØÐõ �4”:Ô$ mÑ4Ô4ð 	#Ø:Ð:¸4¼:Ô;LÔ;XÑYÔYÐY�ÐfØ"Ð"õ �4”:Ô$ mÑ4Ô4ð 	'Ø#'¤:Ô#4Ô#@×#EÒ#EÑ#GÔ#Gð 'ð '�Ý$ T¤ZÔ%6¸ÑHÔH�
Ø#>Ð#>¸zÑ#JÔ#JÐJ�KÐWØ&Ð&Ð&Ð&ð Xõ ØzÕW[Ð\`Ô\fÔ\mÑWnÔWnÔWwÐzÐzÐzñ
ô 
ð 	
rE   údict[str, list]c                óà   — |dk    r|                       |d         |||¬¦  «        S t          | j        t          ¦  «        r|                      ||||¦  «        S |                      ||||¦  «        S )an  Call the appropriate processor with the correct arguments.

        Dispatches based on the processor type and modality:

        1. **Message modality**: delegates to :meth:`_process_chat_messages`.
        2. **Multi-modal processor** (:class:`ProcessorMixin`): delegates to
           :meth:`_call_multimodal_processor`, which handles both legacy (flat kwargs) and
           transformers v5 (per-modality kwargs) calling conventions.
        3. **Single-modality processor** (tokenizer, feature extractor, image/video processor):
           delegates to :meth:`_call_single_modality_processor`, which matches the processor
           type and passes the primary input as a positional argument when available.

        Args:
            modality: The modality or tuple of modalities being processed.
            processor_inputs: Dictionary of processor argument names to lists of values.
            modality_kwargs: Per-modality configuration kwargs (keys: ``"text"``, ``"image"``,
                ``"audio"``, ``"video"``).
            common_kwargs: Common kwargs passed to all processor calls (e.g. ``padding``,
                ``return_tensors``).
            chat_template_kwargs: Kwargs forwarded to ``apply_chat_template`` when the modality
                is ``"message"``. Ignored for non-message modalities.

        Returns:
            Processor output dictionary.
        rO  rÖ  )Ú_process_chat_messagesrÇ   rR  r#   Ú_call_multimodal_processorÚ_call_single_modality_processor)rs  r  rÁ  rü  rû  r×  s         rF   rñ  zTransformer._call_processorÛ  sŽ   € ðB �yÒ Ð Ø×.Ò.Ø  Ô+ØØØ%9ð	 /ñ ô ð õ �d”n¥nÑ5Ô5ð 	oØ×2Ò2°8Ð=MÈÐ`mÑnÔnÐnà×3Ò3°HÐ>NÐP_ÐanÑoÔoÐorE   c           
     ó†  ‡— | j         dk    r$d|v r ddlmŠ i |¥dˆfd„|d         D ¦   «         i¥}d„ |                     ¦   «         D ¦   «         }| j        j        dv st          s2|dk    ri |d	         ¥|d
         ¥}n||         } | j        di |¤|¤|¤ŽS  | j        di |¤|d	         |d         |d
         |d         |dœ¤ŽS )zZCall a :class:`ProcessorMixin` processor, handling both legacy and v5 calling conventions.rb   r�   r   )Ú
load_imagec                óT   •— g | ]$}t          |t          ¦  «        r ‰|¦  «        n|‘Œ%S rD   r¼  )rÈ   r�   r`  s     €rF   rÞ  z:Transformer._call_multimodal_processor.<locals>.<listcomp>  sD   ø€ ð ð ð ØOT­°E½3Ñ)?Ô)?ÐJ�J�J˜uÑ%Ô%Ð%ÀUðð ð rE   c                ó@   — i | ]\  }}t          j        ||¦  «        |“ŒS rD   )r5   rô   r  s      rF   rÔ   z:Transformer._call_multimodal_processor.<locals>.<dictcomp>  s-   € ÐvÐvÐvÉzÈsÐTYÕ5Ô9¸#¸sÑCÔCÀUÐvÐvÐvrE   >   r®   Úclipsegr¾   r¤   r‡   r£   rß   ©Útext_kwargsÚimages_kwargsÚaudio_kwargsÚvideos_kwargsrû  rD   )r  Útransformers.image_utilsr`  rÕ   rp   ry   Ú0_TRANSFORMERS_PROCESSOR_SUPPORTS_MODALITY_KWARGSrR  )rs  r  rÁ  rü  rû  rÂ  r`  s         @rF   r]  z&Transformer._call_multimodal_processor	  sf  ø€ ð Ô  KÒ/Ð/°GÐ?OÐ4OÐ4OØ;Ð;Ð;Ð;Ð;Ð;ð Ø"ð àð ð ð ð ØXhÐipÔXqðñ ô ð ð  Ðð wÐvÐ]m×]sÒ]sÑ]uÔ]uÐvÑvÔvÐð ŒKÔ"Ð&DÐDÐDÝCð Eð Ð,Ò,Ð,àP˜O¨FÔ3ÐP°ÀwÔ7OÐP��à(¨Ô2�Ø!�4”>ÐPÐPÐ$4ÐP¸ÐPÀ-ÐPÐPÐPð ˆtŒ~ð 
ð 
Øð
à'¨Ô/Ø)¨'Ô2Ø(¨Ô1Ø)¨'Ô2Ø'ð
ð 
ð 
ð 
ð 	
rE   c                ó²  — dt           |d         fdt          |d         fdt          |d         fdt          |d         fg}|D ]]\  }}}t	          | j        |¦  «        sŒi |¥|¥}	||v r'|                     |¦  «        }
 | j        |
fi |¤|	¤Žc S  | j        d	i |¤|	¤Žc S t          dt          | j        ¦  «        j	        › dt          |¦  «        › d�¦  «        ‚)
zWCall a single-modality processor (tokenizer, feature extractor, image/video processor).r‡   r£   rß   r�   z2Could not determine how to call processor of type z for modality 'ú'NrD   )r"   r   r>   r   rÇ   rR  rë  ÚRuntimeErrorr{   rA   r3   )rs  r  rÁ  rü  rû  Úprocessor_type_checksÚmodality_typeÚprocessor_classÚtype_kwargsÚcall_kwargsÚprimary_inputs              rF   r^  z+Transformer._call_single_modality_processor7  sB  € ð Õ,¨o¸fÔ.EÐFØÕ,¨o¸gÔ.FÐGØÕ(¨/¸'Ô*BÐCØÕ*¨O¸GÔ,DÐEð	!
Ðð <Qð 
	Eð 
	EÑ7ˆM˜?¨KÝ˜dœn¨oÑ>Ô>ð Øà:˜[Ð:¨MÐ:ˆKð Ð 0Ð0Ð0Ø 0× 4Ò 4°]Ñ CÔ C�Ø%�t”~ mÐWÐWÐ7GÐWÈ;ÐWÐWÐWÐWÐWØ!�4”>ÐDÐDÐ$4ÐD¸ÐDÐDÐDÐDÐDåð:ÅÀdÄnÑAUÔAUÔA^ð :ð :Ý,¨XÑ6Ô6ð:ð :ð :ñ
ô 
ð 	
rE   rù   úlist[list[MessageInput]]c           	     ó’  — d| j         vr6t          dt          | j                              ¦   «         ¦  «        › �¦  «        ‚t	          |pi ¦  «        }|                     dd¦  «        }|d         }|                     d|                     d|                     d¦  «        ¦  «        ¦  «        }|                     d|                     d|                     d¦  «        ¦  «        ¦  «        }t          |¦  «        p|du o|du}	|o|	o|d	k    }
|                      ||||¦  «        }|
r#|€| j	        }|  
                    ||||||¦  «         |S )
a  Process chat messages using the processor's chat template.

        ``chat_template_kwargs`` is forwarded to ``apply_chat_template``, except the Sentence Transformers
        ``restore_suffix`` flag, which only toggles the truncation suffix restore.
        rO  znThe model does not support 'message' modality, but the input looks like a chat message. Supported modalities: r  Tr‡   rZ   rY   NÚdo_not_truncate)r  r‚   rÿ   rU  r   rë  rô   rÃ   Ú_apply_chat_templater-  Ú_restore_chat_template_suffix)rs  rù   rü  rû  r×  r  re  rZ   rY   Útruncation_activeÚrestore_chat_template_suffixr*  s               rF   r\  z"Transformer._process_chat_messagesX  s“  € ð ˜DÔ0Ð0Ð0ÝðMÝ)-¨dÔ.B×.GÒ.GÑ.IÔ.IÑ)JÔ)JðMð Mñô ð õ
  $Ð$8Ð$>¸BÑ?Ô?Ðð .×1Ò1Ð2BÀDÑIÔIˆð
 & fÔ-ˆØ)×-Ò-Ø˜+Ÿ/š/¨,¸×8IÒ8IÈ,Ñ8WÔ8WÑXÔXñ
ô 
ˆ
ð *×-Ò-Ø˜+Ÿ/š/¨,¸×8IÒ8IÈ,Ñ8WÔ8WÑXÔXñ
ô 
ˆ
õ ! Ñ,Ô,Ð_°¸tÐ1CÐ1^È
ÐZ^ÐH^ÐØ'5Ð'oÐ:KÐ'oÐPZÐ^oÒPoÐ$à×,Ò,¨X°ÈÐWkÑlÔlˆà'ð 	ØÐ!Ø!Ô0�
Ø×.Ò.Ø˜(Ð$8¸+À}ÐV`ñô ð ð ˆrE   c                ó’  ‡‡‡‡	— t           ‰                     ¦   «         z  x}r/t          ‰¦  «        Šˆfd„|D ¦   «         }i ‰¥di ‰d         ¥|¥i¥Št          | j        t
          ¦  «        r”| j        ��| j                             |¦  «        rsh d£}ˆfd„|‰                     ¦   «         z  D ¦   «         }|ˆfd„|‰d                              ¦   «         z  D ¦   «         z  } | j        j	        |fdddœ|¤‰d         ¤‰¤ŽS t          | j        t          ¦  «        ržt          rd | j        j	        |fdd‰                     d	¦  «        ‰d
                              dd¦  «        ‰d         ‰d         ‰d         ‰d
         ‰dœdœ‰¤ŽS  | j        j	        |fdd‰d         ‰d         ‰d         ‰d
         ‰dœ‰¤ŽS t          ‰d         ¦  «        Š	t          ‰¦  «        Šˆfd„t           ‰                     ¦   «         z  D ¦   «         }|ˆ	fd„t           ‰	                     ¦   «         z  D ¦   «         z  } | j        j	        |fdd‰	‰dœ|¤‰¤ŽS )a>  Call ``apply_chat_template`` with the kwarg routing the processor type expects: nested kwargs for
        a ProcessorMixin, flat with the size kwargs hoisted to the top level for a bare tokenizer. Both the
        real batch and the suffix skeleton renders go through this (the given dicts are never mutated).
        c                ó<   •— i | ]}|‰                      |¦  «        “ŒS rD   ©rë  )rÈ   r  r×  s     €rF   rÔ   z4Transformer._apply_chat_template.<locals>.<dictcomp>•  s*   ø€ ÐNÐNÐN¸S�cÐ/×3Ò3°CÑ8Ô8ÐNÐNÐNrE   r‡   N>   rX   rY   rZ   r[   c                ó<   •— i | ]}|‰                      |¦  «        “ŒS rD   r}  ©rÈ   r  rû  s     €rF   rÔ   z4Transformer._apply_chat_template.<locals>.<dictcomp>   s)   ø€ ÐtÐtÐtÀ  ]×%6Ò%6°sÑ%;Ô%;ÐtÐtÐtrE   c                óH   •— i | ]}|‰d                                |¦  «        “ŒS )r‡   r}  )rÈ   r  rü  s     €rF   rÔ   z4Transformer._apply_chat_template.<locals>.<dictcomp>¡  s;   ø€ ð !ð !ð !Ø:=��_ VÔ,×0Ò0°Ñ5Ô5ð!ð !ð !rE   T)Útokenizer  r[   rß   Úload_audio_from_videoFr�   r£   rd  )r�  r  r[   r‚  r*  )r�  r  re  rf  rg  rh  rû  c                ó<   •— i | ]}|‰                      |¦  «        “ŒS rD   r}  r  s     €rF   rÔ   z4Transformer._apply_chat_template.<locals>.<dictcomp>Ð  s6   ø€ ð 
ð 
ð 
Ø,/ˆC�×"Ò" 3Ñ'Ô'ð
ð 
ð 
rE   c                ó<   •— i | ]}|‰                      |¦  «        “ŒS rD   r}  )rÈ   r  re  s     €rF   rÔ   z4Transformer._apply_chat_template.<locals>.<dictcomp>Ó  s4   ø€ ð 
ð 
ð 
Ø*-ˆC�—’ Ñ%Ô%ð
ð 
ð 
rE   )r�  r  Útokenizer_kwargsrû  )r  rU  r   rÇ   rR  rR   rN  rm  rÅ  Úapply_chat_templater#   Ú=_TRANSFORMERS_APPLY_CHAT_TEMPLATE_RECOMMENDS_PROCESSOR_KWARGSrô   )
rs  rù   rü  rû  r×  Ú	size_keysÚfoldedÚtop_level_kwarg_namesÚtop_level_kwargsre  s
     ```    @rF   rw  z Transformer._apply_chat_template†  sw  øøøø€ õ >Ð@T×@YÒ@YÑ@[Ô@[Ñ[Ð[ˆ9ð 	aÝ#'Ð(<Ñ#=Ô#=Ð ØNÐNÐNÐNÀIÐNÑNÔNˆFØ` Ð`°&Ð:_¸_ÈVÔ=TÐ:_ÐX^Ð:_Ð`Ð`ˆOõ
 �t”~Õ'9Ñ:Ô:ð	à”Ð*ØÔ$×:Ò:¸8ÑDÔDð +ð %^Ð$]Ð$]Ð!ØtÐtÐtÐtÐG\Ð_l×_qÒ_qÑ_sÔ_sÑGsÐtÑtÔtÐØð !ð !ð !ð !ØAVÐYhÐioÔYp×YuÒYuÑYwÔYwÑAwð!ñ !ô !ñ Ðð 6�4”>Ô5ØðàØ ðð ð #ð	ð
 " &Ô)ðð 'ðð ð õ �d”n¥nÑ5Ô5ð 	õ Mð Ø9�t”~Ô9Øðà!Ø $Ø#0×#4Ò#4Ð5EÑ#FÔ#FØ*9¸'Ô*B×*FÒ*FÐG^Ð`eÑ*fÔ*fà'6°vÔ'>Ø)8¸Ô)AØ(7¸Ô(@Ø)8¸Ô)AØ)6ð&ð &ðð ð +ðð ð ð 6�4”>Ô5Øð
àØ Ø+¨FÔ3Ø-¨gÔ6Ø,¨WÔ5Ø-¨gÔ6Ø+ð
ð 
ð 'ð
ð 
ð 
õ ˜?¨6Ô2Ñ3Ô3ˆÝ˜]Ñ+Ô+ˆð
ð 
ð 
ð 
Ý3XÐ[h×[mÒ[mÑ[oÔ[oÑ3oð
ñ 
ô 
Ðð 	ð 
ð 
ð 
ð 
Ý1VÐYd×YiÒYiÑYkÔYkÑ1kð
ñ 
ô 
ñ 	
Ðð 2ˆtŒ~Ô1Øð
àØØ(Ø'ð
ð 
ð ð
ð #ð
ð 
ð 	
rE   r…  rY   c                ó  — |                      d¦  «        }t          |t          j        t          f¦  «        sdS |pd}t          |t          j        ¦  «        }|�r&|                     ¦   «         dk    r|n|                     d¦  «        }	|	j        d         }
|
|k     rdS |                      d¦  «        }t          |t          j        ¦  «        r|                     ¦   «         dk    rdS |                     ¦   «         dk    r|n|                     d¦  «        }| 	                    ¦   «          
                    d¬¦  «                             ¦   «         }|dd…df         dk                         ¦   «         }|	j        d         }n|}d	„ |D ¦   «         }t          |¦  «        }t          t          |t          |¦  «        ¦  «        ¦  «        D ]·}||         |k     rŒ|                      ||         |||¦  «        }t          t          |¦  «        ||         ¦  «        }|dk    rŒW|rG||         r|
n||         }t          j        || d…         |	j        |	j        ¬
¦  «        |	|||z
  |…f<   Œ || d…         ||         | d…<   Œ¸dS )a;  Restore the trailing chat-template suffix that truncation may have removed (in place).

        Chat templates append fixed tokens after the content (e.g. an assistant prefill or EOS) that
        right-truncation cuts off first. That is harmless for mean/CLS pooling but breaks models that read
        the final position (causal-LM rerankers, last-token pooling), so the suffix is written back over the
        final real tokens of every truncated row. This must happen post-hoc: the tokenizer truncates the
        rendered string blind to template structure, with no upstream option to trim only the content.

        Only rows whose real length reached ``max_length`` can have been truncated, so shorter rows are
        skipped. The suffix is derived (and cached) per row, handling batches that mix role layouts.
        r  Nr   r  rJ  r  rð   rä  c                ó,   — g | ]}t          |¦  «        ‘ŒS rD   )Úlen)rÈ   Úrows     rF   rÞ  z=Transformer._restore_chat_template_suffix.<locals>.<listcomp>  s   € Ð5Ð5Ð5¨�C ™HœHÐ5Ð5Ð5rE   )rÙ  rã  )rô   rÇ   r(  r  rÿ   rå  Ú	unsqueezerõ  Únumelró  ÚsumÚtolistrŽ  Úrangerê   Ú_chat_template_suffix_idsÚ	as_tensorrÙ  rã  )rs  r*  rù   r×  r…  rû  rY   r  Ú	is_tensorÚidsÚwidthr  ÚamÚreal_lengthsÚleft_paddedÚn_rowsÚrowsÚindexÚsuffixÚkeepÚends                        rF   rx  z)Transformer._restore_chat_template_suffixà  s˜  € ð( —L’L Ñ-Ô-ˆ	å˜)¥e¤lµDÐ%9Ñ:Ô:ð 	ØˆFð  �_ 1ˆ
å˜y­%¬,Ñ7Ô7ˆ	Øñ 	à(Ÿ}š}™œ°!Ò3Ð3�)�)¸×9LÒ9LÈQÑ9OÔ9OˆCØ”I˜b”MˆEà�zÒ!Ð!Ø�ð &Ÿ\š\Ð*:Ñ;Ô;ˆNÝ˜n­e¬lÑ;Ô;ð ¸~×?SÒ?SÑ?UÔ?UÐYZÒ?ZÐ?ZØ�Ø#1×#5Ò#5Ñ#7Ô#7¸1Ò#<Ð#<��À.×BZÒBZÐ[\ÑB]ÔB]ˆBØŸ7š7™9œ9Ÿ=š=¨Q˜=Ñ/Ô/×6Ò6Ñ8Ô8ˆLØ˜a˜a˜a ˜dœ8 qš=×0Ò0Ñ2Ô2ˆKØ”Y˜q”\ˆFˆFð ˆDØ5Ð5°Ð5Ñ5Ô5ˆLÝ˜‘Y”YˆFå�3˜v¥s¨8¡}¤}Ñ5Ô5Ñ6Ô6ð 	5ð 	5ˆEð ˜EÔ" ZÒ/Ð/ØØ×3Ò3Ø˜”Ð!5Ð7GÈñô ˆFõ •s˜6‘{”{ L°Ô$7Ñ8Ô8ˆDØ�qŠyˆyØØð 5Ø*¨5Ô1ÐJ�e�e°|ÀEÔ7J�Ý/4¬¸vÀtÀeÀfÀf¼~ÐUXÔU^ÐgjÔgqÐ/rÑ/rÔ/r��E˜3 ™:¨Ð+Ð+Ñ,Ð,à&,¨d¨U¨V¨V¤n��U”˜T˜E˜F˜FÑ#Ð#ð	5ð 	5rE   Úconversationúlist[MessageInput]ú	list[int]c           	     ó  — 	 |r| j                              |g¦  «        sg S n6# t          $ r)}t                               d|› �¦  «         g cY d}~S d}~ww xY wd„ |||pi fD ¦   «         \  }}}| j        }t          t          |                     ¦   «         ¦  «        ¦  «        t          t          |                     ¦   «         ¦  «        ¦  «        t          t          |                     ¦   «         ¦  «        ¦  «        t          |  	                    |d¦  «        ¦  «        f}||v r||         S g }	 |  
                    |d|||¦  «        }	|  
                    |d|||¦  «        }
d}t          t          |	¦  «        t          |
¦  «        ¦  «        D ]\  }}||k    r n|dz  }Œd|cxk     r.t          t          |	¦  «        t          |
¦  «        ¦  «        k     rn n|	t          |	¦  «        |z
  d…         }n4# t          $ r'}t                               d|› �¦  «         Y d}~nd}~ww xY w|||<   t          |¦  «        t          k    rH	 |                     t#          t%          |¦  «        ¦  «        ¦  «         n# t&          t(          f$ r Y nw xY w|S )	ar  Derive one conversation's trailing chat-template suffix (cached).

        The conversation is rendered twice with different fillers: the longest common token suffix of the
        renders is the template tail, so no per-model token count is hard-coded. ``system`` messages are
        kept verbatim so a prompt the template renders in the tail is captured too.
        z+Could not derive the chat-template suffix: Nc              3  óR   K  — | ]"}d „ |                      ¦   «         D ¦   «         V — Œ#dS )c                ó,   — i | ]\  }}|t           v¯||“ŒS rD   r  r  s      rF   rÔ   zCTransformer._chat_template_suffix_ids.<locals>.<genexpr>.<dictcomp>;  s)   € ÐmÐmÐm™J˜C ¸CÕGlÐ<lÐ<lˆS�%Ð<lÐ<lÐ<lrE   N)rÕ   )rÈ   rÂ  s     rF   rÊ   z8Transformer._chat_template_suffix_ids.<locals>.<genexpr>:  sU   è è € ð A
ð A
àð nÐm¨&¯,ª,©.¬.ÐmÑmÔmðA
ð A
ð A
ð A
ð A
ð A
rE   rþ   Ú0z1 2 3 4r   rð   )rm  rÅ  Ú	ExceptionrV  ro  r[  Úreprró   rÕ   Ú_message_skeletonÚ_render_message_skeletonrÜ  Úreversedrê   rŽ  Ú _CHAT_TEMPLATE_SUFFIX_CACHE_SIZErë  r!  Úiterr}   rm  )rs  r£  r×  r…  rû  ÚexcÚcacheÚ	cache_keyr   ÚfirstÚsecondÚcountrM  Úrights                 rF   r•  z%Transformer._chat_template_suffix_ids$  s	  € ð	Øð  tÔ';×'QÒ'QÐS_ÐR`Ñ'aÔ'að Ø�	ðøåð 	ð 	ð 	Ý�LŠLÐLÀsÐLÐLÑMÔMÐMØˆIˆIˆIˆIˆIˆIøøøøð	øøøðA
ð A
à/Ð1AÀ=ÐCVÐTVÐWðA
ñ A
ô A
Ñ=ÐÐ.°ð Ô0ˆå•Ð,×2Ò2Ñ4Ô4Ñ5Ô5Ñ6Ô6Ý•Ð(×.Ò.Ñ0Ô0Ñ1Ô1Ñ2Ô2Ý•˜×+Ò+Ñ-Ô-Ñ.Ô.Ñ/Ô/Ý�×'Ò'¨°bÑ9Ô9Ñ:Ô:ð	
ˆ	ð ˜ÐÐØ˜Ô#Ð#àˆð	Nà×1Ò1Ø˜cÐ#7Ð9IÈ=ñô ˆEð ×2Ò2Ø˜iÐ)=Ð?OÐQ^ñô ˆFð ˆEÝ"¥8¨E¡?¤?µH¸VÑ4DÔ4DÑEÔEð ð ‘��eØ˜5’=�=Ø�EØ˜‘
��à�5Ð7Ð7Ò7Ð7�3�s 5™zœz­3¨v©;¬;Ñ7Ô7Ò7Ð7Ð7Ð7Ð7Ø�s 5™zœz¨EÑ1Ð3Ð3Ô4�øøÝð 	Nð 	Nð 	NÝ�LŠLÐLÀsÐLÐLÑMÔMÐMÐMÐMÐMÐMÐMøøøøð	Nøøøð
 "ˆˆiÑÝˆu‰:Œ:Õ8Ò8Ð8ðØ—	’	�$�t E™{œ{Ñ+Ô+Ñ,Ô,Ð,Ð,øÝ�lÐ+ð ð ð Ø�ðøøøàˆsE   ‚" ¢
A¬AÁ
AÁAÄ.CG2 Ç2
H#Ç<HÈH#É/I4 É4JÊJÚfillerc                ó2  — g }|D ]‘}t          |t          ¦  «        r|                     d¦  «        dk    r|                     |¦  «         ŒFt          |                     d¦  «        t          ¦  «        rd|dœgn|}|                     i |¥d|i¥¦  «         Œ’|S )a  Replace each non-system message content with ``filler``, keeping everything else verbatim.

        Keeping system messages whole lets the derivation capture a prompt rendered in the tail. Fillering
        the rest keeps the renders tiny regardless of input length.
        ÚroleÚsystemrý   r‡   )r{   r‡   )rÇ   r   rô   r  rÿ   )rs  r£  r¸  ÚskeletonrO  Únew_contents         rF   r¬  zTransformer._message_skeletoni  s´   € ð ˆØ#ð 	Að 	AˆGÝ˜g¥tÑ,Ô,ð °·²¸FÑ0CÔ0CÀxÒ0OÐ0OØ—’ Ñ(Ô(Ð(ØÝ@JÈ7Ï;Ê;ÐW`ÑKaÔKaÕcgÑ@hÔ@hÐt F°FÐ;Ð;Ð<Ð<ÐntˆKØ�OŠOÐ?˜wÐ?¨	°;Ð?Ð?Ñ@Ô@Ð@Ð@ØˆrE   c                ó4  — |                       ||¦  «        }|                      |gi |¥dddœ¥i i i dœ||¬¦  «        }|d         }t          |t          j        ¦  «        r|                     ¦   «         }|r#t          |d         t          ¦  «        r|d         }|S )a)  Tokenize one conversation's skeleton (non-system content replaced by ``filler``), untruncated.

        The render shares ``_apply_chat_template`` with the real batch, so the suffix tokenizes exactly like
        the rows it is restored onto, just without padding, truncation, or tensors.
        FrÒ  rÓ  )rü  rû  r×  r  r   )r¬  rw  rÇ   r(  r  r“  rÿ   )	rs  r£  r¸  r×  r…  rû  r¼  Úoutputr˜  s	            rF   r­  z$Transformer._render_message_skeletonx  sÁ   € ð ×)Ò)¨,¸Ñ?Ô?ˆØ×*Ò*ØˆJàSÐ+ÐS¸ÈUÐSÐSÐSØØØð	ð ð (Ø!5ð +ñ 

ô 

ˆð �[Ô!ˆÝ�c�5œ<Ñ(Ô(ð 	Ø—*’*‘,”,ˆCØð 	•:˜c !œf¥dÑ+Ô+ð 	Ø�a”&ˆCØˆ
rE   c                ó¾  — d„ |                      ¦   «         D ¦   «         }|gt          |                      ¦   «         ¦  «        ¢R }|| j        v r| j        |         S  | j        |gfi |¤Ž}d|vrd| j        |<   dS |d         j        d         }| j        }|d         d                              ¦   «         }|�t          |d¦  «        r||j        v r|dz  }|| j        |<   |S )z Return the length of the prompt in tokens, excluding any trailing special token.

        Returns None if the processor does not produce ``input_ids``.
        c                ó&   — i | ]\  }}|d k    ¯||“ŒS )r  rD   r  s      rF   rÔ   z2Transformer._get_prompt_length.<locals>.<dictcomp>¢  s#   € ÐOÐOÐO¡  eÀÈÂÀ�#�uÀÀÀrE   r  NrJ  ).rJ  Úall_special_idsrð   )	rÕ   ró   rY  r	  rõ  rN  r  rh  rÂ  )rs  rÎ  rÂ  r³  Útokenized_promptr  rN  Ú
last_tokens           rF   rð  zTransformer._get_prompt_length™  s  € ð PÐO¨v¯|ª|©~¬~ÐOÑOÔOˆØÐ5�f V§\¢\¡^¤^Ñ4Ô4Ð5Ð5ˆ	Ø˜Ô3Ð3Ð3ØÔ.¨yÔ9Ð9à*˜4œ?¨F¨8Ð>Ð>°vÐ>Ð>ÐØÐ.Ð.Ð.Ø59ˆDÔ'¨	Ñ2Ø�4Ø(¨Ô5Ô;¸BÔ?ˆà”Nˆ	Ø% kÔ2°7Ô;×@Ò@ÑBÔBˆ
ØÐ ¥W¨YÐ8IÑ%JÔ%JÐ ÈzÐ]fÔ]vÐOvÐOvØ˜QÑˆMØ1>ˆÔ# IÑ.ØÐrE   ú*tuple[PeftConfig | PretrainedConfig, bool]c                óª  — t          ||                     d¦  «        |                     d¦  «        |                     d¦  «        |                     dd¦  «        |                     dd¦  «        ¬¦  «        }|�H|d
k    rt          d¦  «        ‚t          ¦   «         st	          d¦  «        ‚ddlm}  |j        |fi |¤ŽdfS t          j        |fi |¤ŽdfS )ae  Loads the transformers or PEFT configuration

        Args:
            model_name_or_path (str): The model name on Hugging Face (e.g. 'sentence-transformers/all-MiniLM-L6-v2')
                or the path to a local model directory.
            backend (str): The backend used for model inference. Can be `torch`, `onnx`, or `openvino`.
            config_kwargs (dict[str, Any]): Keyword arguments passed to the Hugging Face Transformers config.

        Returns:
            tuple[PeftConfig | PretrainedConfig, bool]: The model configuration and a boolean indicating whether the model is a PEFT model.
        Ú	cache_dirrå   ÚrevisionÚ	subfolderrþ   Úlocal_files_onlyF)rÇ  rå   rÈ  rÉ  rÊ  Nr(  a  PEFT models can currently only be loaded with the `torch` backend. To use other backends, load the model with `backend="torch"`, call `model.transformers_model.merge_and_unload()`, save that model with `model.save_pretrained()` and then load the model with the desired backend.zgLoading a PEFT model requires installing the `peft` package. You can install it via `pip install peft`.r   rT   T)	r.   rô   r‚   r-   r|   r`  rU   r€   r   )rs  r0  r,  r+  Úadapter_config_filerU   s         rF   r\  zTransformer._load_config´  s  € õ 7ØØ#×'Ò'¨Ñ4Ô4Ø×#Ò# GÑ,Ô,Ø"×&Ò& zÑ2Ô2Ø#×'Ò'¨°RÑ8Ô8Ø*×.Ò.Ð/AÀ5ÑIÔIð
ñ 
ô 
Ðð Ð*Ø˜'Ò!Ð!å ðwñô ð õ
 %Ñ&Ô&ð Ý!Ø}ñô ð ð (Ð'Ð'Ð'Ð'Ð'à-�:Ô-Ð.@ÐRÐRÀMÐRÐRÐTXÐXÐXåÔ)Ð*<ÐNÐNÀÐNÐNÐPUÐUÐUrE   rp   úPeftConfig | PretrainedConfigc                ób  ‡— t          | t          ¦  «        sdS | gŠt          | d¦  «        rW| j                             ¦   «         D ]=}t          | |d¦  «        }t          |t          ¦  «        r‰                     |¦  «         Œ>dˆfd„} |ddt          d¦  «          |ddt          d¦  «         dS )zqWarn if the config requests bidirectional attention settings not supported by the installed transformers version.NrU  Úparamre   Úexpected_valuerÃ   Úis_supportedÚmin_versionrr   r8  c                ó¤   •‡ ‡— |st          ˆˆ fd„‰D ¦   «         ¦  «        sd S t                               d‰ › d‰› dt          › d|› d�	¦  «         d S )Nc              3  ó>   •K  — | ]}t          |‰d ¦  «        ‰u V — Œd S rÆ   rÑ   )rÈ   ÚcfgrÏ  rÎ  s     €€rF   rÊ   zaTransformer._warn_on_unsupported_attention_config.<locals>.warn_if_unsupported.<locals>.<genexpr>ê  s5   øè è € Ð&oÐ&oÐWZ¥w¨s°E¸4Ñ'@Ô'@ÀNÐ'RÐ&oÐ&oÐ&oÐ&oÐ&oÐ&orE   zThe model config specifies `ú=z-`, but the installed `transformers` version (zú) may not support this parameter, in which case it may be silently ignored and the model will fall back to its default attention behavior (often causal), likely producing degraded model outputs. Consider upgrading with `pip install -U "transformers>=z"`.)rÌ   rV  rW  Útransformers_version)rÎ  rÏ  rÐ  rÑ  Úconfigs_to_checks   ``  €rF   Úwarn_if_unsupportedzNTransformer._warn_on_unsupported_attention_config.<locals>.warn_if_unsupportedé  s¢   øøø€ Øð ¥3Ð&oÐ&oÐ&oÐ&oÐ&oÐ^nÐ&oÑ&oÔ&oÑ#oÔ#oð Ø�Ý�NŠNðC¨uð Cð C°~ð Cð CÝ+?ðCð Cð 3>ð	Cð Cð Cñô ð ð ð rE   Úuse_bidirectional_attentionTrV   Ú	is_causalFrW   )
rÎ  re   rÏ  rÃ   rÐ  rÃ   rÑ  re   rr   r8  )	rÇ   r    rh  rU  rU  r~   r  Ú2_TRANSFORMERS_SUPPORTS_USE_BIDIRECTIONAL_ATTENTIONÚ&_TRANSFORMERS_SUPPORTS_IS_CAUSAL_FALSE)rp   rW  rX  rØ  r×  s       @rF   r]  z1Transformer._warn_on_unsupported_attention_configÜ  sï   ø€ õ ˜&Õ"2Ñ3Ô3ð 	ØˆFà4:°8ÐÝ�6˜=Ñ)Ô)ð 	8Ø#)Ô#5×#:Ò#:Ñ#<Ô#<ð 8ð 8�Ý$ V¨_¸dÑCÔC�
Ý˜jÕ*:Ñ;Ô;ð 8Ø$×+Ò+¨JÑ7Ô7Ð7øð		ð 		ð 		ð 		ð 		ð 		ð 	ÐØ)¨4Õ1cÐemñ	
ô 	
ð 	
ð 	Ð˜K¨Õ0VÐX_Ñ`Ô`Ð`Ð`Ð`rE   ru  c                óT  — |dk    rd|r|                      dd¦  «         |dk    r | j        ||fi |¤Ž}|�|S |dk    rt          |¦  «        }nt          |         } |j        |fd|i|¤ŽS |dk    rt          d|||dœ|¤ŽS |d	k    rt          d|||dœ|¤ŽS t          d
|› d�¦  «        ‚)aq  Loads the transformers or PEFT model into the `auto_model` attribute

        Args:
            model_name_or_path (str): The model name on Hugging Face (e.g. 'sentence-transformers/all-MiniLM-L6-v2')
                or the path to a local model directory.
            config ("PeftConfig" | PretrainedConfig): The model configuration.
            backend (str): The backend used for model inference. Can be `torch`, `onnx`, or `openvino`.
            is_peft_model (bool): Whether the model is a PEFT model.
            model_kwargs (dict[str, Any]): Keyword arguments passed to the Hugging Face Transformers model.
        r(  rÈ  Nr]   rb   rp   Úonnx)r0  rp   Ú	task_nameÚopenvinozUnsupported backend 'z6'. `backend` should be `torch`, `onnx`, or `openvino`.rD   )rë  Ú_load_encoder_only_modelr   r…   r€   r0   r1   r‚   )	rs  r0  r  rp   r,  ru  r)  r_  Ú	model_clss	            rF   r^  zTransformer._load_modelù  s=  € ð& �gÒÐð ð 3Ø× Ò  ¨TÑ2Ô2Ð2àÐ#7Ò7Ð7Ø5˜Ô5Ð6HÈ&ÐaÐaÐT`ÐaÐa�ØÐ$Ø �Là ;Ò.Ð.å:¸6ÑBÔB�	�	å:Ð;KÔL�	Ø,�9Ô,Ð-?Ð_Ð_ÈÐ_ÐR^Ð_Ð_Ð_Ø˜ÒÐÝ"ð Ø#5ØØ*ðð ð ð	ð ð ð ˜
Ò"Ð"Ý&ð Ø#5ØØ*ðð ð ð	ð ð õ Ðt°WÐtÐtÐtÑuÔuÐurE   úPreTrainedModel | Nonec                ól  ‡‡‡— d	ˆˆˆfd„	}t          ‰t          ¦  «        rddlm} d‰_         ||¦  «        S t          ‰t
          ¦  «        rddlm}  ||‰j        d¬¦  «        S t          D ]E\  }}}	t          ‰|¦  «        r/t          t          j        |¦  «        |	¦  «        }
 ||
¦  «        c S ŒFdS )
a\  Load encoder-only variants for encoder-decoder architectures.

        Checks :data:`_ENCODER_ONLY_MODELS` for standard mappings and handles a few special cases
        (T5Gemma, T5Gemma2) that require extra configuration before loading.

        Returns the loaded model, or None if the config doesn't match any encoder-only architecture.
        Nc                ó|   •— t          | fddgi|¤Ž5   | j        ‰fd|p‰i‰¤Žcd d d ¦  «         S # 1 swxY w Y   d S )NÚ"_keys_to_ignore_on_load_unexpectedz	decoder.*rp   )rÚ   r€   )râ  Úload_configÚextra_class_attrsrp   r)  r0  s      €€€rF   Ú_load_encoderz;Transformer._load_encoder_only_model.<locals>._load_encoder=	  sÌ   ø€ Ý*Øðð Ø?J¸mðØO`ðð ð sð sð 1�yÔ0Ð1CÐrÐrÈKÐLaÐ[aÐrÐeqÐrÐrðsð sð sð sñ sô sð sð sð sð sð sð søøøð sð sð sð sð sð ss   ’1±5¸5r   )ÚT5GemmaEncoderModelF)r¡   zmodel.encoder)rç  Úbase_model_prefixrÆ   )rÇ   rL   r�   rê  Úis_encoder_decoderrH   Ú.transformers.models.t5gemma2.modeling_t5gemma2r¡   Úencoderr¢   r~   Ú	importlibÚimport_module)rs  r0  rp   r)  ré  rê  r¡   Ú
config_clsÚmodule_pathÚ
class_nameÚencoder_clss    ```       rF   rá  z$Transformer._load_encoder_only_model/	  s  øøø€ ð	sð 	sð 	sð 	sð 	sð 	sð 	sð 	sõ �f�mÑ,Ô,ð 	6Ø8Ð8Ð8Ð8Ð8Ð8à(-ˆFÔ%Ø �=Ð!4Ñ5Ô5Ð5å�f�nÑ-Ô-ð 	qØVÐVÐVÐVÐVÐVð !�= ¸f¼nÐ`oÐpÑpÔpÐpõ 4Hð 	2ð 	2Ñ/ˆJ˜ ZÝ˜& *Ñ-Ô-ð 2Ý%¥iÔ&=¸kÑ&JÔ&JÈJÑWÔW�Ø$�} [Ñ1Ô1Ð1Ð1Ð1ð2ð ˆtrE   r_  rR  úmProcessorMixin | PreTrainedTokenizerBase | FeatureExtractionMixin | BaseVideoProcessor | ImageProcessingMixinútuple[ModalityConfig, str]c                óF  ‡— t           | j                 \  }}|d         d         Š|                      ||¦  «        x}�P|\  }}t          |d¦  «        r7|j        �0d|vr,i |                     dd‰dœ¦  «        ¥d| j        j        i¥|d<   ||fS |                      |¦  «        }t          |d¦  «        r|j        �| 	                    d¦  «         |  
                    |j        ¦  «        }	|	�‰|	v r6i }|D ]-}
t          d‰¬¦  «        }|
dk    r| j        j        |d<   |||
<   Œ.||fS | j        d	k    rdi }|D ][}
|
dk    rŒ	d
|
› d�}t          ||¦  «        r<t          ||¦  «        }|  
                    |¦  «        }|rd|v r	|ddœ||
<   ŒS|ddœ||
<   Œ\|dfS ˆfd„|D ¦   «         |fS )a  Infer the modality configuration and module output name from the model and processor.

        First checks :meth:`infer_modalities_edge_cases` for hard-coded overrides, then falls back
        to general inference based on the processor type and model forward signature.
        r‡   rh   Nrà   rO  rˆ   rŠ   rl   r]   Úget_Ú	_featuresr¨   r¬   c                ó   •— i | ]}|d ‰dœ“Œ	S )rˆ   rŠ   rD   )rÈ   r  Údefault_method_output_names     €rF   rÔ   z0Transformer.infer_modalities.<locals>.<dictcomp>˜	  s4   ø€ ð 
ð 
ð 
àð  ÐB\Ð]Ð]ð
ð 
ð 
rE   )r‘   r  Úinfer_modalities_edge_casesrh  rà   rô   rm  rQ  Úinfer_modalities_from_processorr  Ú_get_method_output_fieldsrˆ   rk   r~   )rs  r_  rR  Údefault_modality_configÚdefault_module_output_nameÚresultr  r  r¶  Úoutput_fieldsr  ÚentryrA  rf   Úmethod_output_fieldsrû  s                  @rF   rn  zTransformer.infer_modalitiesX	  s‹  ø€ õ ?XÐX\ÔXmÔ>nÑ;ÐÐ!;Ø%<¸VÔ%DÐEYÔ%ZÐ"à×6Ò6°u¸iÑHÔHÐHˆFÐUØ28Ñ/ˆOÐ/å�y /Ñ2Ô2ð °yÔ7NÐ7ZØ OÐ3Ð3ð2Ø)×-Ò-Ø"¨yÐPjÐ$kÐ$kñô ð2ð ! $Ô"6Ô"Eð	2ð 2�O IÑ.ð #Ð$6Ð6Ð6à×9Ò9¸)ÑDÔDˆ
Ý�9˜oÑ.Ô.ð 	)°9Ô3JÐ3VØ×Ò˜iÑ(Ô(Ð(ð ×6Ò6°u´}ÑEÔEˆØÐ Ð$>À-Ð$OÐ$OØ.0ˆOØ&ð 2ð 2�Ý&¨iÐLfÐgÑgÔg�Ø˜yÒ(Ð(Ø&*Ô&:Ô&I�E˜(‘OØ,1� Ñ)Ð)Ø"Ð$>Ð>Ð>ð Ô Ð$8Ò8Ð8Ø.0ˆOØ&ð hð h�Ø˜yÒ(Ð(Øà8 XÐ8Ð8Ð8�Ý˜5 +Ñ.Ô.ð hÝ$ U¨KÑ8Ô8�FØ+/×+IÒ+IÈ&Ñ+QÔ+QÐ(Ø+ð h°ÐCWÐ0WÐ0WØ?JÐbqÐ4rÐ4r˜¨Ñ1Ð1à?JÐbfÐ4gÐ4g˜¨Ñ1øà"Ð$8Ð8Ð8ð
ð 
ð 
ð 
à&ð
ñ 
ô 
ð &ð&ð 	&rE   úXProcessorMixin | PreTrainedTokenizerBase | FeatureExtractionMixin | ImageProcessingMixinú!tuple[ModalityConfig, str] | Nonec                óÞ  — t                                | j        ¦  «        }|€dS |                     |j        j        ¦  «        }|€dS |\  }}}|s||fS i }|                     ¦   «         D ]�\  }	}
t          ||
d         ¦  «        s(t                               d|
d         ›d|	›d�¦  «         ŒCt          ||
d         ¦  «        }|
d         |  
                    |
d         |¦  «        dœ||	<   Œ‚||fS )a  Return a ``(modality_config, module_output_name)`` for model types that cannot be handled
        by the general :meth:`infer_modalities` inference path, or ``None`` to fall through.

        Looks up the model type in the task-specific edge case configs from
        :data:`_EDGE_CASE_MODALITY_CONFIGS`. For entries that require output name validation
        (transformers v4/v5 compat), resolves each modality's ``method_output_name`` against the
        actual model method via :meth:`_infer_method_output_name`.
        Nrf   zModel does not have method z for modality z. Skipping.rh   rŠ   )rÂ   rô   r  rp   ry   rÕ   rh  rV  ræ  r~   Ú_infer_method_output_name)rs  r_  rR  Útask_edge_casesr  Ú
raw_configr  Úvalidate_output_namesr  r  rz  rf   s               rF   rü  z'Transformer.infer_modalities_edge_cases�	  s6  € õ 6×9Ò9¸$Ô:OÑPÔPˆØÐ"Ø�4à×#Ò# E¤LÔ$;Ñ<Ô<ˆØˆ=Ø�4à@EÑ=ˆ
Ð&Ð(=Ø$ð 	2ØÐ1Ð1Ð1à*,ˆØ *× 0Ò 0Ñ 2Ô 2ð 
	ð 
	ÑˆH�fÝ˜5 &¨Ô"2Ñ3Ô3ð Ý×#Ò#Øk°&¸Ô2BÐkÐkÐT\ÐkÐkÐkñô ð ð Ý˜U F¨8Ô$4Ñ5Ô5ˆFà  Ô*Ø&*×&DÒ&DÀVÐL`ÔEaÐciÑ&jÔ&jð)ð )ˆO˜HÑ%Ð%ð Ð 2Ð2Ð2rE   c                ó   ‡— dddddœ}t          |t          ¦  «        r6|                      ¦   «         pi Šˆfd„|                     ¦   «         D ¦   «         S t          t
          t          t          dœ}|                     ¦   «         D ]\  }}t          ||¦  «        r|gc S Œt           	                    dt          |¦  «        j        › d	�¦  «         g S )
zWDetermine which modalities the processor supports by inspecting its attributes or type.r‡   r�   r£   rß   )rN  Úimage_processorÚfeature_extractorÚvideo_processorc                ó"   •— g | ]\  }}|‰v ¯	|‘ŒS rD   rD   )rÈ   Úprocessor_attributer?  Úprocessor_attributess      €rF   rÞ  z?Transformer.infer_modalities_from_processor.<locals>.<listcomp>Ñ	  s4   ø€ ð ð ð á6Ð'¨Ø&Ð*>Ð>Ð>ð à>Ð>Ð>rE   )r‡   r£   rß   r�   z6Could not determine modalities from processor of type z#. Returning an empty modality list.)rÇ   r#   Ú_get_processor_attributesrÕ   r"   r   r>   r   rV  rW  r{   rA   )rs  rR  Úprocessor_attribute_mappingÚmodality_checksr?  rp  r  s         @rF   rý  z+Transformer.infer_modalities_from_processorÄ	  s  ø€ ð  Ø&Ø!(Ø&ð	<
ð <
Ð#õ �i¥Ñ0Ô0ð 	Ø#'×#AÒ#AÑ#CÔ#CÐ#IÀrÐ ðð ð ð à:U×:[Ò:[Ñ:]Ô:]ðñ ô ð õ ,Ý+Ý'Ý)ð	1
ð 1
ˆð />×.CÒ.CÑ.EÔ.Eð 	'ð 	'Ñ*ˆM˜?Ý˜) _Ñ5Ô5ð 'Ø%�Ð&Ð&Ð&ð'õ 	�Šð0ÅTÈ)Á_Ä_ÔE]ð 0ð 0ð 0ñ	
ô 	
ð 	
ð ˆ	rE   úlist[str] | Nonec                ó¤   — t          | j        d¦  «        r| j                             ¦   «         S t          | j        d¦  «        r| j        j        S dS )zýGet the attributes of the processor if available. Will be removed in the future as transformers v5
        becomes the minimum requirement.

        Returns:
            list[str] | None: The processor attribute names, or None if not available.
        Úget_attributesÚ
attributesN)rh  rR  r  r  r}  s    rF   r  z%Transformer._get_processor_attributesç	  sQ   € õ �4”>Ð#3Ñ4Ô4ð 	-Ø”>×0Ò0Ñ2Ô2Ð2Ý�T”^ \Ñ2Ô2ð 	-Ø”>Ô,Ð,ØˆtrE   rf   r   c                óÊ   ‡— ˆfd„Š	 t          | ¦  «                             dd¦  «        }n# t          $ r Y dS w xY w ‰|¦  «        }|€dS d„ t          |¦  «        D ¦   «         S )zöExtract the output field names from a method's return type annotation.

        Args:
            method (Callable): The method to inspect.

        Returns:
            list[str] | None: List of output field names, or None if not found.
        c                ó¦   •— t          | t          ¦  «        rt          | t          ¦  «        r| S t	          | ¦  «        D ]} ‰|¦  «        x}�|c S Œd S rÆ   )rÇ   r{   Ú
issubclassr+   r   )Útype_annotationÚsub_annotationr  Úfind_model_output_classs      €rF   r  zFTransformer._get_method_output_fields.<locals>.find_model_output_classÿ	  sn   ø€ Ý˜/­4Ñ0Ô0ð 'µZÀÕQ\Ñ5]Ô5]ð 'Ø&Ð&Ý"*¨?Ñ";Ô";ð "ð "�Ø5Ð5°nÑEÔEÐE�FÐRØ!�M�M�Mð Sà�4rE   rr   Nc                ó   — g | ]	}|j         ‘Œ
S rD   )rÒ   )rÈ   Úfields     rF   rÞ  z9Transformer._get_method_output_fields.<locals>.<listcomp>
  s   € Ð=Ð=Ð=˜u�”
Ð=Ð=Ð=rE   )r   rô   rª  r   )rf   Úreturn_annotationÚoutput_classr  s      @rF   rþ  z%Transformer._get_method_output_fieldsô	  sœ   ø€ ð	ð 	ð 	ð 	ð 	ð	Ý .¨vÑ 6Ô 6× :Ò :¸8ÀTÑ JÔ JÐÐøÝð 	ð 	ð 	Ø�4�4ð	øøøà.Ð.Ð/@ÑAÔAˆØÐØ�4Ø=Ð=­¨|Ñ(<Ô(<Ð=Ñ=Ô=Ð=s   ˆ#, ¬
:¹:rh   c                óJ   — t                                |¦  «        pg }| |v r| S dS )a€  Validate that ``method_output_name`` is present in the method's return type annotation.

        Returns the name if found, or ``None`` if the method's output type does not include it.
        Primarily needed for transformers v4 compatibility: v5 often allows ``pooler_output``
        from ``get_..._features`` methods, but v4 didn't use ``BaseModelOutputWithPooling`` yet.
        N)r  rþ  )rh   rf   r  s      rF   r  z%Transformer._infer_method_output_name
  s2   € õ $×=Ò=¸fÑEÔEÐKÈˆØ Ð.Ð.Ø%Ð%ØˆtrE   ©Úsafe_serializationÚoutput_pathr&  c               óœ   — | j                              ||¬¦  «         | j                             |¦  «         |                      |¦  «         dS )z@Save the model, processor, and module config to ``output_path``.r%  N)r_  Úsave_pretrainedrR  Úsave_config)rs  r'  r&  ÚargsrÂ  s        rF   ÚsavezTransformer.save
  sN   € àŒ
×"Ò" ;ÐCUÐ"ÑVÔVÐVØŒ×&Ò& {Ñ3Ô3Ð3Ø×Ò˜Ñ%Ô%Ð%Ð%Ð%rE   rþ   rÉ  rå   úbool | str | NoneÚcache_folderrÈ  rÊ  Útrust_remote_codeÚinit_defaultsr=   c                óº   — |                       |||||||||	|
|¬¦  «        }|pi                      ¦   «         D ]\  }}|                     ||¦  «         Œ | dd|i|¤ŽS )zWLoad a Transformer module from a pretrained model directory or Hugging Face model name.)r0  rÉ  rå   r.  rÈ  rÊ  r/  r)  r*  r+  r,  r0  rD   )Ú_load_init_kwargsrÕ   Ú
setdefault)rÓ   r0  rÉ  rå   r.  rÈ  rÊ  r/  r)  r*  r+  r,  r0  rÂ  Úinit_kwargsr  rÙ   s                    rF   ÚloadzTransformer.load#
  sš   € ð( ×+Ò+Ø1ØØØ%ØØ-Ø/Ø%Ø-Ø'Øð ,ñ 
ô 
ˆð )Ð.¨B×5Ò5Ñ7Ô7ð 	/ð 	/‰JˆC�Ø×"Ò" 3¨Ñ.Ô.Ð.Ð.ØˆsÐHÐHÐ&8ÐH¸KÐHÐHÐHrE   c                óN  — |                       ||||||¬¦  «        }||||||dœ}ddddœ}|                     ¦   «         D ]7\  }}||v r|                     |¦  «        ||<   |                     |i ¦  «         Œ8|d                              |¦  «         |d                              |¦  «         |d                              |¦  «         |r|d                              |¦  «         |	r|d                              |	¦  «         |
r|d                              |
¦  «         i |¥d|i¥S )zÁBuild the kwargs dict for ``__init__`` by merging config file, hub kwargs, and caller overrides.

        Priority (highest to lowest): caller kwargs > hub kwargs > config file values.
        )r0  rÉ  rå   r.  rÈ  rÊ  )rÉ  rå   rÇ  rÈ  rÊ  r/  r)  r*  r+  )Ú
model_argsÚtokenizer_argsÚconfig_argsr,  )rç  rÕ   rë  r3  rè  )rÓ   r0  rÉ  rå   r.  rÈ  rÊ  r/  r)  r*  r+  r,  rÂ  rp   Ú
hub_kwargsÚ_OLD_TO_NEWÚold_nameÚnew_names                     rF   r2  zTransformer._load_init_kwargsI
  sŒ  € ð, —’Ø1ØØØ%ØØ-ð !ñ 
ô 
ˆð #ØØ%Ø Ø 0Ø!2ð
ð 
ˆ
ð )Ø0Ø*ð
ð 
ˆð
 #.×"3Ò"3Ñ"5Ô"5ð 	,ð 	,ÑˆH�hØ˜6Ð!Ð!Ø#)§:¢:¨hÑ#7Ô#7��xÑ Ø×Ò˜h¨Ñ+Ô+Ð+Ð+ð 	ˆ~Ô×%Ò% jÑ1Ô1Ð1ØÐ!Ô"×)Ò)¨*Ñ5Ô5Ð5ØˆÔ×&Ò& zÑ2Ô2Ð2ð ð 	8Ø�>Ô"×)Ò)¨,Ñ7Ô7Ð7Øð 	@ØÐ%Ô&×-Ò-Ð.>Ñ?Ô?Ð?Øð 	:Ø�?Ô#×*Ò*¨=Ñ9Ô9Ð9à-�&Ð-˜) WÐ-Ð-Ð-rE   Úconfig_filenamec           
     ó‚  •‡— |r|gng d¢}|D ].}t          ¦   «                              |||||||¬¦  «        }	|	r nŒ/dD ]+}
|
|	v r%d|	|
         v r|	|
                              d¦  «         Œ,d|	v r²h d£Ši }|	d                              ¦   «         D ]‹\  }}d|v rZt	          |                     d¦  «        ¦  «        }ˆfd„|D ¦   «         }|r"t                               d	|›d
|›d�¦  «         Œ]|||<   Œc|‰vrt                               d|›d�¦  «         Œ†|||<   ŒŒ||	d<   n|                      |	¦  «        \  |	d<   |	d<   |	S )a  Load the module config, trying several legacy config filenames for backward compatibility.

        Handles deserialization of ``modality_config`` tuple keys (stored as comma-separated strings
        in JSON) and strips ``trust_remote_code`` from all sub-dicts for security.
        )r  zsentence_roberta_config.jsonzsentence_distilbert_config.jsonzsentence_camembert_config.jsonzsentence_albert_config.jsonz sentence_xlm-roberta_config.jsonzsentence_xlnet_config.json)r0  rÉ  r>  rå   r.  rÈ  rÊ  )r7  r)  r8  r*  r9  r+  r/  r  >   r‡   r£   r�   rß   rO  ú+c                ó   •— g | ]}|‰v¯|‘Œ	S rD   rD   )rÈ   rG  Úvalid_single_modalitiess     €rF   rÞ  z+Transformer.load_config.<locals>.<listcomp>Ë
  s$   ø€ ÐTÐTÐT Q°1Ð<SÐ3SÐ3S˜qÐ3SÐ3SÐ3SrE   z%Ignoring unknown modality components z in modality_config key rï   zIgnoring unknown modality key z in modality_config.r  )	rS  rç  rë  rÕ   r6  ÚsplitrV  rW  Ú_get_default_modality_config)rÓ   r0  rÉ  r>  rå   r.  rÈ  rÊ  Úconfig_filenamesrp   r  Údeserialized_modality_configry  rz  ÚpartsÚinvalidrB  rq  s                   @€rF   rç  zTransformer.load_configŽ
  s  øø€ ð$ ð
ˆ_ÐÐðð ð ð 	ð  0ð 	ð 	ˆOÝ‘W”W×(Ò(Ø#5Ø#Ø /ØØ)Ø!Ø!1ð )ñ ô ˆFð ð Ø�ðð
ð 		5ð 		5ˆCð �fˆ}ˆ}Ð!4¸¸s¼Ð!CÐ!CØ�s”—’Ð 3Ñ4Ô4Ð4øà Ð&Ð&à&TÐ&TÐ&TÐ#Ø+-Ð(Ø(.Ð/@Ô(A×(GÒ(GÑ(IÔ(Ið Hð HÑ$�˜fØ˜,Ð&Ð&Ý! ,×"4Ò"4°SÑ"9Ô"9Ñ:Ô:�EØTÐTÐTÐT¨%ÐTÑTÔT�GØð !ÝŸšØxÀGÐxÐxÐgsÐxÐxÐxñô ð ð !Ø:@Ð0°Ñ7Ð7à#Ð+BÐBÐBÝŸšÐ'lÈÐ'lÐ'lÐ'lÑmÔmÐmØ ØAGÐ0°Ñ>Ð>Ø(DˆFÐ$Ñ%Ð%ð GJ×FfÒFfÐgmÑFnÔFnÑCˆFÐ$Ñ% vÐ.BÑ'CàˆrE   c                óD   — t           |                      dd¦  «                 S )aƒ  Get the default modality configuration for the current transformer task.

        Returns:
            tuple[ModalityConfig, str]: A tuple of (modality_config, module_output_name).
                The modality_config maps modality keys to dicts with 'method' and 'method_output_name'.
                The module_output_name is the name of the output feature this module creates.
        r  r]   )r‘   rô   )rp   s    rF   rD  z(Transformer._get_default_modality_configã
  s   € õ )¨¯ªÐ4FÐH\Ñ)]Ô)]Ô^Ð^rE   c                ó¤  •— t          ¦   «                              ¦   «         }d„ | j                             ¦   «         D ¦   «         |d<   | j        s|                     dd¦  «         | j        €|                     dd¦  «         | j                             ¦   «         D ]4\  }}|                     |¦  «        |k    r|                     |d¦  «         Œ5|S )zdReturn the config dict for serialization, with tuple modality keys joined as plus-separated strings.c                ó4   — i | ]\  }}t          |¦  «        |“ŒS rD   )r3   )rÈ   r  rz  s      rF   rÔ   z/Transformer.get_config_dict.<locals>.<dictcomp>ñ
  s3   € ð *
ð *
ð *
Ù2B°(¸F�O˜HÑ%Ô% vð*
ð *
ð *
rE   r  r   Nr!  )	rS  Úget_config_dictr  rÕ   r   rë  r!  r%  rô   )rs  Úconfig_dictr  Údefaultrq  s       €rF   rL  zTransformer.get_config_dictî
  sà   ø€ å‘g”g×-Ò-Ñ/Ô/ˆð*
ð *
ØFJÔFZ×F`ÒF`ÑFbÔFbð*
ñ *
ô *
ˆÐ%Ñ&ð Ô%ð 	7Ø�OŠOÐ/°Ñ6Ô6Ð6ØÔÐ$Ø�OŠO˜N¨DÑ1Ô1Ð1ð !Ô7×=Ò=Ñ?Ô?ð 	+ð 	+‰LˆC�Ø�Š˜sÑ#Ô# wÒ.Ð.Ø—’  TÑ*Ô*Ð*øØÐrE   c                ón   — dt          |                      ¦   «         | j        j        j        ¬¦  «        › d�S )NzTransformer()rƒ   ú))r   rL  r_  rq  rA   r}  s    rF   Ú__repr__zTransformer.__repr__ÿ
  s4   € Øi�d 4×#7Ò#7Ñ#9Ô#9ÈÌ
ÔH\ÔHeÐfÑfÔfÐiÐiÐiÐirE   )"r0  re   r  r1  r)  r2  r*  r2  r+  r2  r   r3  r,  r4  r  r5  r  rg   r!  r6  r"  r7  r#  r7  rì   rí   r-  r7  r.  rÃ   r/  rg   rr   r8  )rr   r6  )rÙ   r6  rr   r8  )rr   rí   )rÙ   rí   rr   r8  )r‡  râ   rr   r8  ©rr   rÃ   )rr   rõ   )rr   r7  )rÙ   r7  rr   r8  )rr   r!   )rr   r    )rr   r´  )rr   r·  )r  r7   rÁ  rÝ   rÂ  r	   rr   rÃ   )NN)rÌ  rÍ  rÎ  rg   r   r3  rr   rÝ   )r
  rú   r×  rÝ   rr   r8  )rÝ  rÝ   rü  r  rû  rÝ   rr   r8  )r%  r3  rr   rÜ   )r*  rÝ   rr   rÝ   rÆ   )r  r7   rÁ  rZ  rü  r  rû  rÝ   r×  r2  rr   rÝ   )
r  r7   rÁ  rZ  rü  r  rû  rÝ   rr   rÝ   )
rù   rt  rü  r  rû  rÝ   r×  r2  rr   rÝ   )
rù   rt  rü  r  rû  rÝ   r×  rÝ   rr   rÝ   )r*  rÝ   rù   rt  r×  rÝ   r…  rÝ   rû  r2  rY   r7  rr   r8  )
r£  r¤  r×  rÝ   r…  rÝ   rû  r2  rr   r¥  )r£  r¤  r¸  re   rr   r¤  )r£  r¤  r¸  re   r×  rÝ   r…  rÝ   rû  rÝ   rr   r¥  )rÎ  re   rr   r7  )r0  re   r,  re   r+  rÝ   rr   rÅ  )rp   rÌ  rr   r8  )r0  re   r  r1  rp   rÌ  r,  re   ru  rÃ   rr   r!   )r0  re   rp   r    rr   rã  )r_  r!   rR  rõ  rr   rö  )r_  r!   rR  r  rr   r  )rR  r  rr   r´  )rr   r  )rf   r   rr   r  )rh   re   rf   r   rr   rg   )r'  re   r&  rÃ   rr   r8  )rþ   NNNFFNNNr(  N)r0  re   rÉ  re   rå   r-  r.  rg   rÈ  rg   rÊ  rÃ   r/  rÃ   r)  r2  r*  r2  r+  r2  r,  re   r0  r2  rr   r=   )
rþ   NNNFFNNNr(  )r0  re   rÉ  re   rå   r-  r.  rg   rÈ  rg   rÊ  rÃ   r/  rÃ   r)  r2  r*  r2  r+  r2  r,  re   rr   rÝ   )rþ   NNNNF)r0  re   rÉ  re   r>  rg   rå   r-  r.  rg   rÈ  rg   rÊ  rÃ   rr   rÝ   )rp   rÝ   rr   rö  )rr   rÝ   )rr   re   )?rA   rB   rC   rn   r  ri   r$  r%  r&  r'  r;   rT  Úpropertyr!  Úsetterrì   r…  r€  r¢  r-  r²  rp   r¶  rN  rÀ  rÆ  r†  r	  rí  rô  rç  rˆ   rY  rñ  r]  r^  r\  rw  rx  r•  r¬  r­  rð  r\  Ústaticmethodr]  r^  rá  rn  rü  rý  r  rþ  r  r,  Úclassmethodr5  r2  rç  rD  rL  rQ  Ú__classcell__)rq  s   @rF   r  r  „  s  ø€ € € € € € ðhð hðT 8ÐÐ7Ð7Ð7Ñ7ð	ð 	ð 	€Kð 	ð 	ð 	ñ 	ð ØØð.ð .Ðð ð ð ñ ð
 €LÐÐÐÑØ.lÐ.lÐ.lÐ!ÐlÐlÐlÑlà!ð
 -AØ.2Ø26Ø/3Ø59Ø8?Ø15Ø)-Ø$(Ø#'Ø&*Ø7;Ø%)Ø#Ø-1ð%v/ð v/ð v/ð v/ð v/ð v/ð v/ñ "Ô!ðv/ðp ð
"ð 
"ð 
"ñ „Xð
"ð Ôð
ð 
ð 
ñ Ôð
ð ð%ð %ð %ñ „Xð%ð Ôð*ð *ð *ñ Ôð*ð0ð ð ð ðBGð Gð Gð GðR
ð 
ð 
ð 
ð ðð ð ñ „Xðð  Ôð4ð 4ð 4ñ Ôð4ð
 ðð ð ñ „Xðð ð!ð !ð !ñ „Xð!ð ð1ð 1ð 1ñ „Xð1ð ð:ð :ð :ñ „Xð:ðoð oð oð oð
ð 
ð 
ð 
ð(
Zð 
Zð 
Zð 
Zð "Ø59ð	} ð } ð } ð } ð } ð~'
ð '
ð '
ð '
ðR)
ð )
ð )
ð )
ðVð ð ð ð4fð fð fð fðP7
ð 7
ð 7
ð 7
ð~ 7;ð,pð ,pð ,pð ,pð ,pð\,
ð ,
ð ,
ð ,
ð\
ð 
ð 
ð 
ðL 7;ð,ð ,ð ,ð ,ð ,ð\X
ð X
ð X
ð X
ð@ 04Ø!%ðB5ð B5ð B5ð B5ð B5ðR 04ðCð Cð Cð Cð CðJð ð ð ðð ð ð ðBð ð ð ð6&Vð &Vð &Vð &VðP ðað að añ „\ðað84vð 4vð 4vð 4vðl'ð 'ð 'ð 'ðRC&ð C&ð C&ð C&ðJ%3ð %3ð %3ð %3ðN!ð !ð !ð !ðFð ð ð ð ð>ð >ð >ñ „\ð>ð6 ð
ð 
ð 
ñ „\ð
ð HLð &ð &ð &ð &ð &ð &ð ð
 Ø#'Ø#'Ø#Ø!&à"'Ø.2Ø26Ø/3ØØ/3ð#Ið #Ið #Ið #Iñ „[ð#IðJ ð
 Ø#'Ø#'Ø#Ø!&à"'Ø.2Ø26Ø/3ØðB.ð B.ð B.ð B.ñ „[ðB.ðH ð Ø&*Ø#'Ø#'Ø#Ø!&ðRð Rð Rð Rð Rð Rñ „[ðRðh ð_ð _ð _ñ „\ð_ðð ð ð ð ð ð"jð jð jð jð jð jð jð jrE   r  )rp   rq   rr   rs   rR  )rì   rí   rr   rí   )rù   rú   rr   rû   )„Ú
__future__r   rï  rD  Úcollections.abcr   r   Ú
contextlibr   Údataclassesr   Útypingr   r	   r
   r   r   r   r(  Úpackaging.versionr   Úparse_versionÚtokenizers.normalizersr   rË   r�   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   rÖ  Útransformers.utilsr+   r,   Útransformers_loggingÚtransformers.utils.import_utilsr-   Útransformers.utils.peft_utilsr.   Útyping_extensionsr/   Úsentence_transformers.backendr0   r1   Ú#sentence_transformers.base.modalityr2   r3   r4   Ú)sentence_transformers.base.modality_typesr5   r6   r7   r8   r9   Ú/sentence_transformers.base.modules.input_moduler:   Ú%sentence_transformers.util.decoratorsr;   Ú&sentence_transformers.util.environmentr<   r=   r|   r>   rH   rI   rL   rN   rP   rR   r`  rU   Ú
get_loggerrA   rV  rj  r‡  rÛ  rÜ  Ú	frozensetr  r¯  r1  rd   rk   r   ÚModalityConfigr   r…   ri   r†   r‘   r¢   r¥   rÀ   rÁ   Ú_TEXT_GENERATION_EDGE_CASESÚ_ANY_TO_ANY_EDGE_CASESrÂ   rÎ   rÚ   rÜ   râ   rè   rë   rø   r
  r-  rg  r  rD   rE   rF   ú<module>rp     sE  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ Sà €€€Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø AÐ AÐ AÐ AÐ AÐ Aðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð8 =Ð <Ð <Ð <Ð <Ð <Ø *Ð *Ð *Ð *Ð *Ð *Ø >Ð >Ð >Ð >Ð >Ð >Ø =Ð =Ð =Ð =Ð =Ð =Ø BÐ BÐ BÐ BÐ BÐ BØ )Ð )Ð )Ð )Ð )Ð )à NÐ NÐ NÐ NÐ NÐ NÐ NÐ NØ qÐ qÐ qÐ qÐ qÐ qÐ qÐ qÐ qÐ qðð ð ð ð ð ð ð ð ð ð ð ð ð ð HÐ GÐ GÐ GÐ GÐ GØ NÐ NÐ NÐ NÐ NÐ NØ MÐ MÐ MÐ MÐ MÐ Mð'ØÐÐÐÐÐÐøØð 'ð 'ð 'Ø&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð'øøøðØ/Ð/Ð/Ð/Ð/Ð/Ð/øØð ð ð ðð ð ð ð ñ ô ð ð ð ðøøøðØ?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?øØð ð ð ðð ð ð ð ñ ô ð ðð ð ð ð ñ ô ð ð ð ðøøøðØ*Ð*Ð*Ð*Ð*Ð*Ð*øØð ð ð ðð ð ð ð ñ ô ð ð ð ðøøøðØ,Ð,Ð,Ð,Ð,Ð,Ð,øØð ð ð ðð ð ð ð ñ ô ð ð ð ðøøøðØ.Ð.Ð.Ð.Ð.Ð.Ð.øØð ð ð ðð ð ð ð ñ ô ð ð ð ðøøøðØ/Ð/Ð/Ð/Ð/Ð/Ð/øØð ð ð ðð ð ð ð ñ ô ð ð ð ðøøøð ð  Ð&Ð&Ñ(Ô(ð  ØÐÐÐÐÐà	(Ð	Ô	(¨Ñ	2Ô	2€à3@°=ÐAUÑ3VÔ3VÐYfÐYfÐgoÑYpÔYpÒ3pÐ 0Ø@MÀÐNbÑ@cÔ@cÐgtÐgtØñhô hò AÐ =ð 6C°]ÐCWÑ5XÔ5XÐ\iÐ\iÐjrÑ\sÔ\sÒ5sÐ 2Ø)6¨Ð7KÑ)LÔ)LÐP]ÐP]Ð^eÑPfÔPfÒ)fÐ &ð )2¨	Ð2kÐ2kÐ2kÑ(lÔ(lÐ %Ø#&Ð  àØnô€ð
#ð #ð #ð #ð #˜iñ #ô #ð #ð
*ð *ð *ð *ð *Ð,°Eð *ñ *ô *ð *ð �h Ð.Ô/€ð#ð #ð #ð #ðN $ØAØ+Ø%Øð>ð >Ð ð ð ð ñ ð	Ø5Ð5Ð5Ð5Ð5Ð5ð 	!ð # <Ñ0Ð0øð ð 	ð 	ð 	Ø€Dð	øøøð 
˜IÐ=PÐQÐQÐRØðð
 
˜I¸XÐFÐFÐGØð ð
 
˜I¸XÐFÐFÐGØðð
 
˜I¸XÐFÐFÐGØðð
 
˜I¸XÐFÐFÐGØðð  )ÀÐMÐMØ )ÀÐNÐNð	
ð 	
ð 	ðð-Pð PÐ ð ð ð ñ ðD ˆ~Ð/Ð0Ø�Ð 1Ð2Ø�Ð!3Ð4Ø�Ð!3Ð4Ø�>Ð#7Ð8Ø�~Ð':Ð;Ø˜~Ð/OÐPØÐKÐM`ÐaàØHØ ðð
 ÐAÀ?ÐSØÐBÐDTÐUØÐGÐIZÐ[ØÐHÐJ\Ð]ØÐBÐDTÐUØÐ?ÀÐQð ÐIÐK\Ð]ð-5Ð ð ð ð ñ ð> &Ð=PÐQÐQØ&/ÐGZÐ[Ð[ðð ð Ø	ð<Ð ð ð ð ñ ðhOà
à2È/ÐZÐZØ 4ÈOÐ\Ð\Ø*CÐ[jÐkÐkð	
ð 	
ð
 	ØððhOð à2ÐJ]Ð^Ð^Ø 4ÐL_Ð`Ð`ð	
ð 	
ð 	ØððhOð& à2ÐJ]Ð^Ð^Ø 5ÐM`ÐaÐað	
ð 	
ð 	Øðð'hOð6 à2È/ÐZÐZØ 4ÈOÐ\Ð\ð	
ð 	
ð 	Øðð7hOðH 
à(Ð@SÐTÐTØ*3ÐK^Ð_Ð_ð	
ð 	
ð 	ØððIhOðX à(Ð@SÐTÐTØ*3ÐK^Ð_Ð_ð	
ð 	
ð 	ØððYhOðj Ø	 yÐH[Ð\Ð\Ð]ØØððkhOðt Ø	 yÐH[Ð\Ð\Ð]ØØððuhOð~ Ø	 yÐH[Ð\Ð\Ð]ØØððhOðH Ø	 yÐH[Ð\Ð\Ð]ØØððIhOðT à )ÐATÐUÐUØ*3ÐK^Ð_Ð_ð	
ð 	
ð 	ØððUhOðf à(Ð@SÐTÐTØ )ÐATÐUÐUØ*3ÐK^Ð_Ð_ð	
ð 	
ð
 	ØððghOðz Ð$ð{hOð| Ð'ð}hOð~ 
Ð!ðhOð@ Ð#ðAhOðB Ð+ðChOðD (Ø&Ø0Ø#Ø%Ø.ðOhOð hOð hOÐ ð hð hð hñ hðZ à 	ÀÐJÐJð	
ð 	Øðð
FÐ ð 
ð 
ð 
ñ 
ð   )ÀÐIÐIØ*3È8ÐTÐTð	
ð 	
ð 	Øðð ˜yÀÐIÐIð	
ð 	Øððð Ð ð0  )ÀÐIÐIØ*3È8ÐTÐTð	
ð 	
ð 	Øðð 
 yÈÐQÐQÐRØØðð 
 yÈÐQÐQÐRØØðð 
 yÈÐQÐQÐRØØðð 
 yÈÐQÐQÐRØØðð !*ÀÐJÐJØ*3È8ÐTÐTð	
ð 	
ð 	ØððA(ð (Ð ðV 9Ø2Ø(Ø&ð	Wð WÐ ð ð ð ñ ðð ð ð ð ð&ð &ñ „ð&ð"ð "ð "ð "ð "�y¨ð "ñ "ô "ð "ð )ð )ð )ð )ð )˜9ñ )ô )ð )ðX )RÐ(QÐ(QÐ Ð QÐ QÐ QÑ QØ5EÐ !Ð EÐ EÐ EÑ Eðð ð ð ðD"ð "ð "ð "ð< $˜)ðð ð ñô Ð ð %˜9Ð%vÐ%vÐ%vÑwÔwÐ ð|!jð |!jð |!jð |!jð |!j�+ñ |!jô |!jð |!jð |!jð |!js�   ÃC  Ã C.Ã-C.Ã2C9 Ã9DÄDÄD ÄD=Ä<D=ÅE ÅEÅEÅ!E( Å(E=Å<E=ÆF ÆFÆFÆ!F( Æ(F=Æ<F=ÊJ ÊJ'Ê&J'