huangcm
2025-02-24 69ed55dec4b2116a19e4cca4393cbc014fce5fb2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
#ifndef LIBTEXTCLASSIFIER_ACTIONS_TYPES_H_
#define LIBTEXTCLASSIFIER_ACTIONS_TYPES_H_
 
#include <map>
#include <string>
#include <vector>
 
#include "actions/actions-entity-data_generated.h"
#include "annotator/types.h"
#include "utils/flatbuffers.h"
 
namespace libtextclassifier3 {
 
// A text span in the conversation.
struct MessageTextSpan {
  // The referenced message.
  // -1 if not referencing a particular message in the provided input.
  int message_index;
 
  // The span within the reference message.
  // (-1, -1) if not referencing a particular location.
  CodepointSpan span;
 
  // The span text.
  std::string text;
 
  explicit MessageTextSpan()
      : message_index(kInvalidIndex), span({kInvalidIndex, kInvalidIndex}) {}
  MessageTextSpan(const int message_index, const CodepointSpan span,
                  const std::string& text)
      : message_index(message_index), span(span), text(text) {}
};
 
// An entity associated with an action.
struct ActionSuggestionAnnotation {
  MessageTextSpan span;
  ClassificationResult entity;
 
  // Optional annotation name.
  std::string name;
};
 
// Action suggestion that contains a response text and the type of the response.
struct ActionSuggestion {
  // Text of the action suggestion.
  std::string response_text;
 
  // Type of the action suggestion.
  std::string type;
 
  // Score.
  float score;
 
  // Priority score for internal conflict resolution.
  float priority_score;
 
  // The associated annotations.
  std::vector<ActionSuggestionAnnotation> annotations;
 
  // Extras information.
  std::string serialized_entity_data;
 
  const ActionsEntityData* entity_data() {
    return LoadAndVerifyFlatbuffer<ActionsEntityData>(
        serialized_entity_data.data(), serialized_entity_data.size());
  }
};
 
// Actions suggestions result containing meta - information and the suggested
// actions.
struct ActionsSuggestionsResponse {
  ActionsSuggestionsResponse()
      : sensitivity_score(-1),
        triggering_score(-1),
        output_filtered_sensitivity(false),
        output_filtered_min_triggering_score(false),
        output_filtered_low_confidence(false),
        output_filtered_locale_mismatch(false) {}
 
  // The sensitivity assessment.
  float sensitivity_score;
  float triggering_score;
 
  // Whether the output was suppressed by the sensitivity threshold.
  bool output_filtered_sensitivity;
 
  // Whether the output was suppressed by the triggering score threshold.
  bool output_filtered_min_triggering_score;
 
  // Whether the output was suppressed by the low confidence patterns.
  bool output_filtered_low_confidence;
 
  // Whether the output was suppressed due to locale mismatch.
  bool output_filtered_locale_mismatch;
 
  // The suggested actions.
  std::vector<ActionSuggestion> actions;
};
 
// Represents a single message in the conversation.
struct ConversationMessage {
  // User ID distinguishing the user from other users in the conversation.
  int user_id;
 
  // Text of the message.
  std::string text;
 
  // Reference time of this message.
  int64 reference_time_ms_utc;
 
  // Timezone in which the input text was written (format as accepted by ICU).
  std::string reference_timezone;
 
  // Annotations on the text.
  std::vector<AnnotatedSpan> annotations;
 
  // Comma-separated list of BCP 47 language tags of the message.
  std::string detected_text_language_tags;
};
 
// Conversation between multiple users.
struct Conversation {
  // Sequence of messages that were exchanged in the conversation.
  std::vector<ConversationMessage> messages;
};
 
}  // namespace libtextclassifier3
 
#endif  // LIBTEXTCLASSIFIER_ACTIONS_TYPES_H_