diff --git a/RMuseum/Controllers/GanjoorController.cs b/RMuseum/Controllers/GanjoorController.cs index 356ff519..fabfd1b4 100644 --- a/RMuseum/Controllers/GanjoorController.cs +++ b/RMuseum/Controllers/GanjoorController.cs @@ -4464,28 +4464,32 @@ namespace RMuseum.Controllers /// /// fill couplet summaries using open ai /// + /// + /// /// [HttpPut("ai/generate/summaries")] [Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + SecurableItem.ModifyOperationShortName)] [ProducesResponseType((int)HttpStatusCode.OK)] [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] - public IActionResult OpenAIStartFillingCoupletSummaries() + public IActionResult OpenAIStartFillingCoupletSummaries(int startFrom = 0, int count = 0) { - _ganjoorService.OpenAIStartFillingCoupletSummaries(); + _ganjoorService.OpenAIStartFillingCoupletSummaries(startFrom, count); return Ok(); } /// /// fill poem summaries using open ai /// + /// + /// /// [HttpPut("ai/generate/poem/summaries")] [Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + SecurableItem.ModifyOperationShortName)] [ProducesResponseType((int)HttpStatusCode.OK)] [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] - public IActionResult OpenAIStartFillingPoemSummaries() + public IActionResult OpenAIStartFillingPoemSummaries(int startFrom = 0, int count = 0) { - _ganjoorService.OpenAIStartFillingPoemSummaries(); + _ganjoorService.OpenAIStartFillingPoemSummaries(startFrom, count); return Ok(); } diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml index f9437ffb..39b87af8 100644 --- a/RMuseum/RMuseum.xml +++ b/RMuseum/RMuseum.xml @@ -2289,16 +2289,20 @@ - + fill couplet summaries using open ai + + - + fill poem summaries using open ai + + @@ -16985,15 +16989,19 @@ - + fill couplet summaries using open ai + + - + fill poem summaries using open ai + + @@ -18919,15 +18927,19 @@ number of synched items - + fill couplet summaries using open ai + + - + fill poem summaries using open ai + + diff --git a/RMuseum/Services/IGanjoorService.cs b/RMuseum/Services/IGanjoorService.cs index b5ec9da1..b01281a6 100644 --- a/RMuseum/Services/IGanjoorService.cs +++ b/RMuseum/Services/IGanjoorService.cs @@ -1533,13 +1533,17 @@ namespace RMuseum.Services /// /// fill couplet summaries using open ai /// - void OpenAIStartFillingCoupletSummaries(); + /// + /// + void OpenAIStartFillingCoupletSummaries(int startFrom, int count); /// /// fill poem summaries using open ai /// - void OpenAIStartFillingPoemSummaries(); + /// + /// + void OpenAIStartFillingPoemSummaries(int startFrom, int count); } } diff --git a/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-OpenAI-CoupletSummaries.cs b/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-OpenAI-CoupletSummaries.cs index 494739e5..a8c52ea5 100644 --- a/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-OpenAI-CoupletSummaries.cs +++ b/RMuseum/Services/Implementation/GanjoorService-Partials/GanjoorService-OpenAI-CoupletSummaries.cs @@ -20,7 +20,9 @@ namespace RMuseum.Services.Implementation /// /// fill couplet summaries using open ai /// - public void OpenAIStartFillingCoupletSummaries() + /// + /// + public void OpenAIStartFillingCoupletSummaries(int startFrom, int count) { _backgroundTaskQueue.QueueBackgroundWorkItem ( @@ -29,7 +31,7 @@ namespace RMuseum.Services.Implementation using (RMuseumDbContext context = new RMuseumDbContext(new DbContextOptions())) //this is long running job, so _context might be already been freed/collected by GC { LongRunningJobProgressServiceEF jobProgressServiceEF = new LongRunningJobProgressServiceEF(context); - var job = (await jobProgressServiceEF.NewJob($"OpenAIFillCoupletSummaries", "Open AI initialization")).Result; + var job = (await jobProgressServiceEF.NewJob($"OpenAIFillCoupletSummaries - start: {startFrom} - count: {count}", "Open AI initialization")).Result; try { @@ -41,7 +43,10 @@ namespace RMuseum.Services.Implementation await jobProgressServiceEF.UpdateJob(job.Id, 0, "Query data"); - var verses = await context.GanjoorVerses.AsNoTracking() + var verses = + count == 0 ? + startFrom == 0 ? + await context.GanjoorVerses.AsNoTracking() .Where(v => ( v.VersePosition == VersePosition.Right @@ -55,7 +60,42 @@ namespace RMuseum.Services.Implementation && string.IsNullOrEmpty(v.CoupletSummary) ) - .ToListAsync(); + .ToListAsync() + : + await context.GanjoorVerses.AsNoTracking() + .Where(v => + ( + v.VersePosition == VersePosition.Right + || + v.VersePosition == VersePosition.CenteredVerse1 + || + v.VersePosition == VersePosition.Paragraph + ) + && + v.CoupletIndex != null + && + string.IsNullOrEmpty(v.CoupletSummary) + ) + .Skip(startFrom) + .ToListAsync() + : + await context.GanjoorVerses.AsNoTracking() + .Where(v => + ( + v.VersePosition == VersePosition.Right + || + v.VersePosition == VersePosition.CenteredVerse1 + || + v.VersePosition == VersePosition.Paragraph + ) + && + v.CoupletIndex != null + && + string.IsNullOrEmpty(v.CoupletSummary) + ) + .Skip(startFrom).Take(count) + .ToListAsync() + ; await jobProgressServiceEF.UpdateJob(job.Id, 0, $"Verse count = {verses.Count}"); for ( var i = 0; i < verses.Count; i++ ) @@ -128,7 +168,9 @@ namespace RMuseum.Services.Implementation /// /// fill poem summaries using open ai /// - public void OpenAIStartFillingPoemSummaries() + /// + /// + public void OpenAIStartFillingPoemSummaries(int startFrom, int count) { _backgroundTaskQueue.QueueBackgroundWorkItem ( @@ -137,7 +179,7 @@ namespace RMuseum.Services.Implementation using (RMuseumDbContext context = new RMuseumDbContext(new DbContextOptions())) //this is long running job, so _context might be already been freed/collected by GC { LongRunningJobProgressServiceEF jobProgressServiceEF = new LongRunningJobProgressServiceEF(context); - var job = (await jobProgressServiceEF.NewJob($"OpenAIStartFillingPoemSummaries", "Open AI initialization")).Result; + var job = (await jobProgressServiceEF.NewJob($"OpenAIStartFillingPoemSummaries - start: {startFrom} - count: {count}", "Open AI initialization")).Result; try { @@ -149,10 +191,28 @@ namespace RMuseum.Services.Implementation await jobProgressServiceEF.UpdateJob(job.Id, 0, "Query data"); - var poems = await context.GanjoorPoems.AsNoTracking() + var poems = + count == 0 ? + startFrom == 0 ? + await context.GanjoorPoems.AsNoTracking() .Where( p => string.IsNullOrEmpty(p.PoemSummary) ) + .ToListAsync() + : + await context.GanjoorPoems.AsNoTracking() + .Where( + p => string.IsNullOrEmpty(p.PoemSummary) + ) + .Skip(startFrom) + .ToListAsync() + : + await context.GanjoorPoems.AsNoTracking() + .Where( + p => string.IsNullOrEmpty(p.PoemSummary) + ) + .Skip(startFrom) + .Take(count) .ToListAsync(); await jobProgressServiceEF.UpdateJob(job.Id, 0, $"Poems count = {poems.Count}"); @@ -162,7 +222,7 @@ namespace RMuseum.Services.Implementation if (!string.IsNullOrEmpty(poem.PlainText)) { - await jobProgressServiceEF.UpdateJob(job.Id, i, $"{i} از {poems.Count}"); + await jobProgressServiceEF.UpdateJob(job.Id, i, $"{i} از {poems.Count} - {poem.FullTitle}"); string command = "به فارسی روان خلاصه کن:"; var completionResult = await openAiService.ChatCompletion.CreateCompletion(new ChatCompletionCreateRequest {