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 nextLevelStart = breakPosition
# Show opening structure for this level # 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
childIndent = indent + " " if isCutLevel and cutPiece:
cutPieceStripped = cutPiece.strip()
if isCutLevel: if (levelType == 'array' and cutPieceStripped.startswith('[')) or \
# Cut level: show cut piece (levelType == 'object' and cutPieceStripped.startswith('{')):
if cutPiece: # 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 + " "
for line in cutPiece.split('\n'): for line in cutPiece.split('\n'):
stripped = line.strip() stripped = line.strip()
if stripped: if stripped:
resultLines.append(f'{childIndent}{stripped}') resultLines.append(f'{childIndent}{stripped}')
resultLines[-1] += ' <-- CUT POINT (incomplete)' resultLines[-1] += ' <-- CUT POINT (incomplete)'
else: else:
resultLines.append(f'{childIndent}... <-- CUT POINT (incomplete)') # Cut piece doesn't start with matching bracket, add opening structure
resultLines.append(f'{indent}{{' if levelType == 'object' else f'{indent}[')
elif isParentOfCutLevel and levelType == 'array': childIndent = indent + " "
# Parent of cut level: show complete elements with budget 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:
# 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( completeElements = _findCompleteElementsAtLevel(
jsonContent, levelStart, nextLevelStart, levelDepth jsonContent, levelStart, nextLevelStart, levelDepth
) )
print(f"DEBUG: Found {len(completeElements)} complete elements")
print(f"DEBUG: Budget = {DATA_BUDGET}")
dataBudget = DATA_BUDGET dataBudget = DATA_BUDGET
for elementStart, elementEnd in reversed(completeElements): for elementStart, elementEnd in reversed(completeElements):
elementData = jsonContent[elementStart:elementEnd].strip() elementData = jsonContent[elementStart:elementEnd].strip()
elementSize = len(elementData) elementSize = len(elementData)
print(f"DEBUG: Element size = {elementSize}, remaining budget = {dataBudget}")
if elementSize == 0: if elementSize == 0:
continue continue
if elementSize > dataBudget: if elementSize > dataBudget:
print(f"DEBUG: Element too large, stopping")
break break
print(f"DEBUG: Adding element (size {elementSize})")
for line in elementData.split('\n'): for line in elementData.split('\n'):
stripped = line.strip() stripped = line.strip()
if stripped: if stripped:
@ -1443,14 +1457,14 @@ def buildIncompleteContext(jsonContent: str, breakPosition: int) -> str:
resultLines[-1] += ',' resultLines[-1] += ','
dataBudget -= elementSize dataBudget -= elementSize
print(f"DEBUG: Budget after decrement = {dataBudget}")
if dataBudget <= 0: if dataBudget <= 0:
print(f"DEBUG: Budget exhausted, stopping")
break break
else: 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() pathContent = jsonContent[levelStart + 1:nextLevelStart].strip()
if pathContent: if pathContent:
# Show all path content (structure is always shown, not truncated) # Show all path content (structure is always shown, not truncated)