import 'package:flutter/foundation.dart'; import 'package:manager_api_new/api.dart'; import 'package:mymuseum_visitapp/Models/visitContext.dart'; import 'package:mymuseum_visitapp/Services/assistantService.dart'; import 'package:mymuseum_visitapp/Services/Glasses/engines/llm_client.dart'; /// Client LLM via backend MyInfoMate (.NET + Gemini Flash). /// /// Utilise AppType.Voice pour signaler au backend : /// - Pas de navigation UI (pas de navigate_to_section / navigate_to_configuration) /// - Pas de show_cards /// - Prompt audio-friendly : réponses courtes, sans markdown, max 30s à l'oral class MyInfoMateLlmClient implements LlmClient { final VisitAppContext visitAppContext; late final AssistantService _service; MyInfoMateLlmClient({required this.visitAppContext}) { _service = AssistantService(visitAppContext: visitAppContext); } @override Future chat( String message, { String? configurationId, String languageCode = 'FR', }) async { final cfgId = configurationId ?? visitAppContext.configuration?.id; debugPrint('[MyInfoMateLlmClient] chat Voice — instanceId=${visitAppContext.instanceId} ' 'configId=$cfgId lang=$languageCode apiKey=${visitAppContext.apiKey != null ? "set" : "null"}'); try { // AppType.Mobile + isVoice:true → backend adapte le prompt (audio-friendly) // sans navigation, sans markdown, dates en toutes lettres final response = await _service.chatWithAppType( message: message, configurationId: cfgId, appType: AppType.Mobile, isVoice: true, ); return response.reply; } catch (e) { debugPrint('[MyInfoMateLlmClient] error: $e'); rethrow; } } @override void clearHistory() => _service.clearHistory(); }