fix: process.py to use validate_and_repair_json from utils.py (#4576)
Refactor process.py to use validate_and_repair_json from utils.py for nested dict tweaks
This commit is contained in:
parent
f78d3f40a5
commit
34b107b98e
2 changed files with 30 additions and 1 deletions
|
|
@ -6,6 +6,7 @@ from loguru import logger
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from langflow.graph.vertex.base import Vertex
|
from langflow.graph.vertex.base import Vertex
|
||||||
|
from langflow.processing.utils import validate_and_repair_json
|
||||||
from langflow.schema.graph import InputValue, Tweaks
|
from langflow.schema.graph import InputValue, Tweaks
|
||||||
from langflow.schema.schema import INPUT_FIELD_NAME
|
from langflow.schema.schema import INPUT_FIELD_NAME
|
||||||
from langflow.services.deps import get_settings_service
|
from langflow.services.deps import get_settings_service
|
||||||
|
|
@ -142,7 +143,10 @@ def apply_tweaks(node: dict[str, Any], node_tweaks: dict[str, Any]) -> None:
|
||||||
if tweak_name not in template_data:
|
if tweak_name not in template_data:
|
||||||
continue
|
continue
|
||||||
if tweak_name in template_data:
|
if tweak_name in template_data:
|
||||||
if isinstance(tweak_value, dict):
|
if template_data[tweak_name]["type"] == "NestedDict":
|
||||||
|
value = validate_and_repair_json(tweak_value)
|
||||||
|
template_data[tweak_name]["value"] = value
|
||||||
|
elif isinstance(tweak_value, dict):
|
||||||
for k, v in tweak_value.items():
|
for k, v in tweak_value.items():
|
||||||
_k = "file_path" if template_data[tweak_name]["type"] == "file" else k
|
_k = "file_path" if template_data[tweak_name]["type"] == "file" else k
|
||||||
template_data[tweak_name][_k] = v
|
template_data[tweak_name][_k] = v
|
||||||
|
|
|
||||||
25
src/backend/base/langflow/processing/utils.py
Normal file
25
src/backend/base/langflow/processing/utils.py
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
import json
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from json_repair import repair_json
|
||||||
|
|
||||||
|
|
||||||
|
def validate_and_repair_json(json_str: str | dict) -> dict[str, Any] | str:
|
||||||
|
"""Validates a JSON string and attempts to repair it if invalid.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
json_str (str): The JSON string to validate/repair
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Union[Dict[str, Any], str]: The parsed JSON dict if valid/repairable,
|
||||||
|
otherwise returns the original string
|
||||||
|
"""
|
||||||
|
if not isinstance(json_str, str):
|
||||||
|
return json_str
|
||||||
|
try:
|
||||||
|
# If invalid, attempt repair
|
||||||
|
repaired = repair_json(json_str)
|
||||||
|
return json.loads(repaired)
|
||||||
|
except (json.JSONDecodeError, ImportError):
|
||||||
|
# Return original if repair fails or module not found
|
||||||
|
return json_str
|
||||||
Loading…
Add table
Add a link
Reference in a new issue