|
3 | 3 | from typing import Dict |
4 | 4 |
|
5 | 5 | import uuid_utils.compat as uuid |
| 6 | +from celery_once import AlreadyQueued |
6 | 7 | from django.db import transaction |
7 | 8 | from django.db.models import QuerySet, Count |
8 | 9 | from django.utils.translation import gettext_lazy as _ |
9 | 10 | from rest_framework import serializers |
10 | 11 |
|
11 | 12 | from common.db.search import page_search |
| 13 | +from common.event import ListenerManagement |
12 | 14 | from common.exception.app_exception import AppApiException |
13 | 15 | from common.utils.common import post |
14 | | -from knowledge.models import Paragraph, Problem, Document, ProblemParagraphMapping, SourceType |
| 16 | +from knowledge.models import Paragraph, Problem, Document, ProblemParagraphMapping, SourceType, TaskType, State |
15 | 17 | from knowledge.serializers.common import ProblemParagraphObject, ProblemParagraphManage, \ |
16 | 18 | get_embedding_model_id_by_knowledge_id, update_document_char_length, BatchSerializer |
17 | 19 | from knowledge.serializers.problem import ProblemInstanceSerializer, ProblemSerializer, ProblemSerializers |
18 | 20 | from knowledge.task.embedding import embedding_by_paragraph, enable_embedding_by_paragraph, \ |
19 | 21 | disable_embedding_by_paragraph, \ |
20 | 22 | delete_embedding_by_paragraph, embedding_by_problem as embedding_by_problem_task, delete_embedding_by_paragraph_ids, \ |
21 | 23 | embedding_by_problem, delete_embedding_by_source |
| 24 | +from knowledge.task.generate import generate_related_by_paragraph_id_list |
22 | 25 |
|
23 | 26 |
|
24 | 27 | class ParagraphSerializer(serializers.ModelSerializer): |
@@ -47,6 +50,15 @@ class EditParagraphSerializers(serializers.Serializer): |
47 | 50 | problem_list = ProblemInstanceSerializer(required=False, many=True) |
48 | 51 |
|
49 | 52 |
|
| 53 | +class ParagraphBatchGenerateRelatedSerializer(serializers.Serializer): |
| 54 | + paragraph_id_list = serializers.ListField(required=True, label=_('paragraph id list'), |
| 55 | + child=serializers.UUIDField(required=True, label=_('paragraph id'))) |
| 56 | + model_id = serializers.UUIDField(required=True, label=_('model id')) |
| 57 | + prompt = serializers.CharField(required=True, label=_('prompt'), max_length=102400, allow_null=True, |
| 58 | + allow_blank=True) |
| 59 | + document_id = serializers.UUIDField(required=True, label=_('document id')) |
| 60 | + |
| 61 | + |
50 | 62 | class ParagraphSerializers(serializers.Serializer): |
51 | 63 | title = serializers.CharField(required=False, max_length=256, label=_('section title'), allow_null=True, |
52 | 64 | allow_blank=True) |
@@ -379,6 +391,29 @@ def batch_delete(self, instance: Dict, with_valid=True): |
379 | 391 | delete_embedding_by_paragraph_ids(paragraph_id_list) |
380 | 392 | return True |
381 | 393 |
|
| 394 | + def batch_generate_related(self, instance: Dict, with_valid=True): |
| 395 | + if with_valid: |
| 396 | + self.is_valid(raise_exception=True) |
| 397 | + paragraph_id_list = instance.get("paragraph_id_list") |
| 398 | + model_id = instance.get("model_id") |
| 399 | + prompt = instance.get("prompt") |
| 400 | + document_id = self.data.get('document_id') |
| 401 | + ListenerManagement.update_status( |
| 402 | + QuerySet(Document).filter(id=document_id), |
| 403 | + TaskType.GENERATE_PROBLEM, |
| 404 | + State.PENDING |
| 405 | + ) |
| 406 | + ListenerManagement.update_status( |
| 407 | + QuerySet(Paragraph).filter(id__in=paragraph_id_list), |
| 408 | + TaskType.GENERATE_PROBLEM, |
| 409 | + State.PENDING |
| 410 | + ) |
| 411 | + ListenerManagement.get_aggregation_document_status(document_id)() |
| 412 | + try: |
| 413 | + generate_related_by_paragraph_id_list.delay(document_id, paragraph_id_list, model_id, prompt) |
| 414 | + except AlreadyQueued as e: |
| 415 | + raise AppApiException(500, _('The task is being executed, please do not send it again.')) |
| 416 | + |
382 | 417 |
|
383 | 418 | def delete_problems_and_mappings(paragraph_ids): |
384 | 419 | problem_paragraph_mappings = ProblemParagraphMapping.objects.filter(paragraph_id__in=paragraph_ids) |
|
0 commit comments