Преглед на файлове

fix annotation query exception (#1771)

Co-authored-by: jyong <jyong@dify.ai>
Jyong преди 1 година
родител
ревизия
ebc2cdad2e
променени са 1 файла, в които са добавени 59 реда и са изтрити 55 реда
  1. 59 55
      api/core/completion.py

+ 59 - 55
api/core/completion.py

@@ -341,66 +341,70 @@ class Completion:
         app = conversation_message_task.app
         annotation_reply = app_model_config.annotation_reply_dict
         if annotation_reply['enabled']:
-            score_threshold = annotation_reply.get('score_threshold', 1)
-            embedding_provider_name = annotation_reply['embedding_model']['embedding_provider_name']
-            embedding_model_name = annotation_reply['embedding_model']['embedding_model_name']
-            # get embedding model
-            embedding_model = ModelFactory.get_embedding_model(
-                tenant_id=app.tenant_id,
-                model_provider_name=embedding_provider_name,
-                model_name=embedding_model_name
-            )
-            embeddings = CacheEmbedding(embedding_model)
+            try:
+                score_threshold = annotation_reply.get('score_threshold', 1)
+                embedding_provider_name = annotation_reply['embedding_model']['embedding_provider_name']
+                embedding_model_name = annotation_reply['embedding_model']['embedding_model_name']
+                # get embedding model
+                embedding_model = ModelFactory.get_embedding_model(
+                    tenant_id=app.tenant_id,
+                    model_provider_name=embedding_provider_name,
+                    model_name=embedding_model_name
+                )
+                embeddings = CacheEmbedding(embedding_model)
 
-            dataset_collection_binding = DatasetCollectionBindingService.get_dataset_collection_binding(
-                embedding_provider_name,
-                embedding_model_name,
-                'annotation'
-            )
+                dataset_collection_binding = DatasetCollectionBindingService.get_dataset_collection_binding(
+                    embedding_provider_name,
+                    embedding_model_name,
+                    'annotation'
+                )
 
-            dataset = Dataset(
-                id=app.id,
-                tenant_id=app.tenant_id,
-                indexing_technique='high_quality',
-                embedding_model_provider=embedding_provider_name,
-                embedding_model=embedding_model_name,
-                collection_binding_id=dataset_collection_binding.id
-            )
+                dataset = Dataset(
+                    id=app.id,
+                    tenant_id=app.tenant_id,
+                    indexing_technique='high_quality',
+                    embedding_model_provider=embedding_provider_name,
+                    embedding_model=embedding_model_name,
+                    collection_binding_id=dataset_collection_binding.id
+                )
 
-            vector_index = VectorIndex(
-                dataset=dataset,
-                config=current_app.config,
-                embeddings=embeddings
-            )
+                vector_index = VectorIndex(
+                    dataset=dataset,
+                    config=current_app.config,
+                    embeddings=embeddings
+                )
 
-            documents = vector_index.search(
-                conversation_message_task.query,
-                search_type='similarity_score_threshold',
-                search_kwargs={
-                    'k': 1,
-                    'score_threshold': score_threshold,
-                    'filter': {
-                        'group_id': [dataset.id]
+                documents = vector_index.search(
+                    conversation_message_task.query,
+                    search_type='similarity_score_threshold',
+                    search_kwargs={
+                        'k': 1,
+                        'score_threshold': score_threshold,
+                        'filter': {
+                            'group_id': [dataset.id]
+                        }
                     }
-                }
-            )
-            if documents:
-                annotation_id = documents[0].metadata['annotation_id']
-                score = documents[0].metadata['score']
-                annotation = AppAnnotationService.get_annotation_by_id(annotation_id)
-                if annotation:
-                    conversation_message_task.annotation_end(annotation.content, annotation.id, annotation.account.name)
-                    # insert annotation history
-                    AppAnnotationService.add_annotation_history(annotation.id,
-                                                                app.id,
-                                                                annotation.question,
-                                                                annotation.content,
-                                                                conversation_message_task.query,
-                                                                conversation_message_task.user.id,
-                                                                conversation_message_task.message.id,
-                                                                from_source,
-                                                                score)
-                    return True
+                )
+                if documents:
+                    annotation_id = documents[0].metadata['annotation_id']
+                    score = documents[0].metadata['score']
+                    annotation = AppAnnotationService.get_annotation_by_id(annotation_id)
+                    if annotation:
+                        conversation_message_task.annotation_end(annotation.content, annotation.id, annotation.account.name)
+                        # insert annotation history
+                        AppAnnotationService.add_annotation_history(annotation.id,
+                                                                    app.id,
+                                                                    annotation.question,
+                                                                    annotation.content,
+                                                                    conversation_message_task.query,
+                                                                    conversation_message_task.user.id,
+                                                                    conversation_message_task.message.id,
+                                                                    from_source,
+                                                                    score)
+                        return True
+            except Exception as e:
+                logging.warning(f'Query annotation failed, exception: {str(e)}.')
+                return False
         return False
 
     @classmethod