| 154 | |
| 155 | |
| 156 | class DocumentEditInstanceSerializer(serializers.Serializer): |
| 157 | meta = serializers.DictField(required=False) |
| 158 | name = serializers.CharField( |
| 159 | required=False, max_length=128, min_length=1, label=_("document name"), source=_("document name") |
| 160 | ) |
| 161 | hit_handling_method = serializers.CharField( |
| 162 | required=False, |
| 163 | validators=[ |
| 164 | validators.RegexValidator( |
| 165 | regex=re.compile("^optimization|directly_return$"), |
| 166 | message=_("The type only supports optimization|directly_return"), |
| 167 | code=500, |
| 168 | ) |
| 169 | ], |
| 170 | label=_("hit handling method"), |
| 171 | ) |
| 172 | |
| 173 | directly_return_similarity = serializers.FloatField( |
| 174 | required=False, max_value=2, min_value=0, label=_("directly return similarity") |
| 175 | ) |
| 176 | |
| 177 | is_active = serializers.BooleanField(required=False, label=_("document is active")) |
| 178 | |
| 179 | @staticmethod |
| 180 | def get_meta_valid_map(): |
| 181 | knowledge_meta_valid_map = { |
| 182 | KnowledgeType.BASE: MetaSerializer.BaseMeta, |
| 183 | KnowledgeType.WEB: MetaSerializer.WebMeta, |
| 184 | } |
| 185 | return knowledge_meta_valid_map |
| 186 | |
| 187 | def is_valid(self, *, document: Document = None): |
| 188 | super().is_valid(raise_exception=True) |
| 189 | if "meta" in self.data and self.data.get("meta") is not None and self.data.get("meta") != {}: |
| 190 | knowledge_meta_valid_map = self.get_meta_valid_map() |
| 191 | valid_class = knowledge_meta_valid_map.get(document.type) |
| 192 | if valid_class is not None: |
| 193 | valid_class(data=self.data.get("meta")).is_valid(raise_exception=True) |
| 194 | |
| 195 | |
| 196 | class DocumentSplitRequest(serializers.Serializer): |