|
- // lib/repositories/ai_repository.dart
-
- // 1. IMPORTER LES INTERFACES ET LES IMPLÉMENTATIONS NÉCESSAIRES
- // Le fichier ollama_service.dart contient nos nouvelles classes découpées.
- import '../services/ollama_service.dart';
- import '../services/stable_diffusion_service.dart';
- import '../services/gemini_service.dart';
- import '../services/image_editing_service.dart';
-
- // Énumération pour choisir le modèle de génération d'image.
- enum ImageGenerationModel { stableDiffusion, gemini }
-
- /// Le AiRepository est le point d'entrée centralisé pour toutes les opérations d'IA.
- /// L'interface utilisateur ne parlera qu'à ce Repository.
- class AiRepository {
- // --- NOS SERVICES SPÉCIALISÉS ---
-
- // Pour l'analyse initiale de l'image ("prompt 1").
- // On utilise l'implémentation Ollama, mais on ne dépend que de l'interface.
- final ImageAnalysisService _imageAnalyzer = OllamaImageAnalysisService();
-
- // Pour générer les idées de posts.
- final PostCreationService _postCreator = OllamaPostCreationService();
-
- // Pour améliorer le texte.
- final TextImprovementService _textImprover = OllamaTextImprovementService();
-
- // Une collection de services pour la GÉNÉRATION D'IMAGES.
- final Map<ImageGenerationModel, ImageEditingService> _imageGenerators;
-
- // Le constructeur initialise la collection de générateurs d'images.
- AiRepository()
- : _imageGenerators = {
- ImageGenerationModel.stableDiffusion: StableDiffusionService(),
- ImageGenerationModel.gemini: GeminiService(),
- };
-
- // --- LES MÉTHODES PUBLIQUES UTILISÉES PAR L'INTERFACE UTILISATEUR ---
-
- /// Étape: `MediaPickerScreen` -> `AiEnhancementScreen`
- /// Analyse l'image pour obtenir une description textuelle (le "prompt 1").
- /// C'est la tâche qui est lancée "en amont".
- Future<String> analyzeImageForPrompt(String base64Image) {
- print("[AiRepository] Délégation de l'analyse de l'image à l'ImageAnalyzer...");
- return _imageAnalyzer.analyzeImage(base64Image);
- }
-
- /// Étape: `AiEnhancementScreen`
- /// Génère de nouvelles versions d'une image en utilisant un modèle spécifique.
- Stream<String> generateImageVariations({
- required ImageGenerationModel model,
- required String base64Image,
- required String prompt,
- required int width,
- required int height,
- int numberOfImages = 1,
- }) {
- print("[AiRepository] Délégation de la génération d'images au modèle : $model");
- final generator = _imageGenerators[model];
- if (generator == null) {
- // Retourne un stream avec une erreur si le modèle n'est pas configuré.
- return Stream.error(Exception("Le modèle de génération d'image '$model' n'est pas disponible."));
- }
- return generator.editImage(base64Image, prompt, width, height, numberOfImages: numberOfImages);
- }
-
- /// Étape: `TextGenerationScreen`
- /// Génère des idées de posts basées sur l'image et un profil utilisateur.
- Future<List<String>> generatePostIdeas({
- required String base64Image,
- required String profession,
- required String tone,
- }) {
- print("[AiRepository] Délégation de la création de posts au PostCreator...");
- return _postCreator.generatePostIdeas(
- base64Image: base64Image,
- profession: profession,
- tone: tone,
- );
- }
-
- /// Étape: `PostRefinementScreen`
- /// Améliore un texte existant selon une instruction.
- Future<String> improvePostText({
- required String originalText,
- required String userInstruction,
- }) {
- print("[AiRepository] Délégation de l'amélioration du texte au TextImprover...");
- return _textImprover.improveText(
- originalText: originalText,
- userInstruction: userInstruction,
- );
- }
- }
|