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