Skip to content

Commit d62ab98

Browse files
committed
Add exception for qdrant db
1 parent f1ef916 commit d62ab98

File tree

3 files changed

+30
-19
lines changed

3 files changed

+30
-19
lines changed

content/mutations.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ def retrigger_content(
8282
instance=info.context.request.user,
8383
data=process_input_data(data),
8484
context={"request": info.context.request},
85-
partial=True,
8685
)
8786
if errors := mutation_is_not_valid(serializer):
8887
return MutationResponseType(
@@ -103,7 +102,6 @@ def archive_content(
103102
instance=info.context.request.user,
104103
data=process_input_data(data),
105104
context={"request": info.context.request},
106-
partial=True,
107105
)
108106
if errors := mutation_is_not_valid(serializer):
109107
return MutationResponseType(

content/serializers.py

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from django.db import transaction
2-
from django.shortcuts import get_object_or_404
32
from django.utils import timezone
43
from rest_framework import serializers
54

@@ -26,7 +25,7 @@ class Meta:
2625

2726
class ContentSerializer(serializers.ModelSerializer):
2827
tag = serializers.PrimaryKeyRelatedField(queryset=Tag.objects.all(), many=True, required=False)
29-
document_file = serializers.FileField(required=False)
28+
document_file = serializers.FileField(required=True)
3029

3130
class Meta:
3231
model = Content
@@ -64,18 +63,17 @@ def save(self, **_):
6463

6564

6665
class ArchiveContentSerializer(serializers.ModelSerializer):
67-
id = serializers.CharField(required=True)
66+
content = serializers.PrimaryKeyRelatedField(queryset=Content.objects.all(), required=True)
6867

6968
def validate(self, attrs):
70-
content_id = attrs["id"]
71-
content = get_object_or_404(Content, id=content_id)
69+
content = attrs["content"]
7270
if content.document_status == Content.DocumentStatus.DELETED_FROM_VECTOR:
7371
raise serializers.ValidationError("Content is already deleted from vector.")
74-
return {**attrs, "content": content}
72+
return attrs
7573

7674
class Meta:
7775
model = Content
78-
fields = ["id"]
76+
fields = ["content"]
7977

8078
def save(self, **_):
8179
assert isinstance(self.validated_data, dict)
@@ -90,22 +88,20 @@ def save(self, **_):
9088

9189

9290
class RetriggerContentSerializer(serializers.ModelSerializer):
93-
id = serializers.CharField(required=True)
91+
content = serializers.PrimaryKeyRelatedField(queryset=Content.objects.all(), required=True)
9492

9593
def validate(self, attrs):
96-
content_id = attrs["id"]
97-
content = get_object_or_404(Content, id=content_id)
94+
content = attrs["content"]
9895
if content.document_status == Content.DocumentStatus.ADDED_TO_VECTOR:
9996
raise serializers.ValidationError("Content has already been added to vector. No need to trigger it again.")
100-
return {**attrs, "content": content}
97+
return attrs
10198

10299
class Meta:
103100
model = Content
104-
fields = ["id"]
101+
fields = ["content"]
105102

106103
def save(self, **_):
107-
with transaction.atomic():
108-
assert isinstance(self.validated_data, dict)
109-
content = self.validated_data["content"]
110-
transaction.on_commit(lambda: create_embedding_for_content_task.delay(content.id))
104+
assert isinstance(self.validated_data, dict)
105+
content = self.validated_data["content"]
106+
transaction.on_commit(lambda: create_embedding_for_content_task.delay(content.id))
111107
return content

content/tasks.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1+
import logging
2+
13
import requests
24
from celery import shared_task
35
from django.conf import settings
6+
from qdrant_client.http.exceptions import UnexpectedResponse
7+
from requests.exceptions import ConnectionError as RequestsConnectionError
48

59
from chatbotcore.database import QdrantDatabase
610
from chatbotcore.doc_loaders import LoaderFromText
711

12+
logger = logging.getLogger(__name__)
13+
814

915
@shared_task(bind=True)
1016
def create_embedding_for_content_task(self, content_id):
@@ -34,6 +40,17 @@ def create_embedding_for_content_task(self, content_id):
3440
db.set_collection()
3541
db.store_data(zip(response.json(), metadata))
3642
content.document_status = Content.DocumentStatus.ADDED_TO_VECTOR
43+
44+
except RequestsConnectionError as e:
45+
# Qdrant connection failure
46+
logger.error(f"Qdrant connection error: {str(e)}")
47+
content.document_status = Content.DocumentStatus.FAILURE
48+
49+
except UnexpectedResponse as e:
50+
# Qdrant server error
51+
logger.error(f"Qdrant storage error [{e.status_code}]: {e.content}")
52+
content.document_status = Content.DocumentStatus.FAILURE
53+
3754
# NOTE: All exceptions have been handled with except
3855
except Exception:
3956
content.document_status = Content.DocumentStatus.FAILURE
@@ -46,4 +63,4 @@ def delete_content_from_qdrant_task(self, content_id):
4663
host=settings.QDRANT_DB_HOST, port=settings.QDRANT_DB_PORT, collection_name=settings.QDRANT_DB_COLLECTION_NAME
4764
)
4865
db.delete_data_by_src_uuid(key="uuid", value=str(content_id))
49-
return f"Deleted content {content_id}"
66+
return logger.info(f"Deleted content {content_id}")

0 commit comments

Comments
 (0)