Ë
    uPêjq  ã                   ó    — d Z ddlmZmZ ddlmZ ddlZddlmZ ddl	m
Z
m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  G d„ dee«      Zy)zž
Translates from OpenAI's `/v1/audio/transcriptions` to IBM WatsonX's `/ml/v1/audio/transcriptions`

WatsonX follows the OpenAI spec for audio transcription.
é    )ÚAnyÚFinal)ÚResponseN)Úprocess_audio_file)ÚAllMessageValuesÚ&OpenAIAudioTranscriptionOptionalParams)Ú$WatsonXAudioTranscriptionRequestBody)Ú	FileTypesÚTranscriptionResponseé   )ÚAudioTranscriptionRequestData)Ú%OpenAIWhisperAudioTranscriptionConfigé   )ÚIBMWatsonXMixinc                   óÌ   — e Zd Z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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ed
efd„Zy)Ú"IBMWatsonXAudioTranscriptionConfigzú
    IBM WatsonX Audio Transcription Config

    WatsonX follows the OpenAI spec for audio transcription, so this class
    inherits from OpenAIWhisperAudioTranscriptionConfig and uses IBMWatsonXMixin
    for authentication and URL construction.
    NÚheadersÚmodelÚmessagesÚoptional_paramsÚlitellm_paramsÚapi_keyÚapi_baseÚreturnc           
      ód   — t        j                  | |||||||¬«      }|j                  dd«       |S )z˜
        Validate environment for audio transcription.

        Removes Content-Type header so httpx can set multipart/form-data automatically.
        )r   r   r   r   r   r   r   zContent-TypeN)r   Úvalidate_environmentÚpop)	Úselfr   r   r   r   r   r   r   Úresults	            ú|/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/watsonx/audio_transcription/transformation.pyr   z7IBMWatsonXAudioTranscriptionConfig.validate_environment&   sA   € ô (×<Ñ<ØØØØØ+Ø)ØØô	
ˆð 	�
‰
�> 4Ô(Øˆó    c                 ó
   — g d¢S )zR
        Get the supported OpenAI params for WatsonX audio transcription.
        )ÚlanguageÚpromptÚresponse_formatÚtemperatureÚtimestamp_granularities© )r   r   s     r    Úget_supported_openai_paramsz>IBMWatsonXAudioTranscriptionConfig.get_supported_openai_paramsC   s   € ò
ð 	
r!   Ú
audio_filec                 óŽ  — t        |«      }|j                  d«      xs |j                  d«      }|j                  d«      }d|i}|r||d<   n|r||d<   | j                  |«      }	|j                  «       D ]  \  }
}|
|	v sŒ|€Œ|||
<   Œ d|j                  |j
                  |j                  fi}t        |«      }t        ||¬«      S )a|  
        Transform the audio transcription request for WatsonX.

        WatsonX expects multipart/form-data with:
        - file: the audio file
        - model: the model name (without watsonx/ prefix)
        - project_id: the project ID (as form field, not query param)
        - space_id: the space ID (as form field, not query param)
        - other optional params
        Ú
project_idÚwatsonx_projectÚspace_idr   Úfile)ÚdataÚfiles)	r   Úgetr)   ÚitemsÚfilenameÚfile_contentÚcontent_typeÚdictr   )r   r   r*   r   r   Úprocessed_audior,   r.   Ú	form_dataÚsupported_paramsÚkeyÚvaluer1   Úform_data_dicts                 r    Ú%transform_audio_transcription_requestzHIBMWatsonXAudioTranscriptionConfig.transform_audio_transcription_requestO   só   € ô$ "4°JÓ!?ˆØ+×/Ñ/°Ó=ÒgÀ×ATÑATÐUfÓAgˆ
Ø)×-Ñ-¨jÓ9ˆð CJÈ5ÐAQˆ	ñ Ø&0ˆI�lÒ#ÙØ$,ˆI�jÑ!ð #'×"BÑ"BÀ5Ó"IÐØ)×/Ñ/Ó1ò 	'‰JˆC�ØÐ&Ò&¨5Ñ+<Ø!&�	˜#’ð	'ð Ø×(Ñ(Ø×,Ñ,Ø×,Ñ,ðð
ˆô 15°Y³ˆä,°.ÈÔNÐNr!   Ústreamc                 ó¬   — | j                  |¬«      }|j                  d«      }|› d�}|j                  dd«      xs t        j                  }|› d|› �}|S )zï
        Construct the complete URL for WatsonX audio transcription.

        URL format: {api_base}/ml/v1/audio/transcriptions?version={version}

        Note: project_id or space_id is sent as form data, not as a query parameter
        )r   ú/z/ml/v1/audio/transcriptionsÚapi_versionNz	?version=)Ú_get_base_urlÚrstripr2   ÚlitellmÚWATSONX_DEFAULT_API_VERSION)	r   r   r   r   r   r   r?   ÚurlrB   s	            r    Úget_complete_urlz3IBMWatsonXAudioTranscriptionConfig.get_complete_urlƒ   sg   € ð" × Ñ ¨(Ð Ó3ˆØ�j‰j˜‹oˆð �Ð0Ð1ˆð -×0Ñ0°ÀÓEÒlÌ×IlÑIlˆØ��Y˜{˜mÐ,ˆàˆ
r!   Úraw_responsec                 óZ  — 	 |j                  «       }|j	                  d«      }|j	                  d«      }i }|�||d<   |�||d<   |st        d|«      ‚t        di |¤Ž}|j                  «       D ]  \  }}	|dvsŒ|	||<   Œ |S # t        $ r }t        d|› d|j                  › �«      ‚d}~ww xY w)	zÜ
        Transform the audio transcription response from WatsonX.

        WatsonX may include a 'model' field in the response, which needs to be
        removed before creating the TranscriptionResponse object.
        z%Error transforming response to json: z
Response: NÚtextÚusagezTInvalid response format. Received response does not match the expected format. Got: )rK   rL   r   r(   )ÚjsonÚ	ExceptionÚ
ValueErrorrK   r2   r   r3   )
r   rI   Úraw_response_jsonÚerK   rL   Úresponse_kwargsÚresponser;   r<   s
             r    Ú&transform_audio_transcription_responsezIIBMWatsonXAudioTranscriptionConfig.transform_audio_transcription_response    sø   € ð	iØ'3×'8Ñ'8Ó':Ðð (×+Ñ+¨FÓ3ˆØ(×,Ñ,¨WÓ5ˆð "$ˆØÐØ&*ˆO˜FÑ#ØÐØ',ˆO˜GÑ$áÜØfØ!óð ô
 0ÑB°/ÑBˆð ,×1Ñ1Ó3ò 	&‰JˆC�Øð ò ð
 !&�˜’ð	&ð ˆøôC ò 	iÜÐDÀQÀCÀ|ÐT`×TeÑTeÐSfÐgÓhÐhûð	iús   ‚B Â	B*Â
B%Â%B*)NN)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r7   ÚstrÚlistr   r   r   r)   r
   r   r>   ÚboolrH   r   r   rT   r(   r!   r    r   r      s6  „ ñð #Ø#ñàðð ðð Ð'Ñ(ð	ð
 ðð ðð �t‘ðð ˜‘*ðð 
óð:

°ð 

¸Ð>dÑ9eó 

ð2Oàð2Oð ð2Oð ð	2Oð
 ð2Oð 
'ó2Oðv #ñà˜‘*ðð �t‘ðð ð	ð
 ðð ðð �t‘ðð 
óð:-àð-ð 
ô-r!   r   )rX   Útypingr   r   Úhttpxr   rE   Ú,litellm.litellm_core_utils.audio_utils.utilsr   Úlitellm.types.llms.openair   r   Úlitellm.types.llms.watsonxr	   Úlitellm.types.utilsr
   r   Ú+base_llm.audio_transcription.transformationr   Ú,openai.transcriptions.whisper_transformationr   Úcommon_utilsr   r   r(   r!   r    ú<module>re      sF   ðñ÷ å ã Ý K÷õ Lß @õõõ +ôp¨Ð:_õ pr!   