mirror of
https://github.com/langgenius/dify.git
synced 2026-03-26 00:38:03 +08:00
Made-with: Cursor # Conflicts: # api/controllers/console/app/workflow_draft_variable.py # api/core/agent/cot_agent_runner.py # api/core/agent/cot_chat_agent_runner.py # api/core/agent/cot_completion_agent_runner.py # api/core/agent/fc_agent_runner.py # api/core/app/apps/advanced_chat/app_generator.py # api/core/app/apps/advanced_chat/app_runner.py # api/core/app/apps/agent_chat/app_runner.py # api/core/app/apps/workflow/app_generator.py # api/core/app/apps/workflow/app_runner.py # api/core/app/entities/app_invoke_entities.py # api/core/app/entities/queue_entities.py # api/core/llm_generator/output_parser/structured_output.py # api/core/workflow/workflow_entry.py # api/dify_graph/context/__init__.py # api/dify_graph/entities/tool_entities.py # api/dify_graph/file/file_manager.py # api/dify_graph/graph_engine/response_coordinator/coordinator.py # api/dify_graph/graph_events/node.py # api/dify_graph/node_events/node.py # api/dify_graph/nodes/agent/agent_node.py # api/dify_graph/nodes/llm/entities.py # api/dify_graph/nodes/llm/llm_utils.py # api/dify_graph/nodes/llm/node.py # api/dify_graph/nodes/question_classifier/question_classifier_node.py # api/dify_graph/runtime/graph_runtime_state.py # api/dify_graph/variables/segments.py # api/factories/variable_factory.py # api/services/variable_truncator.py # api/tests/unit_tests/utils/structured_output_parser/test_structured_output_parser.py # api/uv.lock # web/app/components/app-sidebar/app-info.tsx # web/app/components/app-sidebar/app-sidebar-dropdown.tsx # web/app/components/app/create-app-modal/index.spec.tsx # web/app/components/apps/__tests__/list.spec.tsx # web/app/components/apps/app-card.tsx # web/app/components/apps/list.tsx # web/app/components/header/account-dropdown/compliance.tsx # web/app/components/header/account-dropdown/index.tsx # web/app/components/header/account-dropdown/support.tsx # web/app/components/workflow-app/components/workflow-onboarding-modal/index.tsx # web/app/components/workflow/panel/debug-and-preview/hooks.ts # web/contract/console/apps.ts # web/contract/router.ts # web/eslint-suppressions.json # web/next.config.ts # 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")
|