47 lines
1.7 KiB
C#
47 lines
1.7 KiB
C#
using DramaLing.Api.Models.DTOs;
|
||
using DramaLing.Api.Models.Entities;
|
||
using DramaLing.Api.Services.AI.Gemini;
|
||
|
||
namespace DramaLing.Api.Services;
|
||
|
||
public interface IGeminiService
|
||
{
|
||
Task<SentenceAnalysisData> AnalyzeSentenceAsync(string inputText, AnalysisOptions options);
|
||
Task<string> GenerateImageDescriptionAsync(Flashcard flashcard, GenerationOptionsDto options);
|
||
}
|
||
|
||
/// <summary>
|
||
/// Gemini 服務 Facade,統一管理句子分析和圖片描述生成功能
|
||
/// </summary>
|
||
public class GeminiService : IGeminiService
|
||
{
|
||
private readonly ISentenceAnalyzer _sentenceAnalyzer;
|
||
private readonly IImageDescriptionGenerator _imageDescriptionGenerator;
|
||
private readonly ILogger<GeminiService> _logger;
|
||
|
||
public GeminiService(
|
||
ISentenceAnalyzer sentenceAnalyzer,
|
||
IImageDescriptionGenerator imageDescriptionGenerator,
|
||
ILogger<GeminiService> logger)
|
||
{
|
||
_sentenceAnalyzer = sentenceAnalyzer ?? throw new ArgumentNullException(nameof(sentenceAnalyzer));
|
||
_imageDescriptionGenerator = imageDescriptionGenerator ?? throw new ArgumentNullException(nameof(imageDescriptionGenerator));
|
||
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
|
||
|
||
_logger.LogInformation("GeminiService Facade initialized successfully");
|
||
}
|
||
|
||
public async Task<SentenceAnalysisData> AnalyzeSentenceAsync(string inputText, AnalysisOptions options)
|
||
{
|
||
return await _sentenceAnalyzer.AnalyzeSentenceAsync(inputText, options);
|
||
}
|
||
|
||
|
||
public async Task<string> GenerateImageDescriptionAsync(Flashcard flashcard, GenerationOptionsDto options)
|
||
{
|
||
return await _imageDescriptionGenerator.GenerateImageDescriptionAsync(flashcard, options);
|
||
}
|
||
|
||
}
|
||
|