@@ -982,28 +982,22 @@ async def arerank(
982
982
request_data = request_data ,
983
983
)
984
984
985
- def audio_transcriptions (
985
+ def _prepare_audio_transcription_request (
986
986
self ,
987
987
model : str ,
988
988
audio_file : FileTypes ,
989
989
optional_params : dict ,
990
990
litellm_params : dict ,
991
- model_response : TranscriptionResponse ,
992
- timeout : float ,
993
- max_retries : int ,
994
991
logging_obj : LiteLLMLoggingObj ,
995
992
api_key : Optional [str ],
996
993
api_base : Optional [str ],
997
- custom_llm_provider : str ,
998
- client : Optional [Union [HTTPHandler , AsyncHTTPHandler ]] = None ,
999
- atranscription : bool = False ,
1000
- headers : Optional [Dict [str , Any ]] = None ,
1001
- provider_config : Optional [BaseAudioTranscriptionConfig ] = None ,
1002
- ) -> TranscriptionResponse :
1003
- if provider_config is None :
1004
- raise ValueError (
1005
- f"No provider config found for model: { model } and provider: { custom_llm_provider } "
1006
- )
994
+ headers : Optional [Dict [str , Any ]],
995
+ provider_config : BaseAudioTranscriptionConfig ,
996
+ ) -> Tuple [dict , str , Optional [bytes ], Optional [dict ]]:
997
+ """
998
+ Shared logic for preparing audio transcription requests.
999
+ Returns: (headers, complete_url, binary_data, json_data)
1000
+ """
1007
1001
headers = provider_config .validate_environment (
1008
1002
api_key = api_key ,
1009
1003
headers = headers or {},
@@ -1013,9 +1007,6 @@ def audio_transcriptions(
1013
1007
litellm_params = litellm_params ,
1014
1008
)
1015
1009
1016
- if client is None or not isinstance (client , HTTPHandler ):
1017
- client = _get_httpx_client ()
1018
-
1019
1010
complete_url = provider_config .get_complete_url (
1020
1011
api_base = api_base ,
1021
1012
api_key = api_key ,
@@ -1049,6 +1040,91 @@ def audio_transcriptions(
1049
1040
},
1050
1041
)
1051
1042
1043
+ return headers , complete_url , binary_data , json_data
1044
+
1045
+ def _transform_audio_transcription_response (
1046
+ self ,
1047
+ provider_config : BaseAudioTranscriptionConfig ,
1048
+ model : str ,
1049
+ response : httpx .Response ,
1050
+ model_response : TranscriptionResponse ,
1051
+ logging_obj : LiteLLMLoggingObj ,
1052
+ optional_params : dict ,
1053
+ api_key : Optional [str ],
1054
+ ) -> TranscriptionResponse :
1055
+ """Shared logic for transforming audio transcription responses."""
1056
+ if isinstance (provider_config , litellm .DeepgramAudioTranscriptionConfig ):
1057
+ return provider_config .transform_audio_transcription_response (
1058
+ model = model ,
1059
+ raw_response = response ,
1060
+ model_response = model_response ,
1061
+ logging_obj = logging_obj ,
1062
+ request_data = {},
1063
+ optional_params = optional_params ,
1064
+ litellm_params = {},
1065
+ api_key = api_key ,
1066
+ )
1067
+ return model_response
1068
+
1069
+ def audio_transcriptions (
1070
+ self ,
1071
+ model : str ,
1072
+ audio_file : FileTypes ,
1073
+ optional_params : dict ,
1074
+ litellm_params : dict ,
1075
+ model_response : TranscriptionResponse ,
1076
+ timeout : float ,
1077
+ max_retries : int ,
1078
+ logging_obj : LiteLLMLoggingObj ,
1079
+ api_key : Optional [str ],
1080
+ api_base : Optional [str ],
1081
+ custom_llm_provider : str ,
1082
+ client : Optional [Union [HTTPHandler , AsyncHTTPHandler ]] = None ,
1083
+ atranscription : bool = False ,
1084
+ headers : Optional [Dict [str , Any ]] = None ,
1085
+ provider_config : Optional [BaseAudioTranscriptionConfig ] = None ,
1086
+ ) -> Union [TranscriptionResponse , Coroutine [Any , Any , TranscriptionResponse ]]:
1087
+ if provider_config is None :
1088
+ raise ValueError (
1089
+ f"No provider config found for model: { model } and provider: { custom_llm_provider } "
1090
+ )
1091
+
1092
+ if atranscription is True :
1093
+ return self .async_audio_transcriptions ( # type: ignore
1094
+ model = model ,
1095
+ audio_file = audio_file ,
1096
+ optional_params = optional_params ,
1097
+ litellm_params = litellm_params ,
1098
+ model_response = model_response ,
1099
+ timeout = timeout ,
1100
+ max_retries = max_retries ,
1101
+ logging_obj = logging_obj ,
1102
+ api_key = api_key ,
1103
+ api_base = api_base ,
1104
+ custom_llm_provider = custom_llm_provider ,
1105
+ client = client ,
1106
+ headers = headers ,
1107
+ provider_config = provider_config ,
1108
+ )
1109
+
1110
+ # Prepare the request
1111
+ headers , complete_url , binary_data , json_data = (
1112
+ self ._prepare_audio_transcription_request (
1113
+ model = model ,
1114
+ audio_file = audio_file ,
1115
+ optional_params = optional_params ,
1116
+ litellm_params = litellm_params ,
1117
+ logging_obj = logging_obj ,
1118
+ api_key = api_key ,
1119
+ api_base = api_base ,
1120
+ headers = headers ,
1121
+ provider_config = provider_config ,
1122
+ )
1123
+ )
1124
+
1125
+ if client is None or not isinstance (client , HTTPHandler ):
1126
+ client = _get_httpx_client ()
1127
+
1052
1128
try :
1053
1129
# Make the POST request
1054
1130
response = client .post (
@@ -1061,19 +1137,82 @@ def audio_transcriptions(
1061
1137
except Exception as e :
1062
1138
raise self ._handle_error (e = e , provider_config = provider_config )
1063
1139
1064
- if isinstance (provider_config , litellm .DeepgramAudioTranscriptionConfig ):
1065
- returned_response = provider_config .transform_audio_transcription_response (
1140
+ return self ._transform_audio_transcription_response (
1141
+ provider_config = provider_config ,
1142
+ model = model ,
1143
+ response = response ,
1144
+ model_response = model_response ,
1145
+ logging_obj = logging_obj ,
1146
+ optional_params = optional_params ,
1147
+ api_key = api_key ,
1148
+ )
1149
+
1150
+ async def async_audio_transcriptions (
1151
+ self ,
1152
+ model : str ,
1153
+ audio_file : FileTypes ,
1154
+ optional_params : dict ,
1155
+ litellm_params : dict ,
1156
+ model_response : TranscriptionResponse ,
1157
+ timeout : float ,
1158
+ max_retries : int ,
1159
+ logging_obj : LiteLLMLoggingObj ,
1160
+ api_key : Optional [str ],
1161
+ api_base : Optional [str ],
1162
+ custom_llm_provider : str ,
1163
+ client : Optional [Union [HTTPHandler , AsyncHTTPHandler ]] = None ,
1164
+ headers : Optional [Dict [str , Any ]] = None ,
1165
+ provider_config : Optional [BaseAudioTranscriptionConfig ] = None ,
1166
+ ) -> TranscriptionResponse :
1167
+ if provider_config is None :
1168
+ raise ValueError (
1169
+ f"No provider config found for model: { model } and provider: { custom_llm_provider } "
1170
+ )
1171
+
1172
+ # Prepare the request
1173
+ headers , complete_url , binary_data , json_data = (
1174
+ self ._prepare_audio_transcription_request (
1066
1175
model = model ,
1067
- raw_response = response ,
1068
- model_response = model_response ,
1069
- logging_obj = logging_obj ,
1070
- request_data = {},
1176
+ audio_file = audio_file ,
1071
1177
optional_params = optional_params ,
1072
- litellm_params = {},
1178
+ litellm_params = litellm_params ,
1179
+ logging_obj = logging_obj ,
1073
1180
api_key = api_key ,
1181
+ api_base = api_base ,
1182
+ headers = headers ,
1183
+ provider_config = provider_config ,
1074
1184
)
1075
- return returned_response
1076
- return model_response
1185
+ )
1186
+
1187
+ if client is None or not isinstance (client , AsyncHTTPHandler ):
1188
+ async_httpx_client = get_async_httpx_client (
1189
+ llm_provider = litellm .LlmProviders (custom_llm_provider ),
1190
+ params = {"ssl_verify" : litellm_params .get ("ssl_verify" , None )},
1191
+ )
1192
+ else :
1193
+ async_httpx_client = client
1194
+
1195
+ try :
1196
+ # Make the async POST request
1197
+ response = await async_httpx_client .post (
1198
+ url = complete_url ,
1199
+ headers = headers ,
1200
+ content = binary_data ,
1201
+ json = json_data ,
1202
+ timeout = timeout ,
1203
+ )
1204
+ except Exception as e :
1205
+ raise self ._handle_error (e = e , provider_config = provider_config )
1206
+
1207
+ return self ._transform_audio_transcription_response (
1208
+ provider_config = provider_config ,
1209
+ model = model ,
1210
+ response = response ,
1211
+ model_response = model_response ,
1212
+ logging_obj = logging_obj ,
1213
+ optional_params = optional_params ,
1214
+ api_key = api_key ,
1215
+ )
1077
1216
1078
1217
async def async_anthropic_messages_handler (
1079
1218
self ,
0 commit comments