瀏覽代碼

fix: Update variable handling in VariableAssignerNode and clean up app_dsl_service (#12672)

Signed-off-by: -LAN- <laipz8200@outlook.com>
tags/0.15.1
-LAN- 9 月之前
父節點
當前提交
c700364e1c
No account linked to committer's email address
共有 2 個文件被更改,包括 13 次插入14 次删除
  1. 12
    4
      api/core/workflow/nodes/variable_assigner/v2/node.py
  2. 1
    10
      api/services/app_dsl_service.py

+ 12
- 4
api/core/workflow/nodes/variable_assigner/v2/node.py 查看文件

@@ -1,4 +1,5 @@
import json
from collections.abc import Sequence
from typing import Any, cast

from core.variables import SegmentType, Variable
@@ -31,7 +32,7 @@ class VariableAssignerNode(BaseNode[VariableAssignerNodeData]):
inputs = self.node_data.model_dump()
process_data: dict[str, Any] = {}
# NOTE: This node has no outputs
updated_variables: list[Variable] = []
updated_variable_selectors: list[Sequence[str]] = []

try:
for item in self.node_data.items:
@@ -98,7 +99,8 @@ class VariableAssignerNode(BaseNode[VariableAssignerNodeData]):
value=item.value,
)
variable = variable.model_copy(update={"value": updated_value})
updated_variables.append(variable)
self.graph_runtime_state.variable_pool.add(variable.selector, variable)
updated_variable_selectors.append(variable.selector)
except VariableOperatorNodeError as e:
return NodeRunResult(
status=WorkflowNodeExecutionStatus.FAILED,
@@ -107,9 +109,15 @@ class VariableAssignerNode(BaseNode[VariableAssignerNodeData]):
error=str(e),
)

# The `updated_variable_selectors` is a list contains list[str] which not hashable,
# remove the duplicated items first.
updated_variable_selectors = list(set(map(tuple, updated_variable_selectors)))

# Update variables
for variable in updated_variables:
self.graph_runtime_state.variable_pool.add(variable.selector, variable)
for selector in updated_variable_selectors:
variable = self.graph_runtime_state.variable_pool.get(selector)
if not isinstance(variable, Variable):
raise VariableNotFoundError(variable_selector=selector)
process_data[variable.name] = variable.value

if variable.selector[0] == CONVERSATION_VARIABLE_NODE_ID:

+ 1
- 10
api/services/app_dsl_service.py 查看文件

@@ -1,7 +1,7 @@
import logging
import uuid
from enum import StrEnum
from typing import Optional, cast
from typing import Optional
from urllib.parse import urlparse
from uuid import uuid4

@@ -139,15 +139,6 @@ class AppDslService:
status=ImportStatus.FAILED,
error="Empty content from url",
)

try:
content = cast(bytes, content).decode("utf-8")
except UnicodeDecodeError as e:
return Import(
id=import_id,
status=ImportStatus.FAILED,
error=f"Error decoding content: {e}",
)
except Exception as e:
return Import(
id=import_id,

Loading…
取消
儲存