Commit 275da2fe authored by David Black's avatar David Black Committed by Commit Bot

Set query source in AssistantInteractionMetadata.

Query source should be set in |AssistantInteractionMetadata| so that we
have the most accurate information possible when setting the pending
query source in |AssistantInteractionController::OnInteractionStarted|.

This is a follow up to:
https://chromium-review.googlesource.com/c/chromium/src/+/1869811

Bug: None
Test: Built locally
Change-Id: I18280710fc48d623c303453ab860c0b0331f071a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1870989
Commit-Queue: David Black <dmblack@google.com>
Reviewed-by: default avatarXiaohui Chen <xiaohuic@chromium.org>
Reviewed-by: default avatarTao Wu <wutao@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarAchuith Bhandarkar <achuith@chromium.org>
Cr-Commit-Position: refs/heads/master@{#708262}
parent 3cd360b3
...@@ -408,7 +408,7 @@ void AssistantInteractionController::OnInteractionStarted( ...@@ -408,7 +408,7 @@ void AssistantInteractionController::OnInteractionStarted(
// pending query type will always be |kNull| here. // pending query type will always be |kNull| here.
if (model_.pending_query().type() == AssistantQueryType::kNull) { if (model_.pending_query().type() == AssistantQueryType::kNull) {
model_.SetPendingQuery(std::make_unique<AssistantTextQuery>( model_.SetPendingQuery(std::make_unique<AssistantTextQuery>(
metadata->query, AssistantQuerySource::kLibAssistantInitiated)); metadata->query, metadata->source));
} }
model_.CommitPendingQuery(); model_.CommitPendingQuery();
model_.SetMicState(MicState::kClosed); model_.SetMicState(MicState::kClosed);
...@@ -878,7 +878,8 @@ void AssistantInteractionController::StartProactiveSuggestionsInteraction( ...@@ -878,7 +878,8 @@ void AssistantInteractionController::StartProactiveSuggestionsInteraction(
description, AssistantQuerySource::kProactiveSuggestions)); description, AssistantQuerySource::kProactiveSuggestions));
OnInteractionStarted(AssistantInteractionMetadata::New( OnInteractionStarted(AssistantInteractionMetadata::New(
AssistantInteractionType::kText, /*query=*/description)); AssistantInteractionType::kText,
AssistantQuerySource::kProactiveSuggestions, /*query=*/description));
OnHtmlResponse(proactive_suggestions->html(), /*fallback=*/std::string()); OnHtmlResponse(proactive_suggestions->html(), /*fallback=*/std::string());
...@@ -913,7 +914,7 @@ void AssistantInteractionController::StartTextInteraction( ...@@ -913,7 +914,7 @@ void AssistantInteractionController::StartTextInteraction(
model_.SetPendingQuery( model_.SetPendingQuery(
std::make_unique<AssistantTextQuery>(text, query_source)); std::make_unique<AssistantTextQuery>(text, query_source));
assistant_->StartTextInteraction(text, allow_tts); assistant_->StartTextInteraction(text, query_source, allow_tts);
} }
void AssistantInteractionController::StartVoiceInteraction() { void AssistantInteractionController::StartVoiceInteraction() {
......
...@@ -44,6 +44,7 @@ class AssistantInteractionController ...@@ -44,6 +44,7 @@ class AssistantInteractionController
chromeos::assistant::mojom::AssistantInteractionResolution; chromeos::assistant::mojom::AssistantInteractionResolution;
using AssistantInteractionType = using AssistantInteractionType =
chromeos::assistant::mojom::AssistantInteractionType; chromeos::assistant::mojom::AssistantInteractionType;
using AssistantQuerySource = chromeos::assistant::mojom::AssistantQuerySource;
using AssistantSuggestion = chromeos::assistant::mojom::AssistantSuggestion; using AssistantSuggestion = chromeos::assistant::mojom::AssistantSuggestion;
using AssistantSuggestionPtr = using AssistantSuggestionPtr =
chromeos::assistant::mojom::AssistantSuggestionPtr; chromeos::assistant::mojom::AssistantSuggestionPtr;
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/component_export.h" #include "base/component_export.h"
#include "base/macros.h" #include "base/macros.h"
#include "chromeos/services/assistant/public/mojom/assistant.mojom.h"
namespace ash { namespace ash {
...@@ -21,26 +22,13 @@ enum class AssistantQueryType { ...@@ -21,26 +22,13 @@ enum class AssistantQueryType {
kVoice, // See AssistantVoiceQuery. kVoice, // See AssistantVoiceQuery.
}; };
// Defines possible source of an Assistant query. These values are persisted
// to logs. Entries should not be renumbered and numeric values should never
// be reused. Only append to this enum is allowed if the possible source grows.
enum class AssistantQuerySource {
kUnspecified = 0,
kDeepLink = 1,
kDialogPlateTextField = 2,
kStylus = 3,
kSuggestionChip = 4,
kVoiceInput = 5,
kProactiveSuggestions = 6,
kLibAssistantInitiated = 7,
kMaxValue = kLibAssistantInitiated
};
// AssistantQuery -------------------------------------------------------------- // AssistantQuery --------------------------------------------------------------
// Base class for an Assistant query. // Base class for an Assistant query.
class COMPONENT_EXPORT(ASSISTANT_MODEL) AssistantQuery { class COMPONENT_EXPORT(ASSISTANT_MODEL) AssistantQuery {
public: public:
using AssistantQuerySource = chromeos::assistant::mojom::AssistantQuerySource;
virtual ~AssistantQuery() = default; virtual ~AssistantQuery() = default;
// Returns the type for the query. // Returns the type for the query.
...@@ -58,7 +46,6 @@ class COMPONENT_EXPORT(ASSISTANT_MODEL) AssistantQuery { ...@@ -58,7 +46,6 @@ class COMPONENT_EXPORT(ASSISTANT_MODEL) AssistantQuery {
private: private:
const AssistantQueryType type_; const AssistantQueryType type_;
const AssistantQuerySource source_; const AssistantQuerySource source_;
DISALLOW_COPY_AND_ASSIGN(AssistantQuery); DISALLOW_COPY_AND_ASSIGN(AssistantQuery);
......
...@@ -199,9 +199,11 @@ void TestAssistantService ::StartMetalayerInteraction(const gfx::Rect& region) { ...@@ -199,9 +199,11 @@ void TestAssistantService ::StartMetalayerInteraction(const gfx::Rect& region) {
NOTIMPLEMENTED_LOG_ONCE(); NOTIMPLEMENTED_LOG_ONCE();
} }
void TestAssistantService ::StartTextInteraction(const std::string& query, void TestAssistantService ::StartTextInteraction(
bool allow_tts) { const std::string& query,
StartInteraction(AssistantInteractionType::kText, query); chromeos::assistant::mojom::AssistantQuerySource source,
bool allow_tts) {
StartInteraction(AssistantInteractionType::kText, source, query);
SendInteractionResponse(); SendInteractionResponse();
} }
...@@ -265,10 +267,11 @@ void TestAssistantService::CreateTimer(base::TimeDelta duration) { ...@@ -265,10 +267,11 @@ void TestAssistantService::CreateTimer(base::TimeDelta duration) {
void TestAssistantService::StartInteraction( void TestAssistantService::StartInteraction(
chromeos::assistant::mojom::AssistantInteractionType type, chromeos::assistant::mojom::AssistantInteractionType type,
chromeos::assistant::mojom::AssistantQuerySource source,
const std::string& query) { const std::string& query) {
for (auto& subscriber : interaction_subscribers_) { for (auto& subscriber : interaction_subscribers_) {
subscriber->OnInteractionStarted( subscriber->OnInteractionStarted(
AssistantInteractionMetadata::New(type, query)); AssistantInteractionMetadata::New(type, source, query));
} }
} }
......
...@@ -81,7 +81,10 @@ class TestAssistantService : public chromeos::assistant::mojom::Assistant { ...@@ -81,7 +81,10 @@ class TestAssistantService : public chromeos::assistant::mojom::Assistant {
void StartCachedScreenContextInteraction() override; void StartCachedScreenContextInteraction() override;
void StartEditReminderInteraction(const std::string& client_id) override; void StartEditReminderInteraction(const std::string& client_id) override;
void StartMetalayerInteraction(const gfx::Rect& region) override; void StartMetalayerInteraction(const gfx::Rect& region) override;
void StartTextInteraction(const std::string& query, bool allow_tts) override; void StartTextInteraction(
const std::string& query,
chromeos::assistant::mojom::AssistantQuerySource source,
bool allow_tts) override;
void StartVoiceInteraction() override; void StartVoiceInteraction() override;
void StartWarmerWelcomeInteraction(int num_warmer_welcome_triggered, void StartWarmerWelcomeInteraction(int num_warmer_welcome_triggered,
bool allow_tts) override; bool allow_tts) override;
...@@ -106,7 +109,9 @@ class TestAssistantService : public chromeos::assistant::mojom::Assistant { ...@@ -106,7 +109,9 @@ class TestAssistantService : public chromeos::assistant::mojom::Assistant {
private: private:
void StartInteraction( void StartInteraction(
chromeos::assistant::mojom::AssistantInteractionType type, chromeos::assistant::mojom::AssistantInteractionType type,
const std::string& query = {}); chromeos::assistant::mojom::AssistantQuerySource source =
chromeos::assistant::mojom::AssistantQuerySource::kUnspecified,
const std::string& query = std::string());
void SendInteractionResponse(); void SendInteractionResponse();
InteractionResponse PopInteractionResponse(); InteractionResponse PopInteractionResponse();
......
...@@ -26,6 +26,7 @@ component("util") { ...@@ -26,6 +26,7 @@ component("util") {
"//ash/assistant/model", "//ash/assistant/model",
"//base", "//base",
"//base:i18n", "//base:i18n",
"//chromeos/services/assistant/public/mojom",
"//net", "//net",
"//ui/base", "//ui/base",
"//ui/gfx", "//ui/gfx",
......
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
#include "ash/assistant/util/histogram_util.h" #include "ash/assistant/util/histogram_util.h"
#include "ash/assistant/model/assistant_query.h"
#include "ash/assistant/model/assistant_ui_model.h" #include "ash/assistant/model/assistant_ui_model.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "chromeos/services/assistant/public/mojom/assistant.mojom.h"
namespace ash { namespace ash {
namespace assistant { namespace assistant {
...@@ -30,7 +30,8 @@ void IncrementAssistantButtonClickCount(AssistantButtonId button_id) { ...@@ -30,7 +30,8 @@ void IncrementAssistantButtonClickCount(AssistantButtonId button_id) {
AssistantButtonId::kMaxValue); AssistantButtonId::kMaxValue);
} }
void RecordAssistantQuerySource(AssistantQuerySource source) { void RecordAssistantQuerySource(
chromeos::assistant::mojom::AssistantQuerySource source) {
UMA_HISTOGRAM_ENUMERATION("Assistant.QuerySource", source); UMA_HISTOGRAM_ENUMERATION("Assistant.QuerySource", source);
} }
......
...@@ -6,13 +6,13 @@ ...@@ -6,13 +6,13 @@
#define ASH_ASSISTANT_UTIL_HISTOGRAM_UTIL_H_ #define ASH_ASSISTANT_UTIL_HISTOGRAM_UTIL_H_
#include "base/component_export.h" #include "base/component_export.h"
#include "chromeos/services/assistant/public/mojom/assistant.mojom-forward.h"
namespace ash { namespace ash {
enum class AssistantButtonId; enum class AssistantButtonId;
enum class AssistantEntryPoint; enum class AssistantEntryPoint;
enum class AssistantExitPoint; enum class AssistantExitPoint;
enum class AssistantQuerySource;
namespace assistant { namespace assistant {
namespace util { namespace util {
...@@ -35,7 +35,8 @@ void IncrementAssistantButtonClickCount(AssistantButtonId button_id); ...@@ -35,7 +35,8 @@ void IncrementAssistantButtonClickCount(AssistantButtonId button_id);
// Record the input source of each query (e.g. voice, typing). // Record the input source of each query (e.g. voice, typing).
COMPONENT_EXPORT(ASSISTANT_UTIL) COMPONENT_EXPORT(ASSISTANT_UTIL)
void RecordAssistantQuerySource(AssistantQuerySource source); void RecordAssistantQuerySource(
chromeos::assistant::mojom::AssistantQuerySource source);
} // namespace util } // namespace util
} // namespace assistant } // namespace assistant
......
...@@ -1913,7 +1913,9 @@ class AssistantInteractionHelper ...@@ -1913,7 +1913,9 @@ class AssistantInteractionHelper
void SendTextQuery(const std::string& query, bool allow_tts) { void SendTextQuery(const std::string& query, bool allow_tts) {
// Start text interaction with Assistant server. // Start text interaction with Assistant server.
assistant_->StartTextInteraction(query, allow_tts); assistant_->StartTextInteraction(
query, chromeos::assistant::mojom::AssistantQuerySource::kUnspecified,
allow_tts);
query_status_->SetKey("queryText", base::Value(query)); query_status_->SetKey("queryText", base::Value(query));
} }
......
...@@ -447,8 +447,10 @@ void AssistantManagerServiceImpl::StartMetalayerInteraction( ...@@ -447,8 +447,10 @@ void AssistantManagerServiceImpl::StartMetalayerInteraction(
/*assistant_tree=*/nullptr)); /*assistant_tree=*/nullptr));
} }
void AssistantManagerServiceImpl::StartTextInteraction(const std::string& query, void AssistantManagerServiceImpl::StartTextInteraction(
bool allow_tts) { const std::string& query,
mojom::AssistantQuerySource source,
bool allow_tts) {
assistant_client::VoicelessOptions options; assistant_client::VoicelessOptions options;
options.is_user_initiated = true; options.is_user_initiated = true;
...@@ -462,7 +464,7 @@ void AssistantManagerServiceImpl::StartTextInteraction(const std::string& query, ...@@ -462,7 +464,7 @@ void AssistantManagerServiceImpl::StartTextInteraction(const std::string& query,
options.conversation_turn_id = base::NumberToString(next_interaction_id_++); options.conversation_turn_id = base::NumberToString(next_interaction_id_++);
pending_interactions_[options.conversation_turn_id] = pending_interactions_[options.conversation_turn_id] =
mojom::AssistantInteractionMetadata::New( mojom::AssistantInteractionMetadata::New(
/*type=*/mojom::AssistantInteractionType::kText, /*query=*/query); mojom::AssistantInteractionType::kText, source, query);
if (base::FeatureList::IsEnabled( if (base::FeatureList::IsEnabled(
assistant::features::kEnableTextQueriesWithClientDiscourseContext) && assistant::features::kEnableTextQueriesWithClientDiscourseContext) &&
...@@ -1259,6 +1261,7 @@ void AssistantManagerServiceImpl::OnConversationTurnStartedOnMainThread( ...@@ -1259,6 +1261,7 @@ void AssistantManagerServiceImpl::OnConversationTurnStartedOnMainThread(
metadata_ptr->type = metadata.is_mic_open metadata_ptr->type = metadata.is_mic_open
? mojom::AssistantInteractionType::kVoice ? mojom::AssistantInteractionType::kVoice
: mojom::AssistantInteractionType::kText; : mojom::AssistantInteractionType::kText;
metadata_ptr->source = mojom::AssistantQuerySource::kLibAssistantInitiated;
} }
for (auto& it : interaction_subscribers_) for (auto& it : interaction_subscribers_)
......
...@@ -128,7 +128,9 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) AssistantManagerServiceImpl ...@@ -128,7 +128,9 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) AssistantManagerServiceImpl
void StartCachedScreenContextInteraction() override; void StartCachedScreenContextInteraction() override;
void StartEditReminderInteraction(const std::string& client_id) override; void StartEditReminderInteraction(const std::string& client_id) override;
void StartMetalayerInteraction(const gfx::Rect& region) override; void StartMetalayerInteraction(const gfx::Rect& region) override;
void StartTextInteraction(const std::string& query, bool allow_tts) override; void StartTextInteraction(const std::string& query,
mojom::AssistantQuerySource source,
bool allow_tts) override;
void StartVoiceInteraction() override; void StartVoiceInteraction() override;
void StartWarmerWelcomeInteraction(int num_warmer_welcome_triggered, void StartWarmerWelcomeInteraction(int num_warmer_welcome_triggered,
bool allow_tts) override; bool allow_tts) override;
......
...@@ -67,6 +67,7 @@ void FakeAssistantManagerServiceImpl::StartMetalayerInteraction( ...@@ -67,6 +67,7 @@ void FakeAssistantManagerServiceImpl::StartMetalayerInteraction(
void FakeAssistantManagerServiceImpl::StartTextInteraction( void FakeAssistantManagerServiceImpl::StartTextInteraction(
const std::string& query, const std::string& query,
mojom::AssistantQuerySource source,
bool allow_tts) {} bool allow_tts) {}
void FakeAssistantManagerServiceImpl::StartVoiceInteraction() {} void FakeAssistantManagerServiceImpl::StartVoiceInteraction() {}
......
...@@ -49,7 +49,9 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) FakeAssistantManagerServiceImpl ...@@ -49,7 +49,9 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) FakeAssistantManagerServiceImpl
void StartCachedScreenContextInteraction() override; void StartCachedScreenContextInteraction() override;
void StartEditReminderInteraction(const std::string& client_id) override; void StartEditReminderInteraction(const std::string& client_id) override;
void StartMetalayerInteraction(const gfx::Rect& region) override; void StartMetalayerInteraction(const gfx::Rect& region) override;
void StartTextInteraction(const std::string& query, bool allow_tts) override; void StartTextInteraction(const std::string& query,
mojom::AssistantQuerySource source,
bool allow_tts) override;
void StartVoiceInteraction() override; void StartVoiceInteraction() override;
void StartWarmerWelcomeInteraction(int num_warmer_welcome_triggered, void StartWarmerWelcomeInteraction(int num_warmer_welcome_triggered,
bool allow_tts) override; bool allow_tts) override;
......
...@@ -80,7 +80,8 @@ interface Assistant { ...@@ -80,7 +80,8 @@ interface Assistant {
// result will contain TTS. Otherwise TTS will not be present in the // result will contain TTS. Otherwise TTS will not be present in the
// generated server response. Results will be returned through registered // generated server response. Results will be returned through registered
// |AssistantInteractionSubscriber|. // |AssistantInteractionSubscriber|.
StartTextInteraction(string query, bool allow_tts); StartTextInteraction(
string query, AssistantQuerySource source, bool allow_tts);
// Starts a new Assistant voice interaction. // Starts a new Assistant voice interaction.
StartVoiceInteraction(); StartVoiceInteraction();
...@@ -141,6 +142,7 @@ interface Assistant { ...@@ -141,6 +142,7 @@ interface Assistant {
// Describes an Assistant interaction. // Describes an Assistant interaction.
struct AssistantInteractionMetadata { struct AssistantInteractionMetadata {
AssistantInteractionType type; AssistantInteractionType type;
AssistantQuerySource source;
string query; string query;
}; };
...@@ -150,6 +152,20 @@ enum AssistantInteractionType { ...@@ -150,6 +152,20 @@ enum AssistantInteractionType {
kVoice, kVoice,
}; };
// Enumeration of possible Assistant query sources. These values are persisted
// to logs. Entries should not be renumbered and numeric values should never
// be reused. Append new values to the end.
enum AssistantQuerySource {
kUnspecified = 0,
kDeepLink = 1,
kDialogPlateTextField = 2,
kStylus = 3,
kSuggestionChip = 4,
kVoiceInput = 5,
kProactiveSuggestions = 6,
kLibAssistantInitiated = 7,
};
// Subscribes to Assistant's interaction event. These events are server driven // Subscribes to Assistant's interaction event. These events are server driven
// in response to the user's direct interaction with the assistant. Responses // in response to the user's direct interaction with the assistant. Responses
// from the assistant may contain untrusted third-party content. Subscriber // from the assistant may contain untrusted third-party content. Subscriber
......
...@@ -28,7 +28,8 @@ class MockAssistant : public mojom::Assistant { ...@@ -28,7 +28,8 @@ class MockAssistant : public mojom::Assistant {
MOCK_METHOD1(StartMetalayerInteraction, void(const gfx::Rect&)); MOCK_METHOD1(StartMetalayerInteraction, void(const gfx::Rect&));
MOCK_METHOD2(StartTextInteraction, void(const std::string&, bool)); MOCK_METHOD3(StartTextInteraction,
void(const std::string&, mojom::AssistantQuerySource, bool));
MOCK_METHOD0(StartVoiceInteraction, void()); MOCK_METHOD0(StartVoiceInteraction, void());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment