2025-04-17 10:01:33 +00:00
# coding=utf-8
import traceback
from typing import Dict
from django . utils . translation import gettext_lazy as _ , gettext
from common import forms
from common . exception . app_exception import AppApiException
from common . forms import BaseForm , TooltipLabel
from models_provider . base_model_provider import BaseModelCredential , ValidCode
2025-09-18 08:21:40 +00:00
class SiliconCloudTTSModelGeneralParams ( BaseForm ) :
# alloy, echo, fable, onyx, nova, shimmer
voice = forms . SingleSelect (
TooltipLabel ( ' Voice ' ,
_ ( ' Try out the different sounds (Alloy, Echo, Fable, Onyx, Nova, and Sparkle) to find one that suits your desired tone and audience. The current voiceover is optimized for English. ' ) ) ,
2025-09-22 06:02:41 +00:00
required = True , default_value = ' fnlp/MOSS-TTSD-v0.5:alex ' ,
2025-09-23 03:13:10 +00:00
text_field = ' label ' ,
2025-09-18 08:21:40 +00:00
value_field = ' value ' ,
option_list = [
2025-09-23 03:13:10 +00:00
{ ' label ' : ' alex ' , ' value ' : ' fnlp/MOSS-TTSD-v0.5:alex ' } ,
{ ' label ' : ' anna ' , ' value ' : ' fnlp/MOSS-TTSD-v0.5:anna ' } ,
{ ' label ' : ' bella ' , ' value ' : ' fnlp/MOSS-TTSD-v0.5:bella ' } ,
{ ' label ' : ' charles ' , ' value ' : ' fnlp/MOSS-TTSD-v0.5:charles ' } ,
{ ' label ' : ' benjamin ' , ' value ' : ' fnlp/MOSS-TTSD-v0.5:benjamin ' } ,
{ ' label ' : ' claire ' , ' value ' : ' fnlp/MOSS-TTSD-v0.5:claire ' } ,
{ ' label ' : ' david ' , ' value ' : ' fnlp/MOSS-TTSD-v0.5:david ' } ,
{ ' label ' : ' diana ' , ' value ' : ' fnlp/MOSS-TTSD-v0.5:diana ' } ,
2025-09-18 08:21:40 +00:00
] )
2025-04-17 10:01:33 +00:00
class SiliconCloudTTSModelCredential ( BaseForm , BaseModelCredential ) :
api_base = forms . TextInputField ( ' API URL ' , required = True )
api_key = forms . PasswordInputField ( ' API Key ' , required = True )
def is_valid ( self , model_type : str , model_name , model_credential : Dict [ str , object ] , model_params , provider ,
raise_exception = False ) :
model_type_list = provider . get_model_type_list ( )
if not any ( list ( filter ( lambda mt : mt . get ( ' value ' ) == model_type , model_type_list ) ) ) :
raise AppApiException ( ValidCode . valid_error . value ,
gettext ( ' {model_type} Model type is not supported ' ) . format ( model_type = model_type ) )
for key in [ ' api_base ' , ' api_key ' ] :
if key not in model_credential :
if raise_exception :
raise AppApiException ( ValidCode . valid_error . value , gettext ( ' {key} is required ' ) . format ( key = key ) )
else :
return False
try :
model = provider . get_model ( model_type , model_name , model_credential , * * model_params )
model . check_auth ( )
except Exception as e :
traceback . print_exc ( )
if isinstance ( e , AppApiException ) :
raise e
if raise_exception :
raise AppApiException ( ValidCode . valid_error . value ,
gettext (
' Verification failed, please check whether the parameters are correct: {error} ' ) . format (
error = str ( e ) ) )
else :
return False
return True
def encryption_dict ( self , model : Dict [ str , object ] ) :
return { * * model , ' api_key ' : super ( ) . encryption ( model . get ( ' api_key ' , ' ' ) ) }
2025-09-18 08:21:40 +00:00
def get_model_params_setting_form ( self , model_name ) :
return SiliconCloudTTSModelGeneralParams ( )