Files
dify/api/fields/message_fields.py
T
+51
qiuqiuaGitHubQuantumGhost盐粒 YanliwangxiaoleiStephen Zhougemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>Cursxautofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>lif非法操作Asuka Minatofenglinqiaofenglin-LAN-TomoOkuyamaTomo Okuyamadependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>zyssyz123hj24Coding On StarCodingOnStaryyhXiangxuan QufghpdfcoopercoderzhaiguangpengJunyan QinE.GGlobalStar117Claude Haiku 4.5CodingOnStarcrazywoolaheysztNeatGuyCodingYeuolyzxhlyhmoonpandawarlocgaogithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>claude[bot] <41898282+claude[bot]@users.noreply.github.com>KVOJJJineuxbangjiehanFFXNJyongNie RonghuaJQSevenMiaojiasiqiSeokrin Taron SungCrabSAMACopilotyihongJoelWu TianweiyesseniaJaxniveshdandyanOSS ContributorniveshdandyanSean Kenneth Doherty
9ef6b90843 feat: sync main branch (#31938)
Signed-off-by: majiayu000 <[email protected]>
Signed-off-by: dependabot[bot] <[email protected]>
Signed-off-by: NeatGuyCoding <[email protected]>
Signed-off-by: -LAN- <[email protected]>
Signed-off-by: yihong0618 <[email protected]>
Co-authored-by: QuantumGhost <[email protected]>
Co-authored-by: 盐粒 Yanli <[email protected]>
Co-authored-by: wangxiaolei <[email protected]>
Co-authored-by: Stephen Zhou <[email protected]>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Cursx <[email protected]>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: lif <[email protected]>
Co-authored-by: 非法操作 <[email protected]>
Co-authored-by: Asuka Minato <[email protected]>
Co-authored-by: fenglin <[email protected]>
Co-authored-by: qiaofenglin <[email protected]>
Co-authored-by: -LAN- <[email protected]>
Co-authored-by: TomoOkuyama <[email protected]>
Co-authored-by: Tomo Okuyama <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: zyssyz123 <[email protected]>
Co-authored-by: hj24 <[email protected]>
Co-authored-by: Coding On Star <[email protected]>
Co-authored-by: CodingOnStar <[email protected]>
Co-authored-by: yyh <[email protected]>
Co-authored-by: Xiangxuan Qu <[email protected]>
Co-authored-by: fghpdf <[email protected]>
Co-authored-by: coopercoder <[email protected]>
Co-authored-by: zhaiguangpeng <[email protected]>
Co-authored-by: Junyan Qin (Chin) <[email protected]>
Co-authored-by: E.G <[email protected]>
Co-authored-by: GlobalStar117 <[email protected]>
Co-authored-by: Claude Haiku 4.5 <[email protected]>
Co-authored-by: CodingOnStar <[email protected]>
Co-authored-by: crazywoola <[email protected]>
Co-authored-by: heyszt <[email protected]>
Co-authored-by: NeatGuyCoding <[email protected]>
Co-authored-by: Yeuoly <[email protected]>
Co-authored-by: zxhlyh <[email protected]>
Co-authored-by: moonpanda <[email protected]>
Co-authored-by: warlocgao <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: KVOJJJin <[email protected]>
Co-authored-by: eux <[email protected]>
Co-authored-by: bangjiehan <[email protected]>
Co-authored-by: FFXN <[email protected]>
Co-authored-by: Jyong <[email protected]>
Co-authored-by: Nie Ronghua <[email protected]>
Co-authored-by: JQSevenMiao <[email protected]>
Co-authored-by: jiasiqi <[email protected]>
Co-authored-by: Seokrin Taron Sung <[email protected]>
Co-authored-by: CrabSAMA <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: yihong <[email protected]>
Co-authored-by: Joel <[email protected]>
Co-authored-by: Wu Tianwei <[email protected]>
Co-authored-by: yessenia <[email protected]>
Co-authored-by: Jax <[email protected]>
Co-authored-by: niveshdandyan <[email protected]>
Co-authored-by: OSS Contributor <[email protected]>
Co-authored-by: niveshdandyan <[email protected]>
Co-authored-by: Sean Kenneth Doherty <[email protected]>
2026-02-04 19:04:24 +08:00

140 lines
4.1 KiB
Python

from __future__ import annotations
from datetime import datetime
from typing import TypeAlias
from uuid import uuid4
from pydantic import BaseModel, ConfigDict, Field, field_validator
from core.file import File
from fields.conversation_fields import AgentThought, JSONValue, MessageFile
JSONValueType: TypeAlias = JSONValue
class ResponseModel(BaseModel):
model_config = ConfigDict(from_attributes=True, extra="ignore")
class SimpleFeedback(ResponseModel):
rating: str | None = None
class RetrieverResource(ResponseModel):
id: str = Field(default_factory=lambda: str(uuid4()))
message_id: str = Field(default_factory=lambda: str(uuid4()))
position: int
dataset_id: str | None = None
dataset_name: str | None = None
document_id: str | None = None
document_name: str | None = None
data_source_type: str | None = None
segment_id: str | None = None
score: float | None = None
hit_count: int | None = None
word_count: int | None = None
segment_position: int | None = None
index_node_hash: str | None = None
content: str | None = None
summary: str | None = None
created_at: int | None = None
@field_validator("created_at", mode="before")
@classmethod
def _normalize_created_at(cls, value: datetime | int | None) -> int | None:
if isinstance(value, datetime):
return to_timestamp(value)
return value
class MessageListItem(ResponseModel):
id: str
conversation_id: str
parent_message_id: str | None = None
inputs: dict[str, JSONValueType]
query: str
answer: str = Field(validation_alias="re_sign_file_url_answer")
feedback: SimpleFeedback | None = Field(default=None, validation_alias="user_feedback")
retriever_resources: list[RetrieverResource]
created_at: int | None = None
agent_thoughts: list[AgentThought]
message_files: list[MessageFile]
status: str
error: str | None = None
@field_validator("inputs", mode="before")
@classmethod
def _normalize_inputs(cls, value: JSONValueType) -> JSONValueType:
return format_files_contained(value)
@field_validator("created_at", mode="before")
@classmethod
def _normalize_created_at(cls, value: datetime | int | None) -> int | None:
if isinstance(value, datetime):
return to_timestamp(value)
return value
class WebMessageListItem(MessageListItem):
metadata: JSONValueType | None = Field(default=None, validation_alias="message_metadata_dict")
class MessageInfiniteScrollPagination(ResponseModel):
limit: int
has_more: bool
data: list[MessageListItem]
class WebMessageInfiniteScrollPagination(ResponseModel):
limit: int
has_more: bool
data: list[WebMessageListItem]
class SavedMessageItem(ResponseModel):
id: str
inputs: dict[str, JSONValueType]
query: str
answer: str
message_files: list[MessageFile]
feedback: SimpleFeedback | None = Field(default=None, validation_alias="user_feedback")
created_at: int | None = None
@field_validator("inputs", mode="before")
@classmethod
def _normalize_inputs(cls, value: JSONValueType) -> JSONValueType:
return format_files_contained(value)
@field_validator("created_at", mode="before")
@classmethod
def _normalize_created_at(cls, value: datetime | int | None) -> int | None:
if isinstance(value, datetime):
return to_timestamp(value)
return value
class SavedMessageInfiniteScrollPagination(ResponseModel):
limit: int
has_more: bool
data: list[SavedMessageItem]
class SuggestedQuestionsResponse(ResponseModel):
data: list[str]
def to_timestamp(value: datetime | None) -> int | None:
if value is None:
return None
return int(value.timestamp())
def format_files_contained(value: JSONValueType) -> JSONValueType:
if isinstance(value, File):
return value.model_dump()
if isinstance(value, dict):
return {k: format_files_contained(v) for k, v in value.items()}
if isinstance(value, list):
return [format_files_contained(v) for v in value]
return value