From 69924ac76e3db78d376b0b06b1a45ab29716f9fd Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 10 Oct 2025 21:21:04 +0000 Subject: [PATCH 1/2] fix: Uncomment previous_response_id to maintain conversation context across loop iterations Co-Authored-By: AJ Steers --- connector_builder_agents/src/run.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/connector_builder_agents/src/run.py b/connector_builder_agents/src/run.py index de315a4..ed5c9ee 100644 --- a/connector_builder_agents/src/run.py +++ b/connector_builder_agents/src/run.py @@ -257,7 +257,7 @@ async def run_manager_developer_build( try: # We loop until the manager calls the `mark_job_success` or `mark_job_failed` tool. - # prev_response_id: str | None = None + prev_response_id: str | None = None all_run_results = [] while not is_complete(session_state): run_result: RunResult = await Runner.run( @@ -265,10 +265,12 @@ async def run_manager_developer_build( input=run_prompt, max_turns=MAX_CONNECTOR_BUILD_STEPS, session=session, - # previous_response_id=prev_response_id, + previous_response_id=prev_response_id, ) all_run_results.append(run_result) # Collect all run results - # prev_response_id = run_result.raw_responses[-1].response_id if run_result.raw_responses else None + prev_response_id = ( + run_result.raw_responses[-1].response_id if run_result.raw_responses else None + ) status_msg = f"\n🤖 {run_result.last_agent.name}: {run_result.final_output}" update_progress_log(status_msg, session_state) run_prompt = ( From caacc1dc5b29ddaa9a8343e27cfee9211c34d8ad Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 10 Oct 2025 21:44:12 +0000 Subject: [PATCH 2/2] fix: Add inline comment explaining SQLiteSession incompatibility with previous_response_id Co-Authored-By: AJ Steers --- connector_builder_agents/src/run.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/connector_builder_agents/src/run.py b/connector_builder_agents/src/run.py index ed5c9ee..4fc7725 100644 --- a/connector_builder_agents/src/run.py +++ b/connector_builder_agents/src/run.py @@ -257,7 +257,12 @@ async def run_manager_developer_build( try: # We loop until the manager calls the `mark_job_success` or `mark_job_failed` tool. - prev_response_id: str | None = None + # NOTE: previous_response_id is incompatible with SQLiteSession. SQLiteSession automatically + # maintains full conversation history across Runner.run() calls through persistent storage. + # Passing previous_response_id explicitly includes a response that SQLiteSession already loaded, + # causing OpenAI API to reject the request with "Duplicate item found with id ...". + # See: https://pypi.org/project/openai-agents/ for SQLiteSession documentation. + # prev_response_id: str | None = None all_run_results = [] while not is_complete(session_state): run_result: RunResult = await Runner.run( @@ -265,12 +270,12 @@ async def run_manager_developer_build( input=run_prompt, max_turns=MAX_CONNECTOR_BUILD_STEPS, session=session, - previous_response_id=prev_response_id, + # previous_response_id=prev_response_id, ) all_run_results.append(run_result) # Collect all run results - prev_response_id = ( - run_result.raw_responses[-1].response_id if run_result.raw_responses else None - ) + # prev_response_id = ( + # run_result.raw_responses[-1].response_id if run_result.raw_responses else None + # ) status_msg = f"\n🤖 {run_result.last_agent.name}: {run_result.final_output}" update_progress_log(status_msg, session_state) run_prompt = (