Ë
    uPêj  ã                   ó    — d 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mZ dd	lmZmZ er	dd
lmZ eZneZ G d„ de
«      Zy)zÅ
ModelScope Image Generation Config

Handles transformation between OpenAI-compatible format and ModelScope API format.

API Reference: https://modelscope.cn/docs/model-service/API-Inference/intro
é    )ÚTYPE_CHECKINGÚFinalN)Úoverride)ÚBaseLLMException)ÚBaseImageGenerationConfig)Úget_secret_str)ÚAllMessageValuesÚ#OpenAIImageGenerationOptionalParams)ÚImageObjectÚImageResponse)ÚLoggingc                   ó–  — e Zd ZU dZdZeed<   dedee   fd„Z	de
de
ded	ede
f
d
„Ze	 d dedz  dedz  dede
de
dedz  defd„«       Ze	 	 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e	 	 d!dedej&                  dedede
de
de
dededz  dedz  defd„«       Zdedede
ej2                  z  defd„Zy)"ÚModelScopeImageGenerationConfigz¶
    Configuration for ModelScope image generation.

    Supports text-to-image models like:
    - Qwen/Qwen-Image-Edit
    - And other ModelScope-hosted image generation models
    z&https://api-inference.modelscope.cn/v1ÚDEFAULT_BASE_URLÚmodelÚreturnc                 ó
   — g d¢S )z‘
        Return list of OpenAI params supported by ModelScope.

        ModelScope supports standard OpenAI image generation parameters.
        )ÚnÚsizeÚresponse_formatÚuser© )Úselfr   s     ú|/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/modelscope/image_generation/transformation.pyÚget_supported_openai_paramsz;ModelScopeImageGenerationConfig.get_supported_openai_params,   s   € ò
ð 	
ó    Únon_default_paramsÚoptional_paramsÚdrop_paramsc                 óª   — | j                  |«      }|r(|j                  «       D ��ci c]  \  }}||v sŒ||“Œ }}}|j                  |«       |S c c}}w )z~
        Map OpenAI parameters to ModelScope parameters.

        ModelScope uses the same parameter names as OpenAI.
        )r   ÚitemsÚupdate)r   r   r   r   r   Úsupported_paramsÚkÚvs           r   Úmap_openai_paramsz1ModelScopeImageGenerationConfig.map_openai_params9   sa   € ð #'×"BÑ"BÀ5Ó"IÐÙØ3E×3KÑ3KÓ3M×!g©4¨1¨aÐQRÐVfÒQf ! Q¡$Ð!gÐÑ!gØ×ÑÐ1Ô2ØÐùó "hs
   §A´ANÚapi_baseÚapi_keyÚlitellm_paramsÚstreamc                 óh   — |xs t        d«      xs | j                  }|j                  d«      }|› d�S )zW
        Get the complete URL for the ModelScope image generation API request.
        ÚMODELSCOPE_API_BASEú/z/images/generations)r   r   Úrstrip)r   r'   r(   r   r   r)   r*   Úbase_urls           r   Úget_complete_urlz0ModelScopeImageGenerationConfig.get_complete_urlK   s=   € ð !Òb¤NÐ3HÓ$IÒbÈT×MbÑMbˆØ—?‘? 3Ó'ˆð �Ð.Ð/Ð/r   ÚheadersÚmessagesc                 óZ   — |xs t        d«      }|st        d«      ‚dd|› �dœ}	i |¥|	¥}|S )zI
        Validate environment and set up headers for ModelScope.
        ÚMODELSCOPE_API_KEYz`MODELSCOPE_API_KEY is not set. Please set it via environment variable or pass api_key parameter.zapplication/jsonzBearer )zContent-TypeÚAuthorization)r   Ú
ValueError)
r   r1   r   r2   r   r)   r(   r'   Úfinal_api_keyÚdefault_headerss
             r   Úvalidate_environmentz4ModelScopeImageGenerationConfig.validate_environment^   sS   € ð ,3Ò+Z´nÐEYÓ6ZˆáÜØróð ð
 /Ø& } oÐ6ñ"
ˆð
 1�WÐ0 Ð0ˆØˆr   Úpromptc                 ón   — ||dœ}|j                  «       D ]  \  }}|j                  d«      rŒ|||<   Œ |S )z—
        Transform OpenAI-style request to ModelScope request format.

        ModelScope uses the same format as OpenAI for image generation.
        )r   r:   Ú_)r!   Ú
startswith)	r   r   r:   r   r)   r1   Úrequest_dataÚkeyÚvalues	            r   Ú"transform_image_generation_requestzBModelScopeImageGenerationConfig.transform_image_generation_request{   sP   € ð Øñ%
ˆð *×/Ñ/Ó1ò 	&‰JˆC�Ø�~‰~˜cÔ"ØØ %ˆL˜Òð	&ð
 Ðr   Úraw_responseÚmodel_responseÚlogging_objr>   ÚencodingÚ	json_modec                 óD  — 	 |j                  «       }d|v rL|d   j                  dt        |d   «      «      }| j                  d|› �|j                  |j                  ¬«      ‚|j                  dg «      }|j                  sg |_        |D ]X  }t        |j                  d«      |j                  d	«      |j                  d
«      ¬«      }|j                  j                  |«       ŒZ |S # t        $ r0}| j                  d|› �|j                  |j                  ¬«      ‚d}~ww xY w)zÃ
        Transform ModelScope response to OpenAI-compatible ImageResponse.

        ModelScope returns the same format as OpenAI:
        {"created": timestamp, "data": [{"url": "..."}]}
        z#Error parsing ModelScope response: )Úerror_messageÚstatus_coder1   NÚerrorÚmessagezModelScope error: ÚdataÚurlÚb64_jsonÚrevised_prompt)rM   rN   rO   )
ÚjsonÚ	ExceptionÚget_error_classrI   r1   ÚgetÚstrrL   r   Úappend)r   r   rB   rC   rD   r>   r   r)   rE   r(   rF   Úresponse_dataÚeÚ	error_msgÚ	data_listÚitemÚ	image_objs                    r   Ú#transform_image_generation_responsezCModelScopeImageGenerationConfig.transform_image_generation_response–   s;  € ð(	Ø#/×#4Ñ#4Ó#6ˆMð �mÑ#Ø,¨WÑ5×9Ñ9¸)ÄSÈÐW^ÑI_ÓE`ÓaˆIØ×&Ñ&Ø 2°9°+Ð>Ø(×4Ñ4Ø$×,Ñ,ð 'ó ð ð )×,Ñ,¨V°RÓ8ˆ	Ø×"Ò"Ø"$ˆNÔàò 	2ˆDÜ#Ø—H‘H˜U“OØŸ™ *Ó-Ø#Ÿx™xÐ(8Ó9ôˆIð
 ×Ñ×&Ñ& yÕ1ð	2ð Ðøô; ò 	Ø×&Ñ&Ø CÀAÀ3ÐGØ(×4Ñ4Ø$×,Ñ,ð 'ó ð ûð	ús   ‚C& Ã&	DÃ/+DÄDrH   rI   c                 óŒ   — ddl m}m}m} |dk(  r ||dd¬«      S |dk(  r ||dd¬«      S |dk\  r ||dd¬«      S  ||dd¬«      S )	z2Return the appropriate error class for ModelScope.r   )ÚAuthenticationErrorÚBadRequestErrorÚInternalServerErrori�  Ú Ú
modelscope)rK   r   Úllm_provideri‘  iô  )Úlitellm.exceptionsr^   r_   r`   )r   rH   rI   r1   r^   r_   r`   s          r   rR   z/ModelScopeImageGenerationConfig.get_error_classË   s„   € ÷	
ñ 	
ð ˜#ÒÙ"Ø%ØØ)ôð ð
 ˜CÒÙ&Ø%ØØ)ôð ð
 ˜CÒÙ&Ø%ØØ)ôð ñ #Ø%ØØ)ôð r   )N)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rT   Ú__annotations__Úlistr
   r   ÚdictÚboolr&   r   r0   r	   r9   rA   ÚhttpxÚResponser   ÚLiteLLMLoggingObjÚobjectr\   ÚintÚHeadersr   rR   r   r   r   r   r   !   sL  … ñð EÐ�cÓDð
°ð 
¸Ð>aÑ9bó 
ðà ðð ðð ð	ð
 ðð 
óð$ ð #ñ0à˜‘*ð0ð �t‘ð0ð ð	0ð
 ð0ð ð0ð �t‘ð0ð 
ò0ó ð0ð$ ð #Ø#ñàðð ðð Ð'Ñ(ð	ð
 ðð ðð �t‘ðð ˜‘*ðð 
òó ðð8àðð ðð ð	ð
 ðð ðð 
óð6 ð #Ø!%ñ2àð2ð —n‘nð2ð &ð	2ð
 'ð2ð ð2ð ð2ð ð2ð ð2ð �t‘ð2ð ˜$‘;ð2ð 
ò2ó ð2ðh$àð$ð ð$ð ˜Ÿ™Ñ%ð	$ð
 
ô$r   r   )rh   Útypingr   r   rm   Útyping_extensionsr   Ú)litellm.llms.base_llm.chat.transformationr   Ú5litellm.llms.base_llm.image_generation.transformationr   Úlitellm.secret_managers.mainr   Úlitellm.types.llms.openair	   r
   Úlitellm.types.utilsr   r   Ú*litellm.litellm_core_utils.litellm_loggingr   Ú_LiteLLMLoggingObjro   rp   r   r   r   r   ú<module>r|      sM   ðñ÷ (ã Ý &å Fõõ 8÷÷ ;áÝXà*ÑàÐôNÐ&?õ Nr   