diff --git a/apps/web/src/app/api/restart-run/route.ts b/apps/web/src/app/api/restart-run/route.ts index 7c255a77..f99e6e80 100644 --- a/apps/web/src/app/api/restart-run/route.ts +++ b/apps/web/src/app/api/restart-run/route.ts @@ -20,7 +20,11 @@ import { RestartRunRequest } from "./types"; import { Client, StreamMode, ThreadState } from "@langchain/langgraph-sdk"; import { ManagerGraphState } from "@openswe/shared/open-swe/manager/types"; import { PlannerGraphState } from "@openswe/shared/open-swe/planner/types"; -import { AgentSession, GraphState } from "@openswe/shared/open-swe/types"; +import { + AgentSession, + GraphConfig, + GraphState, +} from "@openswe/shared/open-swe/types"; import { END } from "@langchain/langgraph/web"; import { getCustomConfigurableFields } from "@openswe/shared/open-swe/utils/config"; @@ -60,10 +64,12 @@ async function createNewSession( threadState: ThreadState< ManagerGraphState | PlannerGraphState | GraphState >; + threadConfig: GraphConfig; }, ): Promise { const newThreadId = uuidv4(); const hasNext = inputs.threadState.next.length > 0; + const run = await client.runs.create(newThreadId, inputs.graphId, { command: { update: inputs.threadState.values, @@ -74,9 +80,7 @@ async function createNewSession( streamResumable: true, config: { recursion_limit: 400, - configurable: getCustomConfigurableFields( - inputs.threadState.metadata as Record, - ), + configurable: getCustomConfigurableFields(inputs.threadConfig), }, }); return { @@ -101,14 +105,25 @@ export async function POST(request: NextRequest): Promise { defaultHeaders: await getRequestHeaders(request), }); - const [managerThreadState, plannerThreadState, programmerThreadState] = - await Promise.all([ - langGraphClient.threads.getState(managerThreadId), - langGraphClient.threads.getState(plannerThreadId), - programmerThreadId - ? langGraphClient.threads.getState(programmerThreadId) - : null, - ]); + const [ + managerThread, + managerThreadState, + plannerThread, + plannerThreadState, + programmerThread, + programmerThreadState, + ] = await Promise.all([ + langGraphClient.threads.get(managerThreadId), + langGraphClient.threads.getState(managerThreadId), + langGraphClient.threads.get(plannerThreadId), + langGraphClient.threads.getState(plannerThreadId), + programmerThreadId + ? langGraphClient.threads.get(programmerThreadId) + : null, + programmerThreadId + ? langGraphClient.threads.getState(programmerThreadId) + : null, + ]); if (!managerThreadState || !plannerThreadState) { return NextResponse.json( { @@ -123,6 +138,7 @@ export async function POST(request: NextRequest): Promise { ? await createNewSession(langGraphClient, { graphId: PROGRAMMER_GRAPH_ID, threadState: programmerThreadState, + threadConfig: (programmerThread as Record)?.config, }) : undefined; @@ -140,6 +156,7 @@ export async function POST(request: NextRequest): Promise { ...plannerThreadState, values: newPlannerState, }, + threadConfig: (plannerThread as Record)?.config, }); const newManagerState: ManagerGraphState = { @@ -152,6 +169,7 @@ export async function POST(request: NextRequest): Promise { ...managerThreadState, values: newManagerState, }, + threadConfig: (managerThread as Record)?.config, }); return NextResponse.json({