Files
dify/api/fields/dataset_fields.py
fatelei 4c15e16f59 Merge remote-tracking branch 'upstream/main' into feat/rbac
# Conflicts:
#	.github/workflows/cli-tests.yml
#	api/clients/agent_backend/__init__.py
#	api/clients/agent_backend/request_builder.py
#	api/controllers/console/app/app.py
#	api/controllers/console/app/mcp_server.py
#	api/controllers/console/workspace/members.py
#	api/controllers/openapi/__init__.py
#	api/controllers/openapi/_models.py
#	api/controllers/openapi/account.py
#	api/controllers/openapi/app_run.py
#	api/controllers/openapi/apps.py
#	api/controllers/openapi/apps_permitted_external.py
#	api/controllers/openapi/auth/__init__.py
#	api/controllers/openapi/auth/composition.py
#	api/controllers/openapi/auth/pipeline.py
#	api/controllers/openapi/files.py
#	api/controllers/openapi/human_input_form.py
#	api/controllers/openapi/workflow_events.py
#	api/controllers/openapi/workspaces.py
#	api/core/workflow/node_factory.py
#	api/core/workflow/nodes/agent_v2/agent_node.py
#	api/core/workflow/nodes/agent_v2/runtime_request_builder.py
#	api/libs/oauth_bearer.py
#	api/models/agent_config_entities.py
#	api/openapi/markdown/openapi-swagger.md
#	api/services/account_service.py
#	api/tests/unit_tests/clients/agent_backend/test_request_builder.py
#	api/tests/unit_tests/controllers/console/test_workspace_members.py
#	api/tests/unit_tests/controllers/console/workspace/test_members.py
#	api/tests/unit_tests/controllers/openapi/auth/test_composition.py
#	api/tests/unit_tests/controllers/openapi/auth/test_pipeline.py
#	api/tests/unit_tests/controllers/openapi/conftest.py
#	api/tests/unit_tests/controllers/openapi/test_account.py
#	api/tests/unit_tests/controllers/openapi/test_app_run_streaming.py
#	api/tests/unit_tests/controllers/openapi/test_human_input_form.py
#	api/tests/unit_tests/controllers/openapi/test_workflow_events_openapi.py
#	api/tests/unit_tests/core/workflow/nodes/agent_v2/test_agent_node.py
#	api/tests/unit_tests/core/workflow/nodes/agent_v2/test_runtime_request_builder.py
#	api/tests/unit_tests/libs/test_oauth_bearer_rate_limit_ordering.py
#	api/tests/unit_tests/libs/test_oauth_bearer_require_scope.py
#	api/tests/unit_tests/libs/test_workspace_member_helper.py
#	api/tests/unit_tests/services/test_oauth_device_flow.py
#	cli/AGENTS.md
#	cli/ARD.md
#	cli/package.json
#	cli/src/api/account-sessions.ts
#	cli/src/api/app-meta.test.ts
#	cli/src/api/workspaces.ts
#	cli/src/auth/file-backend.test.ts
#	cli/src/auth/file-backend.ts
#	cli/src/auth/hosts.test.ts
#	cli/src/auth/hosts.ts
#	cli/src/cache/app-info.test.ts
#	cli/src/cache/app-info.ts
#	cli/src/cache/nudge-store.test.ts
#	cli/src/cache/nudge-store.ts
#	cli/src/commands/_shared/authed-command.ts
#	cli/src/commands/auth/devices/_shared/devices.test.ts
#	cli/src/commands/auth/devices/_shared/devices.ts
#	cli/src/commands/auth/devices/list/index.ts
#	cli/src/commands/auth/login/index.ts
#	cli/src/commands/auth/login/login.test.ts
#	cli/src/commands/auth/login/login.ts
#	cli/src/commands/auth/logout/index.ts
#	cli/src/commands/auth/logout/logout.test.ts
#	cli/src/commands/auth/logout/logout.ts
#	cli/src/commands/auth/status/index.ts
#	cli/src/commands/auth/status/status.test.ts
#	cli/src/commands/auth/status/status.ts
#	cli/src/commands/auth/whoami/index.ts
#	cli/src/commands/auth/whoami/whoami.test.ts
#	cli/src/commands/auth/whoami/whoami.ts
#	cli/src/commands/config/get/index.ts
#	cli/src/commands/config/get/run.test.ts
#	cli/src/commands/config/get/run.ts
#	cli/src/commands/config/path/index.ts
#	cli/src/commands/config/set/index.ts
#	cli/src/commands/config/set/run.test.ts
#	cli/src/commands/config/set/run.ts
#	cli/src/commands/config/unset/index.ts
#	cli/src/commands/config/unset/run.test.ts
#	cli/src/commands/config/unset/run.ts
#	cli/src/commands/config/view/index.ts
#	cli/src/commands/config/view/run.test.ts
#	cli/src/commands/config/view/run.ts
#	cli/src/commands/describe/app/run.test.ts
#	cli/src/commands/describe/app/run.ts
#	cli/src/commands/env/list/run-list.ts
#	cli/src/commands/get/app/run.ts
#	cli/src/commands/get/workspace/run.ts
#	cli/src/commands/resume/app/run.ts
#	cli/src/commands/run/app/_strategies/streaming-structured.ts
#	cli/src/commands/run/app/_strategies/streaming-text.ts
#	cli/src/commands/run/app/handlers.ts
#	cli/src/commands/run/app/hitl-render.ts
#	cli/src/commands/run/app/run.test.ts
#	cli/src/commands/run/app/run.ts
#	cli/src/commands/run/app/stream-handlers.ts
#	cli/src/commands/tree.generated.ts
#	cli/src/commands/version/index.ts
#	cli/src/env/registry.ts
#	cli/src/errors/format.ts
#	cli/src/util/browser.ts
#	cli/src/version/info.ts
#	cli/src/version/nudge.test.ts
#	cli/src/version/nudge.ts
#	cli/src/version/probe.test.ts
#	cli/src/version/probe.ts
#	cli/src/version/render.ts
#	cli/src/workspace/resolver.ts
#	cli/tsconfig.json
#	eslint-suppressions.json
#	packages/contracts/generated/api/console/apps/types.gen.ts
#	packages/contracts/generated/api/console/apps/zod.gen.ts
#	packages/contracts/generated/api/openapi/orpc.gen.ts
#	packages/contracts/generated/api/openapi/types.gen.ts
#	packages/contracts/generated/api/openapi/zod.gen.ts
#	packages/dify-ui/README.md
#	pnpm-lock.yaml
#	web/app/components/app/app-publisher/index.tsx
#	web/app/components/app/app-publisher/sections.tsx
#	web/app/components/app/create-app-modal/__tests__/index.spec.tsx
#	web/app/components/app/create-app-modal/index.tsx
#	web/app/components/app/duplicate-modal/__tests__/index.spec.tsx
#	web/app/components/base/chip/index.tsx
#	web/app/components/datasets/list/dataset-card/index.tsx
#	web/app/components/datasets/list/datasets.tsx
#	web/app/components/datasets/settings/form/components/basic-info-section.tsx
#	web/app/components/rag-pipeline/components/rag-pipeline-header/run-mode.tsx
#	web/app/components/tools/edit-custom-collection-modal/index.tsx
#	web/app/components/tools/mcp/__tests__/index.spec.tsx
#	web/app/components/tools/mcp/index.tsx
#	web/app/components/tools/provider-list.tsx
#	web/app/components/tools/workflow-tool/__tests__/configure-button.spec.tsx
2026-05-28 14:01:01 +08:00

283 lines
8.6 KiB
Python

from datetime import datetime
from flask_restx import fields
from pydantic import Field, field_validator
from fields.base import ResponseModel
from libs.helper import TimestampField, to_timestamp
dataset_fields = {
"id": fields.String,
"name": fields.String,
"description": fields.String,
"permission": fields.String,
"data_source_type": fields.String,
"indexing_technique": fields.String,
"created_by": fields.String,
"created_at": TimestampField,
"permission_keys": fields.List(fields.String()),
}
class DatasetMetadataResponse(ResponseModel):
id: str
type: str
name: str
class DatasetMetadataListItemResponse(ResponseModel):
id: str
name: str
type: str
count: int = 0
class DatasetMetadataListResponse(ResponseModel):
doc_metadata: list[DatasetMetadataListItemResponse]
built_in_field_enabled: bool
class DatasetMetadataBuiltInFieldResponse(ResponseModel):
name: str
type: str
class DatasetMetadataBuiltInFieldsResponse(ResponseModel):
fields: list[DatasetMetadataBuiltInFieldResponse]
class DatasetMetadataActionResponse(ResponseModel):
result: str
reranking_model_fields = {"reranking_provider_name": fields.String, "reranking_model_name": fields.String}
keyword_setting_fields = {"keyword_weight": fields.Float}
vector_setting_fields = {
"vector_weight": fields.Float,
"embedding_model_name": fields.String,
"embedding_provider_name": fields.String,
}
weighted_score_fields = {
"weight_type": fields.String,
"keyword_setting": fields.Nested(keyword_setting_fields),
"vector_setting": fields.Nested(vector_setting_fields),
}
dataset_retrieval_model_fields = {
"search_method": fields.String,
"reranking_enable": fields.Boolean,
"reranking_mode": fields.String,
"reranking_model": fields.Nested(reranking_model_fields),
"weights": fields.Nested(weighted_score_fields, allow_null=True),
"top_k": fields.Integer,
"score_threshold_enabled": fields.Boolean,
"score_threshold": fields.Float,
}
dataset_summary_index_fields = {
"enable": fields.Boolean,
"model_name": fields.String,
"model_provider_name": fields.String,
"summary_prompt": fields.String,
}
external_retrieval_model_fields = {
"top_k": fields.Integer,
"score_threshold": fields.Float,
"score_threshold_enabled": fields.Boolean,
}
tag_fields = {"id": fields.String, "name": fields.String, "type": fields.String}
external_knowledge_info_fields = {
"external_knowledge_id": fields.String,
"external_knowledge_api_id": fields.String,
"external_knowledge_api_name": fields.String,
"external_knowledge_api_endpoint": fields.String,
}
doc_metadata_fields = {"id": fields.String, "name": fields.String, "type": fields.String}
icon_info_fields = {
"icon_type": fields.String,
"icon": fields.String,
"icon_background": fields.String,
"icon_url": fields.String,
}
dataset_detail_fields = {
"id": fields.String,
"name": fields.String,
"description": fields.String,
"provider": fields.String,
"permission": fields.String,
"data_source_type": fields.String,
"indexing_technique": fields.String,
"app_count": fields.Integer,
"document_count": fields.Integer,
"word_count": fields.Integer,
"created_by": fields.String,
"author_name": fields.String,
"created_at": TimestampField,
"updated_by": fields.String,
"updated_at": TimestampField,
"embedding_model": fields.String,
"embedding_model_provider": fields.String,
"embedding_available": fields.Boolean,
"retrieval_model_dict": fields.Nested(dataset_retrieval_model_fields),
"summary_index_setting": fields.Nested(dataset_summary_index_fields),
"tags": fields.List(fields.Nested(tag_fields)),
"doc_form": fields.String,
"external_knowledge_info": fields.Nested(external_knowledge_info_fields),
"external_retrieval_model": fields.Nested(external_retrieval_model_fields, allow_null=True),
"doc_metadata": fields.List(fields.Nested(doc_metadata_fields)),
"built_in_field_enabled": fields.Boolean,
"pipeline_id": fields.String,
"runtime_mode": fields.String,
"chunk_structure": fields.String,
"icon_info": fields.Nested(icon_info_fields),
"is_published": fields.Boolean,
"total_documents": fields.Integer,
"total_available_documents": fields.Integer,
"enable_api": fields.Boolean,
"is_multimodal": fields.Boolean,
"permission_keys": fields.List(fields.String()),
}
class DatasetRerankingModelResponse(ResponseModel):
reranking_provider_name: str | None = None
reranking_model_name: str | None = None
class DatasetKeywordSettingResponse(ResponseModel):
keyword_weight: float | None = None
class DatasetVectorSettingResponse(ResponseModel):
vector_weight: float | None = None
embedding_model_name: str | None = None
embedding_provider_name: str | None = None
class DatasetWeightedScoreResponse(ResponseModel):
weight_type: str | None = None
keyword_setting: DatasetKeywordSettingResponse = Field(default_factory=DatasetKeywordSettingResponse)
vector_setting: DatasetVectorSettingResponse = Field(default_factory=DatasetVectorSettingResponse)
@field_validator("keyword_setting", "vector_setting", mode="before")
@classmethod
def _expand_null_nested(cls, value: object) -> object:
return {} if value is None else value
class DatasetRetrievalModelResponse(ResponseModel):
search_method: str
reranking_enable: bool
reranking_mode: str | None = None
reranking_model: DatasetRerankingModelResponse = Field(default_factory=DatasetRerankingModelResponse)
weights: DatasetWeightedScoreResponse | None = None
top_k: int
score_threshold_enabled: bool
score_threshold: float | None = None
@field_validator("reranking_model", mode="before")
@classmethod
def _expand_null_nested(cls, value: object) -> object:
return {} if value is None else value
class DatasetSummaryIndexSettingResponse(ResponseModel):
enable: bool | None = None
model_name: str | None = None
model_provider_name: str | None = None
summary_prompt: str | None = None
class DatasetTagResponse(ResponseModel):
id: str
name: str
type: str
class DatasetExternalKnowledgeInfoResponse(ResponseModel):
external_knowledge_id: str | None = None
external_knowledge_api_id: str | None = None
external_knowledge_api_name: str | None = None
external_knowledge_api_endpoint: str | None = None
class DatasetExternalRetrievalModelResponse(ResponseModel):
top_k: int
score_threshold: float | None = None
score_threshold_enabled: bool | None = None
class DatasetDocMetadataResponse(ResponseModel):
id: str
name: str
type: str
class DatasetIconInfoResponse(ResponseModel):
icon_type: str | None = None
icon: str | None = None
icon_background: str | None = None
icon_url: str | None = None
class DatasetDetailResponse(ResponseModel):
id: str
name: str
description: str | None
provider: str
permission: str
data_source_type: str | None
indexing_technique: str | None
app_count: int
document_count: int
word_count: int
created_by: str
author_name: str | None
created_at: int
updated_by: str | None
updated_at: int
embedding_model: str | None
embedding_model_provider: str | None
embedding_available: bool | None = None
retrieval_model_dict: DatasetRetrievalModelResponse
summary_index_setting: DatasetSummaryIndexSettingResponse = Field(
default_factory=DatasetSummaryIndexSettingResponse
)
tags: list[DatasetTagResponse]
doc_form: str | None
external_knowledge_info: DatasetExternalKnowledgeInfoResponse = Field(
default_factory=DatasetExternalKnowledgeInfoResponse
)
external_retrieval_model: DatasetExternalRetrievalModelResponse | None
doc_metadata: list[DatasetDocMetadataResponse]
built_in_field_enabled: bool
pipeline_id: str | None
runtime_mode: str | None
chunk_structure: str | None
icon_info: DatasetIconInfoResponse = Field(default_factory=DatasetIconInfoResponse)
is_published: bool
total_documents: int
total_available_documents: int
enable_api: bool
is_multimodal: bool
permission_keys: list[str] = Field(default_factory=list)
@field_validator("created_at", "updated_at", mode="before")
@classmethod
def _normalize_timestamp(cls, value: datetime | int | None) -> int | None:
return to_timestamp(value)
@field_validator("summary_index_setting", "external_knowledge_info", "icon_info", mode="before")
@classmethod
def _expand_null_nested(cls, value: object) -> object:
return {} if value is None else value