Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 118 additions & 0 deletions Backend/Controllers/DataTransferController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,124 @@ public DataTransferController(AIMeasureDbContext context)
_context = context;
}

[HttpGet("export/all")]
public async Task<ActionResult<DataExportBundleDto>> 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<PromptDimension>()
.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<ModelResponse>()
.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<ParsedModelResponse>()
.AsNoTracking()
.OrderBy(x => x.Id)
.Select(x => new ParsedModelResponseTransferDto
{
Id = x.Id,
ModelResponseId = x.ModelResponseId,
Answer = x.Answer
})
.ToListAsync();

var factChecks = await _context.Set<FactCheckResult>()
.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<ParsedModelResponseSource>()
.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<ActionResult<DataExportBundleDto>> Export()
{
Expand Down
36 changes: 36 additions & 0 deletions Backend/Dto/DataTransferDto.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,40 @@ public class DataExportBundleDto
public List<PromptDimensionTransferDto> PromptDimensions { get; set; } = new();
public List<ModelResponseTransferDto> ModelResponses { get; set; } = new();
}

public class DataExportAllBundleDto
{
public List<SourceTransferDto> Sources { get; set; } = new();
public List<PromptTransferDto> Prompts { get; set; } = new();
public List<PromptDimensionTransferDto> PromptDimensions { get; set; } = new();
public List<ModelResponseTransferDto> ModelResponses { get; set; } = new();

public List<ParsedModelResponseTransferDto> ParsedModelResponses { get; set; } = new();
public List<FactCheckResultTransferDto> FactCheckResults { get; set; } = new();
public List<ParsedModelResponseSourceTransferDto> 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; }
}
}
Loading