fixed cut json handling
This commit is contained in:
parent
879a3c0eff
commit
25cbaa45b8
1 changed files with 34 additions and 20 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue