mirror of
https://github.com/langgenius/dify.git
synced 2026-03-25 23:01:33 -04:00
Made-with: Cursor # Conflicts: # api/README.md # api/controllers/console/app/workflow_draft_variable.py # api/core/agent/cot_agent_runner.py # api/core/agent/fc_agent_runner.py # api/core/app/apps/advanced_chat/app_runner.py # api/core/plugin/backwards_invocation/model.py # api/core/prompt/advanced_prompt_transform.py # api/core/workflow/nodes/base/node.py # api/core/workflow/nodes/llm/llm_utils.py # api/core/workflow/nodes/llm/node.py # api/core/workflow/nodes/parameter_extractor/parameter_extractor_node.py # api/core/workflow/nodes/question_classifier/question_classifier_node.py # api/core/workflow/runtime/graph_runtime_state.py # api/extensions/storage/base_storage.py # api/factories/variable_factory.py # api/pyproject.toml # api/services/variable_truncator.py # api/uv.lock # web/app/account/oauth/authorize/page.tsx # web/app/components/app/configuration/config-var/config-modal/field.tsx # web/app/components/base/alert.tsx # web/app/components/base/chat/chat/answer/human-input-content/executed-action.tsx # web/app/components/base/chat/chat/answer/more.tsx # web/app/components/base/chat/chat/answer/operation.tsx # web/app/components/base/chat/chat/answer/workflow-process.tsx # web/app/components/base/chat/chat/citation/index.tsx # web/app/components/base/chat/chat/citation/popup.tsx # web/app/components/base/chat/chat/citation/progress-tooltip.tsx # web/app/components/base/chat/chat/citation/tooltip.tsx # web/app/components/base/chat/chat/question.tsx # web/app/components/base/chat/embedded-chatbot/inputs-form/index.tsx # web/app/components/base/chat/embedded-chatbot/inputs-form/view-form-dropdown.tsx # web/app/components/base/markdown-blocks/form.tsx # web/app/components/base/prompt-editor/plugins/hitl-input-block/component-ui.tsx # web/app/components/base/tag-management/panel.tsx # web/app/components/base/tag-management/trigger.tsx # web/app/components/header/account-setting/index.tsx # web/app/components/header/account-setting/members-page/transfer-ownership-modal/index.tsx # web/app/components/header/account-setting/model-provider-page/provider-added-card/index.tsx # web/app/signin/utils/post-login-redirect.ts # web/eslint-suppressions.json # web/package.json # web/pnpm-lock.yaml
38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
from collections.abc import Iterable, Sequence
|
|
from typing import Any
|
|
|
|
import orjson
|
|
|
|
from core.model_runtime.entities import PromptMessage
|
|
|
|
from .segment_group import SegmentGroup
|
|
from .segments import ArrayFileSegment, ArrayPromptMessageSegment, FileSegment, Segment
|
|
|
|
|
|
def to_selector(node_id: str, name: str, paths: Iterable[str] = ()) -> Sequence[str]:
|
|
selectors = [node_id, name]
|
|
if paths:
|
|
selectors.extend(paths)
|
|
return selectors
|
|
|
|
|
|
def segment_orjson_default(o: Any):
|
|
"""Default function for orjson serialization of Segment types"""
|
|
if isinstance(o, (ArrayFileSegment, ArrayPromptMessageSegment)):
|
|
return [v.model_dump() for v in o.value]
|
|
elif isinstance(o, FileSegment):
|
|
return o.value.model_dump()
|
|
elif isinstance(o, SegmentGroup):
|
|
return [segment_orjson_default(seg) for seg in o.value]
|
|
elif isinstance(o, Segment):
|
|
return o.value
|
|
elif isinstance(o, PromptMessage):
|
|
return o.model_dump()
|
|
raise TypeError(f"Object of type {type(o).__name__} is not JSON serializable")
|
|
|
|
|
|
def dumps_with_segments(obj: Any, ensure_ascii: bool = False) -> str:
|
|
"""JSON dumps with segment support using orjson"""
|
|
option = orjson.OPT_NON_STR_KEYS
|
|
return orjson.dumps(obj, default=segment_orjson_default, option=option).decode("utf-8")
|