feat: beaver
This commit is contained in:
@ -533,6 +533,9 @@ void Application::InitializeProtocol() {
|
||||
protocol_->OnAudioChannelClosed([this, &board]() {
|
||||
board.SetPowerSaveLevel(PowerSaveLevel::LOW_POWER);
|
||||
Schedule([this]() {
|
||||
if (GetDeviceState() == kDeviceStateConnecting) {
|
||||
return;
|
||||
}
|
||||
auto display = Board::GetInstance().GetDisplay();
|
||||
display->SetChatMessage("system", "");
|
||||
SetDeviceState(kDeviceStateIdle);
|
||||
@ -681,13 +684,16 @@ void Application::DismissAlert() {
|
||||
}
|
||||
|
||||
void Application::ToggleChatState() {
|
||||
vision_text_mode_enabled_.store(false);
|
||||
vision_frame_sent_for_current_listen_.store(false);
|
||||
xEventGroupSetBits(event_group_, MAIN_EVENT_TOGGLE_CHAT);
|
||||
ToggleChatStateForMode(kChatAgentModeNormal, false);
|
||||
}
|
||||
|
||||
void Application::ToggleChatStateWithVision() {
|
||||
vision_text_mode_enabled_.store(true);
|
||||
ToggleChatStateForMode(kChatAgentModeNormal, true);
|
||||
}
|
||||
|
||||
void Application::ToggleChatStateForMode(ChatAgentMode agent_mode, bool vision_enabled) {
|
||||
chat_agent_mode_.store(agent_mode);
|
||||
vision_text_mode_enabled_.store(vision_enabled);
|
||||
vision_frame_sent_for_current_listen_.store(false);
|
||||
xEventGroupSetBits(event_group_, MAIN_EVENT_TOGGLE_CHAT);
|
||||
}
|
||||
@ -696,6 +702,18 @@ bool Application::IsVisionTextModeEnabled() const {
|
||||
return vision_text_mode_enabled_.load();
|
||||
}
|
||||
|
||||
const char* Application::GetChatAgentModeName() const {
|
||||
return chat_agent_mode_.load() == kChatAgentModeBeaver ? "beaver" : "normal";
|
||||
}
|
||||
|
||||
const char* Application::GetChatModeName() const {
|
||||
bool vision_enabled = vision_text_mode_enabled_.load();
|
||||
if (chat_agent_mode_.load() == kChatAgentModeBeaver) {
|
||||
return vision_enabled ? "vision-beaver" : "beaver";
|
||||
}
|
||||
return vision_enabled ? "vision-normal" : "normal";
|
||||
}
|
||||
|
||||
void Application::StartListening() {
|
||||
vision_text_mode_enabled_.store(false);
|
||||
vision_frame_sent_for_current_listen_.store(false);
|
||||
@ -729,7 +747,12 @@ void Application::HandleToggleChatEvent() {
|
||||
|
||||
if (state == kDeviceStateIdle) {
|
||||
ListeningMode mode = GetDefaultListeningMode();
|
||||
if (!protocol_->IsAudioChannelOpened()) {
|
||||
bool agent_mode_changed = chat_agent_mode_.load() != active_chat_agent_mode_.load();
|
||||
bool vision_mode_changed = vision_text_mode_enabled_.load() != active_vision_text_mode_enabled_.load();
|
||||
if (!protocol_->IsAudioChannelOpened() || agent_mode_changed || vision_mode_changed) {
|
||||
if (protocol_->IsAudioChannelOpened()) {
|
||||
protocol_->CloseAudioChannel();
|
||||
}
|
||||
SetDeviceState(kDeviceStateConnecting);
|
||||
// Schedule to let the state change be processed first (UI update)
|
||||
Schedule([this, mode]() {
|
||||
@ -761,6 +784,8 @@ void Application::ContinueOpenAudioChannel(ListeningMode mode) {
|
||||
}
|
||||
}
|
||||
|
||||
active_chat_agent_mode_.store(chat_agent_mode_.load());
|
||||
active_vision_text_mode_enabled_.store(vision_text_mode_enabled_.load());
|
||||
SetListeningMode(mode);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user