From 35e633dad70b0163864647252768e27ddcfa3824 Mon Sep 17 00:00:00 2001 From: Diego <53939730+DiegoIEC@users.noreply.github.com> Date: Thu, 30 Apr 2026 13:38:31 +0200 Subject: [PATCH] export with model responses --- Backend/Controllers/DataTransferController.cs | 118 ++++++++++++++++++ Backend/Dto/DataTransferDto.cs | 36 ++++++ 2 files changed, 154 insertions(+) diff --git a/Backend/Controllers/DataTransferController.cs b/Backend/Controllers/DataTransferController.cs index 8698937..117c6c5 100644 --- a/Backend/Controllers/DataTransferController.cs +++ b/Backend/Controllers/DataTransferController.cs @@ -18,6 +18,124 @@ public DataTransferController(AIMeasureDbContext context) _context = context; } + [HttpGet("export/all")] + public async Task> ExportAll() + { + var sources = await _context.Sources + .AsNoTracking() + .OrderBy(x => x.Id) + .Select(x => new SourceTransferDto + { + Id = x.Id, + Name = x.Name, + Url = x.Url, + Type = x.Type + }) + .ToListAsync(); + + var promptEntities = await _context.Prompts + .AsNoTracking() + .Include(x => x.Source) + .Include(x => x.Dimensions) + .OrderBy(x => x.Id) + .ToListAsync(); + + var prompts = promptEntities + .Select(x => new PromptTransferDto + { + Id = x.Id, + Provider = x.Provider, + Instruction = x.Instruction, + Theme = x.Theme, + Periode = x.Periode, + Subject = x.Subject, + Question = x.Question, + Answer = x.Answer, + SourceId = x.SourceId, + SourceName = x.Source?.Name ?? "", + SourceType = x.Source?.Type ?? "", + SourceUrl = x.Source?.Url ?? "", + AnswerLocation = x.AnswerLocation, + Dimensions = x.Dimensions.ToDictionary(d => d.Name, d => d.Value), + CreatedUtc = x.CreatedUtc + }) + .ToList(); + + var promptDimensions = await _context.Set() + .AsNoTracking() + .OrderBy(x => x.Id) + .Select(x => new PromptDimensionTransferDto + { + Id = x.Id, + PromptId = x.PromptId, + Name = x.Name, + Value = x.Value + }) + .ToListAsync(); + + var modelResponses = await _context.Set() + .AsNoTracking() + .OrderBy(x => x.Id) + .Select(x => new ModelResponseTransferDto + { + Id = x.Id, + PromptId = x.PromptId, + Provider = x.Provider, + RawText = x.RawText, + Exception = x.Exception, + CreatedUtc = x.CreatedUtc + }) + .ToListAsync(); + + var parsedResponses = await _context.Set() + .AsNoTracking() + .OrderBy(x => x.Id) + .Select(x => new ParsedModelResponseTransferDto + { + Id = x.Id, + ModelResponseId = x.ModelResponseId, + Answer = x.Answer + }) + .ToListAsync(); + + var factChecks = await _context.Set() + .AsNoTracking() + .OrderBy(x => x.Id) + .Select(x => new FactCheckResultTransferDto + { + Id = x.Id, + ParsedModelResponseId = x.ParsedModelResponseId, + AbsoluteError = x.AbsoluteError, + RelativeError = x.RelativeError, + AnswerIsCorrect = x.AnswerIsCorrect, + SourceIsCorrect = x.SourceIsCorrect, + Abstained = x.Abstained + }) + .ToListAsync(); + + var parsedSources = await _context.Set() + .AsNoTracking() + .Select(x => new ParsedModelResponseSourceTransferDto + { + ParsedModelResponseId = x.ParsedModelResponseId, + SourceId = x.SourceId + }) + .ToListAsync(); + + var bundle = new DataExportAllBundleDto + { + Sources = sources, + Prompts = prompts, + PromptDimensions = promptDimensions, + ModelResponses = modelResponses, + ParsedModelResponses = parsedResponses, + FactCheckResults = factChecks, + ParsedModelResponseSources = parsedSources + }; + + return Ok(bundle); + } + [HttpGet("export")] public async Task> Export() { diff --git a/Backend/Dto/DataTransferDto.cs b/Backend/Dto/DataTransferDto.cs index 1036fa0..d4529d8 100644 --- a/Backend/Dto/DataTransferDto.cs +++ b/Backend/Dto/DataTransferDto.cs @@ -40,4 +40,40 @@ public class DataExportBundleDto public List PromptDimensions { get; set; } = new(); public List ModelResponses { get; set; } = new(); } + + public class DataExportAllBundleDto + { + public List Sources { get; set; } = new(); + public List Prompts { get; set; } = new(); + public List PromptDimensions { get; set; } = new(); + public List ModelResponses { get; set; } = new(); + + public List ParsedModelResponses { get; set; } = new(); + public List FactCheckResults { get; set; } = new(); + public List ParsedModelResponseSources { get; set; } = new(); + } + + public class ParsedModelResponseTransferDto + { + public int Id { get; set; } + public int ModelResponseId { get; set; } + public decimal Answer { get; set; } + } + + public class FactCheckResultTransferDto + { + public int Id { get; set; } + public int ParsedModelResponseId { get; set; } + public decimal AbsoluteError { get; set; } + public decimal RelativeError { get; set; } + public bool AnswerIsCorrect { get; set; } + public bool SourceIsCorrect { get; set; } + public bool Abstained { get; set; } + } + + public class ParsedModelResponseSourceTransferDto + { + public int ParsedModelResponseId { get; set; } + public int SourceId { get; set; } + } }