Skip to content

Commit 746ef88

Browse files
authored
Merge pull request #86 from codelion/fix-error-trace-in-logs
Improve error logging and handle stale feature map references
2 parents 656e153 + 2d7abb0 commit 746ef88

File tree

4 files changed

+25
-17
lines changed

4 files changed

+25
-17
lines changed

examples/circle_packing_with_artifacts/evaluator.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -295,9 +295,9 @@ def evaluate(program_path):
295295
# Add successful packing stats for good solutions
296296
if valid and target_ratio > 0.95: # Near-optimal solutions
297297
artifacts["stdout"] = f"Excellent packing! Achieved {target_ratio:.1%} of target value"
298-
artifacts["radius_stats"] = (
299-
f"Min: {validation_details['min_radius']:.6f}, Max: {validation_details['max_radius']:.6f}, Avg: {validation_details['avg_radius']:.6f}"
300-
)
298+
artifacts[
299+
"radius_stats"
300+
] = f"Min: {validation_details['min_radius']:.6f}, Max: {validation_details['max_radius']:.6f}, Avg: {validation_details['avg_radius']:.6f}"
301301

302302
return EvaluationResult(
303303
metrics={
@@ -404,9 +404,9 @@ def evaluate_stage1(program_path):
404404

405405
# Add validation issues if any
406406
if not valid:
407-
artifacts["stderr"] = (
408-
f"Validation failed: {len(validation_details.get('boundary_violations', []))} boundary violations, {len(validation_details.get('overlaps', []))} overlaps"
409-
)
407+
artifacts[
408+
"stderr"
409+
] = f"Validation failed: {len(validation_details.get('boundary_violations', []))} boundary violations, {len(validation_details.get('overlaps', []))} overlaps"
410410
artifacts["failure_stage"] = "stage1_geometric_validation"
411411
if validation_details.get("boundary_violations"):
412412
artifacts["boundary_issues"] = validation_details["boundary_violations"][

examples/mlx_metal_kernel_opt/run_benchmarks.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -457,9 +457,7 @@ def print_comparison_summary(comparison_results):
457457
print(f" ⏱️ Average Time Reduction: {summary['avg_time_reduction_pct']:+.2f}%")
458458

459459
print(f"\n📊 ABSOLUTE PERFORMANCE:")
460-
print(
461-
f" 🔵 Standard MLX-LM: {summary['avg_standard_decode_speed']:.1f} tokens/sec average"
462-
)
460+
print(f" 🔵 Standard MLX-LM: {summary['avg_standard_decode_speed']:.1f} tokens/sec average")
463461
print(
464462
f" 🟠 Metal Kernel Optimized: {summary['avg_optimized_decode_speed']:.1f} tokens/sec average"
465463
)

openevolve/controller.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -376,9 +376,7 @@ async def run(
376376

377377
# Specifically check if this is the new best program
378378
if self.database.best_program_id == child_program.id:
379-
logger.info(
380-
f"🌟 New best solution found at iteration {i+1}: {child_program.id}"
381-
)
379+
logger.info(f"🌟 New best solution found at iteration {i+1}: {child_program.id}")
382380
logger.info(f"Metrics: {format_metrics_safe(child_program.metrics)}")
383381

384382
# Save checkpoint
@@ -405,8 +403,7 @@ async def run(
405403
break
406404

407405
except Exception as e:
408-
logger.error(f"Error in iteration {i+1}: {str(e)}")
409-
traceback.print_exc()
406+
logger.exception(f"Error in iteration {i+1}: {str(e)}")
410407
continue
411408

412409
# Get the best program using our tracking mechanism

openevolve/database.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,22 @@ def add(
161161

162162
# Add to feature map (replacing existing if better)
163163
feature_key = self._feature_coords_to_key(feature_coords)
164-
if feature_key not in self.feature_map or self._is_better(
165-
program, self.programs[self.feature_map[feature_key]]
166-
):
164+
should_replace = feature_key not in self.feature_map
165+
166+
if not should_replace:
167+
# Check if the existing program still exists before comparing
168+
existing_program_id = self.feature_map[feature_key]
169+
if existing_program_id not in self.programs:
170+
# Stale reference, replace it
171+
should_replace = True
172+
logger.debug(
173+
f"Replacing stale program reference {existing_program_id} in feature map"
174+
)
175+
else:
176+
# Program exists, compare fitness
177+
should_replace = self._is_better(program, self.programs[existing_program_id])
178+
179+
if should_replace:
167180
self.feature_map[feature_key] = program.id
168181

169182
# Add to specific island (not random!)

0 commit comments

Comments
 (0)