fixed cut json handling

This commit is contained in:
ValueOn AG 2026-01-05 01:36:39 +01:00
parent 879a3c0eff
commit 25cbaa45b8

View file

@ -1397,44 +1397,58 @@ def buildIncompleteContext(jsonContent: str, breakPosition: int) -> str:
nextLevelStart = breakPosition
# Show opening structure for this level
resultLines.append(f'{indent}{{' if levelType == 'object' else f'{indent}[')
# For cut level, check if cut piece already starts with bracket/brace - if so, don't duplicate
if isCutLevel and cutPiece:
cutPieceStripped = cutPiece.strip()
if (levelType == 'array' and cutPieceStripped.startswith('[')) or \
(levelType == 'object' and cutPieceStripped.startswith('{')):
# Cut piece already includes opening bracket, don't add it separately
# Use parent level's child indent (cut element is a child of parent, not a separate level)
if levelIndex > 0:
parentLevel = hierarchy[levelIndex - 1]
parentIndent = " " * parentLevel['depth']
childIndent = parentIndent + " "
else:
childIndent = indent + " "
if isCutLevel:
# Cut level: show cut piece
if cutPiece:
for line in cutPiece.split('\n'):
stripped = line.strip()
if stripped:
resultLines.append(f'{childIndent}{stripped}')
resultLines[-1] += ' <-- CUT POINT (incomplete)'
else:
# Cut piece doesn't start with matching bracket, add opening structure
resultLines.append(f'{indent}{{' if levelType == 'object' else f'{indent}[')
childIndent = indent + " "
for line in cutPiece.split('\n'):
stripped = line.strip()
if stripped:
resultLines.append(f'{childIndent}{stripped}')
resultLines[-1] += ' <-- CUT POINT (incomplete)'
elif isCutLevel:
# Cut level but no cut piece - add opening structure
resultLines.append(f'{indent}{{' if levelType == 'object' else f'{indent}[')
childIndent = indent + " "
resultLines.append(f'{childIndent}... <-- CUT POINT (incomplete)')
elif isParentOfCutLevel and levelType == 'array':
# Parent of cut level: show complete elements with budget
elif isParentOfCutLevel:
# Parent of cut level: add opening structure, then show complete elements with budget
# Works for both arrays and objects
resultLines.append(f'{indent}{{' if levelType == 'object' else f'{indent}[')
childIndent = indent + " "
completeElements = _findCompleteElementsAtLevel(
jsonContent, levelStart, nextLevelStart, levelDepth
)
print(f"DEBUG: Found {len(completeElements)} complete elements")
print(f"DEBUG: Budget = {DATA_BUDGET}")
dataBudget = DATA_BUDGET
for elementStart, elementEnd in reversed(completeElements):
elementData = jsonContent[elementStart:elementEnd].strip()
elementSize = len(elementData)
print(f"DEBUG: Element size = {elementSize}, remaining budget = {dataBudget}")
if elementSize == 0:
continue
if elementSize > dataBudget:
print(f"DEBUG: Element too large, stopping")
break
print(f"DEBUG: Adding element (size {elementSize})")
for line in elementData.split('\n'):
stripped = line.strip()
if stripped:
@ -1443,14 +1457,14 @@ def buildIncompleteContext(jsonContent: str, breakPosition: int) -> str:
resultLines[-1] += ','
dataBudget -= elementSize
print(f"DEBUG: Budget after decrement = {dataBudget}")
if dataBudget <= 0:
print(f"DEBUG: Budget exhausted, stopping")
break
else:
# Other parent levels: show path content (keys and values) leading to next level
# Other parent levels: add opening structure, then show path content
resultLines.append(f'{indent}{{' if levelType == 'object' else f'{indent}[')
childIndent = indent + " "
pathContent = jsonContent[levelStart + 1:nextLevelStart].strip()
if pathContent:
# Show all path content (structure is always shown, not truncated)