You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

58 lines
1.9 KiB

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