fix: 修复 HarnessRL 真实重试状态机
This commit is contained in:
@@ -823,7 +823,7 @@ export async function recoverAgentTaskStage(context: CaseContext, run: PreparedC
|
||||
promptPath: path.join(run.runDir, "agent-prompt.md"),
|
||||
promptSha256: ""
|
||||
});
|
||||
const result = await pollAgentResult(context, { baseUrl, traceId, acceptedBody: { resultUrl }, resultUrl, run, agent: recoveredAgent });
|
||||
const result = await pollAgentResult(context, { baseUrl, traceId, acceptedBody: { resultUrl }, resultUrl, run, agent: recoveredAgent, notFoundCode: "agentrun_task_not_found" });
|
||||
const agent = agentWithResultEvidence({
|
||||
...recoveredAgent,
|
||||
stageStatus: result.stageStatus,
|
||||
@@ -919,7 +919,7 @@ async function submitAgentTask(context: CaseContext, input: { baseUrl: string; p
|
||||
}, "agent_task_submit");
|
||||
}
|
||||
|
||||
async function pollAgentResult(context: CaseContext, input: { baseUrl: string; traceId: string; acceptedBody: any; resultUrl?: string; run?: PreparedCaseRun; agent?: AgentRunStage }) {
|
||||
async function pollAgentResult(context: CaseContext, input: { baseUrl: string; traceId: string; acceptedBody: any; resultUrl?: string; run?: PreparedCaseRun; agent?: AgentRunStage; notFoundCode?: string }) {
|
||||
const requestedTimeoutMs = effectiveAgentTimeoutMs(context, input.run?.agentTask);
|
||||
const timeoutMs = Math.max(Math.min(requestedTimeoutMs, MAX_AGENT_TIMEOUT_MS), 1000);
|
||||
const pollIntervalMs = effectiveAgentPollIntervalMs(context, input.run?.agentTask);
|
||||
@@ -936,11 +936,14 @@ async function pollAgentResult(context: CaseContext, input: { baseUrl: string; t
|
||||
const response = await caseFetchJson(context, resultUrl, { method: "GET", headers: caseAgentHeaders(context) }, "agent_task_result");
|
||||
lastBody = response.body;
|
||||
lastStatus = response.status;
|
||||
if (!response.ok && response.status === 404 && input.notFoundCode) {
|
||||
throw Object.assign(new Error(`AgentRun task ${input.traceId} was not found`), { code: input.notFoundCode, traceId: input.traceId, status: response.status });
|
||||
}
|
||||
if (!response.ok) return { stageStatus: "result_request_failed", body: lastBody, polls, timedOut: false, lastPollAt, lastHttpStatus: lastStatus, error: response.error };
|
||||
if (input.run && input.agent) {
|
||||
const runningAgent = agentWithResultEvidence({ ...input.agent, stageStatus: "running", polls, timeoutMs, pollIntervalMs, resultUrl, lastPollAt, lastHttpStatus: lastStatus }, lastBody, input.run.agentTask);
|
||||
await updateRun(context, input.run, { stage: "agent-running", agent: runningAgent });
|
||||
}
|
||||
if (!response.ok) return { stageStatus: "result_request_failed", body: lastBody, polls, timedOut: false, lastPollAt, lastHttpStatus: lastStatus, error: response.error };
|
||||
const terminal = agentTerminalEvidence(lastBody);
|
||||
const status = text(lastBody?.status);
|
||||
if ((status && status !== "running") || terminal.terminal) {
|
||||
|
||||
Reference in New Issue
Block a user