Files
mindforge/Mindforge.API/Services/FlashcardService.cs
Jose Henrique b9736293d3
All checks were successful
Mindforge API Build and Deploy / Build Mindforge API Image (push) Successful in 3m39s
Mindforge Cronjob Build and Deploy / Build Mindforge Cronjob Image (push) Successful in 3m49s
Mindforge API Build and Deploy / Deploy Mindforge API (internal) (push) Successful in 38s
Mindforge Cronjob Build and Deploy / Deploy Mindforge Cronjob (internal) (push) Successful in 30s
moving to openrouter
2026-04-04 21:09:18 -03:00

66 lines
2.6 KiB
C#

using System.Threading.Tasks;
using Mindforge.API.Models.Requests;
using Mindforge.API.Services.Interfaces;
namespace Mindforge.API.Services
{
public class FlashcardService : IFlashcardService
{
private readonly IAgentService _agentService;
private readonly ILogger<FlashcardService> _logger;
public FlashcardService(IAgentService agentService, ILogger<FlashcardService> logger)
{
_agentService = agentService;
_logger = logger;
}
public async Task<string> GenerateFlashcardsAsync(FlashcardGenerateRequest request)
{
var extraPrompt = request.Mode switch
{
FlashcardMode.Detailed => "Crie flashcards mais detalhados.",
FlashcardMode.Hyper => "Adicione também pequenas questões para fixação, para que o usuário possa testar seus conhecimentos. As questões devem ser curtas e objetivas, como se fosse cobradas em prova mesmo.",
_ => ""
};
string systemPrompt = $@"Você é um assistente educacional especializado em criar flashcards para o Anki.
Baseado no texto fornecido, crie exatamente {request.Amount} flashcards que focam nos conceitos mais importantes e difíceis.
A resposta FINAL deve ser APENAS no formato CSV, pronto para importação no Anki, sem nenhum texto adicional antes ou depois.
O formato CSV deve ter duas colunas: a frente da carta (pergunta/conceito) e o verso (resposta/explicação). Use ponto e vírgula (;) como separador. Não adicione o cabeçalho.
As perguntas e respostas devem estar estritamente em Português do Brasil.
Exemplo de saída:
""Qual é a capital do Brasil?"";""Brasília""
""Qual é a maior cidade do Brasil?"";""São Paulo""
Com base no arquivo fornecido, crie exatamente {request.Amount} flashcards que focam nos conceitos mais importantes e difíceis.
{extraPrompt}
";
string userPrompt = $"Arquivo: {request.FileName}\nConteúdo:\n{request.FileContent}";
var result = await _agentService.ProcessRequestAsync(systemPrompt, userPrompt);
var lines = result.Split('\n');
if (lines.Length == 0)
{
throw new Exception("Nenhum flashcard gerado.");
}
if (lines.Length > request.Amount)
{
_logger.LogWarning("Quantidade de flashcards excede o limite.");
}
if (lines.Length < request.Amount)
{
_logger.LogWarning("Quantidade de flashcards abaixo do limite.");
}
return result;
}
}
}