{
  "auth": {
    "oauth2": {
      "scopes": {
        "https://www.googleapis.com/auth/ces": {
          "description": "Create, update, delete, and manage your Next Gen Agents"
        },
        "https://www.googleapis.com/auth/cloud-platform": {
          "description": "See, edit, configure, and delete your Google Cloud data and see the email address for your Google Account."
        }
      }
    }
  },
  "rootUrl": "https://ces.googleapis.com/",
  "kind": "discovery#restDescription",
  "documentationLink": "https://docs.cloud.google.com/customer-engagement-ai/conversational-agents/ps",
  "ownerName": "Google",
  "canonicalName": "Customer Engagement Suite",
  "parameters": {
    "access_token": {
      "type": "string",
      "description": "OAuth access token.",
      "location": "query"
    },
    "alt": {
      "type": "string",
      "description": "Data format for response.",
      "default": "json",
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ],
      "location": "query"
    },
    "callback": {
      "type": "string",
      "description": "JSONP",
      "location": "query"
    },
    "fields": {
      "type": "string",
      "description": "Selector specifying which fields to include in a partial response.",
      "location": "query"
    },
    "key": {
      "type": "string",
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
      "location": "query"
    },
    "oauth_token": {
      "type": "string",
      "description": "OAuth 2.0 token for the current user.",
      "location": "query"
    },
    "prettyPrint": {
      "type": "boolean",
      "description": "Returns response with indentations and line breaks.",
      "default": "true",
      "location": "query"
    },
    "quotaUser": {
      "type": "string",
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
      "location": "query"
    },
    "upload_protocol": {
      "type": "string",
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "location": "query"
    },
    "uploadType": {
      "type": "string",
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "location": "query"
    },
    "$.xgafv": {
      "type": "string",
      "description": "V1 error format.",
      "enum": [
        "1",
        "2"
      ],
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "location": "query"
    }
  },
  "mtlsRootUrl": "https://ces.mtls.googleapis.com/",
  "version_module": true,
  "servicePath": "",
  "batchPath": "batch",
  "description": "",
  "ownerDomain": "google.com",
  "resources": {
    "projects": {
      "resources": {
        "locations": {
          "methods": {
            "list": {
              "id": "ces.projects.locations.list",
              "path": "v1/{+name}/locations",
              "flatPath": "v1/projects/{projectsId}/locations",
              "httpMethod": "GET",
              "parameters": {
                "name": {
                  "description": "The resource that owns the locations collection, if applicable.",
                  "pattern": "^projects/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "filter": {
                  "description": "A filter to narrow down results to a preferred subset. The filtering language accepts strings like `\"displayName=tokyo\"`, and is documented in more detail in [AIP-160](https://google.aip.dev/160).",
                  "location": "query",
                  "type": "string"
                },
                "pageSize": {
                  "description": "The maximum number of results to return. If not set, the service selects a default.",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "pageToken": {
                  "description": "A page token received from the `next_page_token` field in the response. Send that page token to receive the subsequent page.",
                  "location": "query",
                  "type": "string"
                },
                "extraLocationTypes": {
                  "description": "Optional. Do not use this field. It is unsupported and is ignored unless explicitly documented otherwise. This is primarily for internal usage.",
                  "location": "query",
                  "repeated": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "ListLocationsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/ces",
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Lists information about the supported locations for this service. This method lists locations based on the resource scope provided in the [ListLocationsRequest.name] field: * **Global locations**: If `name` is empty, the method lists the public locations available to all projects. * **Project-specific locations**: If `name` follows the format `projects/{project}`, the method lists locations visible to that specific project. This includes public, private, or other project-specific locations enabled for the project. For gRPC and client library implementations, the resource name is passed as the `name` field. For direct service calls, the resource name is incorporated into the request path based on the specific service implementation and version."
            },
            "get": {
              "id": "ces.projects.locations.get",
              "path": "v1/{+name}",
              "flatPath": "v1/projects/{projectsId}/locations/{locationsId}",
              "httpMethod": "GET",
              "parameters": {
                "name": {
                  "description": "Resource name for the location.",
                  "pattern": "^projects/[^/]+/locations/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "Location"
              },
              "scopes": [
                "https://www.googleapis.com/auth/ces",
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Gets information about a location."
            }
          },
          "resources": {
            "operations": {
              "methods": {
                "list": {
                  "id": "ces.projects.locations.operations.list",
                  "path": "v1/{+name}/operations",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations",
                  "httpMethod": "GET",
                  "parameters": {
                    "name": {
                      "description": "The name of the operation's parent resource.",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    },
                    "filter": {
                      "description": "The standard list filter.",
                      "location": "query",
                      "type": "string"
                    },
                    "pageSize": {
                      "description": "The standard list page size.",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "pageToken": {
                      "description": "The standard list page token.",
                      "location": "query",
                      "type": "string"
                    },
                    "returnPartialSuccess": {
                      "description": "When set to `true`, operations that are reachable are returned as normal, and those that are unreachable are returned in the ListOperationsResponse.unreachable field. This can only be `true` when reading across collections. For example, when `parent` is set to `\"projects/example/locations/-\"`. This field is not supported by default and will result in an `UNIMPLEMENTED` error if set unless explicitly documented otherwise in service or product specific documentation.",
                      "location": "query",
                      "type": "boolean"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "ListOperationsResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/ces",
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`."
                },
                "get": {
                  "id": "ces.projects.locations.operations.get",
                  "path": "v1/{+name}",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
                  "httpMethod": "GET",
                  "parameters": {
                    "name": {
                      "description": "The name of the operation resource.",
                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Operation"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/ces",
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service."
                },
                "delete": {
                  "id": "ces.projects.locations.operations.delete",
                  "path": "v1/{+name}",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
                  "httpMethod": "DELETE",
                  "parameters": {
                    "name": {
                      "description": "The name of the operation resource to be deleted.",
                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Empty"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/ces",
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`."
                },
                "cancel": {
                  "id": "ces.projects.locations.operations.cancel",
                  "path": "v1/{+name}:cancel",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel",
                  "httpMethod": "POST",
                  "parameters": {
                    "name": {
                      "description": "The name of the operation resource to be cancelled.",
                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "request": {
                    "$ref": "CancelOperationRequest"
                  },
                  "response": {
                    "$ref": "Empty"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/ces",
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of `1`, corresponding to `Code.CANCELLED`."
                }
              }
            },
            "apps": {
              "methods": {
                "list": {
                  "id": "ces.projects.locations.apps.list",
                  "path": "v1/{+parent}/apps",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps",
                  "httpMethod": "GET",
                  "parameters": {
                    "parent": {
                      "description": "Required. The resource name of the location to list apps from.",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    },
                    "pageSize": {
                      "description": "Optional. Requested page size. Server may return fewer items than requested. If unspecified, server will pick an appropriate default.",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "pageToken": {
                      "description": "Optional. The next_page_token value returned from a previous list AgentService.ListApps call.",
                      "location": "query",
                      "type": "string"
                    },
                    "filter": {
                      "description": "Optional. Filter to be applied when listing the apps. See https://google.aip.dev/160 for more details.",
                      "location": "query",
                      "type": "string"
                    },
                    "orderBy": {
                      "description": "Optional. Field to sort by. Only \"name\" and \"create_time\" is supported. See https://google.aip.dev/132#ordering for more details.",
                      "location": "query",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "ListAppsResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/ces",
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Lists apps in the given project and location."
                },
                "get": {
                  "id": "ces.projects.locations.apps.get",
                  "path": "v1/{+name}",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}",
                  "httpMethod": "GET",
                  "parameters": {
                    "name": {
                      "description": "Required. The resource name of the app to retrieve.",
                      "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "App"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/ces",
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Gets details of the specified app."
                },
                "create": {
                  "id": "ces.projects.locations.apps.create",
                  "path": "v1/{+parent}/apps",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps",
                  "httpMethod": "POST",
                  "parameters": {
                    "parent": {
                      "description": "Required. The resource name of the location to create an app in.",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    },
                    "appId": {
                      "description": "Optional. The ID to use for the app, which will become the final component of the app's resource name. If not provided, a unique ID will be automatically assigned for the app.",
                      "location": "query",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "request": {
                    "$ref": "App"
                  },
                  "response": {
                    "$ref": "Operation"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/ces",
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Creates a new app in the given project and location."
                },
                "patch": {
                  "id": "ces.projects.locations.apps.patch",
                  "path": "v1/{+name}",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}",
                  "httpMethod": "PATCH",
                  "parameters": {
                    "name": {
                      "description": "Identifier. The unique identifier of the app. Format: `projects/{project}/locations/{location}/apps/{app}`",
                      "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    },
                    "updateMask": {
                      "description": "Optional. Field mask is used to control which fields get updated. If the mask is not present, all fields will be updated.",
                      "location": "query",
                      "type": "string",
                      "format": "google-fieldmask"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "request": {
                    "$ref": "App"
                  },
                  "response": {
                    "$ref": "App"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/ces",
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Updates the specified app."
                },
                "delete": {
                  "id": "ces.projects.locations.apps.delete",
                  "path": "v1/{+name}",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}",
                  "httpMethod": "DELETE",
                  "parameters": {
                    "name": {
                      "description": "Required. The resource name of the app to delete.",
                      "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    },
                    "etag": {
                      "description": "Optional. The current etag of the app. If an etag is not provided, the deletion will overwrite any concurrent changes. If an etag is provided and does not match the current etag of the app, deletion will be blocked and an ABORTED error will be returned.",
                      "location": "query",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Operation"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/ces",
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Deletes the specified app."
                },
                "exportApp": {
                  "id": "ces.projects.locations.apps.exportApp",
                  "path": "v1/{+name}:exportApp",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}:exportApp",
                  "httpMethod": "POST",
                  "parameters": {
                    "name": {
                      "description": "Required. The resource name of the app to export.",
                      "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "request": {
                    "$ref": "ExportAppRequest"
                  },
                  "response": {
                    "$ref": "Operation"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/ces",
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Exports the specified app."
                },
                "importApp": {
                  "id": "ces.projects.locations.apps.importApp",
                  "path": "v1/{+parent}/apps:importApp",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps:importApp",
                  "httpMethod": "POST",
                  "parameters": {
                    "parent": {
                      "description": "Required. The parent resource name with the location of the app to import.",
                      "pattern": "^projects/[^/]+/locations/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "request": {
                    "$ref": "ImportAppRequest"
                  },
                  "response": {
                    "$ref": "Operation"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/ces",
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Imports the specified app."
                },
                "executeTool": {
                  "id": "ces.projects.locations.apps.executeTool",
                  "path": "v1/{+parent}:executeTool",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}:executeTool",
                  "httpMethod": "POST",
                  "parameters": {
                    "parent": {
                      "description": "Required. The resource name of the app which the tool/toolset belongs to. Format: `projects/{project}/locations/{location}/apps/{app}`",
                      "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "request": {
                    "$ref": "ExecuteToolRequest"
                  },
                  "response": {
                    "$ref": "ExecuteToolResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/ces",
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Executes the given tool with the given arguments."
                },
                "retrieveToolSchema": {
                  "id": "ces.projects.locations.apps.retrieveToolSchema",
                  "path": "v1/{+parent}:retrieveToolSchema",
                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}:retrieveToolSchema",
                  "httpMethod": "POST",
                  "parameters": {
                    "parent": {
                      "description": "Required. The resource name of the app which the tool/toolset belongs to. Format: `projects/{project}/locations/{location}/apps/{app}`",
                      "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "request": {
                    "$ref": "RetrieveToolSchemaRequest"
                  },
                  "response": {
                    "$ref": "RetrieveToolSchemaResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/ces",
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Retrieve the schema of the given tool. The schema is computed on the fly for the given instance of the tool."
                }
              },
              "resources": {
                "sessions": {
                  "methods": {
                    "runSession": {
                      "id": "ces.projects.locations.apps.sessions.runSession",
                      "path": "v1/{+session}:runSession",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/sessions/{sessionsId}:runSession",
                      "httpMethod": "POST",
                      "parameters": {
                        "session": {
                          "description": "Required. The unique identifier of the session. Format: `projects/{project}/locations/{location}/apps/{app}/sessions/{session}`",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/sessions/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "session"
                      ],
                      "request": {
                        "$ref": "RunSessionRequest"
                      },
                      "response": {
                        "$ref": "RunSessionResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Initiates a single-turn interaction with the CES agent within a session."
                    },
                    "streamRunSession": {
                      "id": "ces.projects.locations.apps.sessions.streamRunSession",
                      "path": "v1/{+session}:streamRunSession",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/sessions/{sessionsId}:streamRunSession",
                      "httpMethod": "POST",
                      "parameters": {
                        "session": {
                          "description": "Required. The unique identifier of the session. Format: `projects/{project}/locations/{location}/apps/{app}/sessions/{session}`",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/sessions/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "session"
                      ],
                      "request": {
                        "$ref": "RunSessionRequest"
                      },
                      "response": {
                        "$ref": "RunSessionResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Initiates a single-turn interaction with the CES agent. Uses server-side streaming to deliver incremental results and partial responses as they are generated. By default, complete responses (e.g., messages from callbacks or full LLM responses) are sent to the client as soon as they are available. To enable streaming individual text chunks directly from the model, set enable_text_streaming to true."
                    },
                    "generateChatToken": {
                      "id": "ces.projects.locations.apps.sessions.generateChatToken",
                      "path": "v1/{+name}:generateChatToken",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/sessions/{sessionsId}:generateChatToken",
                      "httpMethod": "POST",
                      "parameters": {
                        "name": {
                          "description": "Required. The session name to generate the chat token for. Format: projects/{project}/locations/{location}/apps/{app}/sessions/{session}",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/sessions/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "request": {
                        "$ref": "GenerateChatTokenRequest"
                      },
                      "response": {
                        "$ref": "GenerateChatTokenResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Generates a session scoped token for chat widget to authenticate with Session APIs."
                    }
                  }
                },
                "agents": {
                  "methods": {
                    "list": {
                      "id": "ces.projects.locations.apps.agents.list",
                      "path": "v1/{+parent}/agents",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/agents",
                      "httpMethod": "GET",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to list agents from.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "pageSize": {
                          "description": "Optional. Requested page size. Server may return fewer items than requested. If unspecified, server will pick an appropriate default.",
                          "location": "query",
                          "type": "integer",
                          "format": "int32"
                        },
                        "pageToken": {
                          "description": "Optional. The next_page_token value returned from a previous list AgentService.ListAgents call.",
                          "location": "query",
                          "type": "string"
                        },
                        "filter": {
                          "description": "Optional. Filter to be applied when listing the agents. See https://google.aip.dev/160 for more details.",
                          "location": "query",
                          "type": "string"
                        },
                        "orderBy": {
                          "description": "Optional. Field to sort by. Only \"name\" and \"create_time\" is supported. See https://google.aip.dev/132#ordering for more details.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "ListAgentsResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Lists agents in the given app."
                    },
                    "get": {
                      "id": "ces.projects.locations.apps.agents.get",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/agents/{agentsId}",
                      "httpMethod": "GET",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the agent to retrieve.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/agents/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Agent"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Gets details of the specified agent."
                    },
                    "create": {
                      "id": "ces.projects.locations.apps.agents.create",
                      "path": "v1/{+parent}/agents",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/agents",
                      "httpMethod": "POST",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to create an agent in.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "agentId": {
                          "description": "Optional. The ID to use for the agent, which will become the final component of the agent's resource name. If not provided, a unique ID will be automatically assigned for the agent.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "request": {
                        "$ref": "Agent"
                      },
                      "response": {
                        "$ref": "Agent"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Creates a new agent in the given app."
                    },
                    "patch": {
                      "id": "ces.projects.locations.apps.agents.patch",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/agents/{agentsId}",
                      "httpMethod": "PATCH",
                      "parameters": {
                        "name": {
                          "description": "Identifier. The unique identifier of the agent. Format: `projects/{project}/locations/{location}/apps/{app}/agents/{agent}`",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/agents/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "updateMask": {
                          "description": "Optional. Field mask is used to control which fields get updated. If the mask is not present, all fields will be updated.",
                          "location": "query",
                          "type": "string",
                          "format": "google-fieldmask"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "request": {
                        "$ref": "Agent"
                      },
                      "response": {
                        "$ref": "Agent"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Updates the specified agent."
                    },
                    "delete": {
                      "id": "ces.projects.locations.apps.agents.delete",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/agents/{agentsId}",
                      "httpMethod": "DELETE",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the agent to delete.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/agents/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "force": {
                          "description": "Optional. Indicates whether to forcefully delete the agent, even if it is still referenced by other app/agents/examples. * If `force = false`, the deletion fails if other agents/examples reference it. * If `force = true`, delete the agent and remove it from all referencing apps/agents/examples.",
                          "location": "query",
                          "type": "boolean"
                        },
                        "etag": {
                          "description": "Optional. The current etag of the agent. If an etag is not provided, the deletion will overwrite any concurrent changes. If an etag is provided and does not match the current etag of the agent, deletion will be blocked and an ABORTED error will be returned.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Empty"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Deletes the specified agent."
                    }
                  }
                },
                "examples": {
                  "methods": {
                    "list": {
                      "id": "ces.projects.locations.apps.examples.list",
                      "path": "v1/{+parent}/examples",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/examples",
                      "httpMethod": "GET",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to list examples from.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "pageSize": {
                          "description": "Optional. Requested page size. Server may return fewer items than requested. If unspecified, server will pick an appropriate default.",
                          "location": "query",
                          "type": "integer",
                          "format": "int32"
                        },
                        "pageToken": {
                          "description": "Optional. The next_page_token value returned from a previous list AgentService.ListExamples call.",
                          "location": "query",
                          "type": "string"
                        },
                        "filter": {
                          "description": "Optional. Filter to be applied when listing the examples. See https://google.aip.dev/160 for more details.",
                          "location": "query",
                          "type": "string"
                        },
                        "orderBy": {
                          "description": "Optional. Field to sort by. Only \"name\" and \"create_time\" is supported. See https://google.aip.dev/132#ordering for more details.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "ListExamplesResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Lists examples in the given app."
                    },
                    "get": {
                      "id": "ces.projects.locations.apps.examples.get",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/examples/{examplesId}",
                      "httpMethod": "GET",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the example to retrieve.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/examples/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Example"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Gets details of the specified example."
                    },
                    "create": {
                      "id": "ces.projects.locations.apps.examples.create",
                      "path": "v1/{+parent}/examples",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/examples",
                      "httpMethod": "POST",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to create an example in.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "exampleId": {
                          "description": "Optional. The ID to use for the example, which will become the final component of the example's resource name. If not provided, a unique ID will be automatically assigned for the example.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "request": {
                        "$ref": "Example"
                      },
                      "response": {
                        "$ref": "Example"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Creates a new example in the given app."
                    },
                    "patch": {
                      "id": "ces.projects.locations.apps.examples.patch",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/examples/{examplesId}",
                      "httpMethod": "PATCH",
                      "parameters": {
                        "name": {
                          "description": "Identifier. The unique identifier of the example. Format: `projects/{project}/locations/{location}/apps/{app}/examples/{example}`",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/examples/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "updateMask": {
                          "description": "Optional. Field mask is used to control which fields get updated. If the mask is not present, all fields will be updated.",
                          "location": "query",
                          "type": "string",
                          "format": "google-fieldmask"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "request": {
                        "$ref": "Example"
                      },
                      "response": {
                        "$ref": "Example"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Updates the specified example."
                    },
                    "delete": {
                      "id": "ces.projects.locations.apps.examples.delete",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/examples/{examplesId}",
                      "httpMethod": "DELETE",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the example to delete.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/examples/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "etag": {
                          "description": "Optional. The current etag of the example. If an etag is not provided, the deletion will overwrite any concurrent changes. If an etag is provided and does not match the current etag of the example, deletion will be blocked and an ABORTED error will be returned.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Empty"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Deletes the specified example."
                    }
                  }
                },
                "tools": {
                  "methods": {
                    "list": {
                      "id": "ces.projects.locations.apps.tools.list",
                      "path": "v1/{+parent}/tools",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/tools",
                      "httpMethod": "GET",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to list tools from.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "pageSize": {
                          "description": "Optional. Requested page size. Server may return fewer items than requested. If unspecified, server will pick an appropriate default.",
                          "location": "query",
                          "type": "integer",
                          "format": "int32"
                        },
                        "pageToken": {
                          "description": "Optional. The next_page_token value returned from a previous list AgentService.ListTools call.",
                          "location": "query",
                          "type": "string"
                        },
                        "filter": {
                          "description": "Optional. Filter to be applied when listing the tools. Use \"include_system_tools=true\" to include system tools in the response. See https://google.aip.dev/160 for more details.",
                          "location": "query",
                          "type": "string"
                        },
                        "orderBy": {
                          "description": "Optional. Field to sort by. Only \"name\" and \"create_time\" is supported. See https://google.aip.dev/132#ordering for more details.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "ListToolsResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Lists tools in the given app."
                    },
                    "get": {
                      "id": "ces.projects.locations.apps.tools.get",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/tools/{toolsId}",
                      "httpMethod": "GET",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the tool to retrieve.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/tools/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Tool"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Gets details of the specified tool."
                    },
                    "create": {
                      "id": "ces.projects.locations.apps.tools.create",
                      "path": "v1/{+parent}/tools",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/tools",
                      "httpMethod": "POST",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to create a tool in.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "toolId": {
                          "description": "Optional. The ID to use for the tool, which will become the final component of the tool's resource name. If not provided, a unique ID will be automatically assigned for the tool.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "request": {
                        "$ref": "Tool"
                      },
                      "response": {
                        "$ref": "Tool"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Creates a new tool in the given app."
                    },
                    "patch": {
                      "id": "ces.projects.locations.apps.tools.patch",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/tools/{toolsId}",
                      "httpMethod": "PATCH",
                      "parameters": {
                        "name": {
                          "description": "Identifier. The resource name of the tool. Format: * `projects/{project}/locations/{location}/apps/{app}/tools/{tool}` for standalone tools. * `projects/{project}/locations/{location}/apps/{app}/toolsets/{toolset}/tools/{tool}` for tools retrieved from a toolset. These tools are dynamic and output-only; they cannot be referenced directly where a tool is expected.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/tools/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "updateMask": {
                          "description": "Optional. Field mask is used to control which fields get updated. If the mask is not present, all fields will be updated.",
                          "location": "query",
                          "type": "string",
                          "format": "google-fieldmask"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "request": {
                        "$ref": "Tool"
                      },
                      "response": {
                        "$ref": "Tool"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Updates the specified tool."
                    },
                    "delete": {
                      "id": "ces.projects.locations.apps.tools.delete",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/tools/{toolsId}",
                      "httpMethod": "DELETE",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the tool to delete.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/tools/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "force": {
                          "description": "Optional. Indicates whether to forcefully delete the tool, even if it is still referenced by agents/examples. * If `force = false`, the deletion will fail if any agents still reference the tool. * If `force = true`, all existing references from agents will be removed and the tool will be deleted.",
                          "location": "query",
                          "type": "boolean"
                        },
                        "etag": {
                          "description": "Optional. The current etag of the tool. If an etag is not provided, the deletion will overwrite any concurrent changes. If an etag is provided and does not match the current etag of the tool, deletion will be blocked and an ABORTED error will be returned.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Empty"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Deletes the specified tool."
                    }
                  }
                },
                "conversations": {
                  "methods": {
                    "list": {
                      "id": "ces.projects.locations.apps.conversations.list",
                      "path": "v1/{+parent}/conversations",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/conversations",
                      "httpMethod": "GET",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to list conversations from.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "pageSize": {
                          "description": "Optional. Requested page size. Server may return fewer items than requested. If unspecified, server will pick an appropriate default.",
                          "location": "query",
                          "type": "integer",
                          "format": "int32"
                        },
                        "pageToken": {
                          "description": "Optional. The next_page_token value returned from a previous list AgentService.ListConversations call.",
                          "location": "query",
                          "type": "string"
                        },
                        "filter": {
                          "description": "Optional. Filter to be applied when listing the conversations. See https://google.aip.dev/160 for more details.",
                          "location": "query",
                          "type": "string"
                        },
                        "source": {
                          "description": "Optional. Indicate the source of the conversation. If not set, Source.Live will be applied by default. Will be deprecated in favor of `sources` field.",
                          "location": "query",
                          "type": "string",
                          "enumDescriptions": [
                            "Unspecified source.",
                            "The conversation is from the live end user.",
                            "The conversation is from the simulator.",
                            "The conversation is from the evaluation."
                          ],
                          "enum": [
                            "SOURCE_UNSPECIFIED",
                            "LIVE",
                            "SIMULATOR",
                            "EVAL"
                          ]
                        },
                        "sources": {
                          "description": "Optional. Indicate the sources of the conversations. If not set, all available sources will be applied by default.",
                          "location": "query",
                          "repeated": true,
                          "type": "string",
                          "enumDescriptions": [
                            "Unspecified source.",
                            "The conversation is from the live end user.",
                            "The conversation is from the simulator.",
                            "The conversation is from the evaluation."
                          ],
                          "enum": [
                            "SOURCE_UNSPECIFIED",
                            "LIVE",
                            "SIMULATOR",
                            "EVAL"
                          ]
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "ListConversationsResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Lists conversations in the given app."
                    },
                    "get": {
                      "id": "ces.projects.locations.apps.conversations.get",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/conversations/{conversationsId}",
                      "httpMethod": "GET",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the conversation to retrieve.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/conversations/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "source": {
                          "description": "Optional. Indicate the source of the conversation. If not set, all source will be searched.",
                          "location": "query",
                          "deprecated": true,
                          "type": "string",
                          "enumDescriptions": [
                            "Unspecified source.",
                            "The conversation is from the live end user.",
                            "The conversation is from the simulator.",
                            "The conversation is from the evaluation."
                          ],
                          "enum": [
                            "SOURCE_UNSPECIFIED",
                            "LIVE",
                            "SIMULATOR",
                            "EVAL"
                          ]
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Conversation"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Gets details of the specified conversation."
                    },
                    "delete": {
                      "id": "ces.projects.locations.apps.conversations.delete",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/conversations/{conversationsId}",
                      "httpMethod": "DELETE",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the conversation to delete.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/conversations/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "source": {
                          "description": "Optional. Indicate the source of the conversation. If not set, Source.Live will be applied by default.",
                          "location": "query",
                          "deprecated": true,
                          "type": "string",
                          "enumDescriptions": [
                            "Unspecified source.",
                            "The conversation is from the live end user.",
                            "The conversation is from the simulator.",
                            "The conversation is from the evaluation."
                          ],
                          "enum": [
                            "SOURCE_UNSPECIFIED",
                            "LIVE",
                            "SIMULATOR",
                            "EVAL"
                          ]
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Empty"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Deletes the specified conversation."
                    },
                    "batchDelete": {
                      "id": "ces.projects.locations.apps.conversations.batchDelete",
                      "path": "v1/{+parent}/conversations:batchDelete",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/conversations:batchDelete",
                      "httpMethod": "POST",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to delete conversations from. Format: `projects/{project}/locations/{location}/apps/{app}`",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "request": {
                        "$ref": "BatchDeleteConversationsRequest"
                      },
                      "response": {
                        "$ref": "Operation"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Batch deletes the specified conversations."
                    }
                  }
                },
                "guardrails": {
                  "methods": {
                    "list": {
                      "id": "ces.projects.locations.apps.guardrails.list",
                      "path": "v1/{+parent}/guardrails",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/guardrails",
                      "httpMethod": "GET",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to list guardrails from.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "pageSize": {
                          "description": "Optional. Requested page size. Server may return fewer items than requested. If unspecified, server will pick an appropriate default.",
                          "location": "query",
                          "type": "integer",
                          "format": "int32"
                        },
                        "pageToken": {
                          "description": "Optional. The next_page_token value returned from a previous list AgentService.ListGuardrails call.",
                          "location": "query",
                          "type": "string"
                        },
                        "filter": {
                          "description": "Optional. Filter to be applied when listing the guardrails. See https://google.aip.dev/160 for more details.",
                          "location": "query",
                          "type": "string"
                        },
                        "orderBy": {
                          "description": "Optional. Field to sort by. Only \"name\" and \"create_time\" is supported. See https://google.aip.dev/132#ordering for more details.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "ListGuardrailsResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Lists guardrails in the given app."
                    },
                    "get": {
                      "id": "ces.projects.locations.apps.guardrails.get",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/guardrails/{guardrailsId}",
                      "httpMethod": "GET",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the guardrail to retrieve.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/guardrails/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Guardrail"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Gets details of the specified guardrail."
                    },
                    "create": {
                      "id": "ces.projects.locations.apps.guardrails.create",
                      "path": "v1/{+parent}/guardrails",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/guardrails",
                      "httpMethod": "POST",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to create a guardrail in.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "guardrailId": {
                          "description": "Optional. The ID to use for the guardrail, which will become the final component of the guardrail's resource name. If not provided, a unique ID will be automatically assigned for the guardrail.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "request": {
                        "$ref": "Guardrail"
                      },
                      "response": {
                        "$ref": "Guardrail"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Creates a new guardrail in the given app."
                    },
                    "patch": {
                      "id": "ces.projects.locations.apps.guardrails.patch",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/guardrails/{guardrailsId}",
                      "httpMethod": "PATCH",
                      "parameters": {
                        "name": {
                          "description": "Identifier. The unique identifier of the guardrail. Format: `projects/{project}/locations/{location}/apps/{app}/guardrails/{guardrail}`",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/guardrails/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "updateMask": {
                          "description": "Optional. Field mask is used to control which fields get updated. If the mask is not present, all fields will be updated.",
                          "location": "query",
                          "type": "string",
                          "format": "google-fieldmask"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "request": {
                        "$ref": "Guardrail"
                      },
                      "response": {
                        "$ref": "Guardrail"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Updates the specified guardrail."
                    },
                    "delete": {
                      "id": "ces.projects.locations.apps.guardrails.delete",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/guardrails/{guardrailsId}",
                      "httpMethod": "DELETE",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the guardrail to delete.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/guardrails/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "force": {
                          "description": "Optional. Indicates whether to forcefully delete the guardrail, even if it is still referenced by app/agents. * If `force = false`, the deletion fails if any apps/agents still reference the guardrail. * If `force = true`, all existing references from apps/agents will be removed and the guardrail will be deleted.",
                          "location": "query",
                          "type": "boolean"
                        },
                        "etag": {
                          "description": "Optional. The current etag of the guardrail. If an etag is not provided, the deletion will overwrite any concurrent changes. If an etag is provided and does not match the current etag of the guardrail, deletion will be blocked and an ABORTED error will be returned.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Empty"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Deletes the specified guardrail."
                    }
                  }
                },
                "deployments": {
                  "methods": {
                    "list": {
                      "id": "ces.projects.locations.apps.deployments.list",
                      "path": "v1/{+parent}/deployments",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/deployments",
                      "httpMethod": "GET",
                      "parameters": {
                        "parent": {
                          "description": "Required. The parent app. Format: `projects/{project}/locations/{location}/apps/{app}`",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "pageSize": {
                          "description": "Optional. The maximum number of deployments to return. The service may return fewer than this value. If unspecified, at most 50 deployments will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.",
                          "location": "query",
                          "type": "integer",
                          "format": "int32"
                        },
                        "pageToken": {
                          "description": "Optional. A page token, received from a previous `ListDeployments` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListDeployments` must match the call that provided the page token.",
                          "location": "query",
                          "type": "string"
                        },
                        "orderBy": {
                          "description": "Optional. Field to sort by. Only \"name\" and \"create_time\" is supported. See https://google.aip.dev/132#ordering for more details.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "ListDeploymentsResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Lists deployments in the given app."
                    },
                    "get": {
                      "id": "ces.projects.locations.apps.deployments.get",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/deployments/{deploymentsId}",
                      "httpMethod": "GET",
                      "parameters": {
                        "name": {
                          "description": "Required. The name of the deployment. Format: `projects/{project}/locations/{location}/apps/{app}/deployments/{deployment}`",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/deployments/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Deployment"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Gets details of the specified deployment."
                    },
                    "create": {
                      "id": "ces.projects.locations.apps.deployments.create",
                      "path": "v1/{+parent}/deployments",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/deployments",
                      "httpMethod": "POST",
                      "parameters": {
                        "parent": {
                          "description": "Required. The parent app. Format: `projects/{project}/locations/{location}/apps/{app}`",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "deploymentId": {
                          "description": "Optional. The ID to use for the deployment, which will become the final component of the deployment's resource name. If not provided, a unique ID will be automatically assigned for the deployment.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "request": {
                        "$ref": "Deployment"
                      },
                      "response": {
                        "$ref": "Deployment"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Creates a new deployment in the given app."
                    },
                    "patch": {
                      "id": "ces.projects.locations.apps.deployments.patch",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/deployments/{deploymentsId}",
                      "httpMethod": "PATCH",
                      "parameters": {
                        "name": {
                          "description": "Identifier. The resource name of the deployment. Format: `projects/{project}/locations/{location}/apps/{app}/deployments/{deployment}`",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/deployments/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "updateMask": {
                          "description": "Optional. The list of fields to update.",
                          "location": "query",
                          "type": "string",
                          "format": "google-fieldmask"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "request": {
                        "$ref": "Deployment"
                      },
                      "response": {
                        "$ref": "Deployment"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Updates the specified deployment."
                    },
                    "delete": {
                      "id": "ces.projects.locations.apps.deployments.delete",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/deployments/{deploymentsId}",
                      "httpMethod": "DELETE",
                      "parameters": {
                        "name": {
                          "description": "Required. The name of the deployment to delete. Format: `projects/{project}/locations/{location}/apps/{app}/deployments/{deployment}`",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/deployments/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "etag": {
                          "description": "Optional. The etag of the deployment. If an etag is provided and does not match the current etag of the deployment, deletion will be blocked and an ABORTED error will be returned.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Empty"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Deletes the specified deployment."
                    }
                  }
                },
                "toolsets": {
                  "methods": {
                    "list": {
                      "id": "ces.projects.locations.apps.toolsets.list",
                      "path": "v1/{+parent}/toolsets",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/toolsets",
                      "httpMethod": "GET",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to list toolsets from.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "pageSize": {
                          "description": "Optional. Requested page size. Server may return fewer items than requested. If unspecified, server will pick an appropriate default.",
                          "location": "query",
                          "type": "integer",
                          "format": "int32"
                        },
                        "pageToken": {
                          "description": "Optional. The next_page_token value returned from a previous list AgentService.ListToolsets call.",
                          "location": "query",
                          "type": "string"
                        },
                        "filter": {
                          "description": "Optional. Filter to be applied when listing the toolsets. See https://google.aip.dev/160 for more details.",
                          "location": "query",
                          "type": "string"
                        },
                        "orderBy": {
                          "description": "Optional. Field to sort by. Only \"name\" and \"create_time\" is supported. See https://google.aip.dev/132#ordering for more details.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "ListToolsetsResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Lists toolsets in the given app."
                    },
                    "get": {
                      "id": "ces.projects.locations.apps.toolsets.get",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/toolsets/{toolsetsId}",
                      "httpMethod": "GET",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the toolset to retrieve.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/toolsets/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Toolset"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Gets details of the specified toolset."
                    },
                    "create": {
                      "id": "ces.projects.locations.apps.toolsets.create",
                      "path": "v1/{+parent}/toolsets",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/toolsets",
                      "httpMethod": "POST",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to create a toolset in.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "toolsetId": {
                          "description": "Optional. The ID to use for the toolset, which will become the final component of the toolset's resource name. If not provided, a unique ID will be automatically assigned for the toolset.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "request": {
                        "$ref": "Toolset"
                      },
                      "response": {
                        "$ref": "Toolset"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Creates a new toolset in the given app."
                    },
                    "patch": {
                      "id": "ces.projects.locations.apps.toolsets.patch",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/toolsets/{toolsetsId}",
                      "httpMethod": "PATCH",
                      "parameters": {
                        "name": {
                          "description": "Identifier. The unique identifier of the toolset. Format: `projects/{project}/locations/{location}/apps/{app}/toolsets/{toolset}`",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/toolsets/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "updateMask": {
                          "description": "Optional. Field mask is used to control which fields get updated. If the mask is not present, all fields will be updated.",
                          "location": "query",
                          "type": "string",
                          "format": "google-fieldmask"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "request": {
                        "$ref": "Toolset"
                      },
                      "response": {
                        "$ref": "Toolset"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Updates the specified toolset."
                    },
                    "delete": {
                      "id": "ces.projects.locations.apps.toolsets.delete",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/toolsets/{toolsetsId}",
                      "httpMethod": "DELETE",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the toolset to delete.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/toolsets/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "force": {
                          "description": "Optional. Indicates whether to forcefully delete the toolset, even if it is still referenced by app/agents. * If `force = false`, the deletion fails if any agents still reference the toolset. * If `force = true`, all existing references from agents will be removed and the toolset will be deleted.",
                          "location": "query",
                          "type": "boolean"
                        },
                        "etag": {
                          "description": "Optional. The current etag of the toolset. If an etag is not provided, the deletion will overwrite any concurrent changes. If an etag is provided and does not match the current etag of the toolset, deletion will be blocked and an ABORTED error will be returned.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Empty"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Deletes the specified toolset."
                    },
                    "retrieveTools": {
                      "id": "ces.projects.locations.apps.toolsets.retrieveTools",
                      "path": "v1/{+toolset}:retrieveTools",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/toolsets/{toolsetsId}:retrieveTools",
                      "httpMethod": "POST",
                      "parameters": {
                        "toolset": {
                          "description": "Required. The name of the toolset to retrieve the tools for. Format: `projects/{project}/locations/{location}/apps/{app}/toolsets/{toolset}`",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/toolsets/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "toolset"
                      ],
                      "request": {
                        "$ref": "RetrieveToolsRequest"
                      },
                      "response": {
                        "$ref": "RetrieveToolsResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Retrieve the list of tools included in the specified toolset."
                    }
                  }
                },
                "versions": {
                  "methods": {
                    "list": {
                      "id": "ces.projects.locations.apps.versions.list",
                      "path": "v1/{+parent}/versions",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/versions",
                      "httpMethod": "GET",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to list app versions from.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "pageSize": {
                          "description": "Optional. Requested page size. Server may return fewer items than requested. If unspecified, server will pick an appropriate default.",
                          "location": "query",
                          "type": "integer",
                          "format": "int32"
                        },
                        "pageToken": {
                          "description": "Optional. The next_page_token value returned from a previous list AgentService.ListAppVersions call.",
                          "location": "query",
                          "type": "string"
                        },
                        "filter": {
                          "description": "Optional. Filter to be applied when listing the app versions. See https://google.aip.dev/160 for more details.",
                          "location": "query",
                          "type": "string"
                        },
                        "orderBy": {
                          "description": "Optional. Field to sort by. Only \"name\" and \"create_time\" is supported. See https://google.aip.dev/132#ordering for more details.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "ListAppVersionsResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Lists all app versions in the given app."
                    },
                    "get": {
                      "id": "ces.projects.locations.apps.versions.get",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/versions/{versionsId}",
                      "httpMethod": "GET",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the app version to retrieve.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/versions/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "AppVersion"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Gets details of the specified app version."
                    },
                    "create": {
                      "id": "ces.projects.locations.apps.versions.create",
                      "path": "v1/{+parent}/versions",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/versions",
                      "httpMethod": "POST",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to create an app version in.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "appVersionId": {
                          "description": "Optional. The ID to use for the app version, which will become the final component of the app version's resource name. If not provided, a unique ID will be automatically assigned for the app version.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "request": {
                        "$ref": "AppVersion"
                      },
                      "response": {
                        "$ref": "AppVersion"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Creates a new app version in the given app."
                    },
                    "delete": {
                      "id": "ces.projects.locations.apps.versions.delete",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/versions/{versionsId}",
                      "httpMethod": "DELETE",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the app version to delete.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/versions/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "etag": {
                          "description": "Optional. The current etag of the app version. If an etag is not provided, the deletion will overwrite any concurrent changes. If an etag is provided and does not match the current etag of the app version, deletion will be blocked and an ABORTED error will be returned.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Empty"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Deletes the specified app version."
                    },
                    "restore": {
                      "id": "ces.projects.locations.apps.versions.restore",
                      "path": "v1/{+name}:restore",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/versions/{versionsId}:restore",
                      "httpMethod": "POST",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the app version to restore.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/versions/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "request": {
                        "$ref": "RestoreAppVersionRequest"
                      },
                      "response": {
                        "$ref": "Operation"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Restores the specified app version. This will create a new app version from the current draft app and overwrite the current draft with the specified app version."
                    }
                  }
                },
                "changelogs": {
                  "methods": {
                    "list": {
                      "id": "ces.projects.locations.apps.changelogs.list",
                      "path": "v1/{+parent}/changelogs",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/changelogs",
                      "httpMethod": "GET",
                      "parameters": {
                        "parent": {
                          "description": "Required. The resource name of the app to list changelogs from.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "pageSize": {
                          "description": "Optional. Requested page size. Server may return fewer items than requested. If unspecified, server will pick an appropriate default.",
                          "location": "query",
                          "type": "integer",
                          "format": "int32"
                        },
                        "pageToken": {
                          "description": "Optional. The next_page_token value returned from a previous list AgentService.ListChangelogs call.",
                          "location": "query",
                          "type": "string"
                        },
                        "filter": {
                          "description": "Optional. Filter to be applied when listing the changelogs. See https://google.aip.dev/160 for more details. The filter string can be used to filter by `action`, `resource_type`, `resource_name`, `author`, and `create_time`. The `:` comparator can be used for case-insensitive partial matching on string fields, while `=` performs an exact case-sensitive match. Examples: * `action:update` (case-insensitive partial match) * `action=\"Create\"` (case-sensitive exact match) * `resource_type:agent` * `resource_name:my-agent` * `author:me@example.com` * `create_time \u003e \"2025-01-01T00:00:00Z\"` * `create_time \u003c= \"2025-01-01T00:00:00Z\" AND resource_type:tool`",
                          "location": "query",
                          "type": "string"
                        },
                        "orderBy": {
                          "description": "Optional. Field to sort by. Only \"name\" and \"create_time\" is supported. See https://google.aip.dev/132#ordering for more details.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "ListChangelogsResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Lists the changelogs of the specified app."
                    },
                    "get": {
                      "id": "ces.projects.locations.apps.changelogs.get",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/apps/{appsId}/changelogs/{changelogsId}",
                      "httpMethod": "GET",
                      "parameters": {
                        "name": {
                          "description": "Required. The resource name of the changelog to retrieve.",
                          "pattern": "^projects/[^/]+/locations/[^/]+/apps/[^/]+/changelogs/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "Changelog"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/ces",
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Gets the specified changelog."
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "schemas": {
    "RunSessionRequest": {
      "id": "RunSessionRequest",
      "description": "Request message for SessionService.RunSession.",
      "type": "object",
      "properties": {
        "config": {
          "description": "Required. The configuration for the session.",
          "$ref": "SessionConfig"
        },
        "inputs": {
          "description": "Required. Inputs for the session.",
          "type": "array",
          "items": {
            "$ref": "SessionInput"
          }
        }
      }
    },
    "SessionConfig": {
      "id": "SessionConfig",
      "description": "The configuration for the session.",
      "type": "object",
      "properties": {
        "inputAudioConfig": {
          "description": "Optional. Configuration for processing the input audio.",
          "$ref": "InputAudioConfig"
        },
        "outputAudioConfig": {
          "description": "Optional. Configuration for generating the output audio.",
          "$ref": "OutputAudioConfig"
        },
        "historicalContexts": {
          "description": "Optional. The historical context of the session, including user inputs, agent responses, and other messages. Typically, CES agent would manage session automatically so client doesn't need to explicitly populate this field. However, client can optionally override the historical contexts to force the session start from certain state.",
          "type": "array",
          "items": {
            "$ref": "Message"
          }
        },
        "entryAgent": {
          "description": "Optional. The entry agent to handle the session. If not specified, the session will be handled by the root agent of the app. Format: `projects/{project}/locations/{location}/apps/{app}/agents/{agent}`",
          "type": "string"
        },
        "deployment": {
          "description": "Optional. The deployment of the app to use for the session. Format: `projects/{project}/locations/{location}/apps/{app}/deployments/{deployment}`",
          "type": "string"
        },
        "timeZone": {
          "description": "Optional. The time zone of the user. If provided, the agent will use the time zone for date and time related variables. Otherwise, the agent will use the time zone specified in the App.time_zone_settings. The format is the IANA Time Zone Database time zone, e.g. \"America/Los_Angeles\".",
          "type": "string"
        },
        "useToolFakes": {
          "description": "Optional. Whether to use tool fakes for the session. If this field is set, the agent will attempt use tool fakes instead of calling the real tools.",
          "type": "boolean"
        },
        "remoteDialogflowQueryParameters": {
          "description": "Optional. [QueryParameters](https://cloud.google.com/dialogflow/cx/docs/reference/rpc/google.cloud.dialogflow.cx.v3#queryparameters) to send to the remote [Dialogflow](https://cloud.google.com/dialogflow/cx/docs/concept/console-conversational-agents) agent when the session control is transferred to the remote agent.",
          "$ref": "SessionConfigRemoteDialogflowQueryParameters"
        },
        "enableTextStreaming": {
          "description": "Optional. Whether to enable streaming text outputs from the model. By default, text outputs from the model are collected before sending to the client. NOTE: This is only supported for text (non-voice) sessions via StreamRunSession or BidiRunSession.",
          "type": "boolean"
        }
      }
    },
    "InputAudioConfig": {
      "id": "InputAudioConfig",
      "description": "InputAudioConfig configures how the CES agent should interpret the incoming audio data.",
      "type": "object",
      "properties": {
        "audioEncoding": {
          "description": "Required. The encoding of the input audio data.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified audio encoding.",
            "16-bit linear PCM audio encoding.",
            "8-bit samples that compand 14-bit audio samples using G.711 PCMU/mu-law.",
            "8-bit samples that compand 14-bit audio samples using G.711 PCMU/A-law."
          ],
          "enum": [
            "AUDIO_ENCODING_UNSPECIFIED",
            "LINEAR16",
            "MULAW",
            "ALAW"
          ]
        },
        "sampleRateHertz": {
          "description": "Required. The sample rate (in Hertz) of the input audio data.",
          "type": "integer",
          "format": "int32"
        },
        "noiseSuppressionLevel": {
          "description": "Optional. Whether to enable noise suppression on the input audio. Available values are \"low\", \"moderate\", \"high\", \"very_high\".",
          "type": "string"
        }
      }
    },
    "OutputAudioConfig": {
      "id": "OutputAudioConfig",
      "description": "OutputAudioConfig configures how the CES agent should synthesize outgoing audio responses.",
      "type": "object",
      "properties": {
        "audioEncoding": {
          "description": "Required. The encoding of the output audio data.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified audio encoding.",
            "16-bit linear PCM audio encoding.",
            "8-bit samples that compand 14-bit audio samples using G.711 PCMU/mu-law.",
            "8-bit samples that compand 14-bit audio samples using G.711 PCMU/A-law."
          ],
          "enum": [
            "AUDIO_ENCODING_UNSPECIFIED",
            "LINEAR16",
            "MULAW",
            "ALAW"
          ]
        },
        "sampleRateHertz": {
          "description": "Required. The sample rate (in Hertz) of the output audio data.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "Message": {
      "id": "Message",
      "description": "A message within a conversation.",
      "type": "object",
      "properties": {
        "role": {
          "description": "Optional. The role within the conversation, e.g., user, agent.",
          "type": "string"
        },
        "chunks": {
          "description": "Optional. Content of the message as a series of chunks.",
          "type": "array",
          "items": {
            "$ref": "Chunk"
          }
        },
        "eventTime": {
          "description": "Optional. Timestamp when the message was sent or received. Should not be used if the message is part of an example.",
          "type": "string",
          "format": "google-datetime"
        }
      }
    },
    "Chunk": {
      "id": "Chunk",
      "description": "A chunk of content within a message.",
      "type": "object",
      "properties": {
        "text": {
          "description": "Optional. Text data.",
          "type": "string"
        },
        "transcript": {
          "description": "Optional. Transcript associated with the audio.",
          "type": "string"
        },
        "blob": {
          "description": "Optional. Blob data.",
          "$ref": "Blob"
        },
        "payload": {
          "description": "Optional. Custom payload data.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        },
        "image": {
          "description": "Optional. Image data.",
          "$ref": "Image"
        },
        "toolCall": {
          "description": "Optional. Tool execution request.",
          "$ref": "ToolCall"
        },
        "toolResponse": {
          "description": "Optional. Tool execution response.",
          "$ref": "ToolResponse"
        },
        "agentTransfer": {
          "description": "Optional. Agent transfer event.",
          "$ref": "AgentTransfer"
        },
        "updatedVariables": {
          "description": "A struct represents variables that were updated in the conversation, keyed by variable names.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        },
        "defaultVariables": {
          "description": "A struct represents default variables at the start of the conversation, keyed by variable names.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        }
      }
    },
    "Blob": {
      "id": "Blob",
      "description": "Represents a blob input or output in the conversation.",
      "type": "object",
      "properties": {
        "mimeType": {
          "description": "Required. The IANA standard MIME type of the source data.",
          "type": "string"
        },
        "data": {
          "description": "Required. Raw bytes of the blob.",
          "type": "string",
          "format": "byte"
        }
      }
    },
    "Image": {
      "id": "Image",
      "description": "Represents an image input or output in the conversation.",
      "type": "object",
      "properties": {
        "mimeType": {
          "description": "Required. The IANA standard MIME type of the source data. Supported image types includes: * image/png * image/jpeg * image/webp",
          "type": "string"
        },
        "data": {
          "description": "Required. Raw bytes of the image.",
          "type": "string",
          "format": "byte"
        }
      }
    },
    "ToolCall": {
      "id": "ToolCall",
      "description": "Request for the client or the agent to execute the specified tool.",
      "type": "object",
      "properties": {
        "tool": {
          "description": "Optional. The name of the tool to execute. Format: `projects/{project}/locations/{location}/apps/{app}/tools/{tool}`",
          "type": "string"
        },
        "toolsetTool": {
          "description": "Optional. The toolset tool to execute.",
          "$ref": "ToolsetTool"
        },
        "id": {
          "description": "Optional. The unique identifier of the tool call. If populated, the client should return the execution result with the matching ID in ToolResponse.",
          "type": "string"
        },
        "displayName": {
          "description": "Output only. Display name of the tool.",
          "readOnly": true,
          "type": "string"
        },
        "args": {
          "description": "Optional. The input parameters and values for the tool in JSON object format.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        }
      }
    },
    "ToolsetTool": {
      "id": "ToolsetTool",
      "description": "A tool that is created from a toolset.",
      "type": "object",
      "properties": {
        "toolset": {
          "description": "Required. The resource name of the Toolset from which this tool is derived. Format: `projects/{project}/locations/{location}/apps/{app}/toolsets/{toolset}`",
          "type": "string"
        },
        "toolId": {
          "description": "Optional. The tool ID to filter the tools to retrieve the schema for.",
          "type": "string"
        }
      }
    },
    "ToolResponse": {
      "id": "ToolResponse",
      "description": "The execution result of a specific tool from the client or the agent.",
      "type": "object",
      "properties": {
        "tool": {
          "description": "Optional. The name of the tool to execute. Format: `projects/{project}/locations/{location}/apps/{app}/tools/{tool}`",
          "type": "string"
        },
        "toolsetTool": {
          "description": "Optional. The toolset tool that got executed.",
          "$ref": "ToolsetTool"
        },
        "id": {
          "description": "Optional. The matching ID of the tool call the response is for.",
          "type": "string"
        },
        "displayName": {
          "description": "Output only. Display name of the tool.",
          "readOnly": true,
          "type": "string"
        },
        "response": {
          "description": "Required. The tool execution result in JSON object format. Use \"output\" key to specify tool response and \"error\" key to specify error details (if any). If \"output\" and \"error\" keys are not specified, then whole \"response\" is treated as tool execution result.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        }
      }
    },
    "AgentTransfer": {
      "id": "AgentTransfer",
      "description": "Represents an event indicating the transfer of a conversation to a different agent.",
      "type": "object",
      "properties": {
        "targetAgent": {
          "description": "Required. The agent to which the conversation is being transferred. The agent will handle the conversation from this point forward. Format: `projects/{project}/locations/{location}/apps/{app}/agents/{agent}`",
          "type": "string"
        },
        "displayName": {
          "description": "Output only. Display name of the agent.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "SessionConfigRemoteDialogflowQueryParameters": {
      "id": "SessionConfigRemoteDialogflowQueryParameters",
      "description": "[QueryParameters](https://cloud.google.com/dialogflow/cx/docs/reference/rpc/google.cloud.dialogflow.cx.v3#queryparameters) to send to the remote [Dialogflow](https://cloud.google.com/dialogflow/cx/docs/concept/console-conversational-agents) agent when the session control is transferred to the remote agent.",
      "type": "object",
      "properties": {
        "webhookHeaders": {
          "description": "Optional. The HTTP headers to be sent as webhook_headers in [QueryParameters](https://cloud.google.com/dialogflow/cx/docs/reference/rpc/google.cloud.dialogflow.cx.v3#queryparameters).",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "payload": {
          "description": "Optional. The payload to be sent in [QueryParameters](https://cloud.google.com/dialogflow/cx/docs/reference/rpc/google.cloud.dialogflow.cx.v3#queryparameters).",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        },
        "endUserMetadata": {
          "description": "Optional. The end user metadata to be sent in [QueryParameters](https://cloud.google.com/dialogflow/cx/docs/reference/rpc/google.cloud.dialogflow.cx.v3#queryparameters).",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        }
      }
    },
    "SessionInput": {
      "id": "SessionInput",
      "description": "Input for the session.",
      "type": "object",
      "properties": {
        "text": {
          "description": "Optional. Text data from the end user.",
          "type": "string"
        },
        "dtmf": {
          "description": "Optional. DTMF digits from the end user.",
          "type": "string"
        },
        "audio": {
          "description": "Optional. Audio data from the end user.",
          "type": "string",
          "format": "byte"
        },
        "toolResponses": {
          "description": "Optional. Execution results for the tool calls from the client.",
          "$ref": "ToolResponses"
        },
        "image": {
          "description": "Optional. Image data from the end user.",
          "$ref": "Image"
        },
        "blob": {
          "description": "Optional. Blob data from the end user.",
          "$ref": "Blob"
        },
        "variables": {
          "description": "Optional. Contextual variables for the session, keyed by name. Only variables declared in the app will be used by the CES agent. Unrecognized variables will still be sent to the Dialogflow agent as additional session parameters.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        },
        "event": {
          "description": "Optional. Event input.",
          "$ref": "Event"
        },
        "willContinue": {
          "description": "Optional. A flag to indicate if the current message is a fragment of a larger input in the bidi streaming session. When set to `true`, the agent defers processing until it receives a subsequent message where `will_continue` is `false`, or until the system detects an endpoint in the audio input. NOTE: This field does not apply to audio and DTMF inputs, as they are always processed automatically based on the endpointing signal.",
          "type": "boolean"
        }
      }
    },
    "ToolResponses": {
      "id": "ToolResponses",
      "description": "Execution results for the requested tool calls from the client.",
      "type": "object",
      "properties": {
        "toolResponses": {
          "description": "Optional. The list of tool execution results.",
          "type": "array",
          "items": {
            "$ref": "ToolResponse"
          }
        }
      }
    },
    "Event": {
      "id": "Event",
      "description": "Event input.",
      "type": "object",
      "properties": {
        "event": {
          "description": "Required. The name of the event.",
          "type": "string"
        }
      }
    },
    "RunSessionResponse": {
      "id": "RunSessionResponse",
      "description": "Response message for SessionService.RunSession.",
      "type": "object",
      "properties": {
        "outputs": {
          "description": "Outputs for the session.",
          "type": "array",
          "items": {
            "$ref": "SessionOutput"
          }
        }
      }
    },
    "SessionOutput": {
      "id": "SessionOutput",
      "description": "Output for the session.",
      "type": "object",
      "properties": {
        "text": {
          "description": "Output text from the CES agent.",
          "type": "string"
        },
        "audio": {
          "description": "Output audio from the CES agent.",
          "type": "string",
          "format": "byte"
        },
        "toolCalls": {
          "description": "Request for the client to execute the tools.",
          "$ref": "ToolCalls"
        },
        "citations": {
          "description": "Citations that provide the source information for the agent's generated text.",
          "$ref": "Citations"
        },
        "googleSearchSuggestions": {
          "description": "The suggestions returned from Google Search as a result of invoking the GoogleSearchTool.",
          "$ref": "GoogleSearchSuggestions"
        },
        "endSession": {
          "description": "Indicates the session has ended.",
          "$ref": "EndSession"
        },
        "payload": {
          "description": "Custom payload with structured output from the CES agent.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        },
        "turnIndex": {
          "description": "Indicates the sequential order of conversation turn to which this output belongs to, starting from 1.",
          "type": "integer",
          "format": "int32"
        },
        "turnCompleted": {
          "description": "If true, the CES agent has detected the end of the current conversation turn and will provide no further output for this turn.",
          "type": "boolean"
        },
        "diagnosticInfo": {
          "description": "Optional. Diagnostic information contains execution details during the processing of the input. Only populated in the last SessionOutput (with `turn_completed=true`) for each turn.",
          "$ref": "SessionOutputDiagnosticInfo"
        }
      }
    },
    "ToolCalls": {
      "id": "ToolCalls",
      "description": "Request for the client to execute the tools and return the execution results before continuing the session.",
      "type": "object",
      "properties": {
        "toolCalls": {
          "description": "Optional. The list of tool calls to execute.",
          "type": "array",
          "items": {
            "$ref": "ToolCall"
          }
        }
      }
    },
    "Citations": {
      "id": "Citations",
      "description": "Citations associated with the agent response.",
      "type": "object",
      "properties": {
        "citedChunks": {
          "description": "List of cited pieces of information.",
          "type": "array",
          "items": {
            "$ref": "CitationsCitedChunk"
          }
        }
      }
    },
    "CitationsCitedChunk": {
      "id": "CitationsCitedChunk",
      "description": "Piece of cited information.",
      "type": "object",
      "properties": {
        "uri": {
          "description": "URI used for citation.",
          "type": "string"
        },
        "title": {
          "description": "Title of the cited document.",
          "type": "string"
        },
        "text": {
          "description": "Text used for citation.",
          "type": "string"
        }
      }
    },
    "GoogleSearchSuggestions": {
      "id": "GoogleSearchSuggestions",
      "description": "Search suggestions from Google Search Tool.",
      "type": "object",
      "properties": {
        "htmls": {
          "description": "Compliant HTML and CSS styling for search suggestions. The provided HTML and CSS automatically adapts to your device settings, displaying in either light or dark mode indicated by `@media(prefers-color-scheme)`.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "webSearchQueries": {
          "description": "List of queries used to perform the google search along with the search result URIs forming the search suggestions.",
          "type": "array",
          "items": {
            "$ref": "WebSearchQuery"
          }
        }
      }
    },
    "WebSearchQuery": {
      "id": "WebSearchQuery",
      "description": "Represents a single web search query and its associated search uri.",
      "type": "object",
      "properties": {
        "query": {
          "description": "The search query text.",
          "type": "string"
        },
        "uri": {
          "description": "The URI to the Google Search results page for the query.",
          "type": "string"
        }
      }
    },
    "EndSession": {
      "id": "EndSession",
      "description": "Indicates the session has terminated, due to either successful completion (e.g. user says \"Good bye!\" ) or an agent escalation. The agent will not process any further inputs after session is terminated and the client should half-close and disconnect after receiving all remaining responses from the agent.",
      "type": "object",
      "properties": {
        "metadata": {
          "description": "Optional. Provides additional information about the end session signal, such as the reason for ending the session.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        }
      }
    },
    "SessionOutputDiagnosticInfo": {
      "id": "SessionOutputDiagnosticInfo",
      "description": "Contains execution details during the processing.",
      "type": "object",
      "properties": {
        "messages": {
          "description": "List of the messages that happened during the processing.",
          "type": "array",
          "items": {
            "$ref": "Message"
          }
        },
        "rootSpan": {
          "description": "A trace of the entire request processing, represented as a root span. This span can contain nested child spans for specific operations.",
          "$ref": "Span"
        }
      }
    },
    "Span": {
      "id": "Span",
      "description": "A span is a unit of work or a single operation during the request processing.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Output only. The name of the span.",
          "readOnly": true,
          "type": "string"
        },
        "startTime": {
          "description": "Output only. The start time of the span.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "endTime": {
          "description": "Output only. The end time of the span.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "duration": {
          "description": "Output only. The duration of the span.",
          "readOnly": true,
          "type": "string",
          "format": "google-duration"
        },
        "attributes": {
          "description": "Output only. Key-value attributes associated with the span.",
          "readOnly": true,
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        },
        "childSpans": {
          "description": "Output only. The child spans that are nested under this span.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "Span"
          }
        }
      }
    },
    "ListOperationsResponse": {
      "id": "ListOperationsResponse",
      "description": "The response message for Operations.ListOperations.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "A list of operations that matches the specified filter in the request.",
          "type": "array",
          "items": {
            "$ref": "Operation"
          }
        },
        "nextPageToken": {
          "description": "The standard List next-page token.",
          "type": "string"
        },
        "unreachable": {
          "description": "Unordered list. Unreachable resources. Populated when the request sets `ListOperationsRequest.return_partial_success` and reads across collections. For example, when attempting to list all resources across all supported locations.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "Operation": {
      "id": "Operation",
      "description": "This resource represents a long-running operation that is the result of a network API call.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
          "type": "string"
        },
        "metadata": {
          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object. Contains field @type with type URL."
          }
        },
        "done": {
          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
          "type": "boolean"
        },
        "error": {
          "description": "The error result of the operation in case of failure or cancellation.",
          "$ref": "Status"
        },
        "response": {
          "description": "The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object. Contains field @type with type URL."
          }
        }
      }
    },
    "Status": {
      "id": "Status",
      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
      "type": "object",
      "properties": {
        "code": {
          "description": "The status code, which should be an enum value of google.rpc.Code.",
          "type": "integer",
          "format": "int32"
        },
        "message": {
          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
          "type": "string"
        },
        "details": {
          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": {
              "type": "any",
              "description": "Properties of the object. Contains field @type with type URL."
            }
          }
        }
      }
    },
    "Empty": {
      "id": "Empty",
      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }",
      "type": "object",
      "properties": {}
    },
    "CancelOperationRequest": {
      "id": "CancelOperationRequest",
      "description": "The request message for Operations.CancelOperation.",
      "type": "object",
      "properties": {}
    },
    "ListAppsResponse": {
      "id": "ListAppsResponse",
      "description": "Response message for AgentService.ListApps.",
      "type": "object",
      "properties": {
        "apps": {
          "description": "The list of apps.",
          "type": "array",
          "items": {
            "$ref": "App"
          }
        },
        "nextPageToken": {
          "description": "A token that can be sent as ListAppsRequest.page_token to retrieve the next page. Absence of this field indicates there are no subsequent pages.",
          "type": "string"
        },
        "unreachable": {
          "description": "Unordered list. Locations that could not be reached.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "App": {
      "id": "App",
      "description": "An app serves as a top-level container for a group of agents, including the root agent and its sub-agents, along with their associated configurations. These agents work together to achieve specific goals within the app's context.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Identifier. The unique identifier of the app. Format: `projects/{project}/locations/{location}/apps/{app}`",
          "type": "string"
        },
        "displayName": {
          "description": "Required. Display name of the app.",
          "type": "string"
        },
        "description": {
          "description": "Optional. Human-readable description of the app.",
          "type": "string"
        },
        "pinned": {
          "description": "Optional. Whether the app is pinned in the app list.",
          "type": "boolean"
        },
        "rootAgent": {
          "description": "Optional. The root agent is the entry point of the app. Format: `projects/{project}/locations/{location}/apps/{app}/agents/{agent}`",
          "type": "string"
        },
        "languageSettings": {
          "description": "Optional. Language settings of the app.",
          "$ref": "LanguageSettings"
        },
        "timeZoneSettings": {
          "description": "Optional. TimeZone settings of the app.",
          "$ref": "TimeZoneSettings"
        },
        "audioProcessingConfig": {
          "description": "Optional. Audio processing configuration of the app.",
          "$ref": "AudioProcessingConfig"
        },
        "loggingSettings": {
          "description": "Optional. Logging settings of the app.",
          "$ref": "LoggingSettings"
        },
        "errorHandlingSettings": {
          "description": "Optional. Error handling settings of the app.",
          "$ref": "ErrorHandlingSettings"
        },
        "modelSettings": {
          "description": "Optional. The default LLM model settings for the app. Individual resources (e.g. agents, guardrails) can override these configurations as needed.",
          "$ref": "ModelSettings"
        },
        "toolExecutionMode": {
          "description": "Optional. The tool execution mode for the app. If not provided, will default to PARALLEL.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified tool execution mode. Default to PARALLEL.",
            "If there are multiple tools being selected, they will be executed in parallel, with the same [ToolContext](https://google.github.io/adk-docs/context/#the-different-types-of-context).",
            "If there are multiple tools being selected, they will be executed sequentially. The next tool will only be executed after the previous tool completes and it can see updated [ToolContext](https://google.github.io/adk-docs/context/#the-different-types-of-context) from the previous tool."
          ],
          "enum": [
            "TOOL_EXECUTION_MODE_UNSPECIFIED",
            "PARALLEL",
            "SEQUENTIAL"
          ]
        },
        "evaluationMetricsThresholds": {
          "description": "Optional. The evaluation thresholds for the app.",
          "$ref": "EvaluationMetricsThresholds"
        },
        "variableDeclarations": {
          "description": "Optional. The declarations of the variables.",
          "type": "array",
          "items": {
            "$ref": "AppVariableDeclaration"
          }
        },
        "predefinedVariableDeclarations": {
          "description": "Output only. The declarations of predefined variables for the app.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "AppVariableDeclaration"
          }
        },
        "globalInstruction": {
          "description": "Optional. Instructions for all the agents in the app. You can use this instruction to set up a stable identity or personality across all the agents.",
          "type": "string"
        },
        "guardrails": {
          "description": "Optional. List of guardrails for the app. Format: `projects/{project}/locations/{location}/apps/{app}/guardrails/{guardrail}`",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "dataStoreSettings": {
          "description": "Optional. The data store settings for the app.",
          "$ref": "DataStoreSettings"
        },
        "defaultChannelProfile": {
          "description": "Optional. The default channel profile used by the app.",
          "$ref": "ChannelProfile"
        },
        "metadata": {
          "description": "Optional. Metadata about the app. This field can be used to store additional information relevant to the app's details or intended usages.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "createTime": {
          "description": "Output only. Timestamp when the app was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "updateTime": {
          "description": "Output only. Timestamp when the app was last updated.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "etag": {
          "description": "Output only. Etag used to ensure the object hasn't changed during a read-modify-write operation. If the etag is empty, the update will overwrite any concurrent changes.",
          "readOnly": true,
          "type": "string"
        },
        "deploymentCount": {
          "description": "Output only. Number of deployments in the app.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "clientCertificateSettings": {
          "description": "Optional. The default client certificate settings for the app.",
          "$ref": "ClientCertificateSettings"
        },
        "locked": {
          "description": "Optional. Indicates whether the app is locked for changes. If the app is locked, modifications to the app resources will be rejected.",
          "type": "boolean"
        }
      }
    },
    "LanguageSettings": {
      "id": "LanguageSettings",
      "description": "Language settings of the app.",
      "type": "object",
      "properties": {
        "defaultLanguageCode": {
          "description": "Optional. The default language code of the app.",
          "type": "string"
        },
        "supportedLanguageCodes": {
          "description": "Optional. List of languages codes supported by the app, in addition to the `default_language_code`.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "enableMultilingualSupport": {
          "description": "Optional. Enables multilingual support. If true, agents in the app will use pre-built instructions to improve handling of multilingual input.",
          "type": "boolean"
        },
        "fallbackAction": {
          "description": "Optional. Deprecated: This feature is no longer supported. Use `enable_multilingual_support` instead to improve handling of multilingual input. The action to perform when an agent receives input in an unsupported language. This can be a predefined action or a custom tool call. Valid values are: - A tool's full resource name, which triggers a specific tool execution. - A predefined system action, such as \"escalate\" or \"exit\", which triggers an EndSession signal with corresponding metadata to terminate the conversation.",
          "deprecated": true,
          "type": "string"
        }
      }
    },
    "TimeZoneSettings": {
      "id": "TimeZoneSettings",
      "description": "TimeZone settings of the app.",
      "type": "object",
      "properties": {
        "timeZone": {
          "description": "Optional. The time zone of the app from the [time zone database](https://www.iana.org/time-zones), e.g., America/Los_Angeles, Europe/Paris.",
          "type": "string"
        }
      }
    },
    "AudioProcessingConfig": {
      "id": "AudioProcessingConfig",
      "description": "Configuration for how the input and output audio should be processed and delivered.",
      "type": "object",
      "properties": {
        "synthesizeSpeechConfigs": {
          "description": "Optional. Configuration of how the agent response should be synthesized, mapping from the language code to SynthesizeSpeechConfig. If the configuration for the specified language code is not found, the configuration for the root language code will be used. For example, if the map contains \"en-us\" and \"en\", and the specified language code is \"en-gb\", then \"en\" configuration will be used. Note: Language code is case-insensitive.",
          "type": "object",
          "additionalProperties": {
            "$ref": "SynthesizeSpeechConfig"
          }
        },
        "bargeInConfig": {
          "description": "Optional. Configures the agent behavior for the user barge-in activities.",
          "$ref": "BargeInConfig"
        },
        "inactivityTimeout": {
          "description": "Optional. The duration of user inactivity (no speech or interaction) before the agent prompts the user for reengagement. If not set, the agent will not prompt the user for reengagement.",
          "type": "string",
          "format": "google-duration"
        },
        "ambientSoundConfig": {
          "description": "Optional. Configuration for the ambient sound to be played with the synthesized agent response, to enhance the naturalness of the conversation.",
          "$ref": "AmbientSoundConfig"
        }
      }
    },
    "SynthesizeSpeechConfig": {
      "id": "SynthesizeSpeechConfig",
      "description": "Configuration for how the agent response should be synthesized.",
      "type": "object",
      "properties": {
        "voice": {
          "description": "Optional. The name of the voice. If not set, the service will choose a voice based on the other parameters such as language_code. For the list of available voices, please refer to [Supported voices and languages](https://cloud.google.com/text-to-speech/docs/voices) from Cloud Text-to-Speech.",
          "type": "string"
        },
        "speakingRate": {
          "description": "Optional. The speaking rate/speed in the range [0.25, 2.0]. 1.0 is the normal native speed supported by the specific voice. 2.0 is twice as fast, and 0.5 is half as fast. Values outside of the range [0.25, 2.0] will return an error.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "BargeInConfig": {
      "id": "BargeInConfig",
      "description": "Configuration for how the user barge-in activities should be handled.",
      "type": "object",
      "properties": {
        "disableBargeIn": {
          "description": "Optional. Disables user barge-in while the agent is speaking. If true, user input during agent response playback will be ignored. Deprecated: `disable_barge_in` is deprecated in favor of `disable_barge_in_control` in ChannelProfile.",
          "deprecated": true,
          "type": "boolean"
        },
        "bargeInAwareness": {
          "description": "Optional. If enabled, the agent will adapt its next response based on the assumption that the user hasn't heard the full preceding agent message. This should not be used in scenarios where agent responses are displayed visually.",
          "type": "boolean"
        }
      }
    },
    "AmbientSoundConfig": {
      "id": "AmbientSoundConfig",
      "description": "Configuration for the ambient sound to be played with the synthesized agent response, to enhance the naturalness of the conversation.",
      "type": "object",
      "properties": {
        "prebuiltAmbientNoise": {
          "description": "Optional. Deprecated: `prebuilt_ambient_noise` is deprecated in favor of `prebuilt_ambient_sound`.",
          "deprecated": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Ambient noise of a retail store.",
            "Ambient noise of a convention hall.",
            "Ambient noise of a street."
          ],
          "enum": [
            "PREBUILT_AMBIENT_NOISE_UNSPECIFIED",
            "RETAIL_STORE",
            "CONVENTION_HALL",
            "OUTDOOR"
          ]
        },
        "gcsUri": {
          "description": "Optional. Ambient noise as a mono-channel, 16kHz WAV file stored in [Cloud Storage](https://cloud.google.com/storage). Note: Please make sure the CES service agent `service-@gcp-sa-ces.iam.gserviceaccount.com` has `storage.objects.get` permission to the Cloud Storage object.",
          "type": "string"
        },
        "prebuiltAmbientSound": {
          "description": "Optional. Name of the prebuilt ambient sound. Valid values are: - \"coffee_shop\" - \"keyboard\" - \"keypad\" - \"hum\" - \"office_1\" - \"office_2\" - \"office_3\" - \"room_1\" - \"room_2\" - \"room_3\" - \"room_4\" - \"room_5\" - \"air_conditioner\"",
          "type": "string"
        },
        "volumeGainDb": {
          "description": "Optional. Volume gain (in dB) of the normal native volume supported by ambient noise, in the range [-96.0, 16.0]. If unset, or set to a value of 0.0 (dB), will play at normal native signal amplitude. A value of -6.0 (dB) will play at approximately half the amplitude of the normal native signal amplitude. A value of +6.0 (dB) will play at approximately twice the amplitude of the normal native signal amplitude. We strongly recommend not to exceed +10 (dB) as there's usually no effective increase in loudness for any value greater than that.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "LoggingSettings": {
      "id": "LoggingSettings",
      "description": "Settings to describe the logging behaviors for the app.",
      "type": "object",
      "properties": {
        "redactionConfig": {
          "description": "Optional. Configuration for how sensitive data should be redacted.",
          "$ref": "RedactionConfig"
        },
        "audioRecordingConfig": {
          "description": "Optional. Configuration for how audio interactions should be recorded.",
          "$ref": "AudioRecordingConfig"
        },
        "bigqueryExportSettings": {
          "description": "Optional. Settings to describe the BigQuery export behaviors for the app. The conversation data will be exported to BigQuery tables if it is enabled.",
          "$ref": "BigQueryExportSettings"
        },
        "cloudLoggingSettings": {
          "description": "Optional. Settings to describe the Cloud Logging behaviors for the app.",
          "$ref": "CloudLoggingSettings"
        },
        "conversationLoggingSettings": {
          "description": "Optional. Settings to describe the conversation logging behaviors for the app.",
          "$ref": "ConversationLoggingSettings"
        },
        "evaluationAudioRecordingConfig": {
          "description": "Optional. Configuration for how audio interactions should be recorded for the evaluation. By default, audio recording is not enabled for evaluation sessions.",
          "$ref": "AudioRecordingConfig"
        },
        "metricAnalysisSettings": {
          "description": "Optional. Settings to describe the conversation data collection behaviors for the LLM analysis pipeline for the app.",
          "$ref": "MetricAnalysisSettings"
        }
      }
    },
    "RedactionConfig": {
      "id": "RedactionConfig",
      "description": "Configuration to instruct how sensitive data should be handled.",
      "type": "object",
      "properties": {
        "enableRedaction": {
          "description": "Optional. If true, redaction will be applied in various logging scenarios, including conversation history, Cloud Logging and audio recording.",
          "type": "boolean"
        },
        "inspectTemplate": {
          "description": "Optional. [DLP](https://cloud.google.com/dlp/docs) inspect template name to configure detection of sensitive data types. Format: `projects/{project}/locations/{location}/inspectTemplates/{inspect_template}`",
          "type": "string"
        },
        "deidentifyTemplate": {
          "description": "Optional. [DLP](https://cloud.google.com/dlp/docs) deidentify template name to instruct on how to de-identify content. Format: `projects/{project}/locations/{location}/deidentifyTemplates/{deidentify_template}`",
          "type": "string"
        }
      }
    },
    "AudioRecordingConfig": {
      "id": "AudioRecordingConfig",
      "description": "Configuration for how the audio interactions should be recorded.",
      "type": "object",
      "properties": {
        "gcsBucket": {
          "description": "Optional. The [Cloud Storage](https://cloud.google.com/storage) bucket to store the session audio recordings. The URI must start with \"gs://\". Please choose a bucket location that meets your data residency requirements. Note: If the Cloud Storage bucket is in a different project from the app, you should grant `storage.objects.create` permission to the CES service agent `service-@gcp-sa-ces.iam.gserviceaccount.com`.",
          "type": "string"
        },
        "gcsPathPrefix": {
          "description": "Optional. The Cloud Storage path prefix for audio recordings. This prefix can include the following placeholders, which will be dynamically substituted at serving time: - $project: project ID - $location: app location - $app: app ID - $date: session date in YYYY-MM-DD format - $session: session ID If the path prefix is not specified, the default prefix `$project/$location/$app/$date/$session/` will be used.",
          "type": "string"
        }
      }
    },
    "BigQueryExportSettings": {
      "id": "BigQueryExportSettings",
      "description": "Settings to describe the BigQuery export behaviors for the app.",
      "type": "object",
      "properties": {
        "enabled": {
          "description": "Optional. Indicates whether the BigQuery export is enabled.",
          "type": "boolean"
        },
        "project": {
          "description": "Optional. The **project ID** of the BigQuery dataset to export the data to. Note: If the BigQuery dataset is in a different project from the app, you should grant `roles/bigquery.admin` role to the CES service agent `service-@gcp-sa-ces.iam.gserviceaccount.com`.",
          "type": "string"
        },
        "dataset": {
          "description": "Optional. The BigQuery **dataset ID** to export the data to.",
          "type": "string"
        }
      }
    },
    "CloudLoggingSettings": {
      "id": "CloudLoggingSettings",
      "description": "Settings to describe the Cloud Logging behaviors for the app.",
      "type": "object",
      "properties": {
        "enableCloudLogging": {
          "description": "Optional. Whether to enable Cloud Logging for the sessions.",
          "type": "boolean"
        }
      }
    },
    "ConversationLoggingSettings": {
      "id": "ConversationLoggingSettings",
      "description": "Settings to describe the conversation logging behaviors for the app.",
      "type": "object",
      "properties": {
        "disableConversationLogging": {
          "description": "Optional. Whether to disable conversation logging for the sessions.",
          "type": "boolean"
        }
      }
    },
    "MetricAnalysisSettings": {
      "id": "MetricAnalysisSettings",
      "description": "Settings to describe the conversation data collection behaviors for LLM analysis metrics pipeline.",
      "type": "object",
      "properties": {
        "llmMetricsOptedOut": {
          "description": "Optional. Whether to collect conversation data for llm analysis metrics. If true, conversation data will not be collected for llm analysis metrics; otherwise, conversation data will be collected.",
          "type": "boolean"
        }
      }
    },
    "ErrorHandlingSettings": {
      "id": "ErrorHandlingSettings",
      "description": "Settings to describe how errors should be handled in the app.",
      "type": "object",
      "properties": {
        "errorHandlingStrategy": {
          "description": "Optional. The strategy to use for error handling.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified error handling strategy.",
            "No specific handling is enabled.",
            "A fallback message will be returned to the user in case of system errors (e.g. LLM errors).",
            "An EndSession signal will be emitted in case of system errors (e.g. LLM errors)."
          ],
          "enum": [
            "ERROR_HANDLING_STRATEGY_UNSPECIFIED",
            "NONE",
            "FALLBACK_RESPONSE",
            "END_SESSION"
          ]
        }
      }
    },
    "ModelSettings": {
      "id": "ModelSettings",
      "description": "Model settings contains various configurations for the LLM model.",
      "type": "object",
      "properties": {
        "model": {
          "description": "Optional. The LLM model that the agent should use. If not set, the agent will inherit the model from its parent agent.",
          "type": "string"
        },
        "temperature": {
          "description": "Optional. If set, this temperature will be used for the LLM model. Temperature controls the randomness of the model's responses. Lower temperatures produce responses that are more predictable. Higher temperatures produce responses that are more creative.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "EvaluationMetricsThresholds": {
      "id": "EvaluationMetricsThresholds",
      "description": "Threshold settings for metrics in an Evaluation.",
      "type": "object",
      "properties": {
        "goldenEvaluationMetricsThresholds": {
          "description": "Optional. The golden evaluation metrics thresholds.",
          "$ref": "EvaluationMetricsThresholdsGoldenEvaluationMetricsThresholds"
        },
        "hallucinationMetricBehavior": {
          "description": "Optional. Deprecated: Use `golden_hallucination_metric_behavior` instead. The hallucination metric behavior is currently used for golden evaluations.",
          "deprecated": true,
          "type": "string",
          "enumDescriptions": [
            "Unspecified hallucination metric behavior.",
            "Disable hallucination metric.",
            "Enable hallucination metric."
          ],
          "enum": [
            "HALLUCINATION_METRIC_BEHAVIOR_UNSPECIFIED",
            "DISABLED",
            "ENABLED"
          ]
        },
        "goldenHallucinationMetricBehavior": {
          "description": "Optional. The hallucination metric behavior for golden evaluations.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified hallucination metric behavior.",
            "Disable hallucination metric.",
            "Enable hallucination metric."
          ],
          "enum": [
            "HALLUCINATION_METRIC_BEHAVIOR_UNSPECIFIED",
            "DISABLED",
            "ENABLED"
          ]
        },
        "scenarioHallucinationMetricBehavior": {
          "description": "Optional. The hallucination metric behavior for scenario evaluations.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified hallucination metric behavior.",
            "Disable hallucination metric.",
            "Enable hallucination metric."
          ],
          "enum": [
            "HALLUCINATION_METRIC_BEHAVIOR_UNSPECIFIED",
            "DISABLED",
            "ENABLED"
          ]
        }
      }
    },
    "EvaluationMetricsThresholdsGoldenEvaluationMetricsThresholds": {
      "id": "EvaluationMetricsThresholdsGoldenEvaluationMetricsThresholds",
      "description": "Settings for golden evaluations.",
      "type": "object",
      "properties": {
        "turnLevelMetricsThresholds": {
          "description": "Optional. The turn level metrics thresholds.",
          "$ref": "EvaluationMetricsThresholdsGoldenEvaluationMetricsThresholdsTurnLevelMetricsThresholds"
        },
        "expectationLevelMetricsThresholds": {
          "description": "Optional. The expectation level metrics thresholds.",
          "$ref": "EvaluationMetricsThresholdsGoldenEvaluationMetricsThresholdsExpectationLevelMetricsThresholds"
        },
        "toolMatchingSettings": {
          "description": "Optional. The tool matching settings. An extra tool call is a tool call that is present in the execution but does not match any tool call in the golden expectation.",
          "$ref": "EvaluationMetricsThresholdsToolMatchingSettings"
        }
      }
    },
    "EvaluationMetricsThresholdsGoldenEvaluationMetricsThresholdsTurnLevelMetricsThresholds": {
      "id": "EvaluationMetricsThresholdsGoldenEvaluationMetricsThresholdsTurnLevelMetricsThresholds",
      "description": "Turn level metrics thresholds.",
      "type": "object",
      "properties": {
        "semanticSimilaritySuccessThreshold": {
          "description": "Optional. The success threshold for semantic similarity. Must be an integer between 0 and 4. Default is \u003e= 3.",
          "type": "integer",
          "format": "int32"
        },
        "overallToolInvocationCorrectnessThreshold": {
          "description": "Optional. The success threshold for overall tool invocation correctness. Must be a float between 0 and 1. Default is 1.0.",
          "type": "number",
          "format": "float"
        },
        "semanticSimilarityChannel": {
          "description": "Optional. The semantic similarity channel to use for evaluation.",
          "type": "string",
          "enumDescriptions": [
            "Metric unspecified. Defaults to TEXT.",
            "Use text semantic similarity.",
            "Use audio semantic similarity."
          ],
          "enum": [
            "SEMANTIC_SIMILARITY_CHANNEL_UNSPECIFIED",
            "TEXT",
            "AUDIO"
          ]
        }
      }
    },
    "EvaluationMetricsThresholdsGoldenEvaluationMetricsThresholdsExpectationLevelMetricsThresholds": {
      "id": "EvaluationMetricsThresholdsGoldenEvaluationMetricsThresholdsExpectationLevelMetricsThresholds",
      "description": "Expectation level metrics thresholds.",
      "type": "object",
      "properties": {
        "toolInvocationParameterCorrectnessThreshold": {
          "description": "Optional. The success threshold for individual tool invocation parameter correctness. Must be a float between 0 and 1. Default is 1.0.",
          "type": "number",
          "format": "float"
        }
      }
    },
    "EvaluationMetricsThresholdsToolMatchingSettings": {
      "id": "EvaluationMetricsThresholdsToolMatchingSettings",
      "description": "Settings for matching tool calls.",
      "type": "object",
      "properties": {
        "extraToolCallBehavior": {
          "description": "Optional. Behavior for extra tool calls. Defaults to FAIL.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified behavior. Defaults to FAIL.",
            "Fail the evaluation if an extra tool call is encountered.",
            "Allow the extra tool call."
          ],
          "enum": [
            "EXTRA_TOOL_CALL_BEHAVIOR_UNSPECIFIED",
            "FAIL",
            "ALLOW"
          ]
        }
      }
    },
    "AppVariableDeclaration": {
      "id": "AppVariableDeclaration",
      "description": "Defines the structure and metadata for a variable.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Required. The name of the variable. The name must start with a letter or underscore and contain only letters, numbers, or underscores.",
          "type": "string"
        },
        "description": {
          "description": "Required. The description of the variable.",
          "type": "string"
        },
        "schema": {
          "description": "Required. The schema of the variable.",
          "$ref": "Schema"
        }
      }
    },
    "Schema": {
      "id": "Schema",
      "description": "Represents a select subset of an OpenAPI 3.0 schema object.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Required. The type of the data.",
          "type": "string",
          "enumDescriptions": [
            "Type unspecified.",
            "String type.",
            "Integer type.",
            "Number type.",
            "Boolean type.",
            "Object type.",
            "Array type."
          ],
          "enum": [
            "TYPE_UNSPECIFIED",
            "STRING",
            "INTEGER",
            "NUMBER",
            "BOOLEAN",
            "OBJECT",
            "ARRAY"
          ]
        },
        "properties": {
          "description": "Optional. Properties of Type.OBJECT.",
          "type": "object",
          "additionalProperties": {
            "$ref": "Schema"
          }
        },
        "required": {
          "description": "Optional. Required properties of Type.OBJECT.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "description": {
          "description": "Optional. The description of the data.",
          "type": "string"
        },
        "items": {
          "description": "Optional. Schema of the elements of Type.ARRAY.",
          "$ref": "Schema"
        },
        "nullable": {
          "description": "Optional. Indicates if the value may be null.",
          "type": "boolean"
        },
        "uniqueItems": {
          "description": "Optional. Indicate the items in the array must be unique. Only applies to TYPE.ARRAY.",
          "type": "boolean"
        },
        "prefixItems": {
          "description": "Optional. Schemas of initial elements of Type.ARRAY.",
          "type": "array",
          "items": {
            "$ref": "Schema"
          }
        },
        "additionalProperties": {
          "description": "Optional. Can either be a boolean or an object, controls the presence of additional properties.",
          "$ref": "Schema"
        },
        "anyOf": {
          "description": "Optional. The value should be validated against any (one or more) of the subschemas in the list.",
          "type": "array",
          "items": {
            "$ref": "Schema"
          }
        },
        "enum": {
          "description": "Optional. Possible values of the element of primitive type with enum format. Examples: 1. We can define direction as : {type:STRING, format:enum, enum:[\"EAST\", NORTH\", \"SOUTH\", \"WEST\"]} 2. We can define apartment number as : {type:INTEGER, format:enum, enum:[\"101\", \"201\", \"301\"]}",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "default": {
          "description": "Optional. Default value of the data.",
          "type": "any"
        },
        "ref": {
          "description": "Optional. Allows indirect references between schema nodes. The value should be a valid reference to a child of the root `defs`. For example, the following schema defines a reference to a schema node named \"Pet\": ``` type: object properties: pet: ref: #/defs/Pet defs: Pet: type: object properties: name: type: string ``` The value of the \"pet\" property is a reference to the schema node named \"Pet\". See details in https://json-schema.org/understanding-json-schema/structuring.",
          "type": "string"
        },
        "defs": {
          "description": "Optional. A map of definitions for use by `ref`. Only allowed at the root of the schema.",
          "type": "object",
          "additionalProperties": {
            "$ref": "Schema"
          }
        },
        "title": {
          "description": "Optional. The title of the schema.",
          "type": "string"
        },
        "minItems": {
          "description": "Optional. Minimum number of the elements for Type.ARRAY.",
          "type": "string",
          "format": "int64"
        },
        "maxItems": {
          "description": "Optional. Maximum number of the elements for Type.ARRAY.",
          "type": "string",
          "format": "int64"
        },
        "minimum": {
          "description": "Optional. Minimum value for Type.INTEGER and Type.NUMBER.",
          "type": "number",
          "format": "double"
        },
        "maximum": {
          "description": "Optional. Maximum value for Type.INTEGER and Type.NUMBER.",
          "type": "number",
          "format": "double"
        }
      }
    },
    "DataStoreSettings": {
      "id": "DataStoreSettings",
      "description": "Data store related settings for the app.",
      "type": "object",
      "properties": {
        "engines": {
          "description": "Output only. The engines for the app.",
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "DataStoreSettingsEngine"
          }
        }
      }
    },
    "DataStoreSettingsEngine": {
      "id": "DataStoreSettingsEngine",
      "description": "An engine to which the data stores are connected. See Vertex AI Search: https://cloud.google.com/generative-ai-app-builder/docs/enterprise-search-introduction.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Output only. The resource name of the engine. Format: `projects/{project}/locations/{location}/collections/{collection}/engines/{engine}`",
          "readOnly": true,
          "type": "string"
        },
        "type": {
          "description": "Output only. The type of the engine.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Unspecified engine type.",
            "The SOLUTION_TYPE_SEARCH engine for the app. All connector data stores added to the app will be added to this engine.",
            "Chat engine type. The SOLUTION_TYPE_CHAT engine for the app. All connector data stores added to the app will be added to this engine."
          ],
          "enum": [
            "TYPE_UNSPECIFIED",
            "ENGINE_TYPE_SEARCH",
            "ENGINE_TYPE_CHAT"
          ]
        }
      }
    },
    "ChannelProfile": {
      "id": "ChannelProfile",
      "description": "A ChannelProfile configures the agent's behavior for a specific communication channel, such as web UI or telephony.",
      "type": "object",
      "properties": {
        "profileId": {
          "description": "Optional. The unique identifier of the channel profile.",
          "type": "string"
        },
        "channelType": {
          "description": "Optional. The type of the channel profile.",
          "type": "string",
          "enumDescriptions": [
            "Unknown channel type.",
            "Web UI channel.",
            "API channel.",
            "Twilio channel.",
            "Google Telephony Platform channel.",
            "Contact Center as a Service (CCaaS) channel.",
            "Five9 channel.",
            "Third party contact center integration channel."
          ],
          "enum": [
            "UNKNOWN",
            "WEB_UI",
            "API",
            "TWILIO",
            "GOOGLE_TELEPHONY_PLATFORM",
            "CONTACT_CENTER_AS_A_SERVICE",
            "FIVE9",
            "CONTACT_CENTER_INTEGRATION"
          ]
        },
        "personaProperty": {
          "description": "Optional. The persona property of the channel profile.",
          "$ref": "ChannelProfilePersonaProperty"
        },
        "disableDtmf": {
          "description": "Optional. Whether to disable DTMF (dual-tone multi-frequency).",
          "type": "boolean"
        },
        "disableBargeInControl": {
          "description": "Optional. Whether to disable user barge-in control in the conversation. - **true**: User interruptions are disabled while the agent is speaking. - **false**: The agent retains automatic control over when the user can interrupt.",
          "type": "boolean"
        },
        "webWidgetConfig": {
          "description": "Optional. The configuration for the web widget.",
          "$ref": "ChannelProfileWebWidgetConfig"
        },
        "noiseSuppressionLevel": {
          "description": "Optional. The noise suppression level of the channel profile. Available values are \"low\", \"moderate\", \"high\", \"very_high\".",
          "type": "string"
        }
      }
    },
    "ChannelProfilePersonaProperty": {
      "id": "ChannelProfilePersonaProperty",
      "description": "Represents the persona property of a channel.",
      "type": "object",
      "properties": {
        "persona": {
          "description": "Optional. The persona of the channel.",
          "type": "string",
          "enumDescriptions": [
            "UNKNOWN persona.",
            "The agent keeps the responses concise and to the point",
            "The agent provides additional context, explanations, and details"
          ],
          "enum": [
            "UNKNOWN",
            "CONCISE",
            "CHATTY"
          ]
        }
      }
    },
    "ChannelProfileWebWidgetConfig": {
      "id": "ChannelProfileWebWidgetConfig",
      "description": "Message for configuration for the web widget.",
      "type": "object",
      "properties": {
        "modality": {
          "description": "Optional. The modality of the web widget.",
          "type": "string",
          "enumDescriptions": [
            "Unknown modality.",
            "Widget supports both chat and voice input.",
            "Widget supports only voice input.",
            "Widget supports only chat input.",
            "Widget supports chat, voice, and video input."
          ],
          "enum": [
            "MODALITY_UNSPECIFIED",
            "CHAT_AND_VOICE",
            "VOICE_ONLY",
            "CHAT_ONLY",
            "CHAT_VOICE_AND_VIDEO"
          ]
        },
        "theme": {
          "description": "Optional. The theme of the web widget.",
          "type": "string",
          "enumDescriptions": [
            "Unknown theme.",
            "Light theme.",
            "Dark theme."
          ],
          "enum": [
            "THEME_UNSPECIFIED",
            "LIGHT",
            "DARK"
          ]
        },
        "webWidgetTitle": {
          "description": "Optional. The title of the web widget.",
          "type": "string"
        },
        "securitySettings": {
          "description": "Optional. The security settings of the web widget.",
          "$ref": "ChannelProfileWebWidgetConfigSecuritySettings"
        }
      }
    },
    "ChannelProfileWebWidgetConfigSecuritySettings": {
      "id": "ChannelProfileWebWidgetConfigSecuritySettings",
      "description": "Security settings for the web widget.",
      "type": "object",
      "properties": {
        "enablePublicAccess": {
          "description": "Optional. Indicates whether public access to the web widget is enabled. If `true`, the web widget will be publicly accessible. If `false`, the web widget must be integrated with your own authentication and authorization system to return valid credentials for accessing the CES agent.",
          "type": "boolean"
        },
        "enableOriginCheck": {
          "description": "Optional. Indicates whether origin check for the web widget is enabled. If `true`, the web widget will check the origin of the website that loads the web widget and only allow it to be loaded in the same origin or any of the allowed origins.",
          "type": "boolean"
        },
        "allowedOrigins": {
          "description": "Optional. The origins that are allowed to host the web widget. An origin is defined by RFC 6454. If empty, all origins are allowed. A maximum of 100 origins is allowed. Example: \"https://example.com\"",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "enableRecaptcha": {
          "description": "Optional. Indicates whether reCAPTCHA verification for the web widget is enabled.",
          "type": "boolean"
        }
      }
    },
    "ClientCertificateSettings": {
      "id": "ClientCertificateSettings",
      "description": "Settings for custom client certificates.",
      "type": "object",
      "properties": {
        "tlsCertificate": {
          "description": "Required. The TLS certificate encoded in PEM format. This string must include the begin header and end footer lines.",
          "type": "string"
        },
        "privateKey": {
          "description": "Required. The name of the SecretManager secret version resource storing the private key encoded in PEM format. Format: `projects/{project}/secrets/{secret}/versions/{version}`",
          "type": "string"
        },
        "passphrase": {
          "description": "Optional. The name of the SecretManager secret version resource storing the passphrase to decrypt the private key. Should be left unset if the private key is not encrypted. Format: `projects/{project}/secrets/{secret}/versions/{version}`",
          "type": "string"
        }
      }
    },
    "ExportAppRequest": {
      "id": "ExportAppRequest",
      "description": "Request message for AgentService.ExportApp.",
      "type": "object",
      "properties": {
        "exportFormat": {
          "description": "Required. The format to export the app in.",
          "type": "string",
          "enumDescriptions": [
            "The export format is unspecified.",
            "The export format is JSON.",
            "The export format is YAML."
          ],
          "enum": [
            "EXPORT_FORMAT_UNSPECIFIED",
            "JSON",
            "YAML"
          ]
        },
        "gcsUri": {
          "description": "Optional. The [Google Cloud Storage](https://cloud.google.com/storage/docs/) URI to which to export the app. The format of this URI must be `gs:///`. The exported app archive will be written directly to the specified GCS object.",
          "type": "string"
        },
        "appVersion": {
          "description": "Optional. The resource name of the app version to export. Format: `projects/{project}/locations/{location}/apps/{app}/versions/{version}`.",
          "type": "string"
        }
      }
    },
    "ImportAppRequest": {
      "id": "ImportAppRequest",
      "description": "Request message for AgentService.ImportApp.",
      "type": "object",
      "properties": {
        "gcsUri": {
          "description": "The [Google Cloud Storage](https://cloud.google.com/storage/docs/) URI from which to import app. The format of this URI must be `gs:///`.",
          "type": "string"
        },
        "appContent": {
          "description": "Raw bytes representing the compressed zip file with the app folder structure.",
          "type": "string",
          "format": "byte"
        },
        "displayName": {
          "description": "Optional. The display name of the app to import. * If the app is created on import, and the display name is specified, the imported app will use this display name. If a conflict is detected with an existing app, a timestamp will be appended to the display name to make it unique. * If the app is a reimport, this field should not be set. Providing a display name during reimport will result in an INVALID_ARGUMENT error.",
          "type": "string"
        },
        "appId": {
          "description": "Optional. The ID to use for the imported app. * If not specified, a unique ID will be automatically assigned for the app. * Otherwise, the imported app will use this ID as the final component of its resource name. If an app with the same ID already exists at the specified location in the project, the content of the existing app will be replaced.",
          "type": "string"
        },
        "importOptions": {
          "description": "Optional. Options governing the import process for the app.",
          "$ref": "ImportAppRequestImportOptions"
        },
        "ignoreAppLock": {
          "description": "Optional. Flag for overriding the app lock during import. If set to true, the import process will ignore the app lock.",
          "type": "boolean"
        }
      }
    },
    "ImportAppRequestImportOptions": {
      "id": "ImportAppRequestImportOptions",
      "description": "Configuration options for the app import process. These options control how the import behaves, particularly when conflicts arise with existing app data.",
      "type": "object",
      "properties": {
        "conflictResolutionStrategy": {
          "description": "Optional. The strategy to use when resolving conflicts during import.",
          "type": "string",
          "enumDescriptions": [
            "The conflict resolution strategy is unspecified.",
            "Replace existing data with imported data. If an app with the same `app_id` already exists, its content will be updated based on the imported app. - Resources (App, Agents, Tools, Examples, Guardrails, Toolsets) in the imported app that have the same display name as existing resources will overwrite the existing ones. - Imported resources with new display names will be created. - Existing resources that do not have a matching display name in the imported app will remain untouched.",
            "Overwrite existing data with imported data. If an app with the same `app_id` already exists, its content will be overwritten with the imported app. - Existing resources (Agents, Tools, Examples, Guardrails, Toolsets) in the app will be deleted. - Imported resources will be created as new resources."
          ],
          "enum": [
            "CONFLICT_RESOLUTION_STRATEGY_UNSPECIFIED",
            "REPLACE",
            "OVERWRITE"
          ]
        }
      }
    },
    "ListAgentsResponse": {
      "id": "ListAgentsResponse",
      "description": "Response message for AgentService.ListAgents.",
      "type": "object",
      "properties": {
        "agents": {
          "description": "The list of agents.",
          "type": "array",
          "items": {
            "$ref": "Agent"
          }
        },
        "nextPageToken": {
          "description": "A token that can be sent as ListAgentsRequest.page_token to retrieve the next page. Absence of this field indicates there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "Agent": {
      "id": "Agent",
      "description": "An agent acts as the fundamental building block that provides instructions to the Large Language Model (LLM) for executing specific tasks.",
      "type": "object",
      "properties": {
        "llmAgent": {
          "description": "Optional. The default agent type.",
          "$ref": "AgentLlmAgent"
        },
        "remoteDialogflowAgent": {
          "description": "Optional. The remote [Dialogflow](https://cloud.google.com/dialogflow/cx/docs/concept/console-conversational-agents) agent to be used for the agent execution. If this field is set, all other agent level properties will be ignored. Note: If the Dialogflow agent is in a different project from the app, you should grant `roles/dialogflow.client` to the CES service agent `service-@gcp-sa-ces.iam.gserviceaccount.com`.",
          "$ref": "AgentRemoteDialogflowAgent"
        },
        "name": {
          "description": "Identifier. The unique identifier of the agent. Format: `projects/{project}/locations/{location}/apps/{app}/agents/{agent}`",
          "type": "string"
        },
        "displayName": {
          "description": "Required. Display name of the agent.",
          "type": "string"
        },
        "description": {
          "description": "Optional. Human-readable description of the agent.",
          "type": "string"
        },
        "modelSettings": {
          "description": "Optional. Configurations for the LLM model.",
          "$ref": "ModelSettings"
        },
        "instruction": {
          "description": "Optional. Instructions for the LLM model to guide the agent's behavior.",
          "type": "string"
        },
        "tools": {
          "description": "Optional. List of available tools for the agent. Format: `projects/{project}/locations/{location}/apps/{app}/tools/{tool}`",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "childAgents": {
          "description": "Optional. List of child agents in the agent tree. Format: `projects/{project}/locations/{location}/apps/{app}/agents/{agent}`",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "beforeAgentCallbacks": {
          "description": "Optional. The callbacks to execute before the agent is called. The provided callbacks are executed sequentially in the exact order they are given in the list. If a callback returns an overridden response, execution stops and any remaining callbacks are skipped.",
          "type": "array",
          "items": {
            "$ref": "Callback"
          }
        },
        "afterAgentCallbacks": {
          "description": "Optional. The callbacks to execute after the agent is called. The provided callbacks are executed sequentially in the exact order they are given in the list. If a callback returns an overridden response, execution stops and any remaining callbacks are skipped.",
          "type": "array",
          "items": {
            "$ref": "Callback"
          }
        },
        "beforeModelCallbacks": {
          "description": "Optional. The callbacks to execute before the model is called. If there are multiple calls to the model, the callback will be executed multiple times. The provided callbacks are executed sequentially in the exact order they are given in the list. If a callback returns an overridden response, execution stops and any remaining callbacks are skipped.",
          "type": "array",
          "items": {
            "$ref": "Callback"
          }
        },
        "afterModelCallbacks": {
          "description": "Optional. The callbacks to execute after the model is called. If there are multiple calls to the model, the callback will be executed multiple times. The provided callbacks are executed sequentially in the exact order they are given in the list. If a callback returns an overridden response, execution stops and any remaining callbacks are skipped.",
          "type": "array",
          "items": {
            "$ref": "Callback"
          }
        },
        "beforeToolCallbacks": {
          "description": "Optional. The callbacks to execute before the tool is invoked. If there are multiple tool invocations, the callback will be executed multiple times. The provided callbacks are executed sequentially in the exact order they are given in the list. If a callback returns an overridden response, execution stops and any remaining callbacks are skipped.",
          "type": "array",
          "items": {
            "$ref": "Callback"
          }
        },
        "afterToolCallbacks": {
          "description": "Optional. The callbacks to execute after the tool is invoked. If there are multiple tool invocations, the callback will be executed multiple times. The provided callbacks are executed sequentially in the exact order they are given in the list. If a callback returns an overridden response, execution stops and any remaining callbacks are skipped.",
          "type": "array",
          "items": {
            "$ref": "Callback"
          }
        },
        "createTime": {
          "description": "Output only. Timestamp when the agent was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "updateTime": {
          "description": "Output only. Timestamp when the agent was last updated.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "guardrails": {
          "description": "Optional. List of guardrails for the agent. Format: `projects/{project}/locations/{location}/apps/{app}/guardrails/{guardrail}`",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "etag": {
          "description": "Etag used to ensure the object hasn't changed during a read-modify-write operation. If the etag is empty, the update will overwrite any concurrent changes.",
          "type": "string"
        },
        "toolsets": {
          "description": "Optional. List of toolsets for the agent.",
          "type": "array",
          "items": {
            "$ref": "AgentAgentToolset"
          }
        },
        "generatedSummary": {
          "description": "Output only. If the agent is generated by the LLM assistant, this field contains a descriptive summary of the generation.",
          "readOnly": true,
          "type": "string"
        },
        "transferRules": {
          "description": "Optional. Agent transfer rules. If multiple rules match, the first one in the list will be used.",
          "type": "array",
          "items": {
            "$ref": "TransferRule"
          }
        }
      }
    },
    "AgentLlmAgent": {
      "id": "AgentLlmAgent",
      "description": "Default agent type. The agent uses instructions and callbacks specified in the agent to perform the task using a large language model.",
      "type": "object",
      "properties": {}
    },
    "AgentRemoteDialogflowAgent": {
      "id": "AgentRemoteDialogflowAgent",
      "description": "The agent which will transfer execution to a remote [Dialogflow CX](https://docs.cloud.google.com/dialogflow/cx/docs/concept/agent) agent. The Dialogflow agent will process subsequent user queries until the session ends or flow ends, and the control is transferred back to the parent CES agent.",
      "type": "object",
      "properties": {
        "agent": {
          "description": "Required. The [Dialogflow](https://docs.cloud.google.com/dialogflow/cx/docs/concept/agent) agent resource name. Format: `projects/{project}/locations/{location}/agents/{agent}`",
          "type": "string"
        },
        "flowId": {
          "description": "Optional. The flow ID of the flow in the Dialogflow agent.",
          "type": "string"
        },
        "environmentId": {
          "description": "Optional. The environment ID of the Dialogflow agent to be used for the agent execution. If not specified, the draft environment will be used.",
          "type": "string"
        },
        "inputVariableMapping": {
          "description": "Optional. The mapping of the app variables names to the Dialogflow session parameters names to be sent to the Dialogflow agent as input.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "outputVariableMapping": {
          "description": "Optional. The mapping of the Dialogflow session parameters names to the app variables names to be sent back to the CES agent after the Dialogflow agent execution ends.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "respectResponseInterruptionSettings": {
          "description": "Optional. Indicates whether to respect the message-level interruption settings configured in the Dialogflow agent. * If false: all response messages from the Dialogflow agent follow the app-level barge-in settings. * If true: only response messages with [`allow_playback_interruption`](https://docs.cloud.google.com/dialogflow/cx/docs/reference/rpc/google.cloud.dialogflow.cx.v3#text) set to true will be interruptable, all other messages follow the app-level barge-in settings.",
          "type": "boolean"
        }
      }
    },
    "Callback": {
      "id": "Callback",
      "description": "A callback defines the custom logic to be executed at various stages of agent interaction.",
      "type": "object",
      "properties": {
        "pythonCode": {
          "description": "Required. The python code to execute for the callback.",
          "type": "string"
        },
        "description": {
          "description": "Optional. Human-readable description of the callback.",
          "type": "string"
        },
        "disabled": {
          "description": "Optional. Whether the callback is disabled. Disabled callbacks are ignored by the agent.",
          "type": "boolean"
        },
        "proactiveExecutionEnabled": {
          "description": "Optional. If enabled, the callback will also be executed on intermediate model outputs. This setting only affects after model callback. **ENABLE WITH CAUTION**. Typically after model callback only needs to be executed after receiving all model responses. Enabling proactive execution may have negative implication on the execution cost and latency, and should only be enabled in rare situations.",
          "type": "boolean"
        }
      }
    },
    "AgentAgentToolset": {
      "id": "AgentAgentToolset",
      "description": "A toolset with a selection of its tools.",
      "type": "object",
      "properties": {
        "toolset": {
          "description": "Required. The resource name of the toolset. Format: `projects/{project}/locations/{location}/apps/{app}/toolsets/{toolset}`",
          "type": "string"
        },
        "toolIds": {
          "description": "Optional. The tools IDs to filter the toolset.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "TransferRule": {
      "id": "TransferRule",
      "description": "Rule for transferring to a specific agent.",
      "type": "object",
      "properties": {
        "deterministicTransfer": {
          "description": "Optional. A rule that immediately transfers to the target agent when the condition is met.",
          "$ref": "TransferRuleDeterministicTransfer"
        },
        "disablePlannerTransfer": {
          "description": "Optional. Rule that prevents the planner from transferring to the target agent.",
          "$ref": "TransferRuleDisablePlannerTransfer"
        },
        "childAgent": {
          "description": "Required. The resource name of the child agent the rule applies to. Format: `projects/{project}/locations/{location}/apps/{app}/agents/{agent}`",
          "type": "string"
        },
        "direction": {
          "description": "Required. The direction of the transfer.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified direction.",
            "Transfer from the parent agent to the child agent.",
            "Transfer from the child agent to the parent agent."
          ],
          "enum": [
            "DIRECTION_UNSPECIFIED",
            "PARENT_TO_CHILD",
            "CHILD_TO_PARENT"
          ]
        }
      }
    },
    "TransferRuleDeterministicTransfer": {
      "id": "TransferRuleDeterministicTransfer",
      "description": "Deterministic transfer rule. When the condition evaluates to true, the transfer occurs.",
      "type": "object",
      "properties": {
        "expressionCondition": {
          "description": "Optional. A rule that evaluates a session state condition. If the condition evaluates to true, the transfer occurs.",
          "$ref": "ExpressionCondition"
        },
        "pythonCodeCondition": {
          "description": "Optional. A rule that uses Python code block to evaluate the conditions. If the condition evaluates to true, the transfer occurs.",
          "$ref": "PythonCodeCondition"
        }
      }
    },
    "ExpressionCondition": {
      "id": "ExpressionCondition",
      "description": "Expression condition based on session state.",
      "type": "object",
      "properties": {
        "expression": {
          "description": "Required. The string representation of cloud.api.Expression condition.",
          "type": "string"
        }
      }
    },
    "PythonCodeCondition": {
      "id": "PythonCodeCondition",
      "description": "Python code block to evaluate the condition.",
      "type": "object",
      "properties": {
        "pythonCode": {
          "description": "Required. The python code to execute.",
          "type": "string"
        }
      }
    },
    "TransferRuleDisablePlannerTransfer": {
      "id": "TransferRuleDisablePlannerTransfer",
      "description": "A rule that prevents the planner from transferring to the target agent.",
      "type": "object",
      "properties": {
        "expressionCondition": {
          "description": "Required. If the condition evaluates to true, planner will not be allowed to transfer to the target agent.",
          "$ref": "ExpressionCondition"
        }
      }
    },
    "ListExamplesResponse": {
      "id": "ListExamplesResponse",
      "description": "Response message for AgentService.ListExamples.",
      "type": "object",
      "properties": {
        "examples": {
          "description": "The list of examples.",
          "type": "array",
          "items": {
            "$ref": "Example"
          }
        },
        "nextPageToken": {
          "description": "A token that can be sent as ListExamplesRequest.page_token to retrieve the next page. Absence of this field indicates there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "Example": {
      "id": "Example",
      "description": "An example represents a sample conversation between the user and the agent(s).",
      "type": "object",
      "properties": {
        "name": {
          "description": "Identifier. The unique identifier of the example. Format: `projects/{project}/locations/{location}/apps/{app}/examples/{example}`",
          "type": "string"
        },
        "displayName": {
          "description": "Required. Display name of the example.",
          "type": "string"
        },
        "description": {
          "description": "Optional. Human-readable description of the example.",
          "type": "string"
        },
        "entryAgent": {
          "description": "Optional. The agent that initially handles the conversation. If not specified, the example represents a conversation that is handled by the root agent. Format: `projects/{project}/locations/{location}/apps/{app}/agents/{agent}`",
          "type": "string"
        },
        "messages": {
          "description": "Optional. The collection of messages that make up the conversation.",
          "type": "array",
          "items": {
            "$ref": "Message"
          }
        },
        "createTime": {
          "description": "Output only. Timestamp when the example was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "updateTime": {
          "description": "Output only. Timestamp when the example was last updated.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "invalid": {
          "description": "Output only. The example may become invalid if referencing resources are deleted. Invalid examples will not be used as few-shot examples.",
          "readOnly": true,
          "type": "boolean"
        },
        "etag": {
          "description": "Etag used to ensure the object hasn't changed during a read-modify-write operation. If the etag is empty, the update will overwrite any concurrent changes.",
          "type": "string"
        }
      }
    },
    "ListToolsResponse": {
      "id": "ListToolsResponse",
      "description": "Response message for AgentService.ListTools.",
      "type": "object",
      "properties": {
        "tools": {
          "description": "The list of tools.",
          "type": "array",
          "items": {
            "$ref": "Tool"
          }
        },
        "nextPageToken": {
          "description": "A token that can be sent as ListToolsRequest.page_token to retrieve the next page. Absence of this field indicates there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "Tool": {
      "id": "Tool",
      "description": "A tool represents an action that the CES agent can take to achieve certain goals.",
      "type": "object",
      "properties": {
        "clientFunction": {
          "description": "Optional. The client function.",
          "$ref": "ClientFunction"
        },
        "openApiTool": {
          "description": "Optional. The open API tool.",
          "$ref": "OpenApiTool"
        },
        "googleSearchTool": {
          "description": "Optional. The google search tool.",
          "$ref": "GoogleSearchTool"
        },
        "connectorTool": {
          "description": "Optional. The Integration Connector tool.",
          "$ref": "ConnectorTool"
        },
        "dataStoreTool": {
          "description": "Optional. The data store tool.",
          "$ref": "DataStoreTool"
        },
        "pythonFunction": {
          "description": "Optional. The python function tool.",
          "$ref": "PythonFunction"
        },
        "mcpTool": {
          "description": "Optional. The MCP tool. An MCP tool cannot be created or updated directly and is managed by the MCP toolset.",
          "$ref": "McpTool"
        },
        "fileSearchTool": {
          "description": "Optional. The file search tool.",
          "$ref": "FileSearchTool"
        },
        "systemTool": {
          "description": "Optional. The system tool.",
          "$ref": "SystemTool"
        },
        "agentTool": {
          "description": "Optional. The agent tool.",
          "$ref": "AgentTool"
        },
        "widgetTool": {
          "description": "Optional. The widget tool.",
          "$ref": "WidgetTool"
        },
        "name": {
          "description": "Identifier. The resource name of the tool. Format: * `projects/{project}/locations/{location}/apps/{app}/tools/{tool}` for standalone tools. * `projects/{project}/locations/{location}/apps/{app}/toolsets/{toolset}/tools/{tool}` for tools retrieved from a toolset. These tools are dynamic and output-only; they cannot be referenced directly where a tool is expected.",
          "type": "string"
        },
        "displayName": {
          "description": "Output only. The display name of the tool, derived based on the tool's type. For example, display name of a ClientFunction is derived from its `name` property.",
          "readOnly": true,
          "type": "string"
        },
        "executionType": {
          "description": "Optional. The execution type of the tool.",
          "type": "string",
          "enumDescriptions": [
            "The execution type is unspecified. Defaults to `SYNCHRONOUS` if unspecified.",
            "The tool is executed synchronously. The session is blocked until the tool returns.",
            "The tool is executed asynchronously. The session will continue while the tool is executing."
          ],
          "enum": [
            "EXECUTION_TYPE_UNSPECIFIED",
            "SYNCHRONOUS",
            "ASYNCHRONOUS"
          ]
        },
        "createTime": {
          "description": "Output only. Timestamp when the tool was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "updateTime": {
          "description": "Output only. Timestamp when the tool was last updated.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "etag": {
          "description": "Etag used to ensure the object hasn't changed during a read-modify-write operation. If the etag is empty, the update will overwrite any concurrent changes.",
          "type": "string"
        },
        "generatedSummary": {
          "description": "Output only. If the tool is generated by the LLM assistant, this field contains a descriptive summary of the generation.",
          "readOnly": true,
          "type": "string"
        },
        "toolFakeConfig": {
          "description": "Optional. Configuration for tool behavior in fake mode.",
          "$ref": "ToolFakeConfig"
        }
      }
    },
    "ClientFunction": {
      "id": "ClientFunction",
      "description": "Represents a client-side function that the agent can invoke. When the tool is chosen by the agent, control is handed off to the client. The client is responsible for executing the function and returning the result as a ToolResponse to continue the interaction with the agent.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Required. The function name.",
          "type": "string"
        },
        "description": {
          "description": "Optional. The function description.",
          "type": "string"
        },
        "parameters": {
          "description": "Optional. The schema of the function parameters.",
          "$ref": "Schema"
        },
        "response": {
          "description": "Optional. The schema of the function response.",
          "$ref": "Schema"
        }
      }
    },
    "OpenApiTool": {
      "id": "OpenApiTool",
      "description": "A remote API tool defined by an OpenAPI schema.",
      "type": "object",
      "properties": {
        "openApiSchema": {
          "description": "Required. The OpenAPI schema in JSON or YAML format.",
          "type": "string"
        },
        "name": {
          "description": "Optional. The name of the tool. If not provided, the name of the tool will be derived from the OpenAPI schema, from `operation.operationId`.",
          "type": "string"
        },
        "description": {
          "description": "Optional. The description of the tool. If not provided, the description of the tool will be derived from the OpenAPI schema, from `operation.description` or `operation.summary`.",
          "type": "string"
        },
        "apiAuthentication": {
          "description": "Optional. Authentication information required by the API.",
          "$ref": "ApiAuthentication"
        },
        "tlsConfig": {
          "description": "Optional. The TLS configuration. Includes the custom server certificates that the client will trust.",
          "$ref": "TlsConfig"
        },
        "serviceDirectoryConfig": {
          "description": "Optional. Service Directory configuration.",
          "$ref": "ServiceDirectoryConfig"
        },
        "ignoreUnknownFields": {
          "description": "Optional. If true, the agent will ignore unknown fields in the API response.",
          "type": "boolean"
        },
        "url": {
          "description": "Optional. The server URL of the Open API schema. This field is only set in tools in the environment dependencies during the export process if the schema contains a server url. During the import process, if this url is present in the environment dependencies and the schema has the $env_var placeholder, it will replace the placeholder in the schema.",
          "type": "string"
        }
      }
    },
    "ApiAuthentication": {
      "id": "ApiAuthentication",
      "description": "Authentication information required for API calls.",
      "type": "object",
      "properties": {
        "apiKeyConfig": {
          "description": "Optional. Config for API key auth.",
          "$ref": "ApiKeyConfig"
        },
        "oauthConfig": {
          "description": "Optional. Config for OAuth.",
          "$ref": "OAuthConfig"
        },
        "serviceAgentIdTokenAuthConfig": {
          "description": "Optional. Config for ID token auth generated from CES service agent.",
          "$ref": "ServiceAgentIdTokenAuthConfig"
        },
        "serviceAccountAuthConfig": {
          "description": "Optional. Config for service account authentication.",
          "$ref": "ServiceAccountAuthConfig"
        },
        "bearerTokenConfig": {
          "description": "Optional. Config for bearer token auth.",
          "$ref": "BearerTokenConfig"
        }
      }
    },
    "ApiKeyConfig": {
      "id": "ApiKeyConfig",
      "description": "Configurations for authentication with API key.",
      "type": "object",
      "properties": {
        "keyName": {
          "description": "Required. The parameter name or the header name of the API key. E.g., If the API request is \"https://example.com/act?X-Api-Key=\", \"X-Api-Key\" would be the parameter name.",
          "type": "string"
        },
        "apiKeySecretVersion": {
          "description": "Required. The name of the SecretManager secret version resource storing the API key. Format: `projects/{project}/secrets/{secret}/versions/{version}` Note: You should grant `roles/secretmanager.secretAccessor` role to the CES service agent `service-@gcp-sa-ces.iam.gserviceaccount.com`.",
          "type": "string"
        },
        "requestLocation": {
          "description": "Required. Key location in the request.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified. This value should not be used.",
            "Represents the key in http header.",
            "Represents the key in query string."
          ],
          "enum": [
            "REQUEST_LOCATION_UNSPECIFIED",
            "HEADER",
            "QUERY_STRING"
          ]
        }
      }
    },
    "OAuthConfig": {
      "id": "OAuthConfig",
      "description": "Configurations for authentication with OAuth.",
      "type": "object",
      "properties": {
        "oauthGrantType": {
          "description": "Required. OAuth grant types.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified. Defaults to CLIENT_CREDENTIAL.",
            "Represents the [client credential flow](https://oauth.net/2/grant-types/client-credentials)."
          ],
          "enum": [
            "OAUTH_GRANT_TYPE_UNSPECIFIED",
            "CLIENT_CREDENTIAL"
          ]
        },
        "clientId": {
          "description": "Required. The client ID from the OAuth provider.",
          "type": "string"
        },
        "clientSecretVersion": {
          "description": "Required. The name of the SecretManager secret version resource storing the client secret. Format: `projects/{project}/secrets/{secret}/versions/{version}` Note: You should grant `roles/secretmanager.secretAccessor` role to the CES service agent `service-@gcp-sa-ces.iam.gserviceaccount.com`.",
          "type": "string"
        },
        "tokenEndpoint": {
          "description": "Required. The token endpoint in the OAuth provider to exchange for an access token.",
          "type": "string"
        },
        "scopes": {
          "description": "Optional. The OAuth scopes to grant.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "ServiceAgentIdTokenAuthConfig": {
      "id": "ServiceAgentIdTokenAuthConfig",
      "description": "Configurations for authentication with [ID token](https://cloud.google.com/docs/authentication/token-types#id) generated from service agent.",
      "type": "object",
      "properties": {}
    },
    "ServiceAccountAuthConfig": {
      "id": "ServiceAccountAuthConfig",
      "description": "Configurations for authentication using a custom service account.",
      "type": "object",
      "properties": {
        "serviceAccount": {
          "description": "Required. The email address of the service account used for authentication. CES uses this service account to exchange an access token and the access token is then sent in the `Authorization` header of the request. The service account must have the `roles/iam.serviceAccountTokenCreator` role granted to the CES service agent `service-@gcp-sa-ces.iam.gserviceaccount.com`.",
          "type": "string"
        },
        "scopes": {
          "description": "Optional. The OAuth scopes to grant. If not specified, the default scope `https://www.googleapis.com/auth/cloud-platform` is used.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "BearerTokenConfig": {
      "id": "BearerTokenConfig",
      "description": "Configurations for authentication with a bearer token.",
      "type": "object",
      "properties": {
        "token": {
          "description": "Required. The bearer token. Must be in the format `$context.variables.`.",
          "type": "string"
        }
      }
    },
    "TlsConfig": {
      "id": "TlsConfig",
      "description": "The TLS configuration.",
      "type": "object",
      "properties": {
        "caCerts": {
          "description": "Required. Specifies a list of allowed custom CA certificates for HTTPS verification.",
          "type": "array",
          "items": {
            "$ref": "TlsConfigCaCert"
          }
        }
      }
    },
    "TlsConfigCaCert": {
      "id": "TlsConfigCaCert",
      "description": "The CA certificate.",
      "type": "object",
      "properties": {
        "displayName": {
          "description": "Required. The name of the allowed custom CA certificates. This can be used to disambiguate the custom CA certificates.",
          "type": "string"
        },
        "cert": {
          "description": "Required. The allowed custom CA certificates (in DER format) for HTTPS verification. This overrides the default SSL trust store. If this is empty or unspecified, CES will use Google's default trust store to verify certificates. N.B. Make sure the HTTPS server certificates are signed with \"subject alt name\". For instance a certificate can be self-signed using the following command: ``` openssl x509 -req -days 200 -in example.com.csr \\ -signkey example.com.key \\ -out example.com.crt \\ -extfile \u003c(printf \"\\nsubjectAltName='DNS:www.example.com'\") ```",
          "type": "string",
          "format": "byte"
        }
      }
    },
    "ServiceDirectoryConfig": {
      "id": "ServiceDirectoryConfig",
      "description": "Configuration for tools using Service Directory.",
      "type": "object",
      "properties": {
        "service": {
          "description": "Required. The name of [Service Directory](https://cloud.google.com/service-directory) service. Format: `projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}`. Location of the service directory must be the same as the location of the app.",
          "type": "string"
        }
      }
    },
    "GoogleSearchTool": {
      "id": "GoogleSearchTool",
      "description": "Represents a tool to perform Google web searches for grounding. See https://cloud.google.com/customer-engagement-ai/conversational-agents/ps/tool#google-search.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Required. The name of the tool.",
          "type": "string"
        },
        "description": {
          "description": "Optional. Description of the tool's purpose.",
          "type": "string"
        },
        "contextUrls": {
          "description": "Optional. Content will be fetched directly from these URLs for context and grounding. Example: \"https://example.com/path.html\". A maximum of 20 URLs are allowed.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "preferredDomains": {
          "description": "Optional. Specifies domains to restrict search results to. Example: \"example.com\", \"another.site\". A maximum of 20 domains can be specified.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "excludeDomains": {
          "description": "Optional. List of domains to be excluded from the search results. Example: \"example.com\". A maximum of 2000 domains can be excluded.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "promptConfig": {
          "description": "Optional. Prompt instructions passed to planner on how the search results should be processed for text and voice.",
          "$ref": "GoogleSearchToolPromptConfig"
        }
      }
    },
    "GoogleSearchToolPromptConfig": {
      "id": "GoogleSearchToolPromptConfig",
      "description": "Prompt settings used by the model when processing or summarizing the google search results.",
      "type": "object",
      "properties": {
        "textPrompt": {
          "description": "Optional. Defines the prompt used for the system instructions when interacting with the agent in chat conversations. If not set, default prompt will be used.",
          "type": "string"
        },
        "voicePrompt": {
          "description": "Optional. Defines the prompt used for the system instructions when interacting with the agent in voice conversations. If not set, default prompt will be used.",
          "type": "string"
        }
      }
    },
    "ConnectorTool": {
      "id": "ConnectorTool",
      "description": "A ConnectorTool allows connections to different integrations. See: https://cloud.google.com/integration-connectors/docs/overview.",
      "type": "object",
      "properties": {
        "connection": {
          "description": "Required. The full resource name of the referenced Integration Connectors Connection. Format: `projects/{project}/locations/{location}/connections/{connection}`",
          "type": "string"
        },
        "action": {
          "description": "Required. Action for the tool to use.",
          "$ref": "Action"
        },
        "authConfig": {
          "description": "Optional. Configures how authentication is handled in Integration Connectors. By default, an admin authentication is passed in the Integration Connectors API requests. You can override it with a different end-user authentication config. **Note**: The Connection must have authentication override enabled in order to specify an EUC configuration here - otherwise, the ConnectorTool creation will fail. See https://cloud.google.com/application-integration/docs/configure-connectors-task#configure-authentication-override for details.",
          "$ref": "EndUserAuthConfig"
        },
        "name": {
          "description": "Optional. The name of the tool that can be used by the Agent to decide whether to call this ConnectorTool.",
          "type": "string"
        },
        "description": {
          "description": "Optional. The description of the tool that can be used by the Agent to decide whether to call this ConnectorTool.",
          "type": "string"
        }
      }
    },
    "Action": {
      "id": "Action",
      "description": "Configuration of an Action for the tool to use. Note: This can be either an Action or an Operation. See https://cloud.google.com/integration-connectors/docs/entities-operation-action for details.",
      "type": "object",
      "properties": {
        "connectionActionId": {
          "description": "ID of a Connection action for the tool to use.",
          "type": "string"
        },
        "entityOperation": {
          "description": "Entity operation configuration for the tool to use.",
          "$ref": "ActionEntityOperation"
        },
        "inputFields": {
          "description": "Optional. Entity fields to use as inputs for the operation. If no fields are specified, all fields of the Entity will be used.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "outputFields": {
          "description": "Optional. Entity fields to return from the operation. If no fields are specified, all fields of the Entity will be returned.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "ActionEntityOperation": {
      "id": "ActionEntityOperation",
      "description": "Entity CRUD operation specification.",
      "type": "object",
      "properties": {
        "entityId": {
          "description": "Required. ID of the entity.",
          "type": "string"
        },
        "operation": {
          "description": "Required. Operation to perform on the entity.",
          "type": "string",
          "enumDescriptions": [
            "Operation type unspecified. Invalid, ConnectorTool create/update will fail.",
            "List operation.",
            "Get operation.",
            "Create operation.",
            "Update operation.",
            "Delete operation."
          ],
          "enum": [
            "OPERATION_TYPE_UNSPECIFIED",
            "LIST",
            "GET",
            "CREATE",
            "UPDATE",
            "DELETE"
          ]
        }
      }
    },
    "EndUserAuthConfig": {
      "id": "EndUserAuthConfig",
      "description": "End-user authentication configuration used for Connection calls. The field values must be the names of context variables in the format `$context.variables.`.",
      "type": "object",
      "properties": {
        "oauth2AuthCodeConfig": {
          "description": "Oauth 2.0 Authorization Code authentication.",
          "$ref": "EndUserAuthConfigOauth2AuthCodeConfig"
        },
        "oauth2JwtBearerConfig": {
          "description": "JWT Profile Oauth 2.0 Authorization Grant authentication.",
          "$ref": "EndUserAuthConfigOauth2JwtBearerConfig"
        }
      }
    },
    "EndUserAuthConfigOauth2AuthCodeConfig": {
      "id": "EndUserAuthConfigOauth2AuthCodeConfig",
      "description": "Oauth 2.0 Authorization Code authentication configuration.",
      "type": "object",
      "properties": {
        "oauthToken": {
          "description": "Required. Oauth token parameter name to pass through. Must be in the format `$context.variables.`.",
          "type": "string"
        }
      }
    },
    "EndUserAuthConfigOauth2JwtBearerConfig": {
      "id": "EndUserAuthConfigOauth2JwtBearerConfig",
      "description": "JWT Profile Oauth 2.0 Authorization Grant authentication configuration.",
      "type": "object",
      "properties": {
        "issuer": {
          "description": "Required. Issuer parameter name to pass through. Must be in the format `$context.variables.`.",
          "type": "string"
        },
        "subject": {
          "description": "Required. Subject parameter name to pass through. Must be in the format `$context.variables.`.",
          "type": "string"
        },
        "clientKey": {
          "description": "Required. Client parameter name to pass through. Must be in the format `$context.variables.`.",
          "type": "string"
        }
      }
    },
    "DataStoreTool": {
      "id": "DataStoreTool",
      "description": "Tool to retrieve from Vertex AI Search datastore or engine for grounding. Accepts either a datastore or an engine, but not both. See Vertex AI Search: https://cloud.google.com/generative-ai-app-builder/docs/enterprise-search-introduction.",
      "type": "object",
      "properties": {
        "dataStoreSource": {
          "description": "Optional. Search within a single specific DataStore.",
          "$ref": "DataStoreToolDataStoreSource"
        },
        "engineSource": {
          "description": "Optional. Search within an Engine (potentially across multiple DataStores).",
          "$ref": "DataStoreToolEngineSource"
        },
        "name": {
          "description": "Required. The data store tool name.",
          "type": "string"
        },
        "description": {
          "description": "Optional. The tool description.",
          "type": "string"
        },
        "boostSpecs": {
          "description": "Optional. Boost specification to boost certain documents.",
          "type": "array",
          "items": {
            "$ref": "DataStoreToolBoostSpecs"
          }
        },
        "modalityConfigs": {
          "description": "Optional. The modality configs for the data store.",
          "type": "array",
          "items": {
            "$ref": "DataStoreToolModalityConfig"
          }
        },
        "filterParameterBehavior": {
          "description": "Optional. The filter parameter behavior.",
          "type": "string",
          "enumDescriptions": [
            "Default filter behavior. Include filter parameter for connector datastores. For the rest of the datastore types, the filter input parameter is omitted.",
            "Always include filter parameter for all datastore types.",
            "The filter parameter is never included in the list of tool parameters, regardless of the datastore type."
          ],
          "enum": [
            "FILTER_PARAMETER_BEHAVIOR_UNSPECIFIED",
            "ALWAYS_INCLUDE",
            "NEVER_INCLUDE"
          ]
        }
      }
    },
    "DataStoreToolDataStoreSource": {
      "id": "DataStoreToolDataStoreSource",
      "description": "Configuration for searching within a specific DataStore.",
      "type": "object",
      "properties": {
        "filter": {
          "description": "Optional. Filter specification for the DataStore. See: https://cloud.google.com/generative-ai-app-builder/docs/filter-search-metadata",
          "type": "string"
        },
        "dataStore": {
          "description": "Optional. The data store.",
          "$ref": "DataStore"
        }
      }
    },
    "DataStore": {
      "id": "DataStore",
      "description": "A DataStore resource in Vertex AI Search.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Required. Full resource name of the DataStore. Format: `projects/{project}/locations/{location}/collections/{collection}/dataStores/{dataStore}`",
          "type": "string"
        },
        "type": {
          "description": "Output only. The type of the data store. This field is readonly and populated by the server.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified. This value indicates that the data store type is not specified, so it will not be used during search.",
            "A data store that contains public web content.",
            "A data store that contains unstructured private data.",
            "A data store that contains structured data used as FAQ.",
            "A data store that is a connector to a first-party or a third-party service."
          ],
          "enum": [
            "DATA_STORE_TYPE_UNSPECIFIED",
            "PUBLIC_WEB",
            "UNSTRUCTURED",
            "FAQ",
            "CONNECTOR"
          ]
        },
        "documentProcessingMode": {
          "description": "Output only. The document processing mode for the data store connection. Only set for PUBLIC_WEB and UNSTRUCTURED data stores.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "Documents are processed as documents.",
            "Documents are converted to chunks."
          ],
          "enum": [
            "DOCUMENT_PROCESSING_MODE_UNSPECIFIED",
            "DOCUMENTS",
            "CHUNKS"
          ]
        },
        "displayName": {
          "description": "Output only. The display name of the data store.",
          "readOnly": true,
          "type": "string"
        },
        "createTime": {
          "description": "Output only. Timestamp when the data store was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "connectorConfig": {
          "description": "Output only. The connector config for the data store connection.",
          "readOnly": true,
          "$ref": "DataStoreConnectorConfig"
        }
      }
    },
    "DataStoreConnectorConfig": {
      "id": "DataStoreConnectorConfig",
      "description": "The connector config for the data store connection.",
      "type": "object",
      "properties": {
        "collection": {
          "description": "Resource name of the collection the data store belongs to.",
          "type": "string"
        },
        "collectionDisplayName": {
          "description": "Display name of the collection the data store belongs to.",
          "type": "string"
        },
        "dataSource": {
          "description": "The name of the data source. Example: `salesforce`, `jira`, `confluence`, `bigquery`.",
          "type": "string"
        }
      }
    },
    "DataStoreToolEngineSource": {
      "id": "DataStoreToolEngineSource",
      "description": "Configuration for searching within an Engine, potentially targeting specific DataStores.",
      "type": "object",
      "properties": {
        "engine": {
          "description": "Required. Full resource name of the Engine. Format: `projects/{project}/locations/{location}/collections/{collection}/engines/{engine}`",
          "type": "string"
        },
        "dataStoreSources": {
          "description": "Optional. Use to target specific DataStores within the Engine. If empty, the search applies to all DataStores associated with the Engine.",
          "type": "array",
          "items": {
            "$ref": "DataStoreToolDataStoreSource"
          }
        },
        "filter": {
          "description": "Optional. A filter applied to the search across the Engine. Not relevant and not used if 'data_store_sources' is provided. See: https://cloud.google.com/generative-ai-app-builder/docs/filter-search-metadata",
          "type": "string"
        }
      }
    },
    "DataStoreToolBoostSpecs": {
      "id": "DataStoreToolBoostSpecs",
      "description": "Boost specifications to boost certain documents. For more information, please refer to https://cloud.google.com/generative-ai-app-builder/docs/boosting.",
      "type": "object",
      "properties": {
        "dataStores": {
          "description": "Required. The Data Store where the boosting configuration is applied. Full resource name of DataStore, such as projects/{project}/locations/{location}/collections/{collection}/dataStores/{dataStore}.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "spec": {
          "description": "Required. A list of boosting specifications.",
          "type": "array",
          "items": {
            "$ref": "DataStoreToolBoostSpec"
          }
        }
      }
    },
    "DataStoreToolBoostSpec": {
      "id": "DataStoreToolBoostSpec",
      "description": "Boost specification to boost certain documents.",
      "type": "object",
      "properties": {
        "conditionBoostSpecs": {
          "description": "Required. A list of boosting specifications.",
          "type": "array",
          "items": {
            "$ref": "DataStoreToolBoostSpecConditionBoostSpec"
          }
        }
      }
    },
    "DataStoreToolBoostSpecConditionBoostSpec": {
      "id": "DataStoreToolBoostSpecConditionBoostSpec",
      "description": "Boost specification for a condition.",
      "type": "object",
      "properties": {
        "condition": {
          "description": "Required. An expression which specifies a boost condition. The syntax is the same as filter expression syntax. Currently, the only supported condition is a list of BCP-47 lang codes. Example: To boost suggestions in languages en or fr: (lang_code: ANY(\"en\", \"fr\"))",
          "type": "string"
        },
        "boost": {
          "description": "Optional. Strength of the boost, which should be in [-1, 1]. Negative boost means demotion. Default is 0.0. Setting to 1.0 gives the suggestions a big promotion. However, it does not necessarily mean that the top result will be a boosted suggestion. Setting to -1.0 gives the suggestions a big demotion. However, other suggestions that are relevant might still be shown. Setting to 0.0 means no boost applied. The boosting condition is ignored.",
          "type": "number",
          "format": "float"
        },
        "boostControlSpec": {
          "description": "Optional. Complex specification for custom ranking based on customer defined attribute value.",
          "$ref": "DataStoreToolBoostSpecConditionBoostSpecBoostControlSpec"
        }
      }
    },
    "DataStoreToolBoostSpecConditionBoostSpecBoostControlSpec": {
      "id": "DataStoreToolBoostSpecConditionBoostSpecBoostControlSpec",
      "description": "Specification for custom ranking based on customer specified attribute value. It provides more controls for customized ranking than the simple (condition, boost) combination above.",
      "type": "object",
      "properties": {
        "fieldName": {
          "description": "Optional. The name of the field whose value will be used to determine the boost amount.",
          "type": "string"
        },
        "attributeType": {
          "description": "Optional. The attribute type to be used to determine the boost amount. The attribute value can be derived from the field value of the specified field_name. In the case of numerical it is straightforward i.e. attribute_value = numerical_field_value. In the case of freshness however, attribute_value = (time.now() - datetime_field_value).",
          "type": "string",
          "enumDescriptions": [
            "Unspecified AttributeType.",
            "The value of the numerical field will be used to dynamically update the boost amount. In this case, the attribute_value (the x value) of the control point will be the actual value of the numerical field for which the boost_amount is specified.",
            "For the freshness use case the attribute value will be the duration between the current time and the date in the datetime field specified. The value must be formatted as an XSD `dayTimeDuration` value (a restricted subset of an ISO 8601 duration value). The pattern for this is: `nDnM]`. E.g. `5D`, `3DT12H30M`, `T24H`."
          ],
          "enum": [
            "ATTRIBUTE_TYPE_UNSPECIFIED",
            "NUMERICAL",
            "FRESHNESS"
          ]
        },
        "interpolationType": {
          "description": "Optional. The interpolation type to be applied to connect the control points listed below.",
          "type": "string",
          "enumDescriptions": [
            "Interpolation type is unspecified. In this case, it defaults to Linear.",
            "Piecewise linear interpolation will be applied."
          ],
          "enum": [
            "INTERPOLATION_TYPE_UNSPECIFIED",
            "LINEAR"
          ]
        },
        "controlPoints": {
          "description": "Optional. The control points used to define the curve. The monotonic function (defined through the interpolation_type above) passes through the control points listed here.",
          "type": "array",
          "items": {
            "$ref": "DataStoreToolBoostSpecConditionBoostSpecBoostControlSpecControlPoint"
          }
        }
      }
    },
    "DataStoreToolBoostSpecConditionBoostSpecBoostControlSpecControlPoint": {
      "id": "DataStoreToolBoostSpecConditionBoostSpecBoostControlSpecControlPoint",
      "description": "The control points used to define the curve. The curve defined through these control points can only be monotonically increasing or decreasing(constant values are acceptable).",
      "type": "object",
      "properties": {
        "attributeValue": {
          "description": "Optional. Can be one of: 1. The numerical field value. 2. The duration spec for freshness: The value must be formatted as an XSD `dayTimeDuration` value (a restricted subset of an ISO 8601 duration value). The pattern for this is: `nDnM]`.",
          "type": "string"
        },
        "boostAmount": {
          "description": "Optional. The value between -1 to 1 by which to boost the score if the attribute_value evaluates to the value specified above.",
          "type": "number",
          "format": "float"
        }
      }
    },
    "DataStoreToolModalityConfig": {
      "id": "DataStoreToolModalityConfig",
      "description": "If specified, will apply the given configuration for the specified modality.",
      "type": "object",
      "properties": {
        "modalityType": {
          "description": "Required. The modality type.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified modality type.",
            "Text modality.",
            "Audio modality."
          ],
          "enum": [
            "MODALITY_TYPE_UNSPECIFIED",
            "TEXT",
            "AUDIO"
          ]
        },
        "rewriterConfig": {
          "description": "Optional. The rewriter config.",
          "$ref": "DataStoreToolRewriterConfig"
        },
        "summarizationConfig": {
          "description": "Optional. The summarization config.",
          "$ref": "DataStoreToolSummarizationConfig"
        },
        "groundingConfig": {
          "description": "Optional. The grounding configuration.",
          "$ref": "DataStoreToolGroundingConfig"
        }
      }
    },
    "DataStoreToolRewriterConfig": {
      "id": "DataStoreToolRewriterConfig",
      "description": "Rewriter configuration.",
      "type": "object",
      "properties": {
        "modelSettings": {
          "description": "Required. Configurations for the LLM model.",
          "$ref": "ModelSettings"
        },
        "prompt": {
          "description": "Optional. The prompt definition. If not set, default prompt will be used.",
          "type": "string"
        },
        "disabled": {
          "description": "Optional. Whether the rewriter is disabled.",
          "type": "boolean"
        }
      }
    },
    "DataStoreToolSummarizationConfig": {
      "id": "DataStoreToolSummarizationConfig",
      "description": "Summarization configuration.",
      "type": "object",
      "properties": {
        "modelSettings": {
          "description": "Optional. Configurations for the LLM model.",
          "$ref": "ModelSettings"
        },
        "prompt": {
          "description": "Optional. The prompt definition. If not set, default prompt will be used.",
          "type": "string"
        },
        "disabled": {
          "description": "Optional. Whether summarization is disabled.",
          "type": "boolean"
        }
      }
    },
    "DataStoreToolGroundingConfig": {
      "id": "DataStoreToolGroundingConfig",
      "description": "Grounding configuration.",
      "type": "object",
      "properties": {
        "groundingLevel": {
          "description": "Optional. The groundedness threshold of the answer based on the retrieved sources. The value has a configurable range of [1, 5]. The level is used to threshold the groundedness of the answer, meaning that all responses with a groundedness score below the threshold will fall back to returning relevant snippets only. For example, a level of 3 means that the groundedness score must be 3 or higher for the response to be returned.",
          "type": "number",
          "format": "float"
        },
        "disabled": {
          "description": "Optional. Whether grounding is disabled.",
          "type": "boolean"
        }
      }
    },
    "PythonFunction": {
      "id": "PythonFunction",
      "description": "A Python function tool.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Optional. The name of the Python function to execute. Must match a Python function name defined in the python code. Case sensitive. If the name is not provided, the first function defined in the python code will be used.",
          "type": "string"
        },
        "pythonCode": {
          "description": "Optional. The Python code to execute for the tool.",
          "type": "string"
        },
        "description": {
          "description": "Output only. The description of the Python function, parsed from the python code's docstring.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "McpTool": {
      "id": "McpTool",
      "description": "An MCP tool. See https://modelcontextprotocol.io/specification/2025-06-18/server/tools for more details.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Required. The name of the MCP tool.",
          "type": "string"
        },
        "description": {
          "description": "Optional. The description of the MCP tool.",
          "type": "string"
        },
        "inputSchema": {
          "description": "Optional. The schema of the input arguments of the MCP tool.",
          "$ref": "Schema"
        },
        "outputSchema": {
          "description": "Optional. The schema of the output arguments of the MCP tool.",
          "$ref": "Schema"
        },
        "serverAddress": {
          "description": "Required. The server address of the MCP server, e.g., \"https://example.com/mcp/\". If the server is built with the MCP SDK, the url should be suffixed with \"/mcp/\". Only Streamable HTTP transport based servers are supported. This is the same as the server_address in the McpToolset. See https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http for more details.",
          "type": "string"
        },
        "apiAuthentication": {
          "description": "Optional. Authentication information required to execute the tool against the MCP server. For bearer token authentication, the token applies only to tool execution, not to listing tools. This requires that tools can be listed without authentication.",
          "$ref": "ApiAuthentication"
        },
        "tlsConfig": {
          "description": "Optional. The TLS configuration. Includes the custom server certificates that the client should trust.",
          "$ref": "TlsConfig"
        },
        "serviceDirectoryConfig": {
          "description": "Optional. Service Directory configuration for VPC-SC, used to resolve service names within a perimeter.",
          "$ref": "ServiceDirectoryConfig"
        },
        "customHeaders": {
          "description": "Optional. The custom headers to send in the request to the MCP server. The values must be in the format `$context.variables.` and can be set in the session variables. See https://docs.cloud.google.com/customer-engagement-ai/conversational-agents/ps/tool/open-api#openapi-injection for more details.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "FileSearchTool": {
      "id": "FileSearchTool",
      "description": "The file search tool allows the agent to search across the files uploaded by the app/agent developer. It has presets to give relatively good quality search over the uploaded files and summarization of the retrieved results.",
      "type": "object",
      "properties": {
        "corpusType": {
          "description": "Optional. The type of the corpus. Default is FULLY_MANAGED.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified corpus type.",
            "The corpus is created and owned by the user.",
            "The corpus is created by the agent."
          ],
          "enum": [
            "CORPUS_TYPE_UNSPECIFIED",
            "USER_OWNED",
            "FULLY_MANAGED"
          ]
        },
        "name": {
          "description": "Required. The tool name.",
          "type": "string"
        },
        "description": {
          "description": "Optional. The tool description.",
          "type": "string"
        },
        "fileCorpus": {
          "description": "Optional. The corpus where files are stored. Format: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}",
          "type": "string"
        }
      }
    },
    "SystemTool": {
      "id": "SystemTool",
      "description": "Pre-defined system tool.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Required. The name of the system tool.",
          "type": "string"
        },
        "description": {
          "description": "Output only. The description of the system tool.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "AgentTool": {
      "id": "AgentTool",
      "description": "Represents a tool that allows the agent to call another agent.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Required. The name of the agent tool.",
          "type": "string"
        },
        "description": {
          "description": "Optional. Description of the tool's purpose.",
          "type": "string"
        },
        "rootAgent": {
          "description": "Optional. The resource name of the root agent that is the entry point of the tool. Format: `projects/{project}/locations/{location}/agents/{agent}`",
          "type": "string"
        }
      }
    },
    "WidgetTool": {
      "id": "WidgetTool",
      "description": "Represents a widget tool that the agent can invoke. When the tool is chosen by the agent, agent will return the widget to the client. The client is responsible for processing the widget and generating the next user query to continue the interaction with the agent.",
      "type": "object",
      "properties": {
        "parameters": {
          "description": "Optional. The input parameters of the widget tool.",
          "$ref": "Schema"
        },
        "name": {
          "description": "Required. The display name of the widget tool.",
          "type": "string"
        },
        "description": {
          "description": "Optional. The description of the widget tool.",
          "type": "string"
        },
        "widgetType": {
          "description": "Optional. The type of the widget tool. If not specified, the default type will be CUSTOMIZED.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified widget type.",
            "Custom widget type.",
            "Product carousel widget.",
            "Product details widget.",
            "Quick actions widget.",
            "Product comparison widget.",
            "Advanced product details widget.",
            "Short form widget.",
            "Overall satisfaction widget.",
            "Order summary widget.",
            "Appointment details widget.",
            "Appointment scheduler widget.",
            "Contact form widget."
          ],
          "enum": [
            "WIDGET_TYPE_UNSPECIFIED",
            "CUSTOM",
            "PRODUCT_CAROUSEL",
            "PRODUCT_DETAILS",
            "QUICK_ACTIONS",
            "PRODUCT_COMPARISON",
            "ADVANCED_PRODUCT_DETAILS",
            "SHORT_FORM",
            "OVERALL_SATISFACTION",
            "ORDER_SUMMARY",
            "APPOINTMENT_DETAILS",
            "APPOINTMENT_SCHEDULER",
            "CONTACT_FORM"
          ]
        },
        "uiConfig": {
          "description": "Optional. Configuration for rendering the widget.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        },
        "dataMapping": {
          "description": "Optional. The mapping that defines how data from a source tool is mapped to the widget's input parameters.",
          "$ref": "WidgetToolDataMapping"
        }
      }
    },
    "WidgetToolDataMapping": {
      "id": "WidgetToolDataMapping",
      "description": "Configuration for mapping data from a source tool to the widget's input parameters.",
      "type": "object",
      "properties": {
        "sourceToolName": {
          "description": "Optional. The resource name of the tool that provides the data for the widget (e.g., a search tool or a custom function). Format: `projects/{project}/locations/{location}/agents/{agent}/tools/{tool}`",
          "type": "string"
        },
        "fieldMappings": {
          "description": "Optional. A map of widget input parameter fields to the corresponding output fields of the source tool.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "pythonFunction": {
          "description": "Optional. Configuration for a Python function used to transform the source tool's output into the widget's input format.",
          "$ref": "PythonFunction"
        },
        "mode": {
          "description": "Optional. The mode of the data mapping.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified mode.",
            "Use the `field_mappings` map for data transformation.",
            "Use the `python_script` for data transformation."
          ],
          "enum": [
            "MODE_UNSPECIFIED",
            "FIELD_MAPPING",
            "PYTHON_SCRIPT"
          ]
        },
        "pythonScript": {
          "description": "Deprecated: Use `python_function` instead.",
          "deprecated": true,
          "type": "string"
        }
      }
    },
    "ToolFakeConfig": {
      "id": "ToolFakeConfig",
      "description": "Configuration for tool behavior in fake mode.",
      "type": "object",
      "properties": {
        "codeBlock": {
          "description": "Optional. Code block which will be executed instead of a real tool call.",
          "$ref": "CodeBlock"
        },
        "enableFakeMode": {
          "description": "Optional. Whether the tool is using fake mode.",
          "type": "boolean"
        }
      }
    },
    "CodeBlock": {
      "id": "CodeBlock",
      "description": "A code block to be executed instead of a real tool call.",
      "type": "object",
      "properties": {
        "pythonCode": {
          "description": "Required. Python code which will be invoked in tool fake mode. Expected Python function signature - To catch all tool calls: def fake_tool_call(tool: Tool, input: dict[str, Any], callback_context: CallbackContext) -\u003e Optional[dict[str, Any]]: To catch a specific tool call: def fake_{tool_id}(tool: Tool, input: dict[str, Any], callback_context: CallbackContext) -\u003e Optional[dict[str, Any]]: If the function returns None, the real tool will be invoked instead.",
          "type": "string"
        }
      }
    },
    "ListConversationsResponse": {
      "id": "ListConversationsResponse",
      "description": "Response message for AgentService.ListConversations.",
      "type": "object",
      "properties": {
        "conversations": {
          "description": "The list of conversations.",
          "type": "array",
          "items": {
            "$ref": "Conversation"
          }
        },
        "nextPageToken": {
          "description": "A token that can be sent as ListConversationsRequest.page_token to retrieve the next page. Absence of this field indicates there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "Conversation": {
      "id": "Conversation",
      "description": "A conversation represents an interaction between an end user and the CES app.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Identifier. The unique identifier of the conversation. Format: `projects/{project}/locations/{location}/apps/{app}/conversations/{conversation}`",
          "type": "string"
        },
        "startTime": {
          "description": "Output only. Timestamp when the conversation was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "endTime": {
          "description": "Output only. Timestamp when the conversation was completed.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "turns": {
          "description": "Required. The turns in the conversation.",
          "type": "array",
          "items": {
            "$ref": "ConversationTurn"
          }
        },
        "turnCount": {
          "description": "Output only. The number of turns in the conversation.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "channelType": {
          "description": "DEPRECATED. Please use input_types instead.",
          "deprecated": true,
          "type": "string",
          "enumDescriptions": [
            "Unspecified channel type.",
            "The conversation only contains text messages between the end user and the agent.",
            "The conversation contains audio messages between the end user and the agent.",
            "The conversation multi-modal messages (e.g. image) between the end user and the agent."
          ],
          "enum": [
            "CHANNEL_TYPE_UNSPECIFIED",
            "TEXT",
            "AUDIO",
            "MULTIMODAL"
          ]
        },
        "source": {
          "description": "Output only. Indicate the source of the conversation.",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Unspecified source.",
            "The conversation is from the live end user.",
            "The conversation is from the simulator.",
            "The conversation is from the evaluation."
          ],
          "enum": [
            "SOURCE_UNSPECIFIED",
            "LIVE",
            "SIMULATOR",
            "EVAL"
          ]
        },
        "inputTypes": {
          "description": "Output only. The input types of the conversation.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Unspecified input type.",
              "The input message is text.",
              "The input message is audio.",
              "The input message is image.",
              "The input message is blob file.",
              "The input message is client function tool response.",
              "The input message are variables."
            ],
            "enum": [
              "INPUT_TYPE_UNSPECIFIED",
              "INPUT_TYPE_TEXT",
              "INPUT_TYPE_AUDIO",
              "INPUT_TYPE_IMAGE",
              "INPUT_TYPE_BLOB",
              "INPUT_TYPE_TOOL_RESPONSE",
              "INPUT_TYPE_VARIABLES"
            ]
          }
        },
        "entryAgent": {
          "description": "Output only. The agent that initially handles the conversation. If not specified, the conversation is handled by the root agent. Format: `projects/{project}/locations/{location}/apps/{app}/agents/{agent}`",
          "readOnly": true,
          "type": "string"
        },
        "deployment": {
          "description": "Output only. The deployment of the app used for processing the conversation. Format: `projects/{project}/locations/{location}/apps/{app}/deployments/{deployment}`",
          "readOnly": true,
          "type": "string"
        },
        "appVersion": {
          "description": "Output only. The version of the app used for processing the conversation. Format: `projects/{project}/locations/{location}/apps/{app}/versions/{version}`",
          "readOnly": true,
          "type": "string"
        },
        "languageCode": {
          "description": "Output only. The language code of the conversation.",
          "readOnly": true,
          "type": "string"
        },
        "messages": {
          "description": "Deprecated. Use turns instead.",
          "deprecated": true,
          "type": "array",
          "items": {
            "$ref": "Message"
          }
        }
      }
    },
    "ConversationTurn": {
      "id": "ConversationTurn",
      "description": "All information about a single turn in the conversation.",
      "type": "object",
      "properties": {
        "messages": {
          "description": "Optional. List of messages in the conversation turn, including user input, agent responses and intermediate events during the processing.",
          "type": "array",
          "items": {
            "$ref": "Message"
          }
        },
        "rootSpan": {
          "description": "Optional. The root span of the action processing.",
          "$ref": "Span"
        }
      }
    },
    "BatchDeleteConversationsRequest": {
      "id": "BatchDeleteConversationsRequest",
      "description": "Request message for AgentService.BatchDeleteConversations.",
      "type": "object",
      "properties": {
        "conversations": {
          "description": "Required. The resource names of the conversations to delete.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "ListGuardrailsResponse": {
      "id": "ListGuardrailsResponse",
      "description": "Response message for AgentService.ListGuardrails.",
      "type": "object",
      "properties": {
        "guardrails": {
          "description": "The list of guardrails.",
          "type": "array",
          "items": {
            "$ref": "Guardrail"
          }
        },
        "nextPageToken": {
          "description": "A token that can be sent as ListGuardrailsRequest.page_token to retrieve the next page. Absence of this field indicates there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "Guardrail": {
      "id": "Guardrail",
      "description": "Guardrail contains a list of checks and balances to keep the agents safe and secure.",
      "type": "object",
      "properties": {
        "contentFilter": {
          "description": "Optional. Guardrail that bans certain content from being used in the conversation.",
          "$ref": "GuardrailContentFilter"
        },
        "llmPromptSecurity": {
          "description": "Optional. Guardrail that blocks the conversation if the prompt is considered unsafe based on the LLM classification.",
          "$ref": "GuardrailLlmPromptSecurity"
        },
        "llmPolicy": {
          "description": "Optional. Guardrail that blocks the conversation if the LLM response is considered violating the policy based on the LLM classification.",
          "$ref": "GuardrailLlmPolicy"
        },
        "modelSafety": {
          "description": "Optional. Guardrail that blocks the conversation if the LLM response is considered unsafe based on the model safety settings.",
          "$ref": "GuardrailModelSafety"
        },
        "codeCallback": {
          "description": "Optional. Guardrail that potentially blocks the conversation based on the result of the callback execution.",
          "$ref": "GuardrailCodeCallback"
        },
        "name": {
          "description": "Identifier. The unique identifier of the guardrail. Format: `projects/{project}/locations/{location}/apps/{app}/guardrails/{guardrail}`",
          "type": "string"
        },
        "displayName": {
          "description": "Required. Display name of the guardrail.",
          "type": "string"
        },
        "description": {
          "description": "Optional. Description of the guardrail.",
          "type": "string"
        },
        "enabled": {
          "description": "Optional. Whether the guardrail is enabled.",
          "type": "boolean"
        },
        "action": {
          "description": "Optional. Action to take when the guardrail is triggered.",
          "$ref": "TriggerAction"
        },
        "createTime": {
          "description": "Output only. Timestamp when the guardrail was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "updateTime": {
          "description": "Output only. Timestamp when the guardrail was last updated.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "etag": {
          "description": "Etag used to ensure the object hasn't changed during a read-modify-write operation. If the etag is empty, the update will overwrite any concurrent changes.",
          "type": "string"
        }
      }
    },
    "GuardrailContentFilter": {
      "id": "GuardrailContentFilter",
      "description": "Guardrail that bans certain content from being used in the conversation.",
      "type": "object",
      "properties": {
        "bannedContents": {
          "description": "Optional. List of banned phrases. Applies to both user inputs and agent responses.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "bannedContentsInUserInput": {
          "description": "Optional. List of banned phrases. Applies only to user inputs.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "bannedContentsInAgentResponse": {
          "description": "Optional. List of banned phrases. Applies only to agent responses.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "matchType": {
          "description": "Required. Match type for the content filter.",
          "type": "string",
          "enumDescriptions": [
            "Match type is not specified.",
            "Content is matched for substrings character by character.",
            "Content only matches if the pattern found in the text is surrounded by word delimiters. Banned phrases can also contain word delimiters.",
            "Content is matched using regular expression syntax."
          ],
          "enum": [
            "MATCH_TYPE_UNSPECIFIED",
            "SIMPLE_STRING_MATCH",
            "WORD_BOUNDARY_STRING_MATCH",
            "REGEXP_MATCH"
          ]
        },
        "disregardDiacritics": {
          "description": "Optional. If true, diacritics are ignored during matching.",
          "type": "boolean"
        }
      }
    },
    "GuardrailLlmPromptSecurity": {
      "id": "GuardrailLlmPromptSecurity",
      "description": "Guardrail that blocks the conversation if the input is considered unsafe based on the LLM classification.",
      "type": "object",
      "properties": {
        "defaultSettings": {
          "description": "Optional. Use the system's predefined default security settings. To select this mode, include an empty 'default_settings' message in the request. The 'default_prompt_template' field within will be populated by the server in the response.",
          "$ref": "GuardrailLlmPromptSecurityDefaultSecuritySettings"
        },
        "customPolicy": {
          "description": "Optional. Use a user-defined LlmPolicy to configure the security guardrail.",
          "$ref": "GuardrailLlmPolicy"
        },
        "failOpen": {
          "description": "Optional. Determines the behavior when the guardrail encounters an LLM error. - If true: the guardrail is bypassed. - If false (default): the guardrail triggers/blocks. Note: If a custom policy is provided, this field is ignored in favor of the policy's 'fail_open' configuration.",
          "type": "boolean"
        }
      }
    },
    "GuardrailLlmPromptSecurityDefaultSecuritySettings": {
      "id": "GuardrailLlmPromptSecurityDefaultSecuritySettings",
      "description": "Configuration for default system security settings.",
      "type": "object",
      "properties": {
        "defaultPromptTemplate": {
          "description": "Output only. The default prompt template used by the system. This field is for display purposes to show the user what prompt the system uses by default. It is OUTPUT_ONLY.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GuardrailLlmPolicy": {
      "id": "GuardrailLlmPolicy",
      "description": "Guardrail that blocks the conversation if the LLM response is considered violating the policy based on the LLM classification.",
      "type": "object",
      "properties": {
        "maxConversationMessages": {
          "description": "Optional. When checking this policy, consider the last 'n' messages in the conversation. When not set a default value of 10 will be used.",
          "type": "integer",
          "format": "int32"
        },
        "modelSettings": {
          "description": "Optional. Model settings.",
          "$ref": "ModelSettings"
        },
        "prompt": {
          "description": "Required. Policy prompt.",
          "type": "string"
        },
        "policyScope": {
          "description": "Required. Defines when to apply the policy check during the conversation. If set to `POLICY_SCOPE_UNSPECIFIED`, the policy will be applied to the user input. When applying the policy to the agent response, additional latency will be introduced before the agent can respond.",
          "type": "string",
          "enumDescriptions": [
            "Policy scope is not specified.",
            "Policy check is triggered on user input.",
            "Policy check is triggered on agent response. Applying this policy scope will introduce additional latency before the agent can respond.",
            "Policy check is triggered on both user input and agent response. Applying this policy scope will introduce additional latency before the agent can respond."
          ],
          "enum": [
            "POLICY_SCOPE_UNSPECIFIED",
            "USER_QUERY",
            "AGENT_RESPONSE",
            "USER_QUERY_AND_AGENT_RESPONSE"
          ]
        },
        "failOpen": {
          "description": "Optional. If an error occurs during the policy check, fail open and do not trigger the guardrail.",
          "type": "boolean"
        },
        "allowShortUtterance": {
          "description": "Optional. By default, the LLM policy check is bypassed for short utterances. Enabling this setting applies the policy check to all utterances, including those that would normally be skipped.",
          "type": "boolean"
        }
      }
    },
    "GuardrailModelSafety": {
      "id": "GuardrailModelSafety",
      "description": "Model safety settings overrides. When this is set, it will override the default settings and trigger the guardrail if the response is considered unsafe.",
      "type": "object",
      "properties": {
        "safetySettings": {
          "description": "Required. List of safety settings.",
          "type": "array",
          "items": {
            "$ref": "GuardrailModelSafetySafetySetting"
          }
        }
      }
    },
    "GuardrailModelSafetySafetySetting": {
      "id": "GuardrailModelSafetySafetySetting",
      "description": "Safety setting.",
      "type": "object",
      "properties": {
        "category": {
          "description": "Required. The harm category.",
          "type": "string",
          "enumDescriptions": [
            "The harm category is unspecified.",
            "The harm category is hate speech.",
            "The harm category is dangerous content.",
            "The harm category is harassment.",
            "The harm category is sexually explicit content."
          ],
          "enum": [
            "HARM_CATEGORY_UNSPECIFIED",
            "HARM_CATEGORY_HATE_SPEECH",
            "HARM_CATEGORY_DANGEROUS_CONTENT",
            "HARM_CATEGORY_HARASSMENT",
            "HARM_CATEGORY_SEXUALLY_EXPLICIT"
          ]
        },
        "threshold": {
          "description": "Required. The harm block threshold.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified harm block threshold.",
            "Block low threshold and above (i.e. block more).",
            "Block medium threshold and above.",
            "Block only high threshold (i.e. block less).",
            "Block none.",
            "Turn off the safety filter."
          ],
          "enum": [
            "HARM_BLOCK_THRESHOLD_UNSPECIFIED",
            "BLOCK_LOW_AND_ABOVE",
            "BLOCK_MEDIUM_AND_ABOVE",
            "BLOCK_ONLY_HIGH",
            "BLOCK_NONE",
            "OFF"
          ]
        }
      }
    },
    "GuardrailCodeCallback": {
      "id": "GuardrailCodeCallback",
      "description": "Guardrail that blocks the conversation based on the code callbacks provided.",
      "type": "object",
      "properties": {
        "beforeAgentCallback": {
          "description": "Optional. The callback to execute before the agent is called. Each callback function is expected to return a structure (e.g., a dict or object) containing at least: - 'decision': Either 'OK' or 'TRIGGER'. - 'reason': A string explaining the decision. A 'TRIGGER' decision may halt further processing.",
          "$ref": "Callback"
        },
        "afterAgentCallback": {
          "description": "Optional. The callback to execute after the agent is called. Each callback function is expected to return a structure (e.g., a dict or object) containing at least: - 'decision': Either 'OK' or 'TRIGGER'. - 'reason': A string explaining the decision. A 'TRIGGER' decision may halt further processing.",
          "$ref": "Callback"
        },
        "beforeModelCallback": {
          "description": "Optional. The callback to execute before the model is called. If there are multiple calls to the model, the callback will be executed multiple times. Each callback function is expected to return a structure (e.g., a dict or object) containing at least: - 'decision': Either 'OK' or 'TRIGGER'. - 'reason': A string explaining the decision. A 'TRIGGER' decision may halt further processing.",
          "$ref": "Callback"
        },
        "afterModelCallback": {
          "description": "Optional. The callback to execute after the model is called. If there are multiple calls to the model, the callback will be executed multiple times. Each callback function is expected to return a structure (e.g., a dict or object) containing at least: - 'decision': Either 'OK' or 'TRIGGER'. - 'reason': A string explaining the decision. A 'TRIGGER' decision may halt further processing.",
          "$ref": "Callback"
        }
      }
    },
    "TriggerAction": {
      "id": "TriggerAction",
      "description": "Action that is taken when a certain precondition is met.",
      "type": "object",
      "properties": {
        "respondImmediately": {
          "description": "Optional. Immediately respond with a preconfigured response.",
          "$ref": "TriggerActionRespondImmediately"
        },
        "transferAgent": {
          "description": "Optional. Transfer the conversation to a different agent.",
          "$ref": "TriggerActionTransferAgent"
        },
        "generativeAnswer": {
          "description": "Optional. Respond with a generative answer.",
          "$ref": "TriggerActionGenerativeAnswer"
        }
      }
    },
    "TriggerActionRespondImmediately": {
      "id": "TriggerActionRespondImmediately",
      "description": "The agent will immediately respond with a preconfigured response.",
      "type": "object",
      "properties": {
        "responses": {
          "description": "Required. The canned responses for the agent to choose from. The response is chosen randomly.",
          "type": "array",
          "items": {
            "$ref": "TriggerActionResponse"
          }
        }
      }
    },
    "TriggerActionResponse": {
      "id": "TriggerActionResponse",
      "description": "Represents a response from the agent.",
      "type": "object",
      "properties": {
        "text": {
          "description": "Required. Text for the agent to respond with.",
          "type": "string"
        },
        "disabled": {
          "description": "Optional. Whether the response is disabled. Disabled responses are not used by the agent.",
          "type": "boolean"
        }
      }
    },
    "TriggerActionTransferAgent": {
      "id": "TriggerActionTransferAgent",
      "description": "The agent will transfer the conversation to a different agent.",
      "type": "object",
      "properties": {
        "agent": {
          "description": "Required. The name of the agent to transfer the conversation to. The agent must be in the same app as the current agent. Format: `projects/{project}/locations/{location}/apps/{app}/agents/{agent}`",
          "type": "string"
        }
      }
    },
    "TriggerActionGenerativeAnswer": {
      "id": "TriggerActionGenerativeAnswer",
      "description": "The agent will immediately respond with a generative answer.",
      "type": "object",
      "properties": {
        "prompt": {
          "description": "Required. The prompt to use for the generative answer.",
          "type": "string"
        }
      }
    },
    "ListDeploymentsResponse": {
      "id": "ListDeploymentsResponse",
      "description": "Response message for AgentService.ListDeployments.",
      "type": "object",
      "properties": {
        "deployments": {
          "description": "The list of deployments.",
          "type": "array",
          "items": {
            "$ref": "Deployment"
          }
        },
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "Deployment": {
      "id": "Deployment",
      "description": "A deployment represents an immutable, queryable version of the app. It is used to deploy an app version with a specific channel profile.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Identifier. The resource name of the deployment. Format: `projects/{project}/locations/{location}/apps/{app}/deployments/{deployment}`",
          "type": "string"
        },
        "displayName": {
          "description": "Required. Display name of the deployment.",
          "type": "string"
        },
        "appVersion": {
          "description": "Optional. The resource name of the app version to deploy. Format: `projects/{project}/locations/{location}/apps/{app}/versions/{version}` Use `projects/{project}/locations/{location}/apps/{app}/versions/-` to use the draft app.",
          "type": "string"
        },
        "channelProfile": {
          "description": "Required. The channel profile used in the deployment.",
          "$ref": "ChannelProfile"
        },
        "createTime": {
          "description": "Output only. Timestamp when this deployment was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "updateTime": {
          "description": "Output only. Timestamp when this deployment was last updated.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "etag": {
          "description": "Output only. Etag used to ensure the object hasn't changed during a read-modify-write operation. If the etag is empty, the update will overwrite any concurrent changes.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "ListToolsetsResponse": {
      "id": "ListToolsetsResponse",
      "description": "Response message for AgentService.ListToolsets.",
      "type": "object",
      "properties": {
        "toolsets": {
          "description": "The list of toolsets.",
          "type": "array",
          "items": {
            "$ref": "Toolset"
          }
        },
        "nextPageToken": {
          "description": "A token that can be sent as ListToolsetsRequest.page_token to retrieve the next page. Absence of this field indicates there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "Toolset": {
      "id": "Toolset",
      "description": "A toolset represents a group of dynamically managed tools that can be used by the agent.",
      "type": "object",
      "properties": {
        "mcpToolset": {
          "description": "Optional. A toolset that contains a list of tools that are offered by the MCP server.",
          "$ref": "McpToolset"
        },
        "openApiToolset": {
          "description": "Optional. A toolset that contains a list of tools that are defined by an OpenAPI schema.",
          "$ref": "OpenApiToolset"
        },
        "connectorToolset": {
          "description": "Optional. A toolset that generates tools from an Integration Connectors Connection.",
          "$ref": "ConnectorToolset"
        },
        "name": {
          "description": "Identifier. The unique identifier of the toolset. Format: `projects/{project}/locations/{location}/apps/{app}/toolsets/{toolset}`",
          "type": "string"
        },
        "displayName": {
          "description": "Optional. The display name of the toolset. Must be unique within the same app.",
          "type": "string"
        },
        "description": {
          "description": "Optional. The description of the toolset.",
          "type": "string"
        },
        "createTime": {
          "description": "Output only. Timestamp when the toolset was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "updateTime": {
          "description": "Output only. Timestamp when the toolset was last updated.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "etag": {
          "description": "ETag used to ensure the object hasn't changed during a read-modify-write operation. If the etag is empty, the update will overwrite any concurrent changes.",
          "type": "string"
        },
        "executionType": {
          "description": "Optional. The execution type of the tools in the toolset.",
          "type": "string",
          "enumDescriptions": [
            "The execution type is unspecified. Defaults to `SYNCHRONOUS` if unspecified.",
            "The tool is executed synchronously. The session is blocked until the tool returns.",
            "The tool is executed asynchronously. The session will continue while the tool is executing."
          ],
          "enum": [
            "EXECUTION_TYPE_UNSPECIFIED",
            "SYNCHRONOUS",
            "ASYNCHRONOUS"
          ]
        },
        "toolFakeConfig": {
          "description": "Optional. Configuration for tools behavior in fake mode.",
          "$ref": "ToolFakeConfig"
        }
      }
    },
    "McpToolset": {
      "id": "McpToolset",
      "description": "A toolset that contains a list of tools that are offered by the MCP server.",
      "type": "object",
      "properties": {
        "serverAddress": {
          "description": "Required. The address of the MCP server, for example, \"https://example.com/mcp/\". If the server is built with the MCP SDK, the url should be suffixed with \"/mcp/\". Only Streamable HTTP transport based servers are supported. See https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http for more details.",
          "type": "string"
        },
        "apiAuthentication": {
          "description": "Optional. Authentication information required to access tools and execute a tool against the MCP server. For bearer token authentication, the token applies only to tool execution, not to listing tools. This requires that tools can be listed without authentication.",
          "$ref": "ApiAuthentication"
        },
        "serviceDirectoryConfig": {
          "description": "Optional. Service Directory configuration for VPC-SC, used to resolve service names within a perimeter.",
          "$ref": "ServiceDirectoryConfig"
        },
        "tlsConfig": {
          "description": "Optional. The TLS configuration. Includes the custom server certificates that the client should trust.",
          "$ref": "TlsConfig"
        },
        "customHeaders": {
          "description": "Optional. The custom headers to send in the request to the MCP server. The values must be in the format `$context.variables.` and can be set in the session variables. See https://docs.cloud.google.com/customer-engagement-ai/conversational-agents/ps/tool/open-api#openapi-injection for more details.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "OpenApiToolset": {
      "id": "OpenApiToolset",
      "description": "A toolset that contains a list of tools that are defined by an OpenAPI schema.",
      "type": "object",
      "properties": {
        "openApiSchema": {
          "description": "Required. The OpenAPI schema of the toolset.",
          "type": "string"
        },
        "apiAuthentication": {
          "description": "Optional. Authentication information required by the API.",
          "$ref": "ApiAuthentication"
        },
        "tlsConfig": {
          "description": "Optional. The TLS configuration. Includes the custom server certificates",
          "$ref": "TlsConfig"
        },
        "serviceDirectoryConfig": {
          "description": "Optional. Service Directory configuration.",
          "$ref": "ServiceDirectoryConfig"
        },
        "ignoreUnknownFields": {
          "description": "Optional. If true, the agent will ignore unknown fields in the API response for all operations defined in the OpenAPI schema.",
          "type": "boolean"
        },
        "url": {
          "description": "Optional. The server URL of the Open API schema. This field is only set in toolsets in the environment dependencies during the export process if the schema contains a server url. During the import process, if this url is present in the environment dependencies and the schema has the $env_var placeholder, it will replace the placeholder in the schema.",
          "type": "string"
        }
      }
    },
    "ConnectorToolset": {
      "id": "ConnectorToolset",
      "description": "A toolset that generates tools from an Integration Connectors Connection.",
      "type": "object",
      "properties": {
        "connection": {
          "description": "Required. The full resource name of the referenced Integration Connectors Connection. Format: `projects/{project}/locations/{location}/connections/{connection}`",
          "type": "string"
        },
        "authConfig": {
          "description": "Optional. Configures how authentication is handled in Integration Connectors. By default, an admin authentication is passed in the Integration Connectors API requests. You can override it with a different end-user authentication config. **Note**: The Connection must have authentication override enabled in order to specify an EUC configuration here - otherwise, the Toolset creation will fail. See: https://cloud.google.com/application-integration/docs/configure-connectors-task#configure-authentication-override",
          "$ref": "EndUserAuthConfig"
        },
        "connectorActions": {
          "description": "Required. The list of connector actions/entity operations to generate tools for.",
          "type": "array",
          "items": {
            "$ref": "Action"
          }
        }
      }
    },
    "ListAppVersionsResponse": {
      "id": "ListAppVersionsResponse",
      "description": "Response message for AgentService.ListAppVersions.",
      "type": "object",
      "properties": {
        "appVersions": {
          "description": "The list of app versions.",
          "type": "array",
          "items": {
            "$ref": "AppVersion"
          }
        },
        "nextPageToken": {
          "description": "A token that can be sent as ListAppVersionsRequest.page_token to retrieve the next page. Absence of this field indicates there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "AppVersion": {
      "id": "AppVersion",
      "description": "In Customer Engagement Suite (CES), an app version is a snapshot of the app at a specific point in time. It is immutable and cannot be modified once created.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Identifier. The unique identifier of the app version. Format: `projects/{project}/locations/{location}/apps/{app}/versions/{version}`",
          "type": "string"
        },
        "displayName": {
          "description": "Optional. The display name of the app version.",
          "type": "string"
        },
        "description": {
          "description": "Optional. The description of the app version.",
          "type": "string"
        },
        "creator": {
          "description": "Output only. Email of the user who created the app version.",
          "readOnly": true,
          "type": "string"
        },
        "createTime": {
          "description": "Output only. Timestamp when the app version was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "snapshot": {
          "description": "Output only. The snapshot of the app when the version is created.",
          "readOnly": true,
          "$ref": "AppSnapshot"
        },
        "etag": {
          "description": "Output only. Etag used to ensure the object hasn't changed during a read-modify-write operation. If the etag is empty, the update will overwrite any concurrent changes.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "AppSnapshot": {
      "id": "AppSnapshot",
      "description": "A snapshot of the app.",
      "type": "object",
      "properties": {
        "app": {
          "description": "Optional. The basic settings for the app.",
          "$ref": "App"
        },
        "agents": {
          "description": "Optional. List of agents in the app.",
          "type": "array",
          "items": {
            "$ref": "Agent"
          }
        },
        "tools": {
          "description": "Optional. List of tools in the app.",
          "type": "array",
          "items": {
            "$ref": "Tool"
          }
        },
        "examples": {
          "description": "Optional. List of examples in the app.",
          "type": "array",
          "items": {
            "$ref": "Example"
          }
        },
        "guardrails": {
          "description": "Optional. List of guardrails in the app.",
          "type": "array",
          "items": {
            "$ref": "Guardrail"
          }
        },
        "toolsets": {
          "description": "Optional. List of toolsets in the app.",
          "type": "array",
          "items": {
            "$ref": "Toolset"
          }
        }
      }
    },
    "RestoreAppVersionRequest": {
      "id": "RestoreAppVersionRequest",
      "description": "Request message for AgentService.RestoreAppVersion",
      "type": "object",
      "properties": {}
    },
    "ListChangelogsResponse": {
      "id": "ListChangelogsResponse",
      "description": "Response message for AgentService.ListChangelogs.",
      "type": "object",
      "properties": {
        "changelogs": {
          "description": "The list of changelogs.",
          "type": "array",
          "items": {
            "$ref": "Changelog"
          }
        },
        "nextPageToken": {
          "description": "A token that can be sent as ListChangelogsRequest.page_token to retrieve the next page. Absence of this field indicates there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "Changelog": {
      "id": "Changelog",
      "description": "Changelogs represent a change made to the app or to an resource within the app.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Identifier. The unique identifier of the changelog. Format: `projects/{project}/locations/{location}/apps/{app}/changelogs/{changelog}`",
          "type": "string"
        },
        "author": {
          "description": "Output only. Email address of the change author.",
          "readOnly": true,
          "type": "string"
        },
        "displayName": {
          "description": "Output only. Display name of the change. It typically should be the display name of the resource that was changed.",
          "readOnly": true,
          "type": "string"
        },
        "description": {
          "description": "Output only. Description of the change. which typically captures the changed fields in the resource.",
          "readOnly": true,
          "type": "string"
        },
        "resource": {
          "description": "Output only. The resource that was changed.",
          "readOnly": true,
          "type": "string"
        },
        "resourceType": {
          "description": "Output only. The type of the resource that was changed.",
          "readOnly": true,
          "type": "string"
        },
        "action": {
          "description": "Output only. The action that was performed on the resource.",
          "readOnly": true,
          "type": "string"
        },
        "originalResource": {
          "description": "Output only. The original resource before the change.",
          "readOnly": true,
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        },
        "newResource": {
          "description": "Output only. The new resource after the change.",
          "readOnly": true,
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        },
        "dependentResources": {
          "description": "Output only. The dependent resources that were changed.",
          "readOnly": true,
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": {
              "type": "any",
              "description": "Properties of the object."
            }
          }
        },
        "createTime": {
          "description": "Output only. The time when the change was made.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "sequenceNumber": {
          "description": "Output only. The monotonically increasing sequence number of the changelog.",
          "readOnly": true,
          "type": "string",
          "format": "int64"
        }
      }
    },
    "ExecuteToolRequest": {
      "id": "ExecuteToolRequest",
      "description": "Request message for ToolService.ExecuteTool.",
      "type": "object",
      "properties": {
        "tool": {
          "description": "Optional. The name of the tool to execute. Format: projects/{project}/locations/{location}/apps/{app}/tools/{tool}",
          "type": "string"
        },
        "toolsetTool": {
          "description": "Optional. The toolset tool to execute. Only one tool should match the predicate from the toolset. Otherwise, an error will be returned.",
          "$ref": "ToolsetTool"
        },
        "variables": {
          "description": "Optional. The variables that are available for the tool execution.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        },
        "context": {
          "description": "Optional. The [ToolCallContext](https://docs.cloud.google.com/customer-engagement-ai/conversational-agents/ps/tool/python#environment for details) to be passed to the Python tool.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        },
        "args": {
          "description": "Optional. The input parameters and values for the tool in JSON object format.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        }
      }
    },
    "ExecuteToolResponse": {
      "id": "ExecuteToolResponse",
      "description": "Response message for ToolService.ExecuteTool.",
      "type": "object",
      "properties": {
        "tool": {
          "description": "The name of the tool that got executed. Format: `projects/{project}/locations/{location}/apps/{app}/tools/{tool}`",
          "type": "string"
        },
        "toolsetTool": {
          "description": "The toolset tool that got executed.",
          "$ref": "ToolsetTool"
        },
        "response": {
          "description": "The tool execution result in JSON object format. Use \"output\" key to specify tool response and \"error\" key to specify error details (if any). If \"output\" and \"error\" keys are not specified, then whole \"response\" is treated as tool execution result.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        },
        "variables": {
          "description": "The variable values at the end of the tool execution.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object."
          }
        }
      }
    },
    "RetrieveToolSchemaRequest": {
      "id": "RetrieveToolSchemaRequest",
      "description": "Request message for ToolService.RetrieveToolSchema.",
      "type": "object",
      "properties": {
        "tool": {
          "description": "Optional. The name of the tool to retrieve the schema for. Format: projects/{project}/locations/{location}/apps/{app}/tools/{tool}",
          "type": "string"
        },
        "toolsetTool": {
          "description": "Optional. The toolset tool to retrieve the schema for. Only one tool should match the predicate from the toolset. Otherwise, an error will be returned.",
          "$ref": "ToolsetTool"
        }
      }
    },
    "RetrieveToolSchemaResponse": {
      "id": "RetrieveToolSchemaResponse",
      "description": "Response message for ToolService.RetrieveToolSchema.",
      "type": "object",
      "properties": {
        "tool": {
          "description": "The name of the tool that the schema is for. Format: `projects/{project}/locations/{location}/apps/{app}/tools/{tool}`",
          "type": "string"
        },
        "toolsetTool": {
          "description": "The toolset tool that the schema is for.",
          "$ref": "ToolsetTool"
        },
        "inputSchema": {
          "description": "The schema of the tool input parameters.",
          "$ref": "Schema"
        },
        "outputSchema": {
          "description": "The schema of the tool output parameters.",
          "$ref": "Schema"
        }
      }
    },
    "RetrieveToolsRequest": {
      "id": "RetrieveToolsRequest",
      "description": "Request message for ToolService.RetrieveTools.",
      "type": "object",
      "properties": {
        "toolIds": {
          "description": "Optional. The identifiers of the tools to retrieve from the toolset. If empty, all tools in the toolset will be returned.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "RetrieveToolsResponse": {
      "id": "RetrieveToolsResponse",
      "description": "Response message for ToolService.RetrieveTools.",
      "type": "object",
      "properties": {
        "tools": {
          "description": "The list of tools that are included in the specified toolset.",
          "type": "array",
          "items": {
            "$ref": "Tool"
          }
        }
      }
    },
    "GenerateChatTokenRequest": {
      "id": "GenerateChatTokenRequest",
      "description": "Request message for WidgetService.GenerateChatToken.",
      "type": "object",
      "properties": {
        "deployment": {
          "description": "Required. The deployment of the app to use for the session. Format: projects/{project}/locations/{location}/apps/{app}/deployments/{deployment}",
          "type": "string"
        },
        "recaptchaToken": {
          "description": "Optional. The reCAPTCHA token generated by the client-side chat widget.",
          "type": "string"
        },
        "liveHandoffEnabled": {
          "description": "Optional. Indicates if live handoff is enabled for the session.",
          "type": "boolean"
        }
      }
    },
    "GenerateChatTokenResponse": {
      "id": "GenerateChatTokenResponse",
      "description": "Response message for WidgetService.GenerateChatToken.",
      "type": "object",
      "properties": {
        "chatToken": {
          "description": "The session scoped token for chat widget to authenticate with Session APIs.",
          "type": "string"
        },
        "expireTime": {
          "description": "The time at which the chat token expires.",
          "type": "string",
          "format": "google-datetime"
        }
      }
    },
    "ListLocationsResponse": {
      "id": "ListLocationsResponse",
      "description": "The response message for Locations.ListLocations.",
      "type": "object",
      "properties": {
        "locations": {
          "description": "A list of locations that matches the specified filter in the request.",
          "type": "array",
          "items": {
            "$ref": "Location"
          }
        },
        "nextPageToken": {
          "description": "The standard List next-page token.",
          "type": "string"
        }
      }
    },
    "Location": {
      "id": "Location",
      "description": "A resource that represents a Google Cloud location.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`",
          "type": "string"
        },
        "locationId": {
          "description": "The canonical id for this location. For example: `\"us-east1\"`.",
          "type": "string"
        },
        "displayName": {
          "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
          "type": "string"
        },
        "labels": {
          "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "metadata": {
          "description": "Service-specific metadata. For example the available capacity at the given location.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object. Contains field @type with type URL."
          }
        }
      }
    },
    "SecuritySettings": {
      "id": "SecuritySettings",
      "description": "Project/Location level security settings for CES.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Identifier. The unique identifier of the security settings. Format: `projects/{project}/locations/{location}/securitySettings`",
          "type": "string"
        },
        "endpointControlPolicy": {
          "description": "Optional. Endpoint control related settings.",
          "$ref": "EndpointControlPolicy"
        },
        "createTime": {
          "description": "Output only. Create time of the security settings.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "updateTime": {
          "description": "Output only. Last update time of the security settings.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "etag": {
          "description": "Output only. Etag of the security settings.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "EndpointControlPolicy": {
      "id": "EndpointControlPolicy",
      "description": "Defines project/location level endpoint control policy.",
      "type": "object",
      "properties": {
        "enforcementScope": {
          "description": "Optional. The scope in which this policy's allowed_origins list is enforced.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified. This policy will be treated as VPCSC_ONLY.",
            "This policy applies only when VPC-SC is active.",
            "This policy ALWAYS applies, regardless of VPC-SC status."
          ],
          "enum": [
            "ENFORCEMENT_SCOPE_UNSPECIFIED",
            "VPCSC_ONLY",
            "ALWAYS"
          ]
        },
        "allowedOrigins": {
          "description": "Optional. The allowed HTTP(s) origins that tools in the App are able to directly call. The enforcement depends on the value of enforcement_scope and the VPC-SC status of the project. If a port number is not provided, all ports will be allowed. Otherwise, the port number must match exactly. For example, \"https://example.com\" will match \"https://example.com:443\" and any other port. \"https://example.com:443\" will only match \"https://example.com:443\".",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "Omnichannel": {
      "id": "Omnichannel",
      "description": "Represents an Omnichannel resource.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Identifier. The unique identifier of the omnichannel resource. Format: `projects/{project}/locations/{location}/omnichannels/{omnichannel}`",
          "type": "string"
        },
        "displayName": {
          "description": "Required. Display name of the omnichannel resource.",
          "type": "string"
        },
        "description": {
          "description": "Optional. Human-readable description of the omnichannel resource.",
          "type": "string"
        },
        "createTime": {
          "description": "Output only. Timestamp when the omnichannel resource was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "updateTime": {
          "description": "Output only. Timestamp when the omnichannel resource was last updated.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "etag": {
          "description": "Output only. Etag used to ensure the object hasn't changed during a read-modify-write operation.",
          "readOnly": true,
          "type": "string"
        },
        "integrationConfig": {
          "description": "Optional. The integration config for the omnichannel resource.",
          "$ref": "OmnichannelIntegrationConfig"
        }
      }
    },
    "OmnichannelIntegrationConfig": {
      "id": "OmnichannelIntegrationConfig",
      "description": "OmnichannelIntegrationConfig contains all App integration configs.",
      "type": "object",
      "properties": {
        "channelConfigs": {
          "description": "Optional. Various of configuration for handling App events.",
          "type": "object",
          "additionalProperties": {
            "$ref": "OmnichannelIntegrationConfigChannelConfig"
          }
        },
        "subscriberConfigs": {
          "description": "Optional. Various of subscribers configs.",
          "type": "object",
          "additionalProperties": {
            "$ref": "OmnichannelIntegrationConfigSubscriberConfig"
          }
        },
        "routingConfigs": {
          "description": "Optional. The key of routing_configs is a key of `app_configs`, value is a `RoutingConfig`, which contains subscriber's key.",
          "type": "object",
          "additionalProperties": {
            "$ref": "OmnichannelIntegrationConfigRoutingConfig"
          }
        }
      }
    },
    "OmnichannelIntegrationConfigChannelConfig": {
      "id": "OmnichannelIntegrationConfigChannelConfig",
      "description": "ChannelConfig contains config for various of app integration.",
      "type": "object",
      "properties": {
        "whatsappConfig": {
          "description": "WhatsApp config.",
          "$ref": "OmnichannelIntegrationConfigWhatsappConfig"
        }
      }
    },
    "OmnichannelIntegrationConfigWhatsappConfig": {
      "id": "OmnichannelIntegrationConfigWhatsappConfig",
      "description": "How Omnichannel should receive/reply events from WhatsApp.",
      "type": "object",
      "properties": {
        "phoneNumberId": {
          "description": "The Phone Number ID associated with the WhatsApp Business Account.",
          "type": "string"
        },
        "phoneNumber": {
          "description": "The phone number used for sending/receiving messages.",
          "type": "string"
        },
        "whatsappBusinessAccountId": {
          "description": "The customer's WhatsApp Business Account (WABA) ID.",
          "type": "string"
        },
        "webhookVerifyToken": {
          "description": "The verify token configured in the Meta App Dashboard for webhook verification.",
          "type": "string"
        },
        "whatsappBusinessToken": {
          "description": "The access token for authenticating API calls to the WhatsApp Cloud API. https://developers.facebook.com/docs/whatsapp/business-management-api/get-started/#business-integration-system-user-access-tokens",
          "type": "string"
        },
        "metaBusinessPortfolioId": {
          "description": "The Meta Business Portfolio (MBP) ID. https://www.facebook.com/business/help/1710077379203657",
          "type": "string"
        }
      }
    },
    "OmnichannelIntegrationConfigSubscriberConfig": {
      "id": "OmnichannelIntegrationConfigSubscriberConfig",
      "description": "Configs of subscribers.",
      "type": "object",
      "properties": {
        "cesAppConfig": {
          "description": "Ces app config.",
          "$ref": "OmnichannelIntegrationConfigCesAppConfig"
        }
      }
    },
    "OmnichannelIntegrationConfigCesAppConfig": {
      "id": "OmnichannelIntegrationConfigCesAppConfig",
      "description": "Configs for CES app.",
      "type": "object",
      "properties": {
        "app": {
          "description": "The unique identifier of the CES app. Format: `projects/{project}/locations/{location}/apps/{app}`",
          "type": "string"
        }
      }
    },
    "OmnichannelIntegrationConfigRoutingConfig": {
      "id": "OmnichannelIntegrationConfigRoutingConfig",
      "description": "Routing config specify how/who to route app events to a subscriber.",
      "type": "object",
      "properties": {
        "subscriberKey": {
          "description": "The key of the subscriber.",
          "type": "string"
        }
      }
    },
    "OmnichannelOperationMetadata": {
      "id": "OmnichannelOperationMetadata",
      "description": "Represents the metadata of the long-running operation.",
      "type": "object",
      "properties": {
        "createTime": {
          "description": "Output only. The time the operation was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "endTime": {
          "description": "Output only. The time the operation finished running.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "statusMessage": {
          "description": "Output only. Human-readable status of the operation, if any.",
          "readOnly": true,
          "type": "string"
        },
        "requestedCancellation": {
          "description": "Output only. Identifies whether the user has requested cancellation of the operation.",
          "readOnly": true,
          "type": "boolean"
        }
      }
    },
    "OperationMetadata": {
      "id": "OperationMetadata",
      "description": "Represents the metadata of the long-running operation.",
      "type": "object",
      "properties": {
        "createTime": {
          "description": "Output only. The time the operation was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "endTime": {
          "description": "Output only. The time the operation finished running.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "statusMessage": {
          "description": "Output only. Human-readable status of the operation, if any.",
          "readOnly": true,
          "type": "string"
        },
        "requestedCancellation": {
          "description": "Output only. Identifies whether the user has requested cancellation of the operation. Operations that have been cancelled successfully have google.longrunning.Operation.error value with a google.rpc.Status.code of `1`, corresponding to `Code.CANCELLED`.",
          "readOnly": true,
          "type": "boolean"
        }
      }
    },
    "ImportAppResponse": {
      "id": "ImportAppResponse",
      "description": "Response message for AgentService.ImportApp.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The resource name of the app that was imported.",
          "type": "string"
        },
        "warnings": {
          "description": "Warning messages generated during the import process. If errors occur for specific resources, they will not be included in the imported app and the error will be mentioned here.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "ExportAppResponse": {
      "id": "ExportAppResponse",
      "description": "Response message for AgentService.ExportApp.",
      "type": "object",
      "properties": {
        "appContent": {
          "description": "App folder compressed as a zip file.",
          "type": "string",
          "format": "byte"
        },
        "appUri": {
          "description": "The [Google Cloud Storage](https://cloud.google.com/storage/docs/) URI to which the app was exported.",
          "type": "string"
        }
      }
    }
  },
  "name": "ces",
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "version": "v1",
  "basePath": "",
  "endpoints": [
    {
      "endpointUrl": "https://ces.us.rep.googleapis.com/",
      "location": "us",
      "description": "Regional Endpoint"
    },
    {
      "endpointUrl": "https://ces.eu.rep.googleapis.com/",
      "location": "eu",
      "description": "Regional Endpoint"
    }
  ],
  "fullyEncodeReservedExpansion": true,
  "protocol": "rest",
  "baseUrl": "https://ces.googleapis.com/",
  "id": "ces:v1",
  "discoveryVersion": "v1",
  "revision": "20260325",
  "title": "Gemini Enterprise for Customer Experience API"
}
