feat(cv-import): add source-grounded review and explicit corrections
This commit is contained in:
@@ -74,7 +74,7 @@ public sealed class CvProcessingOperationHandler : IAiOperationHandler
|
||||
services,
|
||||
runId,
|
||||
operation?.CancellationRequestedAtUtc is null ? "queued" : "cancelled",
|
||||
operation?.CancellationRequestedAtUtc is null ? "CV processing timed out and may be retried." : "CV processing was cancelled.");
|
||||
operation?.CancellationRequestedAtUtc is null ? "CV processing timed out and may be retried." : "CV processing was cancelled.", context.Lease);
|
||||
throw;
|
||||
}
|
||||
if (outcome is null)
|
||||
@@ -88,7 +88,7 @@ public sealed class CvProcessingOperationHandler : IAiOperationHandler
|
||||
var canRetry = operation is not null && operation.AttemptCount < operation.MaxAttempts &&
|
||||
(operation.DeadlineAtUtc is null || operation.DeadlineAtUtc > DateTime.UtcNow);
|
||||
if (!canRetry)
|
||||
await SetRunStatusAsync(services, runId, "failed", outcome.FailureMessage ?? "CV processing failed.");
|
||||
await SetRunStatusAsync(services, runId, "failed", outcome.FailureMessage ?? "CV processing failed.", context.Lease);
|
||||
}
|
||||
|
||||
if (outcome.Provider is not null || outcome.Model is not null || outcome.RouteReason is not null)
|
||||
@@ -108,18 +108,20 @@ public sealed class CvProcessingOperationHandler : IAiOperationHandler
|
||||
outcome.Retryable);
|
||||
}
|
||||
|
||||
var isDocumentImport = await services.GetRequiredService<JobTrackerContext>().CvExtractionRuns.Where(r => r.Id == runId).Select(r => r.ParserVersion).FirstAsync(cancellationToken) == ProfileCvController.DocumentParserVersion;
|
||||
return new AiOperationExecutionResult(
|
||||
$"/api/profile-cv/runs/{runId}/{(await services.GetRequiredService<JobTrackerContext>().CvExtractionRuns.Where(r => r.Id == runId).Select(r => r.ParserVersion).FirstAsync(cancellationToken) == ProfileCvController.DocumentParserVersion ? "review" : "diff")}",
|
||||
$"/api/profile-cv/runs/{runId}/{(isDocumentImport ? "review" : "diff")}",
|
||||
outcome.Provider,
|
||||
outcome.Model,
|
||||
outcome.RouteReason ?? "cv_pipeline");
|
||||
outcome.RouteReason ?? (isDocumentImport ? "cv_review_ready" : "cv_pipeline"));
|
||||
}
|
||||
|
||||
private static Task<int> SetRunStatusAsync(IServiceProvider services, int runId, string status, string message)
|
||||
private static Task<int> SetRunStatusAsync(IServiceProvider services, int runId, string status, string message, UserOperationLease lease)
|
||||
{
|
||||
var completedAtUtc = status == "failed" || status == "cancelled" ? DateTimeOffset.UtcNow : (DateTimeOffset?)null;
|
||||
return services.GetRequiredService<JobTrackerContext>().CvExtractionRuns
|
||||
.Where(run => run.Id == runId && run.Status != "expired" && run.Status != "applied")
|
||||
var db = services.GetRequiredService<JobTrackerContext>();
|
||||
return db.CvExtractionRuns
|
||||
.Where(run => run.Id == runId && (run.Status == "running" || run.Status == "queued") && db.UserOperations.Any(o => o.Id == lease.OperationId && o.LeaseToken == lease.LeaseToken && o.Status == OperationStatuses.Running))
|
||||
.ExecuteUpdateAsync(setters => setters
|
||||
.SetProperty(run => run.Status, status)
|
||||
.SetProperty(run => run.ErrorMessage, message)
|
||||
|
||||
Reference in New Issue
Block a user