from rest_framework import serializers from .models import AgentPrompt, AgentSettings, EmbeddingSession class AgentPromptSerializer(serializers.ModelSerializer): id = serializers.IntegerField(required=False) class Meta: model = AgentPrompt fields = ["id", "content", "is_active"] class AgentSettingsSerializer(serializers.ModelSerializer): prompts = AgentPromptSerializer(many=True) class Meta: model = AgentSettings fields = ["id", "updated_at", "prompts"] read_only_fields = ["id", "updated_at"] def update(self, instance, validated_data): prompts_data = validated_data.pop("prompts", []) instance = super().update(instance, validated_data) existing_prompts = {prompt.id: prompt for prompt in instance.prompts.all()} kept_prompt_ids: list[int] = [] for prompt_data in prompts_data: prompt_id = prompt_data.pop("id", None) if prompt_id and prompt_id in existing_prompts: prompt = existing_prompts[prompt_id] prompt.content = prompt_data.get("content", prompt.content) prompt.is_active = prompt_data.get("is_active", prompt.is_active) prompt.save(update_fields=["content", "is_active"]) kept_prompt_ids.append(prompt.id) else: prompt = AgentPrompt.objects.create(settings=instance, **prompt_data) kept_prompt_ids.append(prompt.id) instance.prompts.exclude(id__in=kept_prompt_ids).delete() instance.save() return instance class EmbeddingSessionSerializer(serializers.ModelSerializer): class Meta: model = EmbeddingSession fields = [ "id", "status", "progress", "processed_items", "total_items", "error_message", "created_at", ] read_only_fields = fields