ó
    >:jÀ  ã                  óÎ   • S SK Jr  S SKrS SKJrJr  S SKJr  \R                  " \	5      r
\(       a  S SKJrJrJr   S SKJr     S             S	S jjrg! \ a     N f = f)
é    )ÚannotationsN)ÚTYPE_CHECKINGÚLiteral)Úsave_or_push_to_hub_model)ÚCrossEncoderÚSentenceTransformerÚSparseEncoder)ÚOptimizationConfigc                óš  ^^^
•  SSK JnJn  SSKJn  U R                  n	[        X–5      (       d  [        S5      eUR                  U	5      m
[        T[        5      (       a7  TUR                  ;  a  [        S5      eT=(       d    Tm[        UT5      " 5       mTc  Sm[        UUU
4S	 jS
TUUUTSU S9	  g! [
         a    [        S5      ef = f)at  
Export an optimized ONNX model from a SentenceTransformer, SparseEncoder, or CrossEncoder model.

The O1-O4 optimization levels are defined by Optimum and are documented here:
https://huggingface.co/docs/optimum-onnx/main/en/onnxruntime/usage_guides/optimization

The optimization levels are:

- O1: basic general optimizations.
- O2: basic and extended general optimizations, transformers-specific fusions.
- O3: same as O2 with GELU approximation.
- O4: same as O3 with mixed precision (fp16, GPU-only)

See the following pages for more information & benchmarks:

- `Sentence Transformer > Usage > Speeding up Inference <https://sbert.net/docs/sentence_transformer/usage/efficiency.html>`_
- `Cross Encoder > Usage > Speeding up Inference <https://sbert.net/docs/cross_encoder/usage/efficiency.html>`_

Args:
    model (SentenceTransformer | SparseEncoder | CrossEncoder): The SentenceTransformer, SparseEncoder,
        or CrossEncoder model to be optimized. Must be loaded with `backend="onnx"`.
    optimization_config (OptimizationConfig | Literal["O1", "O2", "O3", "O4"]): The optimization configuration or level.
    model_name_or_path (str): The path or Hugging Face Hub repository name where the optimized model will be saved.
    push_to_hub (bool, optional): Whether to push the optimized model to the Hugging Face Hub. Defaults to False.
    create_pr (bool, optional): Whether to create a pull request when pushing to the Hugging Face Hub. Defaults to False.
    file_suffix (str | None, optional): The suffix to add to the optimized model file name. Defaults to None.

Raises:
    ImportError: If the required packages `optimum` and `onnxruntime` are not installed.
    ValueError: If the provided model is not a valid SentenceTransformer, SparseEncoder, or CrossEncoder model loaded with `backend="onnx"`.
    ValueError: If the provided optimization_config is not valid.

Returns:
    None
r   )ÚORTModelÚORTOptimizer)ÚAutoOptimizationConfigz·Please install Optimum and ONNX Runtime to use this function. You can install them with pip: `pip install sentence-transformers[onnx]` or `pip install sentence-transformers[onnx-gpu]`z}The model must be a Transformer-based SentenceTransformer, SparseEncoder, or CrossEncoder model loaded with `backend="onnx"`.z\optimization_config must be an OptimizationConfig instance or one of 'O1', 'O2', 'O3', 'O4'.NÚ	optimizedc                ó&   >• TR                  TU TS9$ )N)Úfile_suffix)Úoptimize)Úsave_dirr   Úoptimization_configÚ	optimizers    €€€Úc/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sentence_transformers/backend/optimize.pyÚ<lambda>Ú-export_optimized_onnx_model.<locals>.<lambda>^   s   ø€ ¨×);Ñ);Ð<OÐQYÐgrÐ);Ñ)só    Úexport_optimized_onnx_modelÚonnx)	Úexport_functionÚexport_function_nameÚconfigÚmodel_name_or_pathÚpush_to_hubÚ	create_prr   ÚbackendÚmodel)Úoptimum.onnxruntimer   r   Ú!optimum.onnxruntime.configurationr   ÚImportErrorÚtransformers_modelÚ
isinstanceÚ
ValueErrorÚfrom_pretrainedÚstrÚ_LEVELSÚgetattrr   )r#   r   r   r    r!   r   r   r   r   Ú	ort_modelr   s    `   `    @r   r   r      sé   ú€ ðX
ß>ÝLð ×(Ñ(€IÜ�i×*Ñ*Üð Ló
ð 	
ð ×,Ñ,¨YÓ7€IäÐ%¤s×+Ñ+ØÐ&<×&DÑ&DÓDÜØnóð ð "×8Ð%8ˆÜ%Ð&<Ð>QÔRÓTÐàÑØ!ˆäÞsØ:Ø"Ø-ØØØØØó
øô7 ó 
Üð?ó
ð 	
ð
ús   …B4 Â4C
)FFN)r#   z2SentenceTransformer | SparseEncoder | CrossEncoderr   z4OptimizationConfig | Literal['O1', 'O2', 'O3', 'O4']r   r+   r    Úboolr!   r/   r   z
str | NoneÚreturnÚNone)Ú
__future__r   ÚloggingÚtypingr   r   Ú#sentence_transformers.backend.utilsr   Ú	getLoggerÚ__name__ÚloggerÚsentence_transformersr   r   r	   r%   r
   r&   r   © r   r   Ú<module>r;      s    ðÝ "ã ß )å Ià	×	Ò	˜8Ó	$€æßVÑVðÝHð ØØ"ðTØ=ðTàMðTð ðTð ð	Tð
 ðTð ðTð 
öTøð	 ó Ùðús   ½A ÁA$Á#A$