Skip to content

Commit

Permalink
fix: Update variable handling in VariableAssignerNode and clean up ap…
Browse files Browse the repository at this point in the history
…p_dsl_service (#12672)

Signed-off-by: -LAN- <[email protected]>
  • Loading branch information
laipz8200 authored Jan 13, 2025
1 parent 9a6b1dc commit c700364
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 14 deletions.
16 changes: 12 additions & 4 deletions api/core/workflow/nodes/variable_assigner/v2/node.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import json
from collections.abc import Sequence
from typing import Any, cast

from core.variables import SegmentType, Variable
Expand Down Expand Up @@ -31,7 +32,7 @@ def _run(self) -> NodeRunResult:
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:
Expand Down Expand Up @@ -98,7 +99,8 @@ def _run(self) -> NodeRunResult:
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,
Expand All @@ -107,9 +109,15 @@ def _run(self) -> NodeRunResult:
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:
Expand Down
11 changes: 1 addition & 10 deletions api/services/app_dsl_service.py
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -139,15 +139,6 @@ def import_app(
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,
Expand Down

0 comments on commit c700364

Please sign in to comment.