mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-04-08 03:00:28 -04:00
fix(rnd): Fix broken list input pin execution ordering & unlinked dynamic pins on save (#8108)
This commit is contained in:
@@ -23,7 +23,7 @@ class GetCurrentTimeBlock(Block):
|
||||
{"trigger": "Hello", "format": "{time}"},
|
||||
],
|
||||
test_output=[
|
||||
("time", time.strftime("%H:%M:%S")),
|
||||
("time", lambda _: time.strftime("%H:%M:%S")),
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
@@ -396,19 +396,19 @@ def merge_execution_input(data: BlockInput) -> BlockInput:
|
||||
|
||||
# Merge all input with <input_name>_$_<index> into a single list.
|
||||
items = list(data.items())
|
||||
list_input: list[Any] = []
|
||||
|
||||
for key, value in items:
|
||||
if LIST_SPLIT not in key:
|
||||
continue
|
||||
name, index = key.split(LIST_SPLIT)
|
||||
if not index.isdigit():
|
||||
list_input.append((name, value, 0))
|
||||
else:
|
||||
list_input.append((name, value, int(index)))
|
||||
raise ValueError(f"Invalid key: {key}, #{index} index must be an integer.")
|
||||
|
||||
for name, value, _ in sorted(list_input, key=lambda x: x[2]):
|
||||
data[name] = data.get(name, [])
|
||||
data[name].append(value)
|
||||
if int(index) >= len(data[name]):
|
||||
# Pad list with empty string on missing indices.
|
||||
data[name].extend([""] * (int(index) - len(data[name]) + 1))
|
||||
data[name][int(index)] = value
|
||||
|
||||
# Merge all input with <input_name>_#_<index> into a single dict.
|
||||
for key, value in items:
|
||||
|
||||
@@ -152,13 +152,13 @@ export function setNestedProperty(obj: any, path: string, value: any) {
|
||||
|
||||
export function removeEmptyStringsAndNulls(obj: any): any {
|
||||
if (Array.isArray(obj)) {
|
||||
// If obj is an array, recursively remove empty strings and nulls from its elements
|
||||
return obj
|
||||
.map((item) => removeEmptyStringsAndNulls(item))
|
||||
.filter(
|
||||
(item) =>
|
||||
item !== null && (typeof item !== "string" || item.trim() !== ""),
|
||||
);
|
||||
// If obj is an array, recursively check each element,
|
||||
// but element removal is avoided to prevent index changes.
|
||||
return obj.map((item) =>
|
||||
item === undefined || item === null
|
||||
? ""
|
||||
: removeEmptyStringsAndNulls(item),
|
||||
);
|
||||
} else if (typeof obj === "object" && obj !== null) {
|
||||
// If obj is an object, recursively remove empty strings and nulls from its properties
|
||||
for (const key in obj) {
|
||||
@@ -166,7 +166,8 @@ export function removeEmptyStringsAndNulls(obj: any): any {
|
||||
const value = obj[key];
|
||||
if (
|
||||
value === null ||
|
||||
(typeof value === "string" && value.trim() === "")
|
||||
value === undefined ||
|
||||
(typeof value === "string" && value === "")
|
||||
) {
|
||||
delete obj[key];
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user