from pr.config import MAX_AUTONOMOUS_ITERATIONS from pr.ui import Colors def is_task_complete(response, iteration): if 'error' in response: return True if 'choices' not in response or not response['choices']: return True message = response['choices'][0]['message'] content = message.get('content', '').lower() completion_keywords = [ 'task complete', 'task is complete', 'finished', 'done', 'successfully completed', 'task accomplished', 'all done', 'implementation complete', 'setup complete', 'installation complete' ] error_keywords = [ 'cannot proceed', 'unable to continue', 'fatal error', 'cannot complete', 'impossible to' ] has_tool_calls = 'tool_calls' in message and message['tool_calls'] mentions_completion = any(keyword in content for keyword in completion_keywords) mentions_error = any(keyword in content for keyword in error_keywords) if mentions_error: return True if mentions_completion and not has_tool_calls: return True if iteration > 5 and not has_tool_calls: return True if iteration >= MAX_AUTONOMOUS_ITERATIONS: print(f"{Colors.YELLOW}⚠ Maximum iterations reached{Colors.RESET}") return True return False