Files
dify/api/fields/app_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

252 lines
8.4 KiB
Python

import json
from flask_restx import fields
from fields.workflow_fields import workflow_partial_fields
from libs.helper import AppIconUrlField, TimestampField
class JsonStringField(fields.Raw):
def format(self, value):
if isinstance(value, str):
try:
return json.loads(value)
except (json.JSONDecodeError, TypeError):
return value
return value
app_detail_kernel_fields = {
"id": fields.String,
"name": fields.String,
"description": fields.String,
"mode": fields.String(attribute="mode_compatible_with_agent"),
"icon_type": fields.String,
"icon": fields.String,
"icon_background": fields.String,
"icon_url": AppIconUrlField,
}
related_app_list = {
"data": fields.List(fields.Nested(app_detail_kernel_fields)),
"total": fields.Integer,
}
model_config_fields = {
"opening_statement": fields.String,
"suggested_questions": fields.Raw(attribute="suggested_questions_list"),
"suggested_questions_after_answer": fields.Raw(attribute="suggested_questions_after_answer_dict"),
"speech_to_text": fields.Raw(attribute="speech_to_text_dict"),
"text_to_speech": fields.Raw(attribute="text_to_speech_dict"),
"retriever_resource": fields.Raw(attribute="retriever_resource_dict"),
"annotation_reply": fields.Raw(attribute="annotation_reply_dict"),
"more_like_this": fields.Raw(attribute="more_like_this_dict"),
"sensitive_word_avoidance": fields.Raw(attribute="sensitive_word_avoidance_dict"),
"external_data_tools": fields.Raw(attribute="external_data_tools_list"),
"model": fields.Raw(attribute="model_dict"),
"user_input_form": fields.Raw(attribute="user_input_form_list"),
"dataset_query_variable": fields.String,
"pre_prompt": fields.String,
"agent_mode": fields.Raw(attribute="agent_mode_dict"),
"prompt_type": fields.String,
"chat_prompt_config": fields.Raw(attribute="chat_prompt_config_dict"),
"completion_prompt_config": fields.Raw(attribute="completion_prompt_config_dict"),
"dataset_configs": fields.Raw(attribute="dataset_configs_dict"),
"file_upload": fields.Raw(attribute="file_upload_dict"),
"created_by": fields.String,
"created_at": TimestampField,
"updated_by": fields.String,
"updated_at": TimestampField,
}
tag_fields = {"id": fields.String, "name": fields.String, "type": fields.String}
app_detail_fields = {
"id": fields.String,
"name": fields.String,
"description": fields.String,
"mode": fields.String(attribute="mode_compatible_with_agent"),
"icon": fields.String,
"icon_background": fields.String,
"enable_site": fields.Boolean,
"enable_api": fields.Boolean,
"model_config": fields.Nested(model_config_fields, attribute="app_model_config", allow_null=True),
"workflow": fields.Nested(workflow_partial_fields, allow_null=True),
"tracing": fields.Raw,
"use_icon_as_answer_icon": fields.Boolean,
"created_by": fields.String,
"created_at": TimestampField,
"updated_by": fields.String,
"updated_at": TimestampField,
"access_mode": fields.String,
"tags": fields.List(fields.Nested(tag_fields)),
"permission_keys": fields.List(fields.String()),
}
prompt_config_fields = {
"prompt_template": fields.String,
}
model_config_partial_fields = {
"model": fields.Raw(attribute="model_dict"),
"pre_prompt": fields.String,
"created_by": fields.String,
"created_at": TimestampField,
"updated_by": fields.String,
"updated_at": TimestampField,
}
app_partial_fields = {
"id": fields.String,
"name": fields.String,
"max_active_requests": fields.Raw(),
"description": fields.String(attribute="desc_or_prompt"),
"mode": fields.String(attribute="mode_compatible_with_agent"),
"icon_type": fields.String,
"icon": fields.String,
"icon_background": fields.String,
"icon_url": AppIconUrlField,
"model_config": fields.Nested(model_config_partial_fields, attribute="app_model_config", allow_null=True),
"workflow": fields.Nested(workflow_partial_fields, allow_null=True),
"use_icon_as_answer_icon": fields.Boolean,
"created_by": fields.String,
"created_at": TimestampField,
"updated_by": fields.String,
"updated_at": TimestampField,
"tags": fields.List(fields.Nested(tag_fields)),
"access_mode": fields.String,
"create_user_name": fields.String,
"author_name": fields.String,
"has_draft_trigger": fields.Boolean,
"permission_keys": fields.List(fields.String()),
}
app_pagination_fields = {
"page": fields.Integer,
"limit": fields.Integer(attribute="per_page"),
"total": fields.Integer,
"has_more": fields.Boolean(attribute="has_next"),
"data": fields.List(fields.Nested(app_partial_fields), attribute="items"),
}
template_fields = {
"name": fields.String,
"icon": fields.String,
"icon_background": fields.String,
"description": fields.String,
"mode": fields.String,
"model_config": fields.Nested(model_config_fields),
}
template_list_fields = {
"data": fields.List(fields.Nested(template_fields)),
}
site_fields = {
"access_token": fields.String(attribute="code"),
"code": fields.String,
"title": fields.String,
"icon_type": fields.String,
"icon": fields.String,
"icon_background": fields.String,
"icon_url": AppIconUrlField,
"description": fields.String,
"default_language": fields.String,
"chat_color_theme": fields.String,
"chat_color_theme_inverted": fields.Boolean,
"customize_domain": fields.String,
"copyright": fields.String,
"privacy_policy": fields.String,
"custom_disclaimer": fields.String,
"customize_token_strategy": fields.String,
"prompt_public": fields.Boolean,
"app_base_url": fields.String,
"show_workflow_steps": fields.Boolean,
"use_icon_as_answer_icon": fields.Boolean,
"created_by": fields.String,
"created_at": TimestampField,
"updated_by": fields.String,
"updated_at": TimestampField,
}
deleted_tool_fields = {
"type": fields.String,
"tool_name": fields.String,
"provider_id": fields.String,
}
app_detail_fields_with_site = {
"id": fields.String,
"name": fields.String,
"description": fields.String,
"mode": fields.String(attribute="mode_compatible_with_agent"),
"icon_type": fields.String,
"icon": fields.String,
"icon_background": fields.String,
"icon_url": AppIconUrlField,
"enable_site": fields.Boolean,
"enable_api": fields.Boolean,
"model_config": fields.Nested(model_config_fields, attribute="app_model_config", allow_null=True),
"workflow": fields.Nested(workflow_partial_fields, allow_null=True),
"api_base_url": fields.String,
"use_icon_as_answer_icon": fields.Boolean,
"max_active_requests": fields.Integer,
"created_by": fields.String,
"created_at": TimestampField,
"updated_by": fields.String,
"updated_at": TimestampField,
"deleted_tools": fields.List(fields.Nested(deleted_tool_fields)),
"access_mode": fields.String,
"tags": fields.List(fields.Nested(tag_fields)),
"permission_keys": fields.List(fields.String()),
"site": fields.Nested(site_fields),
}
app_site_fields = {
"app_id": fields.String,
"access_token": fields.String(attribute="code"),
"code": fields.String,
"title": fields.String,
"icon": fields.String,
"icon_background": fields.String,
"description": fields.String,
"default_language": fields.String,
"customize_domain": fields.String,
"copyright": fields.String,
"privacy_policy": fields.String,
"custom_disclaimer": fields.String,
"customize_token_strategy": fields.String,
"prompt_public": fields.Boolean,
"show_workflow_steps": fields.Boolean,
"use_icon_as_answer_icon": fields.Boolean,
}
leaked_dependency_fields = {"type": fields.String, "value": fields.Raw, "current_identifier": fields.String}
app_import_fields = {
"id": fields.String,
"status": fields.String,
"app_id": fields.String,
"app_mode": fields.String,
"current_dsl_version": fields.String,
"imported_dsl_version": fields.String,
"error": fields.String,
}
app_import_check_dependencies_fields = {
"leaked_dependencies": fields.List(fields.Nested(leaked_dependency_fields)),
}
app_server_fields = {
"id": fields.String,
"name": fields.String,
"server_code": fields.String,
"description": fields.String,
"status": fields.String,
"parameters": JsonStringField,
"created_at": TimestampField,
"updated_at": TimestampField,
}