|
- // lib/repositories/ai_repository.dart
-
- import 'dart:convert'; // <-- IMPORT NÉCESSAIRE POUR jsonDecode
- import '../domain/app_filter.dart';
- import '../services/gemini_service.dart';
- import '../services/stable_diffusion_service.dart';
- import '../services/ollama_service.dart'; // <-- VOTRE FICHIER DE SERVICE PRINCIPAL
-
- /// Le AiRepository est le point d'entrée centralisé pour toutes les opérations d'IA.
- class AiRepository {
- final ImageAnalysisService _imageAnalyzer = OllamaImageAnalysisService();
- final PostCreationService _postCreator = OllamaPostCreationService();
- final TextImprovementService _textImprover = OllamaTextImprovementService();
- final StableDiffusionService stableDiffusionService = StableDiffusionService();
- final GeminiService geminiService = GeminiService();
-
- // --- CORRECTION MAJEURE ICI ---
- /// Étape 1: Analyse l'image, parse le JSON et retourne un objet structuré.
- Future<ImageAnalysisResult> analyzeImage(String base64Image) async {
- print("[AiRepository] Délégation de l'analyse à l'ImageAnalyzer...");
-
- // 1. On récupère la chaîne JSON brute depuis le service.
- final String jsonString = await _imageAnalyzer.analyzeImage(base64Image);
-
- print("[AiRepository] Parsing de la réponse JSON : $jsonString");
-
- // 2. On parse cette chaîne JSON pour en faire un objet Map.
- final Map<String, dynamic> jsonMap = jsonDecode(jsonString);
-
- // 3. On extrait les valeurs du Map. Le nom de la clé 'description' vient du prompt que vous avez écrit.
- final String prompt = jsonMap['description'] as String? ?? 'No description found.';
- final List<String> filterIds = (jsonMap['filters'] as List<dynamic>? ?? []).cast<String>();
-
- // 4. On retourne le Record (l'objet structuré) que l'UI attend.
- return (prompt: prompt, filterIds: filterIds);
- }
- // --- FIN DE LA CORRECTION ---
-
- // ... (dans la classe AiRepository)
-
-
- Stream<String> editImage(
- String base64Image,
- String prompt,
- int width,
- int height, {
- List<ImageFilter> filtersToApply = const [],
- }) {
- // --- CORRECTION ---
- // Puisque stableDiffusionService.editImage retourne déjà le bon type (Stream<String>),
- // on le retourne directement.
- return stableDiffusionService.editImage(
- base64Image,
- prompt,
- width,
- height,
- );
- // --- FIN DE LA CORRECTION ---
- }
-
-
- // ... (le reste de la classe est inchangé)
-
-
- Future<List<String>> generatePostIdeas({
- required String base64Image,
- required String profession,
- required String tone,
- }) {
- return _postCreator.generatePostIdeas(
- base64Image: base64Image,
- profession: profession,
- tone: tone,
- );
- }
-
- Future<String> improvePostText({
- required String originalText,
- required String userInstruction,
- }) {
- return _textImprover.improveText(
- originalText: originalText,
- userInstruction: userInstruction,
- );
- }
- }
|