Ë
    uPêj9  ã                   óÔ   — U d Z ddl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mZ ddlmZmZ erddlZddlmZ eZneZd	Zeed
<   dZeed<   dddddddœZee   ed<    G d„ de«      Zy)aŒ  
DashScope Image Generation Configuration

Handles transformation between OpenAI-compatible format and DashScope multimodal-generation API.

API endpoint: POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

Request format:
{
    "model": "qwen-image-2.0-pro",
    "input": {
        "messages": [{"role": "user", "content": [{"text": "<prompt>"}]}]
    },
    "parameters": {"size": "1024*1024", "n": 1, ...}
}

Response format:
{
    "output": {
        "choices": [{"message": {"content": [{"image": "<url>"}]}}]
    },
    "usage": {"output_width": 1024, "output_height": 1024, "output_image_count": 1}
}
é    )ÚTYPE_CHECKINGÚAnyÚFinalN)ÚBaseImageGenerationConfig)Úget_secret_str)ÚAllMessageValuesÚ#OpenAIImageGenerationOptionalParams)ÚImageObjectÚImageResponse)ÚLoggingzYhttps://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generationÚDEFAULT_API_BASEz/compatible-mode/v1ÚCHAT_COMPATIBLE_MODE_PATHz256*256z512*512z	1024*1024z	1792*1024z	1024*1792z	2048*2048)Ú256x256Ú512x512Ú	1024x1024Ú	1792x1024Ú	1024x1792Ú	2048x2048ÚOPENAI_TO_DASHSCOPE_SIZEc                   ó6  — e Zd ZdZdedee   fd„Zdededede	def
d„Z
	 dd
ed	z  ded	z  dededede	d	z  defd„Z	 	 ddededee   dededed	z  d
ed	z  defd„Zdedededededefd„Z	 	 ddedej                   dedededededdded	z  de	d	z  defd„Zy	)ÚDashScopeImageGenerationConfigz„
    Configuration for DashScope image generation (qwen-image-2.0, qwen-image-2.0-pro,
    qwen-image-3.0, qwen-image-3.0-pro).
    ÚmodelÚreturnc                 ó
   — ddgS )NÚnÚsize© )Úselfr   s     ú{/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/dashscope/image_generation/transformation.pyÚget_supported_openai_paramsz:DashScopeImageGenerationConfig.get_supported_openai_paramsF   s   € Ø�Vˆ}Ðó    Únon_default_paramsÚoptional_paramsÚdrop_paramsc                 óØ   — | j                  |«      }i }|j                  «       D ]C  \  }}||v rŒ||vrŒ|dk(  r*t        j                  ||j	                  dd«      «      |d<   Œ?|||<   ŒE |S )Nr   ÚxÚ*)r    Úitemsr   ÚgetÚreplace)	r   r"   r#   r   r$   Úsupported_paramsÚmappedÚkÚvs	            r   Úmap_openai_paramsz0DashScopeImageGenerationConfig.map_openai_paramsI   s†   € ð #'×"BÑ"BÀ5Ó"IÐØ ˆØ&×,Ñ,Ó.ò 		‰DˆAˆqØ�OÑ#ØØÐ(Ñ(ØØ�FŠ{ä!9×!=Ñ!=¸aÀÇÁÈ3ÐPSÓATÓ!U��v’à��q’	ð		ð ˆr!   NÚapi_baseÚapi_keyÚlitellm_paramsÚstreamc                 ó„   — |r&|j                  d«      j                  t        «      s|nd }|xs t        d«      xs t        S )Nú/ÚDASHSCOPE_API_BASE_IMAGE)ÚrstripÚendswithr   r   r   )r   r0   r1   r   r#   r2   r3   Úimage_api_bases           r   Úget_complete_urlz/DashScopeImageGenerationConfig.get_complete_url^   sA   € ñ !¨¯©¸Ó)=×)FÑ)FÔG`Ô)a‰HÐgkð 	ð Ò_¤Ð0JÓ!KÒ_ÔO_Ð_r!   ÚheadersÚmessagesc                 óX   — |xs t        d«      }|st        d«      ‚d|› �|d<   d|d<   |S )NÚDASHSCOPE_API_KEYzDASHSCOPE_API_KEY is not setzBearer ÚAuthorizationzapplication/jsonzContent-Type)r   Ú
ValueError)	r   r;   r   r<   r#   r2   r1   r0   Úfinal_api_keys	            r   Úvalidate_environmentz3DashScopeImageGenerationConfig.validate_environmentl   sC   € ð  'ÒM¬.Ð9LÓ*MˆÙÜÐ;Ó<Ð<Ø%,¨]¨OÐ#<ˆ�Ñ Ø"4ˆ�ÑØˆr!   Úpromptc                 ó^   — i }|j                  «       D ]
  \  }}|||<   Œ |ddd|igdœgi|dœS )zl
        Transform OpenAI-style image generation request to DashScope multimodal-generation format.
        r<   ÚuserÚtext)ÚroleÚcontent)r   ÚinputÚ
parameters)r(   )	r   r   rC   r#   r2   r;   rJ   r-   r.   s	            r   Ú"transform_image_generation_requestzADashScopeImageGenerationConfig.transform_image_generation_request}   sb   € ð #%ˆ
Ø#×)Ñ)Ó+ò 	‰DˆAˆqØˆJ�qŠMð	ð àà &Ø%+¨VÐ$4Ð#5ñððð %ñ
ð 	
r!   Úraw_responseÚmodel_responseÚlogging_objÚrequest_dataÚencodingztiktoken.Encoding | NoneÚ	json_modec                 óð  — |j                   dk7  r2| j                  |j                  |j                   |j                  ¬«      ‚	 |j	                  «       }d|v rEd|vrA| j                  t        |j                  d|«      «      |j                   |j                  ¬«      ‚|j                  sg |_        |j                  di «      j                  dg «      }|D ]d  }|j                  di «      j                  d	g «      }|D ];  }|j                  d
«      }|sŒ|j                  j                  t        |¬«      «       Œ= Œf |S # t
        $ r0}| j                  d|› �|j                   |j                  ¬«      ‚d}~ww xY w)z¸
        Transform DashScope response to litellm ImageResponse.

        DashScope response: output.choices[0].message.content[0].image
        OpenAI response:    data[0].url
        éÈ   )Úerror_messageÚstatus_coder;   z5Failed to parse DashScope image generation response: NÚcodeÚoutputÚmessageÚchoicesrH   Úimage)Úurl)rU   Úget_error_classrF   r;   ÚjsonÚ	ExceptionÚstrr)   ÚdataÚappendr
   )r   r   rL   rM   rN   rO   r#   r2   rP   r1   rQ   Úresponse_dataÚerY   ÚchoiceÚcontent_listÚcontent_itemÚ	image_urls                     r   Ú#transform_image_generation_responsezBDashScopeImageGenerationConfig.transform_image_generation_response™   s•  € ð& ×#Ñ# sÒ*Ø×&Ñ&Ø*×/Ñ/Ø(×4Ñ4Ø$×,Ñ,ð 'ó ð ð	Ø#/×#4Ñ#4Ó#6ˆMð �]Ñ" x°}Ñ'DØ×&Ñ&Ü! -×"3Ñ"3°I¸}Ó"MÓNØ(×4Ñ4Ø$×,Ñ,ð 'ó ð ð ×"Ò"Ø"$ˆNÔà&×*Ñ*¨8°RÓ8×<Ñ<¸YÈÓKˆØò 	KˆFØ!Ÿ:™: i°Ó4×8Ñ8¸ÀBÓGˆLØ ,ò K�Ø(×,Ñ,¨WÓ5�	ÚØ"×'Ñ'×.Ñ.¬{¸yÔ/IÕJñKð	Kð Ðøô7 ò 	Ø×&Ñ&Ø UÐVWÐUXÐYØ(×4Ñ4Ø$×,Ñ,ð 'ó ð ûð	ús   ÁD< Ä<	E5Å+E0Å0E5)N)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r_   Úlistr	   r    ÚdictÚboolr/   r:   r   rB   rK   ÚhttpxÚResponser   ÚLiteLLMLoggingObjrh   r   r!   r   r   r   @   så  „ ñð
°ð ¸Ð>aÑ9bó ðà ðð ðð ð	ð
 ðð 
óð8 #ñ`à˜‘*ð`ð �t‘ð`ð ð	`ð
 ð`ð ð`ð �t‘ð`ð 
ó`ð* #Ø#ñàðð ðð Ð'Ñ(ð	ð
 ðð ðð �t‘ðð ˜‘*ðð 
óð"
àð
ð ð
ð ð	
ð
 ð
ð ð
ð 
ó
ðL #Ø!%ñ7àð7ð —n‘nð7ð &ð	7ð
 'ð7ð ð7ð ð7ð ð7ð -ð7ð �t‘ð7ð ˜$‘;ð7ð 
ô7r!   r   )rl   Útypingr   r   r   rp   Ú5litellm.llms.base_llm.image_generation.transformationr   Úlitellm.secret_managers.mainr   Úlitellm.types.llms.openair   r	   Úlitellm.types.utilsr
   r   ÚtiktokenÚ*litellm.litellm_core_utils.litellm_loggingr   Ú_LiteLLMLoggingObjrr   r   Ú__annotations__r   r   rn   r   r   r!   r   ú<module>r|      sŠ   ðò÷2 -Ñ ,ã õõ 8÷÷ ;áÛåXà*ÑàÐàuÐ �%Ó uà#8Ð ˜5Ó 8ð ØØØØØñ)Ð ˜% ™+ó ôPÐ%>õ Pr!   