Ë
    ÛÓ^j-"  ã                  óè   — d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZmZ d
dlmZ d
dlmZ  ej(                  e«      Ze	r e«       rddlZddlmZ ddlmZ  G d„ de«      Zy)z3Abstract base class for all Transformers exporters.é    )Úannotations)ÚABCÚabstractmethod)ÚMutableMapping)ÚTYPE_CHECKING)Úversioné   )Úlogging)Ú_is_package_availableÚis_torch_availableé   )ÚExportConfigMixin)Údecompose_for_generationN)ÚCache)ÚPreTrainedModelc                  ó~   — e Zd ZU dZg Zded<   i Zded<   i Zded<   d„ Zd„ Z	e
	 	 	 	 	 	 dd	„«       Z	 	 	 	 	 	 	 	 dd
„Zy)Ú
HfExporterz�
    Abstract base class for all Transformers exporters.

    Subclass and implement [`~HfExporter.export`] to add a new export backend.
    z	list[str]Úrequired_packageszdict[str, str]Úmin_versionsÚtested_versionsc                ó$   — | j                  «        y )N)Úvalidate_environment)Úselfs    úf/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/exporters/base.pyÚ__init__zHfExporter.__init__7   s   € Ø×!Ñ!Õ#ó    c           	     óæ  ‡ — g g }}‰ j                   D ]Ž  }t        |d¬«      \  }}|s|j                  |«       Œ'‰ j                  j	                  |«      }|€ŒE|dk7  sŒK|j                  dd«      d   }	|j                  dd«      d   }
|	|
k7  sŒ{|j                  ||	|
f«       Œ� |r>dj                  ˆ fd	„|D «       «      }t        d
t        ‰ «      j                  › d|› �«      ‚g }‰ j                  j                  «       D ]s  \  }}t        |d¬«      \  }}|dk(  s?t        j                  |j                  dd«      d   «      t        j                  |«      k  sŒZ|j                  |› d|› d|› d�«       Œu |r2t        t        ‰ «      j                  › ddj                  |«      › �«      ‚|rGdj                  d„ |D «       «      }t        j                  t        ‰ «      j                  › d|› d�«       yy)zYCheck `required_packages` are installed and warn on version drift from `tested_versions`.T)Úreturn_versionNzN/Aú+r   r   z, c              3  óf   •K  — | ](  }|‰j                   v r|› d ‰j                   |   › �n|–— Œ* y­w)z==N)r   )Ú.0Úpkgr   s     €r   ú	<genexpr>z2HfExporter.validate_environment.<locals>.<genexpr>N   s@   øè ø€ ò Øbe¸À×@TÑ@TÑ9T�3�%�r˜$×.Ñ.¨sÑ3Ð4Ñ5ÐZ]Ó]ñùs   ƒ.1zTo use z-, please install the following dependencies: z>=z (found ú)z requires newer versions of: c              3  ó8   K  — | ]  \  }}}|› d |› d|› �–— Œ y­w)z: installed z	, tested N© )r!   r"   ÚgotÚwants       r   r#   z2HfExporter.validate_environment.<locals>.<genexpr>]   s)   è ø€ ÒeÉ^ÈSÐRUÐW[ 3 % |°C°5¸	À$ÀÔ HÑeùs   ‚u~    is experimental and patches many backend internals; behaviour may differ from what was validated. Version drift detected â€” z-. If you hit issues, try the tested versions.)r   r   Úappendr   ÚgetÚsplitÚjoinÚImportErrorÚtypeÚ__name__r   Úitemsr   ÚparseÚloggerÚwarning)r   ÚargsÚkwargsÚmissingÚdriftr"   ÚexistsÚ	installedÚtestedÚinstalled_baseÚtested_baseÚspecsÚoutdatedÚminimumÚ_Údetailss   `               r   r   zHfExporter.validate_environment:   s  ø€ ð ˜R�ˆØ×)Ñ)ò 
	EˆCÜ 5°cÈ$Ô OÑˆF�IÙØ—‘˜sÔ#ØØ×)Ñ)×-Ñ-¨cÓ2ˆFØÑ! i°5Ó&8Ø!*§¡°°aÓ!8¸Ñ!;�Ø$Ÿl™l¨3°Ó2°1Ñ5�Ø! [Ó0Ø—L‘L # ~°{Ð!CÕDð
	Eñ Ø—I‘Ió Øipôó ˆEô  ¬¨T«
×(;Ñ(;Ð'<Ð<iÐjoÐipÐqÓrÐrð ˆØ ×-Ñ-×3Ñ3Ó5ò 	I‰LˆC�Ü0°ÀTÔJ‰LˆAˆyØ˜EÒ!¤W§]¡]°9·?±?À3ÈÓ3JÈ1Ñ3MÓ%NÔQX×Q^ÑQ^Ð_fÓQgÓ%gØ—‘ 3 % r¨'¨°(¸9¸+ÀQÐ GÕHð	Iñ Ü¤ d£×!4Ñ!4Ð 5Ð5RÐSW×S\ÑS\Ð]eÓSfÐRgÐhÓiÐiáØ—i‘iÑeÐ_dÔeÓeˆGÜ�N‰NÜ˜“:×&Ñ&Ð'ð (\Ø\cÐ[dð e>ð?õð r   c                óD   — t        t        | «      j                  › d�«      ‚)uˆ  
        Export the model and return the backend-specific program object.

        Args:
            model ([`PreTrainedModel`]):
                The model to export.
            sample_inputs (`dict[str, torch.Tensor | Cache]`):
                **Forward** kwargs â€” what you'd pass to `model(**sample_inputs)`. These are used
                directly as the example inputs during tracing. For an autoregressive decode-step
                export, this means you need to include `past_key_values`, `cache_position`, etc.
                If you only have generation-style inputs, use [`~HfExporter.export_for_generation`]
                instead â€” it runs `model.generate` for you and exports each stage.
            config ([`~transformers.exporters.configs.ExportConfigMixin`]):
                Backend-specific configuration.

        Returns:
            Backend-specific export artifact.
        zø does not implement `export`. Pick a concrete exporter (`DynamoExporter`, `OnnxExporter`, `ExecutorchExporter`), or override `export` in your subclass with a backend-specific tracing pipeline that consumes `config` and returns the runtime artifact.)ÚNotImplementedErrorr.   r/   )r   ÚmodelÚsample_inputsÚconfigs       r   ÚexportzHfExporter.exportd   s+   € ô2 "Ü�D‹z×"Ñ"Ð#ð $0ð 0ó
ð 	
r   c                ó
  — t        ||«      }t        |t        «      r@t        |«      t        |«      z
  }|r$t	        dt        |«      › dt        |«      › d�«      ‚|}nt        j                  ||«      }i }|j                  «       D ]#  \  }\  }	}
	 | j                  |	|
||   ¬«      ||<   Œ% |S # t        $ rL}t        t        | «      j                  › d|› dt        |	«      j                  › dt        |
«      › d�«      |‚d	}~ww xY w)
ué  
        Decompose a generative model and export each component independently.

        Thin wrapper around [`~exporters.utils.decompose_for_generation`] that calls
        [`~HfExporter.export`] on every returned `(submodel, forward_inputs)` pair. If you need
        the intermediate `(submodel, forward_inputs)` pairs (for verification, custom inputs,
        skipping a stage, â€¦), call [`~exporters.utils.decompose_for_generation`] directly.

        Args:
            model ([`PreTrainedModel`]):
                The generative model to export. Must support `model.generate(**sample_inputs)`.
            sample_inputs (`dict[str, torch.Tensor | Cache]`):
                **Generate** kwargs â€” what you'd pass to `model.generate(**sample_inputs)`
                (typically `input_ids` + `attention_mask`, plus any modality inputs like
                `pixel_values` / `input_features` for multi-modal models). Per-stage forward
                kwargs are captured internally.
            config ([`~transformers.exporters.configs.ExportConfigMixin`] or `dict[str, ExportConfigMixin]`):
                Backend-specific configuration. Pass a single config to apply to every
                component, or a `dict` keyed by component name (e.g. `"image_encoder"`,
                `"language_model"`, `"lm_head"`, `"decode"`) to override per-component â€”
                all component names must be present in the dict.

        Returns:
            `dict[str, Any]`: `{component_name: backend_specific_artifact}` â€” same keys as
            [`~exporters.utils.decompose_for_generation`]. Values are whatever
            [`~HfExporter.export`] returns for the concrete backend (`ExportedProgram`,
            `ONNXProgram`, `ExecutorchProgramManager`).
        z4Per-component `config` dict is missing entries for: z$. Expected one entry per component: ú.)rF   z.export failed on component 'z' (submodel=z, input keys=z).N)r   Ú
isinstanceÚdictÚsetÚ
ValueErrorÚsortedÚfromkeysr0   rG   Ú	ExceptionÚRuntimeErrorr.   r/   Úlist)r   rD   rE   rF   Ú
componentsr6   ÚconfigsÚexportedÚnameÚsubmodelÚ	subinputsÚes               r   Úexport_for_generationz HfExporter.export_for_generation„   s/  € ôD .¨e°]ÓCˆ
Ü�fœdÔ#Ü˜*“o¬¨F«Ñ3ˆGÙÜ ØJÌ6ÐRYË?ÐJ[ð \9Ü9?À
Ó9KÐ8LÈAðOóð ð ‰Gä—m‘m J°Ó7ˆGØ&(ˆØ+5×+;Ñ+;Ó+=ò 	Ñ'ˆDÑ'�8˜YðØ!%§¡¨X°yÈÐQUÉ Ó!W�˜’ð	ð ˆøô ò Ü"Ü˜D“z×*Ñ*Ð+Ð+HÈÈð O!Ü!% h£×!8Ñ!8Ð 9¸ÄtÈIÃÐFWÐWYð[óð ðûðús   ÂB-Â-	DÂ6AC=Ã=DN)rD   r   rE   ú)MutableMapping[str, torch.Tensor | Cache]rF   r   )rD   r   rE   r[   rF   z0ExportConfigMixin | dict[str, ExportConfigMixin]Úreturnzdict[str, object])r/   Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   r   r   rG   rZ   r&   r   r   r   r   *   s‘   … ñð $&Ð�yÓ%à#%€L�.Ó%à&(€O�^Ó(ò$ò(ðT ð
àð
ð Að
ð "ò	
ó ð
ð>6àð6ð Að6ð Að	6ð
 
ô6r   r   )r_   Ú
__future__r   Úabcr   r   Úcollections.abcr   Útypingr   Ú	packagingr   Úutilsr
   Úutils.import_utilsr   r   rT   r   r   Ú
get_loggerr/   r2   ÚtorchÚcache_utilsr   Úmodeling_utilsr   r   r&   r   r   ú<module>rl      s[   ðñ :å "ç #Ý *Ý  å å ß JÝ &Ý +ð 
ˆ×	Ñ	˜HÓ	%€ñ ÙÔÛå'Ý4ôP�õ Pr   