Files
dify/api/fields/hit_testing_fields.py

97 lines
2.2 KiB
Python

from datetime import datetime
from typing import Any
from pydantic import field_validator
from fields.base import ResponseModel
from libs.helper import to_timestamp
class HitTestingQuery(ResponseModel):
content: str
class HitTestingDocument(ResponseModel):
id: str
data_source_type: str
name: str
doc_type: str | None
doc_metadata: Any | None
@field_validator("data_source_type", "doc_type", mode="before")
@classmethod
def _normalize_enum_fields(cls, value: Any) -> Any:
return _normalize_enum(value)
class HitTestingSegment(ResponseModel):
id: str
position: int
document_id: str
content: str
sign_content: str | None
answer: str | None
word_count: int
tokens: int
keywords: list[str]
index_node_id: str | None
index_node_hash: str | None
hit_count: int
enabled: bool
disabled_at: int | None
disabled_by: str | None
status: str
created_by: str
created_at: int
indexing_at: int | None
completed_at: int | None
error: str | None
stopped_at: int | None
document: HitTestingDocument
@field_validator("disabled_at", "created_at", "indexing_at", "completed_at", "stopped_at", mode="before")
@classmethod
def _normalize_timestamp(cls, value: datetime | int | None) -> int | None:
return to_timestamp(value)
@field_validator("status", mode="before")
@classmethod
def _normalize_enum_fields(cls, value: Any) -> Any:
return _normalize_enum(value)
class HitTestingChildChunk(ResponseModel):
id: str
content: str
position: int
score: float
class HitTestingFile(ResponseModel):
id: str
name: str
size: int
extension: str
mime_type: str
source_url: str
class HitTestingRecord(ResponseModel):
segment: HitTestingSegment
child_chunks: list[HitTestingChildChunk]
score: float | None
tsne_position: Any | None
files: list[HitTestingFile]
summary: str | None
class HitTestingResponse(ResponseModel):
query: HitTestingQuery
records: list[HitTestingRecord]
def _normalize_enum(value: Any) -> Any:
if isinstance(value, str) or value is None:
return value
return getattr(value, "value", value)