|
23 | 23 | from django.core import validators |
24 | 24 | from django.db import transaction, models |
25 | 25 | from django.db.models import QuerySet |
| 26 | +from django.db.models.functions import Reverse, Substr |
26 | 27 | from django.http import HttpResponse |
27 | 28 | from drf_yasg import openapi |
28 | 29 | from rest_framework import serializers |
|
42 | 43 | from dataset.models.data_set import DataSet, Document, Paragraph, Problem, Type, ProblemParagraphMapping, TaskType, \ |
43 | 44 | State, File, Image |
44 | 45 | from dataset.serializers.common_serializers import list_paragraph, MetaSerializer, ProblemParagraphManage, \ |
45 | | - get_embedding_model_by_dataset_id, get_embedding_model_id_by_dataset_id, write_image, zip_dir |
| 46 | + get_embedding_model_by_dataset_id, get_embedding_model_id_by_dataset_id, write_image, zip_dir, \ |
| 47 | + GenerateRelatedSerializer |
46 | 48 | from dataset.serializers.document_serializers import DocumentSerializers, DocumentInstanceSerializer |
47 | | -from dataset.task import sync_web_dataset, sync_replace_web_dataset |
| 49 | +from dataset.task import sync_web_dataset, sync_replace_web_dataset, generate_related_by_dataset_id |
48 | 50 | from embedding.models import SearchMode |
49 | 51 | from embedding.task import embedding_by_dataset, delete_embedding_by_dataset |
50 | 52 | from setting.models import AuthOperate, Model |
@@ -814,6 +816,31 @@ def re_embedding(self, with_valid=True): |
814 | 816 | except AlreadyQueued as e: |
815 | 817 | raise AppApiException(500, _('Failed to send the vectorization task, please try again later!')) |
816 | 818 |
|
| 819 | + def generate_related(self, instance: Dict, with_valid=True): |
| 820 | + if with_valid: |
| 821 | + self.is_valid(raise_exception=True) |
| 822 | + GenerateRelatedSerializer(data=instance).is_valid(raise_exception=True) |
| 823 | + dataset_id = self.data.get('id') |
| 824 | + model_id = instance.get("model_id") |
| 825 | + prompt = instance.get("prompt") |
| 826 | + state_list = instance.get('state_list') |
| 827 | + ListenerManagement.update_status(QuerySet(Document).filter(dataset_id=dataset_id), |
| 828 | + TaskType.GENERATE_PROBLEM, |
| 829 | + State.PENDING) |
| 830 | + ListenerManagement.update_status(QuerySet(Paragraph).annotate( |
| 831 | + reversed_status=Reverse('status'), |
| 832 | + task_type_status=Substr('reversed_status', TaskType.GENERATE_PROBLEM.value, |
| 833 | + 1), |
| 834 | + ).filter(task_type_status__in=state_list, dataset_id=dataset_id) |
| 835 | + .values('id'), |
| 836 | + TaskType.GENERATE_PROBLEM, |
| 837 | + State.PENDING) |
| 838 | + ListenerManagement.get_aggregation_document_status_by_dataset_id(dataset_id)() |
| 839 | + try: |
| 840 | + generate_related_by_dataset_id.delay(dataset_id, model_id, prompt, state_list) |
| 841 | + except AlreadyQueued as e: |
| 842 | + raise AppApiException(500, _('Failed to send the vectorization task, please try again later!')) |
| 843 | + |
817 | 844 | def list_application(self, with_valid=True): |
818 | 845 | if with_valid: |
819 | 846 | self.is_valid(raise_exception=True) |
|
0 commit comments