feat(cv): qualify templates and reliable local import processing
This commit is contained in:
@@ -155,13 +155,13 @@ public sealed class AiOperationWorker(
|
||||
private readonly IReadOnlyDictionary<string, IAiOperationHandler> _handlers = registeredHandlers
|
||||
.ToDictionary(handler => handler.TaskType, StringComparer.Ordinal);
|
||||
|
||||
public async Task<bool> RunOnceAsync(CancellationToken stoppingToken)
|
||||
public async Task<bool> RunOnceAsync(CancellationToken stoppingToken, bool documentImportsOnly = false)
|
||||
{
|
||||
if (_handlers.Count == 0) return false;
|
||||
var leaseSeconds = Math.Clamp(configuration.GetValue("AiQueue:LeaseSeconds", 120), 30, 1800);
|
||||
await using var claimScope = scopes.CreateAsyncScope();
|
||||
var lease = await claimScope.ServiceProvider.GetRequiredService<UserOperationStore>()
|
||||
.ClaimNextAsync(TimeSpan.FromSeconds(leaseSeconds), stoppingToken, _handlers.Keys.ToArray());
|
||||
.ClaimNextAsync(TimeSpan.FromSeconds(leaseSeconds), stoppingToken, _handlers.Keys.ToArray(), documentImportsOnly);
|
||||
if (lease is null) return false;
|
||||
|
||||
await using var ownerScope = scopes.CreateAsyncScope();
|
||||
@@ -255,17 +255,18 @@ public sealed class AiOperationHostedService(AiOperationWorker worker, IConfigur
|
||||
{
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
if (!configuration.GetValue("Workers:AiOperationsEnabled", false)) return;
|
||||
var aiEnabled = configuration.GetValue("Workers:AiOperationsEnabled", false);
|
||||
if (!aiEnabled && !configuration.GetValue("Workers:CvDocumentImportsEnabled", false)) return;
|
||||
var concurrency = Math.Clamp(configuration.GetValue("AiQueue:WorkerConcurrency", 1), 1, 4);
|
||||
await Task.WhenAll(Enumerable.Range(0, concurrency).Select(_ => RunWorkerAsync(stoppingToken)));
|
||||
await Task.WhenAll(Enumerable.Range(0, concurrency).Select(_ => RunWorkerAsync(stoppingToken, !aiEnabled)));
|
||||
}
|
||||
|
||||
private async Task RunWorkerAsync(CancellationToken stoppingToken)
|
||||
private async Task RunWorkerAsync(CancellationToken stoppingToken, bool documentImportsOnly)
|
||||
{
|
||||
var idleDelayMs = Math.Clamp(configuration.GetValue("AiQueue:IdleDelayMs", 1000), 100, 10_000);
|
||||
while (!stoppingToken.IsCancellationRequested)
|
||||
{
|
||||
if (!await worker.RunOnceAsync(stoppingToken))
|
||||
if (!await worker.RunOnceAsync(stoppingToken, documentImportsOnly))
|
||||
await Task.Delay(idleDelayMs, stoppingToken);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user