Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

95 Zeilen
3.6KB

  1. // lib/repositories/ai_repository.dart
  2. // 1. IMPORTER LES INTERFACES ET LES IMPLÉMENTATIONS NÉCESSAIRES
  3. // Le fichier ollama_service.dart contient nos nouvelles classes découpées.
  4. import '../services/ollama_service.dart';
  5. import '../services/stable_diffusion_service.dart';
  6. import '../services/gemini_service.dart';
  7. import '../services/image_editing_service.dart';
  8. // Énumération pour choisir le modèle de génération d'image.
  9. enum ImageGenerationModel { stableDiffusion, gemini }
  10. /// Le AiRepository est le point d'entrée centralisé pour toutes les opérations d'IA.
  11. /// L'interface utilisateur ne parlera qu'à ce Repository.
  12. class AiRepository {
  13. // --- NOS SERVICES SPÉCIALISÉS ---
  14. // Pour l'analyse initiale de l'image ("prompt 1").
  15. // On utilise l'implémentation Ollama, mais on ne dépend que de l'interface.
  16. final ImageAnalysisService _imageAnalyzer = OllamaImageAnalysisService();
  17. // Pour générer les idées de posts.
  18. final PostCreationService _postCreator = OllamaPostCreationService();
  19. // Pour améliorer le texte.
  20. final TextImprovementService _textImprover = OllamaTextImprovementService();
  21. // Une collection de services pour la GÉNÉRATION D'IMAGES.
  22. final Map<ImageGenerationModel, ImageEditingService> _imageGenerators;
  23. // Le constructeur initialise la collection de générateurs d'images.
  24. AiRepository()
  25. : _imageGenerators = {
  26. ImageGenerationModel.stableDiffusion: StableDiffusionService(),
  27. ImageGenerationModel.gemini: GeminiService(),
  28. };
  29. // --- LES MÉTHODES PUBLIQUES UTILISÉES PAR L'INTERFACE UTILISATEUR ---
  30. /// Étape: `MediaPickerScreen` -> `AiEnhancementScreen`
  31. /// Analyse l'image pour obtenir une description textuelle (le "prompt 1").
  32. /// C'est la tâche qui est lancée "en amont".
  33. Future<String> analyzeImageForPrompt(String base64Image) {
  34. print("[AiRepository] Délégation de l'analyse de l'image à l'ImageAnalyzer...");
  35. return _imageAnalyzer.analyzeImage(base64Image);
  36. }
  37. /// Étape: `AiEnhancementScreen`
  38. /// Génère de nouvelles versions d'une image en utilisant un modèle spécifique.
  39. Stream<String> generateImageVariations({
  40. required ImageGenerationModel model,
  41. required String base64Image,
  42. required String prompt,
  43. required int width,
  44. required int height,
  45. int numberOfImages = 1,
  46. }) {
  47. print("[AiRepository] Délégation de la génération d'images au modèle : $model");
  48. final generator = _imageGenerators[model];
  49. if (generator == null) {
  50. // Retourne un stream avec une erreur si le modèle n'est pas configuré.
  51. return Stream.error(Exception("Le modèle de génération d'image '$model' n'est pas disponible."));
  52. }
  53. return generator.editImage(base64Image, prompt, width, height, numberOfImages: numberOfImages);
  54. }
  55. /// Étape: `TextGenerationScreen`
  56. /// Génère des idées de posts basées sur l'image et un profil utilisateur.
  57. Future<List<String>> generatePostIdeas({
  58. required String base64Image,
  59. required String profession,
  60. required String tone,
  61. }) {
  62. print("[AiRepository] Délégation de la création de posts au PostCreator...");
  63. return _postCreator.generatePostIdeas(
  64. base64Image: base64Image,
  65. profession: profession,
  66. tone: tone,
  67. );
  68. }
  69. /// Étape: `PostRefinementScreen`
  70. /// Améliore un texte existant selon une instruction.
  71. Future<String> improvePostText({
  72. required String originalText,
  73. required String userInstruction,
  74. }) {
  75. print("[AiRepository] Délégation de l'amélioration du texte au TextImprover...");
  76. return _textImprover.improveText(
  77. originalText: originalText,
  78. userInstruction: userInstruction,
  79. );
  80. }
  81. }