@@ -142,12 +142,98 @@ def map_kaapi_to_google_params(kaapi_params: dict) -> tuple[dict, list[str]]:
142142 return google_params , warnings
143143
144144
145+ def map_kaapi_to_sarvam_params (kaapi_params : dict ) -> tuple [dict , list [str ]]:
146+ """Map Kaapi-abstracted parameters to SarvamAI API parameters.
147+
148+ Handles both STTLLMParams and TTSLLMParams.
149+
150+ STTLLMParams: model, instructions, input_language, output_language, response_format, temperature
151+ TTSLLMParams: model, voice, language, response_format
152+
153+ Args:
154+ kaapi_params: Dictionary with standardized Kaapi parameters
155+
156+ Returns:
157+ Tuple of:
158+ - Dictionary of SarvamAI API parameters
159+ - List of warnings for unsupported parameters
160+ """
161+ sarvam_params = {}
162+ warnings = []
163+
164+ # Model is required for all completion types
165+ model = kaapi_params .get ("model" )
166+ if not model :
167+ return {}, ["Missing required 'model' parameter" ]
168+ sarvam_params ["model" ] = model
169+
170+ # Determine if STT or TTS based on presence of specific params
171+ voice = kaapi_params .get ("voice" )
172+ input_language = kaapi_params .get ("input_language" )
173+
174+ if voice is not None :
175+ # TTS mode - map TTSLLMParams
176+ sarvam_params ["speaker" ] = voice
177+
178+ language = kaapi_params .get ("language" )
179+ if not language :
180+ return {}, ["Missing required 'language' parameter for TTS" ]
181+ sarvam_params ["target_language_code" ] = language
182+
183+ response_format = kaapi_params .get ("response_format" )
184+ if response_format :
185+ # Map audio format to SarvamAI codec
186+ format_mapping = {"mp3" : "mp3" , "wav" : "wav" , "ogg" : "ogg" }
187+ sarvam_params ["output_audio_codec" ] = format_mapping .get (
188+ response_format , "wav"
189+ )
190+
191+ elif input_language is not None or kaapi_params .get ("output_language" ) is not None :
192+ # STT mode - map STTLLMParams
193+ output_language = kaapi_params .get ("output_language" )
194+ transcription_mode = "transcribe"
195+
196+ if input_language == "auto" :
197+ sarvam_params ["language_code" ] = "unknown"
198+ elif input_language :
199+ sarvam_params ["language_code" ] = input_language
200+
201+ if output_language is None :
202+ output_language = input_language
203+
204+ if output_language == "en-IN" and input_language != output_language :
205+ transcription_mode = "translate"
206+
207+ sarvam_params ["mode" ] = transcription_mode
208+
209+ # Warn about unsupported STT parameters
210+ instructions = kaapi_params .get ("instructions" )
211+ if instructions :
212+ warnings .append (
213+ "Parameter 'instructions' is not supported by SarvamAI STT and was ignored"
214+ )
215+
216+ temperature = kaapi_params .get ("temperature" )
217+ if temperature is not None :
218+ warnings .append (
219+ "Parameter 'temperature' is not supported by SarvamAI STT and was ignored"
220+ )
221+
222+ response_format = kaapi_params .get ("response_format" )
223+ if response_format :
224+ warnings .append (
225+ "Parameter 'response_format' is not supported by SarvamAI STT and was ignored"
226+ )
227+
228+ return sarvam_params , warnings
229+
230+
145231def transform_kaapi_config_to_native (
146232 kaapi_config : KaapiCompletionConfig ,
147233) -> tuple [NativeCompletionConfig , list [str ]]:
148234 """Transform Kaapi completion config to native provider config with mapped parameters.
149235
150- Supports OpenAI and Google AI providers.
236+ Supports OpenAI,Google AI and Sarvam AI providers.
151237
152238 Args:
153239 kaapi_config: KaapiCompletionConfig with abstracted parameters
@@ -175,4 +261,13 @@ def transform_kaapi_config_to_native(
175261 warnings ,
176262 )
177263
264+ if kaapi_config .provider == "sarvamai" :
265+ mapped_params , warnings = map_kaapi_to_sarvam_params (kaapi_config .params )
266+ return (
267+ NativeCompletionConfig (
268+ provider = "sarvamai-native" , params = mapped_params , type = kaapi_config .type
269+ ),
270+ warnings ,
271+ )
272+
178273 raise ValueError (f"Unsupported provider: { kaapi_config .provider } " )
0 commit comments