Something like this? You will have to adapt this to your specific use case.

a!localVariables(
local!lastZip: ri!map.zips[count(ri!map.zips)],
if(
local!lastZip.size + ri!file.size > 1000000,
a!update(
ri!map,
"zips",
append(
ri!map.zips,
a!map(files: {ri!file.name}, size: ri!file.size)
)
),
a!update(
ri!map,
"zips",
a!update(
ri!map.zips,
count(ri!map.zips),
a!map(
files: append(local!lastZip.files, ri!file.name),
size: local!lastZip.size + ri!file.size
)
)
)
)
)

a!localVariables(
local!files: a!forEach(
items: enumerate(rand() * 100),
expression: a!map(name: char(64 + fv!index), size: rand()*100000),
),
reduce(
rule!SSH_ZipBuilderHelper(map:_, file:_),
a!map(
zips: {
a!map(files: {}, size: 0)
}
),
local!files
)
)