Skip to content

Commit 2ebf217

Browse files
committed
fix
1 parent 2356bb9 commit 2ebf217

2 files changed

Lines changed: 26 additions & 15 deletions

File tree

codeflash/cli_cmds/console.py

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,9 @@ def code_print(
129129

130130
spinners = cycle(SPINNER_TYPES)
131131

132+
# Track whether a progress bar is already active to prevent nested Live displays
133+
_progress_bar_active = False
134+
132135

133136
@contextmanager
134137
def progress_bar(
@@ -138,28 +141,38 @@ def progress_bar(
138141
139142
If revert_to_print is True, falls back to printing a single logger.info message
140143
instead of showing a progress bar.
144+
145+
If a progress bar is already active, yields a dummy task ID to avoid Rich's
146+
LiveError from nested Live displays.
141147
"""
148+
global _progress_bar_active
149+
142150
if is_LSP_enabled():
143151
lsp_log(LspTextMessage(text=message, takes_time=True))
144152
yield
145153
return
146154

147-
if revert_to_print:
148-
logger.info(message)
155+
if revert_to_print or _progress_bar_active:
156+
if revert_to_print:
157+
logger.info(message)
149158

150159
# Create a fake task ID since we still need to yield something
151160
yield DummyTask().id
152161
else:
153-
progress = Progress(
154-
SpinnerColumn(next(spinners)),
155-
*Progress.get_default_columns(),
156-
TimeElapsedColumn(),
157-
console=console,
158-
transient=transient,
159-
)
160-
task = progress.add_task(message, total=None)
161-
with progress:
162-
yield task
162+
_progress_bar_active = True
163+
try:
164+
progress = Progress(
165+
SpinnerColumn(next(spinners)),
166+
*Progress.get_default_columns(),
167+
TimeElapsedColumn(),
168+
console=console,
169+
transient=transient,
170+
)
171+
task = progress.add_task(message, total=None)
172+
with progress:
173+
yield task
174+
finally:
175+
_progress_bar_active = False
163176

164177

165178
@contextmanager

codeflash/optimization/function_optimizer.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -369,9 +369,7 @@ def _process_candidates(
369369
logger.info(success_msg.format(len(candidates), self.candidate_len))
370370

371371
callback()
372-
# Call get_next_candidate() OUTSIDE the progress_bar context to avoid
373-
# nested progress bars (Rich only allows one active Live display at a time)
374-
return self.get_next_candidate()
372+
return self.get_next_candidate()
375373

376374
def _filter_refined_candidates(self, candidates: list[OptimizedCandidate]) -> list[OptimizedCandidate]:
377375
"""We generate a weighted ranking based on the runtime and diff lines and select the best of valid optimizations to be tested."""

0 commit comments

Comments
 (0)