51 lines
1.8 KiB
Dart
51 lines
1.8 KiB
Dart
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<String> 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();
|
|
}
|