Ë
    uPêjX"  ã                   ó¶   — U d Z ddlmZ ddl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 dd	lmZ dd
lmZmZmZmZmZ ddlmZ dZeed<    G d„ de«      Zy)uH  
Transformation logic for DashScope's OpenAI-compatible /v1/reranks API.

Supports
- qwen3-rerank

(Other DashScope rerankers â€” gte-rerank-v2 / qwen3-vl-rerank â€” share the same
endpoint but have not been validated against this transformer. Behavior with
those models is undefined.)

Endpoint
- https://dashscope.aliyuncs.com/compatible-api/v1/reranks

Note: chat/embed live under `/compatible-mode/v1/`, but DashScope's rerank
route is exposed under `/compatible-api/v1/reranks` per the docs. Override
with `DASHSCOPE_API_BASE_RERANK` to point at a different host or path.

Empirically, qwen3-rerank accepts `return_documents=true` and echoes
`results[].document.text` back, even though the public docs list the flag
as supported only for gte-rerank-v2 / qwen3-vl-rerank.

Docs - https://help.aliyun.com/zh/model-studio/text-rerank-api
é    )ÚMapping)ÚAnyÚFinalN)Úuuid)ÚLogging)ÚBaseLLMException)ÚBaseRerankConfig)Úget_secret_str)ÚOptionalRerankParamsÚRerankBilledUnitsÚRerankResponseÚRerankResponseMetaÚRerankTokensé   )ÚDashScopeErrorz8https://dashscope.aliyuncs.com/compatible-api/v1/reranksÚDEFAULT_RERANK_URLc                   óæ  — e Zd ZdZd$d„Z	 d%dedz  dededz  defd„Z	 	 	 d&d	eded
edz  dedz  deee	f   dz  defd„Z
dedefd„Z	 	 	 	 	 	 	 d'dedz  dedededeeeeef   z     dedz  dedz  dee   dz  dedz  dedz  dedz  dedz  defd„Z	 d%deded	ededz  def
d„Z	 	 	 	 d(dedej&                  deded
edz  dedz  dedz  dedz  defd „Zd!ed"ed	eej.                  z  defd#„Zy))ÚDashScopeRerankConfigak  
    Reference: https://help.aliyun.com/zh/model-studio/text-rerank-api

    Targets DashScope's qwen3-rerank model. Request fields: model, query,
    documents, top_n, return_documents. Response: results[].index,
    results[].relevance_score, optionally results[].document.text (when
    return_documents=true), plus a top-level usage.total_tokens counter.
    ÚreturnNc                  ó   — y ©N© )Úselfs    úq/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/dashscope/rerank/transformation.pyÚ__init__zDashScopeRerankConfig.__init__:   s   € Øó    Úapi_baseÚmodelÚoptional_paramsc                 óê   — |€t        d«      xs t        }|t        k(  rt        S |j                  d«      }|j                  d«      s|j                  d«      r|S |j                  d«      r|› d�S |› d�S )NÚDASHSCOPE_API_BASE_RERANKú/z/reranksz/rerankz/v1)r
   r   ÚrstripÚendswith)r   r   r   r   Úcleaneds        r   Úget_complete_urlz&DashScopeRerankConfig.get_complete_url=   s‚   € ð ÐÜ%Ð&AÓBÒXÔFXˆHàÔ)Ò)Ü%Ð%à!Ÿ™¨Ó-ˆØ×Ñ˜JÔ'¨7×+;Ñ+;¸IÔ+FØˆNà×Ñ˜EÔ"Ø�Y˜hÐ'Ð'ð �˜(Ð#Ð#r   ÚheadersÚapi_keyÚlitellm_paramsc                 óT   — |€t        d«      }|€t        d«      ‚d|› �dddœ}i |¥|¥S )NÚDASHSCOPE_API_KEYzZDashScope API key is required. Set 'DASHSCOPE_API_KEY' env var or pass api_key explicitly.zBearer zapplication/json)ÚAuthorizationÚacceptzcontent-type)r
   Ú
ValueError)r   r'   r   r(   r   r)   Údefault_headerss          r   Úvalidate_environmentz*DashScopeRerankConfig.validate_environmentS   sT   € ð ˆ?Ü$Ð%8Ó9ˆGØˆ?ÜØlóð ð
  ' w iÐ0Ø(Ø.ñ"
ˆð
 .�/Ð- WÐ-Ð-r   c                 ó
   — g d¢S )N)ÚqueryÚ	documentsÚtop_nÚreturn_documentsr   )r   r   s     r   Ú"get_supported_cohere_rerank_paramsz8DashScopeRerankConfig.get_supported_cohere_rerank_paramsi   s   € ÚBÐBr   Únon_default_paramsÚdrop_paramsr2   r3   Úcustom_llm_providerr4   Úrank_fieldsr5   Úmax_chunks_per_docÚmax_tokens_per_docÚinstructionc                 óN   — t        ||¬«      }|�||d<   |	�|	|d<   t        |«      S )N)r2   r3   r4   r5   )r   Údict)r   r7   r   r8   r2   r3   r9   r4   r:   r5   r;   r<   r=   Úparamss                 r   Úmap_cohere_rerank_paramsz.DashScopeRerankConfig.map_cohere_rerank_paramsl   sA   € ô" /CØØô/
ˆð ÐØ#ˆF�7‰OØÐ'Ø)9ˆFÐ%Ñ&Ü�F‹|Ðr   Úoptional_rerank_paramsc                 ó¾   — d|vrt        d«      ‚d|vrt        d«      ‚||d   |d   dœ}|j                  d«      �|d   |d<   |j                  d«      �|d   |d<   |S )Nr2   z&query is required for DashScope rerankr3   z*documents is required for DashScope rerank)r   r2   r3   r4   r5   )r.   Úget)r   r   rB   r'   r)   Úrequests         r   Útransform_rerank_requestz.DashScopeRerankConfig.transform_rerank_request‡   s”   € ð Ð0Ñ0ÜÐEÓFÐFØÐ4Ñ4ÜÐIÓJÐJð Ø+¨GÑ4Ø/°Ñ<ñ*
ˆð
 "×%Ñ% gÓ.Ð:Ø5°gÑ>ˆG�GÑØ!×%Ñ%Ð&8Ó9ÐEØ*@ÐASÑ*TˆGÐ&Ñ'Øˆr   Úraw_responseÚmodel_responseÚlogging_objÚrequest_datac	           	      óŽ  — |xs i }|xs i }|xs i }	 |j                  «       }	|j                  |j                  d«      |d|i|	¬«       d|	v r4d|	vr0t        |j                  |	j                  dt        |	«      «      ¬«      ‚|	j                  d«      }
|
€t        |j                  d|	› �¬«      ‚g }|
D ]\  }|d	   |d
   dœ}|j                  d«      }t        |t        «      r||d<   nt        |t        «      rd|i|d<   |j                  |«       Œ^ |	j                  d«      xs i }|j                  d«      }t        |¬«      }t        |¬«      }t        ||¬«      }t        |	j                  d«      xs t        t        j                   «       «      ||¬«      S # t        $ r" t        |j                  |j                  ¬«      ‚w xY w)N)Ústatus_codeÚmessager2   Úcomplete_input_dict)Úinputr(   Úadditional_argsÚoriginal_responseÚcodeÚresultsrM   z)No results in DashScope rerank response: ÚindexÚrelevance_score)rT   rU   ÚdocumentÚtextÚusageÚtotal_tokens)rY   )Úinput_tokens)Úbilled_unitsÚtokensÚid)r]   rS   Úmeta)ÚjsonÚ	Exceptionr   rL   rW   Ú	post_callrD   ÚstrÚ
isinstancer?   Úappendr   r   r   r   r   Úuuid4)r   r   rG   rH   rI   r(   rJ   r   r)   Úresponse_jsonrS   Útransformed_resultsÚrÚitemÚdocrX   rY   r[   r\   r^   s                       r   Útransform_rerank_responsez/DashScopeRerankConfig.transform_rerank_responsež   sø  € ð $Ò) rˆØ)Ò/¨RˆØ'Ò-¨2ˆð	Ø#/×#4Ñ#4Ó#6ˆMð 	×ÑØ×"Ñ" 7Ó+ØØ2°LÐAØ+ð	 	ô 	
ð �]Ñ" y¸Ñ'EÜ Ø(×4Ñ4Ø%×)Ñ)¨)´S¸Ó5GÓHôð ð
 '×*Ñ*¨9Ó5ˆØˆ?Ü Ø(×4Ñ4ØCÀMÀ?ÐSôð ð 24ÐØò 	-ˆAà˜7™Ø#$Ð%6Ñ#7ñ$ˆDð —%‘%˜
Ó#ˆCÜ˜#œtÔ$Ø#&��ZÒ Ü˜C¤Ô%à$*¨C =��ZÑ Ø×&Ñ& tÕ,ð	-ð %×(Ñ(¨Ó1Ò7°RˆØ#Ÿi™i¨Ó7ˆÜ/¸\ÔJˆÜ$°,Ô?ˆÜ(°lÈ6ÔRˆäØ× Ñ  Ó&Ò;¬#¬d¯j©j«lÓ*;Ø'Øô
ð 	
øôi ò 	Ü Ø(×4Ñ4Ø$×)Ñ)ôð ð	ús   ”F Æ+GÚerror_messagerL   c                 óh   — t        |t        «      rt        j                  |«      }t	        |||¬«      S )N)rL   rM   r'   )rc   r?   ÚhttpxÚHeadersr   )r   rl   rL   r'   s       r   Úget_error_classz%DashScopeRerankConfig.get_error_classè   s2   € ô �gœtÔ$Ü—m‘m GÓ,ˆGÜØ#Ø!Øô
ð 	
r   )r   Nr   )NNN)NNNTNNN)NNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rb   r?   r&   r   Úobjectr0   Úlistr6   Úboolr   ÚintrA   rF   rn   ÚResponser   ÚLiteLLMLoggingObjrk   ro   r   rp   r   r   r   r   r   0   sŠ  „ ñóð (,ñ	$à˜‘*ð$ð ð$ð  ™ð	$ð
 
ó$ð4 #Ø'+Ø6:ñ.àð.ð ð.ð �t‘ð	.ð
  ™ð.ð    V Ñ,¨tÑ3ð.ð 
ó.ð,C¸ð CÀó Cð +/Ø Ø(,Ø(,Ø)-Ø)-Ø"&ñà  4™Kðð ðð ð	ð
 ðð ˜˜d 3¨ 8™nÑ,Ñ-ðð ! 4™Zðð �T‰zðð ˜#‘Y Ñ%ðð  ™+ðð   $™Jðð   $™Jðð ˜4‘Zðð 
óð@ '+ñàðð !%ðð ð	ð
 ˜t™ðð 
óð: #Ø$(Ø'+Ø&*ñH
àðH
ð —n‘nðH
ð 'ð	H
ð
 'ðH
ð �t‘ðH
ð ˜T‘kðH
ð  ™ðH
ð ˜t™ðH
ð 
óH
ðT
àð
ð ð
ð ˜Ÿ™Ñ%ð	
ð
 
ô
r   r   )rt   Úcollections.abcr   Útypingr   r   rn   Úlitellm._uuidr   Ú*litellm.litellm_core_utils.litellm_loggingr   rz   Ú)litellm.llms.base_llm.chat.transformationr   Ú+litellm.llms.base_llm.rerank.transformationr	   Úlitellm.secret_managers.mainr
   Úlitellm.types.rerankr   r   r   r   r   Úcommon_utilsr   r   Ú__annotations__r   r   r   r   ú<module>r…      sM   ðòõ0 $ß ã å Ý SÝ FÝ HÝ 7÷õ õ *àVÐ �EÓ VôD
Ð,õ D
r   