diff --git a/internal/entity/models/jina.go b/internal/entity/models/jina.go index 1a3d2ff9f..15efd4adb 100644 --- a/internal/entity/models/jina.go +++ b/internal/entity/models/jina.go @@ -250,3 +250,26 @@ func (j *JinaModel) CheckConnection(apiConfig *APIConfig) error { _, err := j.ListModels(apiConfig) return err } + +// TranscribeAudio transcribe audio +func (z *JinaModel) TranscribeAudio(modelName *string, file *string, apiConfig *APIConfig, asrConfig *ASRConfig) (*ASRResponse, error) { + return nil, fmt.Errorf("%s, no such method", z.Name()) +} + +func (z *JinaModel) TranscribeAudioWithSender(modelName *string, file *string, apiConfig *APIConfig, asrConfig *ASRConfig, sender func(*string, *string) error) error { + return fmt.Errorf("%s, no such method", z.Name()) +} + +// AudioSpeech convert audio to text +func (z *JinaModel) AudioSpeech(modelName *string, audioContent *string, apiConfig *APIConfig, asrConfig *TTSConfig) (*TTSResponse, error) { + return nil, fmt.Errorf("%s, no such method", z.Name()) +} + +func (z *JinaModel) AudioSpeechWithSender(modelName *string, audioContent *string, apiConfig *APIConfig, ttsConfig *TTSConfig, sender func(*string, *string) error) error { + return fmt.Errorf("%s, no such method", z.Name()) +} + +// OCRFile OCR file +func (z *JinaModel) OCRFile(modelName *string, fileContent *string, apiConfig *APIConfig, ocrConfig *OCRConfig) (*OCRResponse, error) { + return nil, fmt.Errorf("%s, no such method", z.Name()) +} diff --git a/internal/entity/models/mistral.go b/internal/entity/models/mistral.go index b9ff04df5..ee2388ea4 100644 --- a/internal/entity/models/mistral.go +++ b/internal/entity/models/mistral.go @@ -563,3 +563,26 @@ func (m *MistralModel) CheckConnection(apiConfig *APIConfig) error { func (m *MistralModel) Rerank(modelName *string, query string, documents []string, apiConfig *APIConfig, rerankConfig *RerankConfig) (*RerankResponse, error) { return nil, fmt.Errorf("no such method") } + +// TranscribeAudio transcribe audio +func (z *MistralModel) TranscribeAudio(modelName *string, file *string, apiConfig *APIConfig, asrConfig *ASRConfig) (*ASRResponse, error) { + return nil, fmt.Errorf("%s, no such method", z.Name()) +} + +func (z *MistralModel) TranscribeAudioWithSender(modelName *string, file *string, apiConfig *APIConfig, asrConfig *ASRConfig, sender func(*string, *string) error) error { + return fmt.Errorf("%s, no such method", z.Name()) +} + +// AudioSpeech convert audio to text +func (z *MistralModel) AudioSpeech(modelName *string, audioContent *string, apiConfig *APIConfig, asrConfig *TTSConfig) (*TTSResponse, error) { + return nil, fmt.Errorf("%s, no such method", z.Name()) +} + +func (z *MistralModel) AudioSpeechWithSender(modelName *string, audioContent *string, apiConfig *APIConfig, ttsConfig *TTSConfig, sender func(*string, *string) error) error { + return fmt.Errorf("%s, no such method", z.Name()) +} + +// OCRFile OCR file +func (z *MistralModel) OCRFile(modelName *string, fileContent *string, apiConfig *APIConfig, ocrConfig *OCRConfig) (*OCRResponse, error) { + return nil, fmt.Errorf("%s, no such method", z.Name()) +} diff --git a/internal/service/model_service.go b/internal/service/model_service.go index 446e2f90c..dcbdeeeb1 100644 --- a/internal/service/model_service.go +++ b/internal/service/model_service.go @@ -738,6 +738,10 @@ func (m *ModelProviderService) ChatToModelWithMessages(providerName, instanceNam return nil, common.CodeNotFound, errors.New(fmt.Sprintf("provider %s model %s not found", providerName, modelName)) } + if !model.ModelTypeMap["chat"] && !model.ModelTypeMap["vision"] { + return nil, common.CodeNotFound, errors.New(fmt.Sprintf("expect model %s@%s is a chat or multimodal model", modelName, providerName)) + } + modelConfig.ModelClass = model.Class var extra map[string]string @@ -763,6 +767,9 @@ func (m *ModelProviderService) ChatToModelWithMessages(providerName, instanceNam } if modelInfo.Status == "active" { + if modelInfo.ModelType != "chat" && modelInfo.ModelType != "vision" { + return nil, common.CodeNotFound, errors.New(fmt.Sprintf("expect model %s@%s is a chat or multimodal model", modelName, providerName)) + } // For local deployed models providerInfo := dao.GetModelProviderManager().FindProvider(providerName) if providerInfo == nil { @@ -833,11 +840,16 @@ func (m *ModelProviderService) ChatToModelStreamWithSender(providerName, instanc return common.CodeNotFound, err } - _, err = dao.GetModelProviderManager().GetModelByName(providerName, modelName) + var model *entity.Model = nil + model, err = dao.GetModelProviderManager().GetModelByName(providerName, modelName) if err != nil { return common.CodeNotFound, err } + if !model.ModelTypeMap["chat"] && !model.ModelTypeMap["vision"] { + return common.CodeNotFound, errors.New(fmt.Sprintf("expect model %s@%s is a chat or multimodal model", modelName, providerName)) + } + var extra map[string]string err = json.Unmarshal([]byte(instance.Extra), &extra) if err != nil { @@ -857,6 +869,9 @@ func (m *ModelProviderService) ChatToModelStreamWithSender(providerName, instanc } if modelInfo.Status == "active" { + if modelInfo.ModelType != "chat" && modelInfo.ModelType != "vision" { + return common.CodeServerError, errors.New(fmt.Sprintf("expect model %s@%s is a chat or multimodal model", modelName, providerName)) + } // For local deployed models providerInfo := dao.GetModelProviderManager().FindProvider(providerName) if providerInfo == nil { @@ -962,6 +977,9 @@ func (m *ModelProviderService) EmbedText(providerName, instanceName, modelName, } if modelInfo.Status == "active" { + if modelInfo.ModelType != "embedding" { + return nil, common.CodeServerError, errors.New(fmt.Sprintf("expect model %s@%s is an embedding model", modelName, providerName)) + } // For local deployed models providerInfo := dao.GetModelProviderManager().FindProvider(providerName) if providerInfo == nil { @@ -1044,7 +1062,7 @@ func (m *ModelProviderService) RerankDocument(providerName, instanceName, modelN } if !model.ModelTypeMap["rerank"] { - return nil, common.CodeNotFound, errors.New(fmt.Sprintf("provider %s model %s is not an embedding model", providerName, modelName)) + return nil, common.CodeNotFound, errors.New(fmt.Sprintf("provider %s model %s is not a rerank model", providerName, modelName)) } var extra map[string]string @@ -1067,6 +1085,9 @@ func (m *ModelProviderService) RerankDocument(providerName, instanceName, modelN } if modelInfo.Status == "active" { + if modelInfo.ModelType != "rerank" { + return nil, common.CodeServerError, errors.New(fmt.Sprintf("expect model %s@%s is a rerank model", modelName, providerName)) + } // For local deployed models providerInfo := dao.GetModelProviderManager().FindProvider(providerName) if providerInfo == nil { @@ -1139,11 +1160,16 @@ func (m *ModelProviderService) TranscribeAudio(providerName, instanceName, model return nil, common.CodeNotFound, errors.New("provider not found") } - _, err = dao.GetModelProviderManager().GetModelByName(providerName, modelName) + var model *entity.Model = nil + model, err = dao.GetModelProviderManager().GetModelByName(providerName, modelName) if err != nil { return nil, common.CodeNotFound, errors.New(fmt.Sprintf("provider %s model %s not found", providerName, modelName)) } + if !model.ModelTypeMap["asr"] { + return nil, common.CodeNotFound, errors.New(fmt.Sprintf("provider %s model %s is not an ASR model", providerName, modelName)) + } + var extra map[string]string err = json.Unmarshal([]byte(instance.Extra), &extra) if err != nil { @@ -1167,6 +1193,9 @@ func (m *ModelProviderService) TranscribeAudio(providerName, instanceName, model } if modelInfo.Status == "active" { + if modelInfo.ModelType != "asr" { + return nil, common.CodeServerError, errors.New(fmt.Sprintf("expect model %s@%s is an ASR model", modelName, providerName)) + } // For local deployed models providerInfo := dao.GetModelProviderManager().FindProvider(providerName) if providerInfo == nil { @@ -1235,10 +1264,14 @@ func (m *ModelProviderService) TranscribeAudioStream(providerName, instanceName, return common.CodeNotFound, err } - _, err = dao.GetModelProviderManager().GetModelByName(providerName, modelName) + var model *entity.Model = nil + model, err = dao.GetModelProviderManager().GetModelByName(providerName, modelName) if err != nil { return common.CodeNotFound, err } + if !model.ModelTypeMap["asr"] { + return common.CodeNotFound, errors.New(fmt.Sprintf("provider %s model %s is not an ASR model", providerName, modelName)) + } var extra map[string]string err = json.Unmarshal([]byte(instance.Extra), &extra) @@ -1259,6 +1292,9 @@ func (m *ModelProviderService) TranscribeAudioStream(providerName, instanceName, } if modelInfo.Status == "active" { + if modelInfo.ModelType != "asr" { + return common.CodeServerError, errors.New(fmt.Sprintf("expect model %s@%s is an ASR model", modelName, providerName)) + } // For local deployed models providerInfo := dao.GetModelProviderManager().FindProvider(providerName) if providerInfo == nil { @@ -1329,11 +1365,16 @@ func (m *ModelProviderService) AudioSpeech(providerName, instanceName, modelName return nil, common.CodeNotFound, errors.New("provider not found") } - _, err = dao.GetModelProviderManager().GetModelByName(providerName, modelName) + var model *entity.Model = nil + model, err = dao.GetModelProviderManager().GetModelByName(providerName, modelName) if err != nil { return nil, common.CodeNotFound, errors.New(fmt.Sprintf("provider %s model %s not found", providerName, modelName)) } + if !model.ModelTypeMap["tts"] { + return nil, common.CodeNotFound, errors.New(fmt.Sprintf("provider %s model %s is not a TTS model", providerName, modelName)) + } + var extra map[string]string err = json.Unmarshal([]byte(instance.Extra), &extra) if err != nil { @@ -1357,6 +1398,9 @@ func (m *ModelProviderService) AudioSpeech(providerName, instanceName, modelName } if modelInfo.Status == "active" { + if modelInfo.ModelType != "tts" { + return nil, common.CodeServerError, errors.New(fmt.Sprintf("expect model %s@%s is a TTS model", modelName, providerName)) + } // For local deployed models providerInfo := dao.GetModelProviderManager().FindProvider(providerName) if providerInfo == nil { @@ -1424,11 +1468,16 @@ func (m *ModelProviderService) AudioSpeechStream(providerName, instanceName, mod return common.CodeNotFound, err } - _, err = dao.GetModelProviderManager().GetModelByName(providerName, modelName) + var model *entity.Model = nil + model, err = dao.GetModelProviderManager().GetModelByName(providerName, modelName) if err != nil { return common.CodeNotFound, err } + if !model.ModelTypeMap["tts"] { + return common.CodeNotFound, errors.New(fmt.Sprintf("provider %s model %s is not a TTS model", providerName, modelName)) + } + var extra map[string]string err = json.Unmarshal([]byte(instance.Extra), &extra) if err != nil { @@ -1448,6 +1497,9 @@ func (m *ModelProviderService) AudioSpeechStream(providerName, instanceName, mod } if modelInfo.Status == "active" { + if modelInfo.ModelType != "tts" { + return common.CodeServerError, errors.New(fmt.Sprintf("expect model %s@%s is a TTS model", modelName, providerName)) + } // For local deployed models providerInfo := dao.GetModelProviderManager().FindProvider(providerName) if providerInfo == nil { @@ -1517,11 +1569,16 @@ func (m *ModelProviderService) OCRFile(providerName, instanceName, modelName, us return nil, common.CodeNotFound, errors.New("provider not found") } - _, err = dao.GetModelProviderManager().GetModelByName(providerName, modelName) + var model *entity.Model = nil + model, err = dao.GetModelProviderManager().GetModelByName(providerName, modelName) if err != nil { return nil, common.CodeNotFound, errors.New(fmt.Sprintf("provider %s model %s not found", providerName, modelName)) } + if !model.ModelTypeMap["ocr"] { + return nil, common.CodeNotFound, errors.New(fmt.Sprintf("provider %s model %s is not a TTS model", providerName, modelName)) + } + var extra map[string]string err = json.Unmarshal([]byte(instance.Extra), &extra) if err != nil { @@ -1545,6 +1602,9 @@ func (m *ModelProviderService) OCRFile(providerName, instanceName, modelName, us } if modelInfo.Status == "active" { + if modelInfo.ModelType != "tts" { + return nil, common.CodeServerError, errors.New(fmt.Sprintf("expect model %s@%s is an OCR model", modelName, providerName)) + } // For local deployed models providerInfo := dao.GetModelProviderManager().FindProvider(providerName) if providerInfo == nil {