Include suggestion IDs in plugin install metadata (#39765)

## What changed

- Add `suggestion_id` to plugin install elicitation metadata, using the same
  value as the elicitation request ID and plugin-install analytics event.
- Leave connector install metadata unchanged by omitting the field.

## Testing

- Cover plugin and connector metadata serialization.
- Verify that remote plugin install metadata and analytics carry matching
  suggestion IDs.

GitOrigin-RevId: 05dd1d210e2a82857094f09d27ecba79ee460b7e
This commit is contained in:
william-openai
2026-08-20 17:47:44 +00:00
committed by copyberry
parent 097825f75a
commit 39073ca3a7
5 changed files with 31 additions and 7 deletions

View File

@@ -41,6 +41,8 @@ pub struct RequestPluginInstallMeta<'a> {
pub tool_id: &'a str,
pub tool_name: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub suggestion_id: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub install_url: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remote_plugin_id: Option<&'a str>,
@@ -51,6 +53,7 @@ pub struct RequestPluginInstallMeta<'a> {
pub fn build_request_plugin_install_elicitation_request(
suggest_reason: &str,
tool: &DiscoverableTool,
suggestion_id: &str,
) -> ElicitationRequest {
let message = suggest_reason.to_string();
@@ -58,6 +61,7 @@ pub fn build_request_plugin_install_elicitation_request(
meta: Some(json!(build_request_plugin_install_meta(
suggest_reason,
tool,
suggestion_id,
))),
message,
requested_schema: json!({
@@ -89,11 +93,13 @@ pub fn verified_connector_install_completed(
fn build_request_plugin_install_meta<'a>(
suggest_reason: &'a str,
tool: &'a DiscoverableTool,
suggestion_id: &'a str,
) -> RequestPluginInstallMeta<'a> {
let (tool_type, remote_plugin_id, app_connector_ids) = match tool {
DiscoverableTool::Connector(_) => (DiscoverableToolType::Connector, None, None),
let (tool_type, suggestion_id, remote_plugin_id, app_connector_ids) = match tool {
DiscoverableTool::Connector(_) => (DiscoverableToolType::Connector, None, None, None),
DiscoverableTool::Plugin(plugin) => (
DiscoverableToolType::Plugin,
Some(suggestion_id),
plugin.remote_plugin_id.as_deref(),
Some(plugin.app_connector_ids.as_slice()),
),
@@ -106,6 +112,7 @@ fn build_request_plugin_install_meta<'a>(
suggest_reason,
tool_id: tool.id(),
tool_name: tool.name(),
suggestion_id,
install_url: tool.install_url(),
remote_plugin_id,
app_connector_ids,

View File

@@ -29,6 +29,7 @@ fn build_request_plugin_install_elicitation_request_uses_expected_shape() {
let request = build_request_plugin_install_elicitation_request(
"Plan and reference events from your calendar",
&connector,
"request_plugin_install_connector-calendar",
);
assert_eq!(
@@ -42,6 +43,7 @@ fn build_request_plugin_install_elicitation_request_uses_expected_shape() {
suggest_reason: "Plan and reference events from your calendar",
tool_id: "connector_2128aebfecb84f64a069897515042a44",
tool_name: "Google Calendar",
suggestion_id: None,
install_url: Some(
"https://chatgpt.com/apps/google-calendar/connector_2128aebfecb84f64a069897515042a44"
),
@@ -72,6 +74,7 @@ fn build_request_plugin_install_elicitation_request_injects_plugin_metadata() {
let request = build_request_plugin_install_elicitation_request(
"Use the sample plugin's skills and MCP server",
&plugin,
"request_plugin_install_install-sample",
);
assert_eq!(
@@ -85,6 +88,7 @@ fn build_request_plugin_install_elicitation_request_injects_plugin_metadata() {
suggest_reason: "Use the sample plugin's skills and MCP server",
tool_id: "sample@openai-curated-remote",
tool_name: "Sample Plugin",
suggestion_id: Some("request_plugin_install_install-sample"),
install_url: None,
remote_plugin_id: Some("plugins~Plugin_sample"),
app_connector_ids: Some(&["connector_calendar".to_string()]),
@@ -119,8 +123,11 @@ fn build_request_plugin_install_meta_uses_expected_shape() {
is_enabled: true,
plugin_display_names: Vec::new(),
}));
let meta =
build_request_plugin_install_meta("Find and reference emails from your inbox", &connector);
let meta = build_request_plugin_install_meta(
"Find and reference emails from your inbox",
&connector,
"request_plugin_install_connector-gmail",
);
assert_eq!(
meta,
@@ -132,6 +139,7 @@ fn build_request_plugin_install_meta_uses_expected_shape() {
suggest_reason: "Find and reference emails from your inbox",
tool_id: "connector_68df038e0ba48191908c8434991bbac2",
tool_name: "Gmail",
suggestion_id: None,
install_url: Some(
"https://chatgpt.com/apps/gmail/connector_68df038e0ba48191908c8434991bbac2"
),