mirror of
https://mirror.skon.top/github.com/langgenius/dify.git
synced 2026-04-22 01:11:02 +08:00
# Conflicts: # .vite-hooks/pre-commit # api/controllers/console/__init__.py # api/core/agent/base_agent_runner.py # api/core/app/app_config/easy_ui_based_app/model_config/converter.py # api/core/app/apps/agent_chat/app_runner.py # api/core/entities/provider_configuration.py # api/core/helper/moderation.py # api/core/model_manager.py # api/core/rag/embedding/cached_embedding.py # api/core/rag/retrieval/dataset_retrieval.py # api/core/rag/splitter/fixed_text_splitter.py # api/core/workflow/nodes/datasource/datasource_node.py # api/core/workflow/nodes/knowledge_index/knowledge_index_node.py # api/models/human_input.py # api/providers/trace/trace-tencent/src/dify_trace_tencent/span_builder.py # api/services/workflow_service.py # api/tasks/trigger_processing_tasks.py # api/tests/integration_tests/core/workflow/nodes/datasource/test_datasource_node_integration.py # api/tests/integration_tests/workflow/nodes/test_http.py # api/tests/integration_tests/workflow/nodes/test_parameter_extractor.py # api/tests/unit_tests/controllers/service_api/app/test_conversation.py # api/tests/unit_tests/core/prompt/test_agent_history_prompt_transform.py # api/tests/unit_tests/core/variables/test_segment.py # api/tests/unit_tests/core/workflow/graph_engine/test_mock_factory.py # api/tests/unit_tests/core/workflow/nodes/answer/test_answer.py # api/tests/unit_tests/core/workflow/nodes/datasource/test_datasource_node.py # api/tests/unit_tests/core/workflow/nodes/http_request/test_http_request_node.py # api/tests/unit_tests/core/workflow/nodes/human_input/test_email_delivery_config.py # api/tests/unit_tests/services/workflow/test_workflow_human_input_delivery.py # web/app/(commonLayout)/layout.tsx # web/app/components/app/configuration/dataset-config/params-config/weighted-score.tsx # web/app/components/app/configuration/debug/debug-with-multiple-model/debug-item.tsx # web/app/components/app/workflow-log/__tests__/list.spec.tsx # web/app/components/apps/__tests__/list.spec.tsx # web/app/components/apps/list.tsx # web/app/components/base/chat/chat-with-history/header/operation.tsx # web/app/components/base/chat/chat-with-history/sidebar/operation.tsx # web/app/components/header/account-setting/data-source-page-new/operator.tsx # web/app/components/header/account-setting/members-page/operation/index.tsx # web/app/components/plugins/marketplace/sort-dropdown/__tests__/index.spec.tsx # web/app/components/plugins/marketplace/sort-dropdown/index.tsx # web/app/components/plugins/plugin-page/plugin-tasks/index.tsx # web/app/components/workflow/header/__tests__/test-run-menu.spec.tsx # web/app/components/workflow/header/test-run-menu.tsx # web/app/components/workflow/nodes/_base/components/next-step/operator.tsx # web/app/components/workflow/nodes/_base/components/panel-operator/index.tsx # web/app/components/workflow/nodes/assigner/components/__tests__/operation-selector.spec.tsx # web/app/components/workflow/nodes/assigner/components/operation-selector.tsx # web/app/components/workflow/operator/__tests__/more-actions.spec.tsx # web/app/components/workflow/operator/zoom-in-out.tsx # web/app/components/workflow/panel/version-history-panel/context-menu/menu-item.tsx # web/app/components/workflow/selection-contextmenu.tsx # web/eslint-suppressions.json Co-authored-by: FFXN <31929997+FFXN@users.noreply.github.com>
102 lines
3.7 KiB
Python
102 lines
3.7 KiB
Python
from flask_restx import fields
|
|
from graphon.variables import SecretVariable, SegmentType, VariableBase
|
|
|
|
from core.helper import encrypter
|
|
from fields.member_fields import simple_account_fields
|
|
from libs.helper import TimestampField
|
|
|
|
from ._value_type_serializer import serialize_value_type
|
|
|
|
ENVIRONMENT_VARIABLE_SUPPORTED_TYPES = (SegmentType.STRING, SegmentType.NUMBER, SegmentType.SECRET)
|
|
|
|
|
|
class EnvironmentVariableField(fields.Raw):
|
|
def format(self, value):
|
|
# Mask secret variables values in environment_variables
|
|
if isinstance(value, SecretVariable):
|
|
return {
|
|
"id": value.id,
|
|
"name": value.name,
|
|
"value": encrypter.full_mask_token(),
|
|
"value_type": value.value_type.value,
|
|
"description": value.description,
|
|
}
|
|
if isinstance(value, VariableBase):
|
|
return {
|
|
"id": value.id,
|
|
"name": value.name,
|
|
"value": value.value,
|
|
"value_type": str(value.value_type.exposed_type()),
|
|
"description": value.description,
|
|
}
|
|
if isinstance(value, dict):
|
|
value_type_str = value.get("value_type")
|
|
if not isinstance(value_type_str, str):
|
|
raise TypeError(
|
|
f"unexpected type for value_type field, value={value_type_str}, type={type(value_type_str)}"
|
|
)
|
|
value_type = SegmentType(value_type_str).exposed_type()
|
|
if value_type not in ENVIRONMENT_VARIABLE_SUPPORTED_TYPES:
|
|
raise ValueError(f"Unsupported environment variable value type: {value_type}")
|
|
return value
|
|
|
|
|
|
conversation_variable_fields = {
|
|
"id": fields.String,
|
|
"name": fields.String,
|
|
"value_type": fields.String(attribute=serialize_value_type),
|
|
"value": fields.Raw,
|
|
"description": fields.String,
|
|
}
|
|
|
|
pipeline_variable_fields = {
|
|
"label": fields.String,
|
|
"variable": fields.String,
|
|
"type": fields.String,
|
|
"belong_to_node_id": fields.String,
|
|
"max_length": fields.Integer,
|
|
"required": fields.Boolean,
|
|
"unit": fields.String,
|
|
"default_value": fields.Raw,
|
|
"options": fields.List(fields.String),
|
|
"placeholder": fields.String,
|
|
"tooltips": fields.String,
|
|
"allowed_file_types": fields.List(fields.String),
|
|
"allow_file_extension": fields.List(fields.String),
|
|
"allow_file_upload_methods": fields.List(fields.String),
|
|
}
|
|
|
|
workflow_fields = {
|
|
"id": fields.String,
|
|
"kind": fields.String(attribute="kind_or_standard"),
|
|
"graph": fields.Raw(attribute="graph_dict"),
|
|
"features": fields.Raw(attribute="features_dict"),
|
|
"hash": fields.String(attribute="unique_hash"),
|
|
"version": fields.String,
|
|
"marked_name": fields.String,
|
|
"marked_comment": fields.String,
|
|
"created_by": fields.Nested(simple_account_fields, attribute="created_by_account"),
|
|
"created_at": TimestampField,
|
|
"updated_by": fields.Nested(simple_account_fields, attribute="updated_by_account", allow_null=True),
|
|
"updated_at": TimestampField,
|
|
"tool_published": fields.Boolean,
|
|
"environment_variables": fields.List(EnvironmentVariableField()),
|
|
"conversation_variables": fields.List(fields.Nested(conversation_variable_fields)),
|
|
"rag_pipeline_variables": fields.List(fields.Nested(pipeline_variable_fields)),
|
|
}
|
|
|
|
workflow_partial_fields = {
|
|
"id": fields.String,
|
|
"created_by": fields.String,
|
|
"created_at": TimestampField,
|
|
"updated_by": fields.String,
|
|
"updated_at": TimestampField,
|
|
}
|
|
|
|
workflow_pagination_fields = {
|
|
"items": fields.List(fields.Nested(workflow_fields), attribute="items"),
|
|
"page": fields.Integer,
|
|
"limit": fields.Integer(attribute="limit"),
|
|
"has_more": fields.Boolean(attribute="has_more"),
|
|
}
|