updateVoiceMode method
void
updateVoiceMode(
- bool useRealtimeApi
)
Implementation
void updateVoiceMode(bool useRealtimeApi) {
voiceModeProvider.stopVoiceMode();
voiceModeProvider.dispose();
if (useRealtimeApi) {
var p = RealtimeVoiceModeProvider(
onStart: () async {
notifyListeners();
await _createConversationIfNecessary();
},
setStatus: (status) {
this.status = status;
notifyListeners();
},
onTranscriptionEnd: (transcriptionEnd) async {
var msg = Message(
id: transcriptionEnd.id,
date: DateTime.now(),
role: transcriptionEnd.role,
text: transcriptionEnd.content,
);
messages.add(msg);
if (transcriptionEnd.role == Role.user) {
var id = conversation?.id;
if (id != null) {
var rep = createThreadsRepository();
await rep.createMessage(id, msg);
}
}
},
onResponse: (response) async {
var outputItem = response.output.firstWhereOrNull((x) {
return x.role == Role.assistant;
});
var content = outputItem?.content.single;
var text = content?.text ?? content?.transcript;
if (text == null) return;
var msg = Message.assistant(
message: text,
usage: response.usage,
);
var id = conversation?.id;
if (id != null) {
var rep = createThreadsRepository();
await rep.createMessage(id, msg);
}
},
onError: (errorMessage) {
_showError(
title: 'Erro',
message: errorMessage,
);
},
);
voiceModeProvider = p;
} else {
voiceModeProvider = VoiceModeProvider(
errorReporter: (context, message) {
_showError(
title: context,
message: message,
);
},
notifyListeners: () => notifyListeners(),
isVoiceMode: () => isVoiceMode,
setStatus: (status) => this.status = status,
getStatus: () => status,
send: ({
required onChunk,
required text,
}) async {
controller.text = text;
await send(
onChunk: onChunk,
endStatus: null,
);
},
);
}
}