using AiAgent.Core.Agents; using Microsoft.SemanticKernel.Agents; using System.Diagnostics; using System.IO.Compression; using static AiAgent.Core.Constant.ProgramConstants; using static AiAgent.Core.Helpers.GenericHelper; namespace AiAgent; internal class Program { static async Task Main(string[] args) { var startTime = DateTime.Now; InitialiseLog(); Log($"News AI - Automated Article Generation - Started at {startTime}"); Console.Clear(); Directory.CreateDirectory(Output); Directory.CreateDirectory(Archive); var agents = new List>> { Agents.TimeKeeper, Agents.RunNewsFinder, Agents.RunArchiveRetriever, Agents.RunNewsFeedAggregator, Agents.RunNewsAggregatesFiltering, Agents.RunArticlePicker, Agents.RunJournalist, Agents.RunTitleFinder, Agents.RunFactLister, //Agents.RunGeminiFactChecker, //Agents.RunFactCheckCompiler, Agents.RunIllustratorManager, Agents.RunIllustrator, Agents.RunPaginist, Agents.RunLandingPageEditor, Agents.RunUploader, Agents.RunArchivistSaver }; // Generate the article in a loop for (int articleIndex = 0; articleIndex < 200; articleIndex++) { Log($"Started article [{articleIndex}] at {startTime}"); var clock = Stopwatch.StartNew(); foreach (var agent in agents) { var result = await agent(); File.AppendAllText(Path.Combine(Archive, "Agent Results.csv"), $"{DateTime.Now},{articleIndex},{agent.Method.Name},{result}\n"); if (result == Results.Failed) break; } Console.WriteLine(""); Console.Write($"Completed"); // Create an article every 15 minutes var articleFrequency = TimeSpan.FromMinutes(15); while (clock.Elapsed < articleFrequency) { await Task.Delay(1000); Console.Write($"Article {articleIndex} completed. Next article in: {articleFrequency - clock.Elapsed}"); Console.SetCursorPosition(0, Console.CursorTop); } // Compress the output for archive and cleanup string zipName = Path.Combine(Archive, $"Article - {ArticleDateTime:yyyy-MM-dd HH-mm-ss}.zip"); if (File.Exists(zipName)) File.Delete(zipName); ZipFile.CreateFromDirectory(Output, zipName); // Cleanup the output folder for the next iteration foreach (var file in Directory.GetFiles(Output)) File.Delete(file); } Console.WriteLine($"\nProcess completed in {DateTime.Now - startTime}"); } }