Parcourir la source

fix get embedding model provider in empty dataset (#1986)

Co-authored-by: jyong <jyong@dify.ai>
Jyong il y a 1 an
Parent
commit
24bdedf802

+ 24 - 12
api/core/indexing_runner.py

@@ -221,12 +221,18 @@ class IndexingRunner:
             if not dataset:
                 raise ValueError('Dataset not found.')
             if dataset.indexing_technique == 'high_quality' or indexing_technique == 'high_quality':
-                embedding_model_instance = self.model_manager.get_model_instance(
-                    tenant_id=tenant_id,
-                    provider=dataset.embedding_model_provider,
-                    model_type=ModelType.TEXT_EMBEDDING,
-                    model=dataset.embedding_model
-                )
+                if dataset.embedding_model_provider:
+                    embedding_model_instance = self.model_manager.get_model_instance(
+                        tenant_id=tenant_id,
+                        provider=dataset.embedding_model_provider,
+                        model_type=ModelType.TEXT_EMBEDDING,
+                        model=dataset.embedding_model
+                    )
+                else:
+                    embedding_model_instance = self.model_manager.get_default_model_instance(
+                        tenant_id=tenant_id,
+                        model_type=ModelType.TEXT_EMBEDDING,
+                    )
         else:
             if indexing_technique == 'high_quality':
                 embedding_model_instance = self.model_manager.get_default_model_instance(
@@ -328,12 +334,18 @@ class IndexingRunner:
             if not dataset:
                 raise ValueError('Dataset not found.')
             if dataset.indexing_technique == 'high_quality' or indexing_technique == 'high_quality':
-                embedding_model_instance = self.model_manager.get_model_instance(
-                    tenant_id=tenant_id,
-                    provider=dataset.embedding_model_provider,
-                    model_type=ModelType.TEXT_EMBEDDING,
-                    model=dataset.embedding_model
-                )
+                if dataset.embedding_model_provider:
+                    embedding_model_instance = self.model_manager.get_model_instance(
+                        tenant_id=tenant_id,
+                        provider=dataset.embedding_model_provider,
+                        model_type=ModelType.TEXT_EMBEDDING,
+                        model=dataset.embedding_model
+                    )
+                else:
+                    embedding_model_instance = self.model_manager.get_default_model_instance(
+                        tenant_id=tenant_id,
+                        model_type=ModelType.TEXT_EMBEDDING,
+                    )
         else:
             if indexing_technique == 'high_quality':
                 embedding_model_instance = self.model_manager.get_default_model_instance(

+ 2 - 0
api/core/model_manager.py

@@ -179,6 +179,8 @@ class ModelManager:
         :param model: model name
         :return:
         """
+        if not provider:
+            return self.get_default_model_instance(tenant_id, model_type)
         provider_model_bundle = self._provider_manager.get_provider_model_bundle(
             tenant_id=tenant_id,
             provider=provider,

+ 2 - 2
api/core/model_runtime/model_providers/baichuan/text_embedding/text_embedding.py

@@ -69,9 +69,9 @@ class BaichuanTextEmbeddingModel(TextEmbeddingModel):
                 raise InsufficientAccountBalance(msg)
             elif err == 'invalid_authentication':
                 raise InvalidAuthenticationError(msg)
-            elif 'rate' in err:
+            elif err and 'rate' in err:
                 raise RateLimitReachedError(msg)
-            elif 'internal' in err:
+            elif err and 'internal' in err:
                 raise InternalServerError(msg)
             elif err == 'api_key_empty':
                 raise InvalidAPIKeyError(msg)