<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="datalabeling_v1beta1.html">Data Labeling API</a> . <a href="datalabeling_v1beta1.projects.html">projects</a> . <a href="datalabeling_v1beta1.projects.evaluationJobs.html">evaluationJobs</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates an evaluation job.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Stops and deletes an evaluation job.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets an evaluation job by resource name.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all evaluation jobs within a project with possible filters. Pagination is supported.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an evaluation job. You can only update certain fields of the job's EvaluationJobConfig: `humanAnnotationConfig.instruction`, `exampleCount`, and `exampleSamplePercentage`. If you want to change any other aspect of the evaluation job, you must delete the job and create a new one.</p>
<p class="toc_element">
  <code><a href="#pause">pause(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Pauses an evaluation job. Pausing an evaluation job that is already in a `PAUSED` state is a no-op.</p>
<p class="toc_element">
  <code><a href="#resume">resume(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Resumes a paused evaluation job. A deleted evaluation job can't be resumed. Resuming a running or scheduled evaluation job is a no-op.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates an evaluation job.

Args:
  parent: string, Required. Evaluation job resource parent. Format: &quot;projects/{project_id}&quot; (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for CreateEvaluationJob.
  &quot;job&quot;: { # Defines an evaluation job that runs periodically to generate Evaluations. [Creating an evaluation job](/ml-engine/docs/continuous-evaluation/create-job) is the starting point for using continuous evaluation. # Required. The evaluation job to create.
    &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Name of the AnnotationSpecSet describing all the labels that your machine learning model outputs. You must create this resource before you create an evaluation job and provide its name in the following format: &quot;projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}&quot;
    &quot;attempts&quot;: [ # Output only. Every time the evaluation job runs and an error occurs, the failed attempt is appended to this array.
      { # Records a failed evaluation job run.
        &quot;attemptTime&quot;: &quot;A String&quot;,
        &quot;partialFailures&quot;: [ # Details of errors that occurred.
          { # 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).
            &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
            &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
              {
                &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
              },
            ],
            &quot;message&quot;: &quot;A String&quot;, # 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.
          },
        ],
      },
    ],
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. Timestamp of when this evaluation job was created.
    &quot;description&quot;: &quot;A String&quot;, # Required. Description of the job. The description can be up to 25,000 characters long.
    &quot;evaluationJobConfig&quot;: { # Configures specific details of how a continuous evaluation job works. Provide this configuration when you create an EvaluationJob. # Required. Configuration details for the evaluation job.
      &quot;bigqueryImportKeys&quot;: { # Required. Prediction keys that tell Data Labeling Service where to find the data for evaluation in your BigQuery table. When the service samples prediction input and output from your model version and saves it to BigQuery, the data gets stored as JSON strings in the BigQuery table. These keys tell Data Labeling Service how to parse the JSON. You can provide the following entries in this field: * `data_json_key`: the data key for prediction input. You must provide either this key or `reference_json_key`. * `reference_json_key`: the data reference key for prediction input. You must provide either this key or `data_json_key`. * `label_json_key`: the label key for prediction output. Required. * `label_score_json_key`: the score key for prediction output. Required. * `bounding_box_json_key`: the bounding box key for prediction output. Required if your model version perform image object detection. Learn [how to configure prediction keys](/ml-engine/docs/continuous-evaluation/create-job#prediction-keys).
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;boundingPolyConfig&quot;: { # Config for image bounding poly (and bounding box) human labeling task. # Specify this field if your model version performs image object detection (bounding box detection). `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet.
        &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
        &quot;instructionMessage&quot;: &quot;A String&quot;, # Optional. Instruction message showed on contributors UI.
      },
      &quot;evaluationConfig&quot;: { # Configuration details used for calculating evaluation metrics and creating an Evaluation. # Required. Details for calculating evaluation metrics and creating Evaulations. If your model version performs image object detection, you must specify the `boundingBoxEvaluationOptions` field within this configuration. Otherwise, provide an empty object for this configuration.
        &quot;boundingBoxEvaluationOptions&quot;: { # Options regarding evaluation between bounding boxes. # Only specify this field if the related model performs image object detection (`IMAGE_BOUNDING_BOX_ANNOTATION`). Describes how to evaluate bounding boxes.
          &quot;iouThreshold&quot;: 3.14, # Minimum [intersection-over-union (IOU)](/vision/automl/object-detection/docs/evaluate#intersection-over-union) required for 2 bounding boxes to be considered a match. This must be a number between 0 and 1.
        },
      },
      &quot;evaluationJobAlertConfig&quot;: { # Provides details for how an evaluation job sends email alerts based on the results of a run. # Optional. Configuration details for evaluation job alerts. Specify this field if you want to receive email alerts if the evaluation job finds that your predictions have low mean average precision during a run.
        &quot;email&quot;: &quot;A String&quot;, # Required. An email address to send alerts to.
        &quot;minAcceptableMeanAveragePrecision&quot;: 3.14, # Required. A number between 0 and 1 that describes a minimum mean average precision threshold. When the evaluation job runs, if it calculates that your model version&#x27;s predictions from the recent interval have meanAveragePrecision below this threshold, then it sends an alert to your specified email.
      },
      &quot;exampleCount&quot;: 42, # Required. The maximum number of predictions to sample and save to BigQuery during each evaluation interval. This limit overrides `example_sample_percentage`: even if the service has not sampled enough predictions to fulfill `example_sample_perecentage` during an interval, it stops sampling predictions when it meets this limit.
      &quot;exampleSamplePercentage&quot;: 3.14, # Required. Fraction of predictions to sample and save to BigQuery during each evaluation interval. For example, 0.1 means 10% of predictions served by your model version get saved to BigQuery.
      &quot;humanAnnotationConfig&quot;: { # Configuration for how human labeling task should be done. # Optional. Details for human annotation of your data. If you set labelMissingGroundTruth to `true` for this evaluation job, then you must specify this field. If you plan to provide your own ground truth labels, then omit this field. Note that you must create an Instruction resource before you can specify this field. Provide the name of the instruction resource in the `instruction` field within this configuration.
        &quot;annotatedDatasetDescription&quot;: &quot;A String&quot;, # Optional. A human-readable description for AnnotatedDataset. The description can be up to 10000 characters long.
        &quot;annotatedDatasetDisplayName&quot;: &quot;A String&quot;, # Required. A human-readable name for AnnotatedDataset defined by users. Maximum of 64 characters .
        &quot;contributorEmails&quot;: [ # Optional. If you want your own labeling contributors to manage and work on this labeling request, you can set these contributors here. We will give them access to the question types in crowdcompute. Note that these emails must be registered in crowdcompute worker UI: https://crowd-compute.appspot.com/
          &quot;A String&quot;,
        ],
        &quot;instruction&quot;: &quot;A String&quot;, # Required. Instruction resource name.
        &quot;labelGroup&quot;: &quot;A String&quot;, # Optional. A human-readable label used to logically group labeling tasks. This string must match the regular expression `[a-zA-Z\\d_-]{0,128}`.
        &quot;languageCode&quot;: &quot;A String&quot;, # Optional. The Language of this question, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US. Only need to set this when task is language related. For example, French text classification.
        &quot;questionDuration&quot;: &quot;A String&quot;, # Optional. Maximum duration for contributors to answer a question. Maximum is 3600 seconds. Default is 3600 seconds.
        &quot;replicaCount&quot;: 42, # Optional. Replication of questions. Each question will be sent to up to this number of contributors to label. Aggregated answers will be returned. Default is set to 1. For image related labeling, valid values are 1, 3, 5.
        &quot;userEmailAddress&quot;: &quot;A String&quot;, # Email of the user who started the labeling task and should be notified by email. If empty no notification will be sent.
      },
      &quot;imageClassificationConfig&quot;: { # Config for image classification human labeling task. # Specify this field if your model version performs image classification or general classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
        &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one image.
        &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
        &quot;answerAggregationType&quot;: &quot;A String&quot;, # Optional. The type of how to aggregate answers.
      },
      &quot;inputConfig&quot;: { # The configuration of input data, including data type, location, etc. # Rquired. Details for the sampled prediction input. Within this configuration, there are requirements for several fields: * `dataType` must be one of `IMAGE`, `TEXT`, or `GENERAL_DATA`. * `annotationType` must be one of `IMAGE_CLASSIFICATION_ANNOTATION`, `TEXT_CLASSIFICATION_ANNOTATION`, `GENERAL_CLASSIFICATION_ANNOTATION`, or `IMAGE_BOUNDING_BOX_ANNOTATION` (image object detection). * If your machine learning model performs classification, you must specify `classificationMetadata.isMultiLabel`. * You must specify `bigquerySource` (not `gcsSource`).
        &quot;annotationType&quot;: &quot;A String&quot;, # Optional. The type of annotation to be performed on this data. You must specify this field if you are using this InputConfig in an EvaluationJob.
        &quot;bigquerySource&quot;: { # The BigQuery location for input data. If used in an EvaluationJob, this is where the service saves the prediction input and output sampled from the model version. # Source located in BigQuery. You must specify this field if you are using this InputConfig in an EvaluationJob.
          &quot;inputUri&quot;: &quot;A String&quot;, # Required. BigQuery URI to a table, up to 2,000 characters long. If you specify the URI of a table that does not exist, Data Labeling Service creates a table at the URI with the correct schema when you create your EvaluationJob. If you specify the URI of a table that already exists, it must have the [correct schema](/ml-engine/docs/continuous-evaluation/create-job#table-schema). Provide the table URI in the following format: &quot;bq://{your_project_id}/ {your_dataset_name}/{your_table_name}&quot; [Learn more](/ml-engine/docs/continuous-evaluation/create-job#table-schema).
        },
        &quot;classificationMetadata&quot;: { # Metadata for classification annotations. # Optional. Metadata about annotations for the input. You must specify this field if you are using this InputConfig in an EvaluationJob for a model version that performs classification.
          &quot;isMultiLabel&quot;: True or False, # Whether the classification task is multi-label or not.
        },
        &quot;dataType&quot;: &quot;A String&quot;, # Required. Data type must be specifed when user tries to import data.
        &quot;gcsSource&quot;: { # Source of the Cloud Storage file to be imported. # Source located in Cloud Storage.
          &quot;inputUri&quot;: &quot;A String&quot;, # Required. The input URI of source file. This must be a Cloud Storage path (`gs://...`).
          &quot;mimeType&quot;: &quot;A String&quot;, # Required. The format of the source file. Only &quot;text/csv&quot; is supported.
        },
        &quot;textMetadata&quot;: { # Metadata for the text. # Required for text import, as language code must be specified.
          &quot;languageCode&quot;: &quot;A String&quot;, # The language of this text, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US.
        },
      },
      &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Specify this field if your model version performs text classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
        &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
        &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
        &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
          &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
        },
      },
    },
    &quot;labelMissingGroundTruth&quot;: True or False, # Required. Whether you want Data Labeling Service to provide ground truth labels for prediction input. If you want the service to assign human labelers to annotate your data, set this to `true`. If you want to provide your own ground truth labels in the evaluation job&#x27;s BigQuery table, set this to `false`.
    &quot;modelVersion&quot;: &quot;A String&quot;, # Required. The [AI Platform Prediction model version](/ml-engine/docs/prediction-overview) to be evaluated. Prediction input and output is sampled from this model version. When creating an evaluation job, specify the model version in the following format: &quot;projects/{project_id}/models/{model_name}/versions/{version_name}&quot; There can only be one evaluation job per model version.
    &quot;name&quot;: &quot;A String&quot;, # Output only. After you create a job, Data Labeling Service assigns a name to the job with the following format: &quot;projects/{project_id}/evaluationJobs/ {evaluation_job_id}&quot;
    &quot;schedule&quot;: &quot;A String&quot;, # Required. Describes the interval at which the job runs. This interval must be at least 1 day, and it is rounded to the nearest day. For example, if you specify a 50-hour interval, the job runs every 2 days. You can provide the schedule in [crontab format](/scheduler/docs/configuring/cron-job-schedules) or in an [English-like format](/appengine/docs/standard/python/config/cronref#schedule_format). Regardless of what you specify, the job will run at 10:00 AM UTC. Only the interval from this schedule is used, not the specific time of day.
    &quot;state&quot;: &quot;A String&quot;, # Output only. Describes the current state of the job.
  },
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Defines an evaluation job that runs periodically to generate Evaluations. [Creating an evaluation job](/ml-engine/docs/continuous-evaluation/create-job) is the starting point for using continuous evaluation.
  &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Name of the AnnotationSpecSet describing all the labels that your machine learning model outputs. You must create this resource before you create an evaluation job and provide its name in the following format: &quot;projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}&quot;
  &quot;attempts&quot;: [ # Output only. Every time the evaluation job runs and an error occurs, the failed attempt is appended to this array.
    { # Records a failed evaluation job run.
      &quot;attemptTime&quot;: &quot;A String&quot;,
      &quot;partialFailures&quot;: [ # Details of errors that occurred.
        { # 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).
          &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
          &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
            {
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
            },
          ],
          &quot;message&quot;: &quot;A String&quot;, # 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.
        },
      ],
    },
  ],
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Timestamp of when this evaluation job was created.
  &quot;description&quot;: &quot;A String&quot;, # Required. Description of the job. The description can be up to 25,000 characters long.
  &quot;evaluationJobConfig&quot;: { # Configures specific details of how a continuous evaluation job works. Provide this configuration when you create an EvaluationJob. # Required. Configuration details for the evaluation job.
    &quot;bigqueryImportKeys&quot;: { # Required. Prediction keys that tell Data Labeling Service where to find the data for evaluation in your BigQuery table. When the service samples prediction input and output from your model version and saves it to BigQuery, the data gets stored as JSON strings in the BigQuery table. These keys tell Data Labeling Service how to parse the JSON. You can provide the following entries in this field: * `data_json_key`: the data key for prediction input. You must provide either this key or `reference_json_key`. * `reference_json_key`: the data reference key for prediction input. You must provide either this key or `data_json_key`. * `label_json_key`: the label key for prediction output. Required. * `label_score_json_key`: the score key for prediction output. Required. * `bounding_box_json_key`: the bounding box key for prediction output. Required if your model version perform image object detection. Learn [how to configure prediction keys](/ml-engine/docs/continuous-evaluation/create-job#prediction-keys).
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;boundingPolyConfig&quot;: { # Config for image bounding poly (and bounding box) human labeling task. # Specify this field if your model version performs image object detection (bounding box detection). `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet.
      &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
      &quot;instructionMessage&quot;: &quot;A String&quot;, # Optional. Instruction message showed on contributors UI.
    },
    &quot;evaluationConfig&quot;: { # Configuration details used for calculating evaluation metrics and creating an Evaluation. # Required. Details for calculating evaluation metrics and creating Evaulations. If your model version performs image object detection, you must specify the `boundingBoxEvaluationOptions` field within this configuration. Otherwise, provide an empty object for this configuration.
      &quot;boundingBoxEvaluationOptions&quot;: { # Options regarding evaluation between bounding boxes. # Only specify this field if the related model performs image object detection (`IMAGE_BOUNDING_BOX_ANNOTATION`). Describes how to evaluate bounding boxes.
        &quot;iouThreshold&quot;: 3.14, # Minimum [intersection-over-union (IOU)](/vision/automl/object-detection/docs/evaluate#intersection-over-union) required for 2 bounding boxes to be considered a match. This must be a number between 0 and 1.
      },
    },
    &quot;evaluationJobAlertConfig&quot;: { # Provides details for how an evaluation job sends email alerts based on the results of a run. # Optional. Configuration details for evaluation job alerts. Specify this field if you want to receive email alerts if the evaluation job finds that your predictions have low mean average precision during a run.
      &quot;email&quot;: &quot;A String&quot;, # Required. An email address to send alerts to.
      &quot;minAcceptableMeanAveragePrecision&quot;: 3.14, # Required. A number between 0 and 1 that describes a minimum mean average precision threshold. When the evaluation job runs, if it calculates that your model version&#x27;s predictions from the recent interval have meanAveragePrecision below this threshold, then it sends an alert to your specified email.
    },
    &quot;exampleCount&quot;: 42, # Required. The maximum number of predictions to sample and save to BigQuery during each evaluation interval. This limit overrides `example_sample_percentage`: even if the service has not sampled enough predictions to fulfill `example_sample_perecentage` during an interval, it stops sampling predictions when it meets this limit.
    &quot;exampleSamplePercentage&quot;: 3.14, # Required. Fraction of predictions to sample and save to BigQuery during each evaluation interval. For example, 0.1 means 10% of predictions served by your model version get saved to BigQuery.
    &quot;humanAnnotationConfig&quot;: { # Configuration for how human labeling task should be done. # Optional. Details for human annotation of your data. If you set labelMissingGroundTruth to `true` for this evaluation job, then you must specify this field. If you plan to provide your own ground truth labels, then omit this field. Note that you must create an Instruction resource before you can specify this field. Provide the name of the instruction resource in the `instruction` field within this configuration.
      &quot;annotatedDatasetDescription&quot;: &quot;A String&quot;, # Optional. A human-readable description for AnnotatedDataset. The description can be up to 10000 characters long.
      &quot;annotatedDatasetDisplayName&quot;: &quot;A String&quot;, # Required. A human-readable name for AnnotatedDataset defined by users. Maximum of 64 characters .
      &quot;contributorEmails&quot;: [ # Optional. If you want your own labeling contributors to manage and work on this labeling request, you can set these contributors here. We will give them access to the question types in crowdcompute. Note that these emails must be registered in crowdcompute worker UI: https://crowd-compute.appspot.com/
        &quot;A String&quot;,
      ],
      &quot;instruction&quot;: &quot;A String&quot;, # Required. Instruction resource name.
      &quot;labelGroup&quot;: &quot;A String&quot;, # Optional. A human-readable label used to logically group labeling tasks. This string must match the regular expression `[a-zA-Z\\d_-]{0,128}`.
      &quot;languageCode&quot;: &quot;A String&quot;, # Optional. The Language of this question, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US. Only need to set this when task is language related. For example, French text classification.
      &quot;questionDuration&quot;: &quot;A String&quot;, # Optional. Maximum duration for contributors to answer a question. Maximum is 3600 seconds. Default is 3600 seconds.
      &quot;replicaCount&quot;: 42, # Optional. Replication of questions. Each question will be sent to up to this number of contributors to label. Aggregated answers will be returned. Default is set to 1. For image related labeling, valid values are 1, 3, 5.
      &quot;userEmailAddress&quot;: &quot;A String&quot;, # Email of the user who started the labeling task and should be notified by email. If empty no notification will be sent.
    },
    &quot;imageClassificationConfig&quot;: { # Config for image classification human labeling task. # Specify this field if your model version performs image classification or general classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
      &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one image.
      &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
      &quot;answerAggregationType&quot;: &quot;A String&quot;, # Optional. The type of how to aggregate answers.
    },
    &quot;inputConfig&quot;: { # The configuration of input data, including data type, location, etc. # Rquired. Details for the sampled prediction input. Within this configuration, there are requirements for several fields: * `dataType` must be one of `IMAGE`, `TEXT`, or `GENERAL_DATA`. * `annotationType` must be one of `IMAGE_CLASSIFICATION_ANNOTATION`, `TEXT_CLASSIFICATION_ANNOTATION`, `GENERAL_CLASSIFICATION_ANNOTATION`, or `IMAGE_BOUNDING_BOX_ANNOTATION` (image object detection). * If your machine learning model performs classification, you must specify `classificationMetadata.isMultiLabel`. * You must specify `bigquerySource` (not `gcsSource`).
      &quot;annotationType&quot;: &quot;A String&quot;, # Optional. The type of annotation to be performed on this data. You must specify this field if you are using this InputConfig in an EvaluationJob.
      &quot;bigquerySource&quot;: { # The BigQuery location for input data. If used in an EvaluationJob, this is where the service saves the prediction input and output sampled from the model version. # Source located in BigQuery. You must specify this field if you are using this InputConfig in an EvaluationJob.
        &quot;inputUri&quot;: &quot;A String&quot;, # Required. BigQuery URI to a table, up to 2,000 characters long. If you specify the URI of a table that does not exist, Data Labeling Service creates a table at the URI with the correct schema when you create your EvaluationJob. If you specify the URI of a table that already exists, it must have the [correct schema](/ml-engine/docs/continuous-evaluation/create-job#table-schema). Provide the table URI in the following format: &quot;bq://{your_project_id}/ {your_dataset_name}/{your_table_name}&quot; [Learn more](/ml-engine/docs/continuous-evaluation/create-job#table-schema).
      },
      &quot;classificationMetadata&quot;: { # Metadata for classification annotations. # Optional. Metadata about annotations for the input. You must specify this field if you are using this InputConfig in an EvaluationJob for a model version that performs classification.
        &quot;isMultiLabel&quot;: True or False, # Whether the classification task is multi-label or not.
      },
      &quot;dataType&quot;: &quot;A String&quot;, # Required. Data type must be specifed when user tries to import data.
      &quot;gcsSource&quot;: { # Source of the Cloud Storage file to be imported. # Source located in Cloud Storage.
        &quot;inputUri&quot;: &quot;A String&quot;, # Required. The input URI of source file. This must be a Cloud Storage path (`gs://...`).
        &quot;mimeType&quot;: &quot;A String&quot;, # Required. The format of the source file. Only &quot;text/csv&quot; is supported.
      },
      &quot;textMetadata&quot;: { # Metadata for the text. # Required for text import, as language code must be specified.
        &quot;languageCode&quot;: &quot;A String&quot;, # The language of this text, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US.
      },
    },
    &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Specify this field if your model version performs text classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
      &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
      &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
      &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
        &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
      },
    },
  },
  &quot;labelMissingGroundTruth&quot;: True or False, # Required. Whether you want Data Labeling Service to provide ground truth labels for prediction input. If you want the service to assign human labelers to annotate your data, set this to `true`. If you want to provide your own ground truth labels in the evaluation job&#x27;s BigQuery table, set this to `false`.
  &quot;modelVersion&quot;: &quot;A String&quot;, # Required. The [AI Platform Prediction model version](/ml-engine/docs/prediction-overview) to be evaluated. Prediction input and output is sampled from this model version. When creating an evaluation job, specify the model version in the following format: &quot;projects/{project_id}/models/{model_name}/versions/{version_name}&quot; There can only be one evaluation job per model version.
  &quot;name&quot;: &quot;A String&quot;, # Output only. After you create a job, Data Labeling Service assigns a name to the job with the following format: &quot;projects/{project_id}/evaluationJobs/ {evaluation_job_id}&quot;
  &quot;schedule&quot;: &quot;A String&quot;, # Required. Describes the interval at which the job runs. This interval must be at least 1 day, and it is rounded to the nearest day. For example, if you specify a 50-hour interval, the job runs every 2 days. You can provide the schedule in [crontab format](/scheduler/docs/configuring/cron-job-schedules) or in an [English-like format](/appengine/docs/standard/python/config/cronref#schedule_format). Regardless of what you specify, the job will run at 10:00 AM UTC. Only the interval from this schedule is used, not the specific time of day.
  &quot;state&quot;: &quot;A String&quot;, # Output only. Describes the current state of the job.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Stops and deletes an evaluation job.

Args:
  name: string, Required. Name of the evaluation job that is going to be deleted. Format: &quot;projects/{project_id}/evaluationJobs/{evaluation_job_id}&quot; (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # 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); } The JSON representation for `Empty` is empty JSON object `{}`.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets an evaluation job by resource name.

Args:
  name: string, Required. Name of the evaluation job. Format: &quot;projects/{project_id} /evaluationJobs/{evaluation_job_id}&quot; (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Defines an evaluation job that runs periodically to generate Evaluations. [Creating an evaluation job](/ml-engine/docs/continuous-evaluation/create-job) is the starting point for using continuous evaluation.
  &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Name of the AnnotationSpecSet describing all the labels that your machine learning model outputs. You must create this resource before you create an evaluation job and provide its name in the following format: &quot;projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}&quot;
  &quot;attempts&quot;: [ # Output only. Every time the evaluation job runs and an error occurs, the failed attempt is appended to this array.
    { # Records a failed evaluation job run.
      &quot;attemptTime&quot;: &quot;A String&quot;,
      &quot;partialFailures&quot;: [ # Details of errors that occurred.
        { # 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).
          &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
          &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
            {
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
            },
          ],
          &quot;message&quot;: &quot;A String&quot;, # 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.
        },
      ],
    },
  ],
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Timestamp of when this evaluation job was created.
  &quot;description&quot;: &quot;A String&quot;, # Required. Description of the job. The description can be up to 25,000 characters long.
  &quot;evaluationJobConfig&quot;: { # Configures specific details of how a continuous evaluation job works. Provide this configuration when you create an EvaluationJob. # Required. Configuration details for the evaluation job.
    &quot;bigqueryImportKeys&quot;: { # Required. Prediction keys that tell Data Labeling Service where to find the data for evaluation in your BigQuery table. When the service samples prediction input and output from your model version and saves it to BigQuery, the data gets stored as JSON strings in the BigQuery table. These keys tell Data Labeling Service how to parse the JSON. You can provide the following entries in this field: * `data_json_key`: the data key for prediction input. You must provide either this key or `reference_json_key`. * `reference_json_key`: the data reference key for prediction input. You must provide either this key or `data_json_key`. * `label_json_key`: the label key for prediction output. Required. * `label_score_json_key`: the score key for prediction output. Required. * `bounding_box_json_key`: the bounding box key for prediction output. Required if your model version perform image object detection. Learn [how to configure prediction keys](/ml-engine/docs/continuous-evaluation/create-job#prediction-keys).
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;boundingPolyConfig&quot;: { # Config for image bounding poly (and bounding box) human labeling task. # Specify this field if your model version performs image object detection (bounding box detection). `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet.
      &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
      &quot;instructionMessage&quot;: &quot;A String&quot;, # Optional. Instruction message showed on contributors UI.
    },
    &quot;evaluationConfig&quot;: { # Configuration details used for calculating evaluation metrics and creating an Evaluation. # Required. Details for calculating evaluation metrics and creating Evaulations. If your model version performs image object detection, you must specify the `boundingBoxEvaluationOptions` field within this configuration. Otherwise, provide an empty object for this configuration.
      &quot;boundingBoxEvaluationOptions&quot;: { # Options regarding evaluation between bounding boxes. # Only specify this field if the related model performs image object detection (`IMAGE_BOUNDING_BOX_ANNOTATION`). Describes how to evaluate bounding boxes.
        &quot;iouThreshold&quot;: 3.14, # Minimum [intersection-over-union (IOU)](/vision/automl/object-detection/docs/evaluate#intersection-over-union) required for 2 bounding boxes to be considered a match. This must be a number between 0 and 1.
      },
    },
    &quot;evaluationJobAlertConfig&quot;: { # Provides details for how an evaluation job sends email alerts based on the results of a run. # Optional. Configuration details for evaluation job alerts. Specify this field if you want to receive email alerts if the evaluation job finds that your predictions have low mean average precision during a run.
      &quot;email&quot;: &quot;A String&quot;, # Required. An email address to send alerts to.
      &quot;minAcceptableMeanAveragePrecision&quot;: 3.14, # Required. A number between 0 and 1 that describes a minimum mean average precision threshold. When the evaluation job runs, if it calculates that your model version&#x27;s predictions from the recent interval have meanAveragePrecision below this threshold, then it sends an alert to your specified email.
    },
    &quot;exampleCount&quot;: 42, # Required. The maximum number of predictions to sample and save to BigQuery during each evaluation interval. This limit overrides `example_sample_percentage`: even if the service has not sampled enough predictions to fulfill `example_sample_perecentage` during an interval, it stops sampling predictions when it meets this limit.
    &quot;exampleSamplePercentage&quot;: 3.14, # Required. Fraction of predictions to sample and save to BigQuery during each evaluation interval. For example, 0.1 means 10% of predictions served by your model version get saved to BigQuery.
    &quot;humanAnnotationConfig&quot;: { # Configuration for how human labeling task should be done. # Optional. Details for human annotation of your data. If you set labelMissingGroundTruth to `true` for this evaluation job, then you must specify this field. If you plan to provide your own ground truth labels, then omit this field. Note that you must create an Instruction resource before you can specify this field. Provide the name of the instruction resource in the `instruction` field within this configuration.
      &quot;annotatedDatasetDescription&quot;: &quot;A String&quot;, # Optional. A human-readable description for AnnotatedDataset. The description can be up to 10000 characters long.
      &quot;annotatedDatasetDisplayName&quot;: &quot;A String&quot;, # Required. A human-readable name for AnnotatedDataset defined by users. Maximum of 64 characters .
      &quot;contributorEmails&quot;: [ # Optional. If you want your own labeling contributors to manage and work on this labeling request, you can set these contributors here. We will give them access to the question types in crowdcompute. Note that these emails must be registered in crowdcompute worker UI: https://crowd-compute.appspot.com/
        &quot;A String&quot;,
      ],
      &quot;instruction&quot;: &quot;A String&quot;, # Required. Instruction resource name.
      &quot;labelGroup&quot;: &quot;A String&quot;, # Optional. A human-readable label used to logically group labeling tasks. This string must match the regular expression `[a-zA-Z\\d_-]{0,128}`.
      &quot;languageCode&quot;: &quot;A String&quot;, # Optional. The Language of this question, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US. Only need to set this when task is language related. For example, French text classification.
      &quot;questionDuration&quot;: &quot;A String&quot;, # Optional. Maximum duration for contributors to answer a question. Maximum is 3600 seconds. Default is 3600 seconds.
      &quot;replicaCount&quot;: 42, # Optional. Replication of questions. Each question will be sent to up to this number of contributors to label. Aggregated answers will be returned. Default is set to 1. For image related labeling, valid values are 1, 3, 5.
      &quot;userEmailAddress&quot;: &quot;A String&quot;, # Email of the user who started the labeling task and should be notified by email. If empty no notification will be sent.
    },
    &quot;imageClassificationConfig&quot;: { # Config for image classification human labeling task. # Specify this field if your model version performs image classification or general classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
      &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one image.
      &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
      &quot;answerAggregationType&quot;: &quot;A String&quot;, # Optional. The type of how to aggregate answers.
    },
    &quot;inputConfig&quot;: { # The configuration of input data, including data type, location, etc. # Rquired. Details for the sampled prediction input. Within this configuration, there are requirements for several fields: * `dataType` must be one of `IMAGE`, `TEXT`, or `GENERAL_DATA`. * `annotationType` must be one of `IMAGE_CLASSIFICATION_ANNOTATION`, `TEXT_CLASSIFICATION_ANNOTATION`, `GENERAL_CLASSIFICATION_ANNOTATION`, or `IMAGE_BOUNDING_BOX_ANNOTATION` (image object detection). * If your machine learning model performs classification, you must specify `classificationMetadata.isMultiLabel`. * You must specify `bigquerySource` (not `gcsSource`).
      &quot;annotationType&quot;: &quot;A String&quot;, # Optional. The type of annotation to be performed on this data. You must specify this field if you are using this InputConfig in an EvaluationJob.
      &quot;bigquerySource&quot;: { # The BigQuery location for input data. If used in an EvaluationJob, this is where the service saves the prediction input and output sampled from the model version. # Source located in BigQuery. You must specify this field if you are using this InputConfig in an EvaluationJob.
        &quot;inputUri&quot;: &quot;A String&quot;, # Required. BigQuery URI to a table, up to 2,000 characters long. If you specify the URI of a table that does not exist, Data Labeling Service creates a table at the URI with the correct schema when you create your EvaluationJob. If you specify the URI of a table that already exists, it must have the [correct schema](/ml-engine/docs/continuous-evaluation/create-job#table-schema). Provide the table URI in the following format: &quot;bq://{your_project_id}/ {your_dataset_name}/{your_table_name}&quot; [Learn more](/ml-engine/docs/continuous-evaluation/create-job#table-schema).
      },
      &quot;classificationMetadata&quot;: { # Metadata for classification annotations. # Optional. Metadata about annotations for the input. You must specify this field if you are using this InputConfig in an EvaluationJob for a model version that performs classification.
        &quot;isMultiLabel&quot;: True or False, # Whether the classification task is multi-label or not.
      },
      &quot;dataType&quot;: &quot;A String&quot;, # Required. Data type must be specifed when user tries to import data.
      &quot;gcsSource&quot;: { # Source of the Cloud Storage file to be imported. # Source located in Cloud Storage.
        &quot;inputUri&quot;: &quot;A String&quot;, # Required. The input URI of source file. This must be a Cloud Storage path (`gs://...`).
        &quot;mimeType&quot;: &quot;A String&quot;, # Required. The format of the source file. Only &quot;text/csv&quot; is supported.
      },
      &quot;textMetadata&quot;: { # Metadata for the text. # Required for text import, as language code must be specified.
        &quot;languageCode&quot;: &quot;A String&quot;, # The language of this text, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US.
      },
    },
    &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Specify this field if your model version performs text classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
      &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
      &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
      &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
        &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
      },
    },
  },
  &quot;labelMissingGroundTruth&quot;: True or False, # Required. Whether you want Data Labeling Service to provide ground truth labels for prediction input. If you want the service to assign human labelers to annotate your data, set this to `true`. If you want to provide your own ground truth labels in the evaluation job&#x27;s BigQuery table, set this to `false`.
  &quot;modelVersion&quot;: &quot;A String&quot;, # Required. The [AI Platform Prediction model version](/ml-engine/docs/prediction-overview) to be evaluated. Prediction input and output is sampled from this model version. When creating an evaluation job, specify the model version in the following format: &quot;projects/{project_id}/models/{model_name}/versions/{version_name}&quot; There can only be one evaluation job per model version.
  &quot;name&quot;: &quot;A String&quot;, # Output only. After you create a job, Data Labeling Service assigns a name to the job with the following format: &quot;projects/{project_id}/evaluationJobs/ {evaluation_job_id}&quot;
  &quot;schedule&quot;: &quot;A String&quot;, # Required. Describes the interval at which the job runs. This interval must be at least 1 day, and it is rounded to the nearest day. For example, if you specify a 50-hour interval, the job runs every 2 days. You can provide the schedule in [crontab format](/scheduler/docs/configuring/cron-job-schedules) or in an [English-like format](/appengine/docs/standard/python/config/cronref#schedule_format). Regardless of what you specify, the job will run at 10:00 AM UTC. Only the interval from this schedule is used, not the specific time of day.
  &quot;state&quot;: &quot;A String&quot;, # Output only. Describes the current state of the job.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists all evaluation jobs within a project with possible filters. Pagination is supported.

Args:
  parent: string, Required. Evaluation job resource parent. Format: &quot;projects/{project_id}&quot; (required)
  filter: string, Optional. You can filter the jobs to list by model_id (also known as model_name, as described in EvaluationJob.modelVersion) or by evaluation job state (as described in EvaluationJob.state). To filter by both criteria, use the `AND` operator or the `OR` operator. For example, you can use the following string for your filter: &quot;evaluation_job.model_id = {model_name} AND evaluation_job.state = {evaluation_job_state}&quot;
  pageSize: integer, Optional. Requested page size. Server may return fewer results than requested. Default value is 100.
  pageToken: string, Optional. A token identifying a page of results for the server to return. Typically obtained by the nextPageToken in the response to the previous request. The request returns the first page if this is empty.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Results for listing evaluation jobs.
  &quot;evaluationJobs&quot;: [ # The list of evaluation jobs to return.
    { # Defines an evaluation job that runs periodically to generate Evaluations. [Creating an evaluation job](/ml-engine/docs/continuous-evaluation/create-job) is the starting point for using continuous evaluation.
      &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Name of the AnnotationSpecSet describing all the labels that your machine learning model outputs. You must create this resource before you create an evaluation job and provide its name in the following format: &quot;projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}&quot;
      &quot;attempts&quot;: [ # Output only. Every time the evaluation job runs and an error occurs, the failed attempt is appended to this array.
        { # Records a failed evaluation job run.
          &quot;attemptTime&quot;: &quot;A String&quot;,
          &quot;partialFailures&quot;: [ # Details of errors that occurred.
            { # 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).
              &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
              &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
                {
                  &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
                },
              ],
              &quot;message&quot;: &quot;A String&quot;, # 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.
            },
          ],
        },
      ],
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Timestamp of when this evaluation job was created.
      &quot;description&quot;: &quot;A String&quot;, # Required. Description of the job. The description can be up to 25,000 characters long.
      &quot;evaluationJobConfig&quot;: { # Configures specific details of how a continuous evaluation job works. Provide this configuration when you create an EvaluationJob. # Required. Configuration details for the evaluation job.
        &quot;bigqueryImportKeys&quot;: { # Required. Prediction keys that tell Data Labeling Service where to find the data for evaluation in your BigQuery table. When the service samples prediction input and output from your model version and saves it to BigQuery, the data gets stored as JSON strings in the BigQuery table. These keys tell Data Labeling Service how to parse the JSON. You can provide the following entries in this field: * `data_json_key`: the data key for prediction input. You must provide either this key or `reference_json_key`. * `reference_json_key`: the data reference key for prediction input. You must provide either this key or `data_json_key`. * `label_json_key`: the label key for prediction output. Required. * `label_score_json_key`: the score key for prediction output. Required. * `bounding_box_json_key`: the bounding box key for prediction output. Required if your model version perform image object detection. Learn [how to configure prediction keys](/ml-engine/docs/continuous-evaluation/create-job#prediction-keys).
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;boundingPolyConfig&quot;: { # Config for image bounding poly (and bounding box) human labeling task. # Specify this field if your model version performs image object detection (bounding box detection). `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet.
          &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
          &quot;instructionMessage&quot;: &quot;A String&quot;, # Optional. Instruction message showed on contributors UI.
        },
        &quot;evaluationConfig&quot;: { # Configuration details used for calculating evaluation metrics and creating an Evaluation. # Required. Details for calculating evaluation metrics and creating Evaulations. If your model version performs image object detection, you must specify the `boundingBoxEvaluationOptions` field within this configuration. Otherwise, provide an empty object for this configuration.
          &quot;boundingBoxEvaluationOptions&quot;: { # Options regarding evaluation between bounding boxes. # Only specify this field if the related model performs image object detection (`IMAGE_BOUNDING_BOX_ANNOTATION`). Describes how to evaluate bounding boxes.
            &quot;iouThreshold&quot;: 3.14, # Minimum [intersection-over-union (IOU)](/vision/automl/object-detection/docs/evaluate#intersection-over-union) required for 2 bounding boxes to be considered a match. This must be a number between 0 and 1.
          },
        },
        &quot;evaluationJobAlertConfig&quot;: { # Provides details for how an evaluation job sends email alerts based on the results of a run. # Optional. Configuration details for evaluation job alerts. Specify this field if you want to receive email alerts if the evaluation job finds that your predictions have low mean average precision during a run.
          &quot;email&quot;: &quot;A String&quot;, # Required. An email address to send alerts to.
          &quot;minAcceptableMeanAveragePrecision&quot;: 3.14, # Required. A number between 0 and 1 that describes a minimum mean average precision threshold. When the evaluation job runs, if it calculates that your model version&#x27;s predictions from the recent interval have meanAveragePrecision below this threshold, then it sends an alert to your specified email.
        },
        &quot;exampleCount&quot;: 42, # Required. The maximum number of predictions to sample and save to BigQuery during each evaluation interval. This limit overrides `example_sample_percentage`: even if the service has not sampled enough predictions to fulfill `example_sample_perecentage` during an interval, it stops sampling predictions when it meets this limit.
        &quot;exampleSamplePercentage&quot;: 3.14, # Required. Fraction of predictions to sample and save to BigQuery during each evaluation interval. For example, 0.1 means 10% of predictions served by your model version get saved to BigQuery.
        &quot;humanAnnotationConfig&quot;: { # Configuration for how human labeling task should be done. # Optional. Details for human annotation of your data. If you set labelMissingGroundTruth to `true` for this evaluation job, then you must specify this field. If you plan to provide your own ground truth labels, then omit this field. Note that you must create an Instruction resource before you can specify this field. Provide the name of the instruction resource in the `instruction` field within this configuration.
          &quot;annotatedDatasetDescription&quot;: &quot;A String&quot;, # Optional. A human-readable description for AnnotatedDataset. The description can be up to 10000 characters long.
          &quot;annotatedDatasetDisplayName&quot;: &quot;A String&quot;, # Required. A human-readable name for AnnotatedDataset defined by users. Maximum of 64 characters .
          &quot;contributorEmails&quot;: [ # Optional. If you want your own labeling contributors to manage and work on this labeling request, you can set these contributors here. We will give them access to the question types in crowdcompute. Note that these emails must be registered in crowdcompute worker UI: https://crowd-compute.appspot.com/
            &quot;A String&quot;,
          ],
          &quot;instruction&quot;: &quot;A String&quot;, # Required. Instruction resource name.
          &quot;labelGroup&quot;: &quot;A String&quot;, # Optional. A human-readable label used to logically group labeling tasks. This string must match the regular expression `[a-zA-Z\\d_-]{0,128}`.
          &quot;languageCode&quot;: &quot;A String&quot;, # Optional. The Language of this question, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US. Only need to set this when task is language related. For example, French text classification.
          &quot;questionDuration&quot;: &quot;A String&quot;, # Optional. Maximum duration for contributors to answer a question. Maximum is 3600 seconds. Default is 3600 seconds.
          &quot;replicaCount&quot;: 42, # Optional. Replication of questions. Each question will be sent to up to this number of contributors to label. Aggregated answers will be returned. Default is set to 1. For image related labeling, valid values are 1, 3, 5.
          &quot;userEmailAddress&quot;: &quot;A String&quot;, # Email of the user who started the labeling task and should be notified by email. If empty no notification will be sent.
        },
        &quot;imageClassificationConfig&quot;: { # Config for image classification human labeling task. # Specify this field if your model version performs image classification or general classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
          &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one image.
          &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
          &quot;answerAggregationType&quot;: &quot;A String&quot;, # Optional. The type of how to aggregate answers.
        },
        &quot;inputConfig&quot;: { # The configuration of input data, including data type, location, etc. # Rquired. Details for the sampled prediction input. Within this configuration, there are requirements for several fields: * `dataType` must be one of `IMAGE`, `TEXT`, or `GENERAL_DATA`. * `annotationType` must be one of `IMAGE_CLASSIFICATION_ANNOTATION`, `TEXT_CLASSIFICATION_ANNOTATION`, `GENERAL_CLASSIFICATION_ANNOTATION`, or `IMAGE_BOUNDING_BOX_ANNOTATION` (image object detection). * If your machine learning model performs classification, you must specify `classificationMetadata.isMultiLabel`. * You must specify `bigquerySource` (not `gcsSource`).
          &quot;annotationType&quot;: &quot;A String&quot;, # Optional. The type of annotation to be performed on this data. You must specify this field if you are using this InputConfig in an EvaluationJob.
          &quot;bigquerySource&quot;: { # The BigQuery location for input data. If used in an EvaluationJob, this is where the service saves the prediction input and output sampled from the model version. # Source located in BigQuery. You must specify this field if you are using this InputConfig in an EvaluationJob.
            &quot;inputUri&quot;: &quot;A String&quot;, # Required. BigQuery URI to a table, up to 2,000 characters long. If you specify the URI of a table that does not exist, Data Labeling Service creates a table at the URI with the correct schema when you create your EvaluationJob. If you specify the URI of a table that already exists, it must have the [correct schema](/ml-engine/docs/continuous-evaluation/create-job#table-schema). Provide the table URI in the following format: &quot;bq://{your_project_id}/ {your_dataset_name}/{your_table_name}&quot; [Learn more](/ml-engine/docs/continuous-evaluation/create-job#table-schema).
          },
          &quot;classificationMetadata&quot;: { # Metadata for classification annotations. # Optional. Metadata about annotations for the input. You must specify this field if you are using this InputConfig in an EvaluationJob for a model version that performs classification.
            &quot;isMultiLabel&quot;: True or False, # Whether the classification task is multi-label or not.
          },
          &quot;dataType&quot;: &quot;A String&quot;, # Required. Data type must be specifed when user tries to import data.
          &quot;gcsSource&quot;: { # Source of the Cloud Storage file to be imported. # Source located in Cloud Storage.
            &quot;inputUri&quot;: &quot;A String&quot;, # Required. The input URI of source file. This must be a Cloud Storage path (`gs://...`).
            &quot;mimeType&quot;: &quot;A String&quot;, # Required. The format of the source file. Only &quot;text/csv&quot; is supported.
          },
          &quot;textMetadata&quot;: { # Metadata for the text. # Required for text import, as language code must be specified.
            &quot;languageCode&quot;: &quot;A String&quot;, # The language of this text, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US.
          },
        },
        &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Specify this field if your model version performs text classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
          &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
          &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
          &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
            &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
          },
        },
      },
      &quot;labelMissingGroundTruth&quot;: True or False, # Required. Whether you want Data Labeling Service to provide ground truth labels for prediction input. If you want the service to assign human labelers to annotate your data, set this to `true`. If you want to provide your own ground truth labels in the evaluation job&#x27;s BigQuery table, set this to `false`.
      &quot;modelVersion&quot;: &quot;A String&quot;, # Required. The [AI Platform Prediction model version](/ml-engine/docs/prediction-overview) to be evaluated. Prediction input and output is sampled from this model version. When creating an evaluation job, specify the model version in the following format: &quot;projects/{project_id}/models/{model_name}/versions/{version_name}&quot; There can only be one evaluation job per model version.
      &quot;name&quot;: &quot;A String&quot;, # Output only. After you create a job, Data Labeling Service assigns a name to the job with the following format: &quot;projects/{project_id}/evaluationJobs/ {evaluation_job_id}&quot;
      &quot;schedule&quot;: &quot;A String&quot;, # Required. Describes the interval at which the job runs. This interval must be at least 1 day, and it is rounded to the nearest day. For example, if you specify a 50-hour interval, the job runs every 2 days. You can provide the schedule in [crontab format](/scheduler/docs/configuring/cron-job-schedules) or in an [English-like format](/appengine/docs/standard/python/config/cronref#schedule_format). Regardless of what you specify, the job will run at 10:00 AM UTC. Only the interval from this schedule is used, not the specific time of day.
      &quot;state&quot;: &quot;A String&quot;, # Output only. Describes the current state of the job.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve next page of results.
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates an evaluation job. You can only update certain fields of the job&#x27;s EvaluationJobConfig: `humanAnnotationConfig.instruction`, `exampleCount`, and `exampleSamplePercentage`. If you want to change any other aspect of the evaluation job, you must delete the job and create a new one.

Args:
  name: string, Output only. After you create a job, Data Labeling Service assigns a name to the job with the following format: &quot;projects/{project_id}/evaluationJobs/ {evaluation_job_id}&quot; (required)
  body: object, The request body.
    The object takes the form of:

{ # Defines an evaluation job that runs periodically to generate Evaluations. [Creating an evaluation job](/ml-engine/docs/continuous-evaluation/create-job) is the starting point for using continuous evaluation.
  &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Name of the AnnotationSpecSet describing all the labels that your machine learning model outputs. You must create this resource before you create an evaluation job and provide its name in the following format: &quot;projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}&quot;
  &quot;attempts&quot;: [ # Output only. Every time the evaluation job runs and an error occurs, the failed attempt is appended to this array.
    { # Records a failed evaluation job run.
      &quot;attemptTime&quot;: &quot;A String&quot;,
      &quot;partialFailures&quot;: [ # Details of errors that occurred.
        { # 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).
          &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
          &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
            {
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
            },
          ],
          &quot;message&quot;: &quot;A String&quot;, # 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.
        },
      ],
    },
  ],
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Timestamp of when this evaluation job was created.
  &quot;description&quot;: &quot;A String&quot;, # Required. Description of the job. The description can be up to 25,000 characters long.
  &quot;evaluationJobConfig&quot;: { # Configures specific details of how a continuous evaluation job works. Provide this configuration when you create an EvaluationJob. # Required. Configuration details for the evaluation job.
    &quot;bigqueryImportKeys&quot;: { # Required. Prediction keys that tell Data Labeling Service where to find the data for evaluation in your BigQuery table. When the service samples prediction input and output from your model version and saves it to BigQuery, the data gets stored as JSON strings in the BigQuery table. These keys tell Data Labeling Service how to parse the JSON. You can provide the following entries in this field: * `data_json_key`: the data key for prediction input. You must provide either this key or `reference_json_key`. * `reference_json_key`: the data reference key for prediction input. You must provide either this key or `data_json_key`. * `label_json_key`: the label key for prediction output. Required. * `label_score_json_key`: the score key for prediction output. Required. * `bounding_box_json_key`: the bounding box key for prediction output. Required if your model version perform image object detection. Learn [how to configure prediction keys](/ml-engine/docs/continuous-evaluation/create-job#prediction-keys).
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;boundingPolyConfig&quot;: { # Config for image bounding poly (and bounding box) human labeling task. # Specify this field if your model version performs image object detection (bounding box detection). `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet.
      &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
      &quot;instructionMessage&quot;: &quot;A String&quot;, # Optional. Instruction message showed on contributors UI.
    },
    &quot;evaluationConfig&quot;: { # Configuration details used for calculating evaluation metrics and creating an Evaluation. # Required. Details for calculating evaluation metrics and creating Evaulations. If your model version performs image object detection, you must specify the `boundingBoxEvaluationOptions` field within this configuration. Otherwise, provide an empty object for this configuration.
      &quot;boundingBoxEvaluationOptions&quot;: { # Options regarding evaluation between bounding boxes. # Only specify this field if the related model performs image object detection (`IMAGE_BOUNDING_BOX_ANNOTATION`). Describes how to evaluate bounding boxes.
        &quot;iouThreshold&quot;: 3.14, # Minimum [intersection-over-union (IOU)](/vision/automl/object-detection/docs/evaluate#intersection-over-union) required for 2 bounding boxes to be considered a match. This must be a number between 0 and 1.
      },
    },
    &quot;evaluationJobAlertConfig&quot;: { # Provides details for how an evaluation job sends email alerts based on the results of a run. # Optional. Configuration details for evaluation job alerts. Specify this field if you want to receive email alerts if the evaluation job finds that your predictions have low mean average precision during a run.
      &quot;email&quot;: &quot;A String&quot;, # Required. An email address to send alerts to.
      &quot;minAcceptableMeanAveragePrecision&quot;: 3.14, # Required. A number between 0 and 1 that describes a minimum mean average precision threshold. When the evaluation job runs, if it calculates that your model version&#x27;s predictions from the recent interval have meanAveragePrecision below this threshold, then it sends an alert to your specified email.
    },
    &quot;exampleCount&quot;: 42, # Required. The maximum number of predictions to sample and save to BigQuery during each evaluation interval. This limit overrides `example_sample_percentage`: even if the service has not sampled enough predictions to fulfill `example_sample_perecentage` during an interval, it stops sampling predictions when it meets this limit.
    &quot;exampleSamplePercentage&quot;: 3.14, # Required. Fraction of predictions to sample and save to BigQuery during each evaluation interval. For example, 0.1 means 10% of predictions served by your model version get saved to BigQuery.
    &quot;humanAnnotationConfig&quot;: { # Configuration for how human labeling task should be done. # Optional. Details for human annotation of your data. If you set labelMissingGroundTruth to `true` for this evaluation job, then you must specify this field. If you plan to provide your own ground truth labels, then omit this field. Note that you must create an Instruction resource before you can specify this field. Provide the name of the instruction resource in the `instruction` field within this configuration.
      &quot;annotatedDatasetDescription&quot;: &quot;A String&quot;, # Optional. A human-readable description for AnnotatedDataset. The description can be up to 10000 characters long.
      &quot;annotatedDatasetDisplayName&quot;: &quot;A String&quot;, # Required. A human-readable name for AnnotatedDataset defined by users. Maximum of 64 characters .
      &quot;contributorEmails&quot;: [ # Optional. If you want your own labeling contributors to manage and work on this labeling request, you can set these contributors here. We will give them access to the question types in crowdcompute. Note that these emails must be registered in crowdcompute worker UI: https://crowd-compute.appspot.com/
        &quot;A String&quot;,
      ],
      &quot;instruction&quot;: &quot;A String&quot;, # Required. Instruction resource name.
      &quot;labelGroup&quot;: &quot;A String&quot;, # Optional. A human-readable label used to logically group labeling tasks. This string must match the regular expression `[a-zA-Z\\d_-]{0,128}`.
      &quot;languageCode&quot;: &quot;A String&quot;, # Optional. The Language of this question, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US. Only need to set this when task is language related. For example, French text classification.
      &quot;questionDuration&quot;: &quot;A String&quot;, # Optional. Maximum duration for contributors to answer a question. Maximum is 3600 seconds. Default is 3600 seconds.
      &quot;replicaCount&quot;: 42, # Optional. Replication of questions. Each question will be sent to up to this number of contributors to label. Aggregated answers will be returned. Default is set to 1. For image related labeling, valid values are 1, 3, 5.
      &quot;userEmailAddress&quot;: &quot;A String&quot;, # Email of the user who started the labeling task and should be notified by email. If empty no notification will be sent.
    },
    &quot;imageClassificationConfig&quot;: { # Config for image classification human labeling task. # Specify this field if your model version performs image classification or general classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
      &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one image.
      &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
      &quot;answerAggregationType&quot;: &quot;A String&quot;, # Optional. The type of how to aggregate answers.
    },
    &quot;inputConfig&quot;: { # The configuration of input data, including data type, location, etc. # Rquired. Details for the sampled prediction input. Within this configuration, there are requirements for several fields: * `dataType` must be one of `IMAGE`, `TEXT`, or `GENERAL_DATA`. * `annotationType` must be one of `IMAGE_CLASSIFICATION_ANNOTATION`, `TEXT_CLASSIFICATION_ANNOTATION`, `GENERAL_CLASSIFICATION_ANNOTATION`, or `IMAGE_BOUNDING_BOX_ANNOTATION` (image object detection). * If your machine learning model performs classification, you must specify `classificationMetadata.isMultiLabel`. * You must specify `bigquerySource` (not `gcsSource`).
      &quot;annotationType&quot;: &quot;A String&quot;, # Optional. The type of annotation to be performed on this data. You must specify this field if you are using this InputConfig in an EvaluationJob.
      &quot;bigquerySource&quot;: { # The BigQuery location for input data. If used in an EvaluationJob, this is where the service saves the prediction input and output sampled from the model version. # Source located in BigQuery. You must specify this field if you are using this InputConfig in an EvaluationJob.
        &quot;inputUri&quot;: &quot;A String&quot;, # Required. BigQuery URI to a table, up to 2,000 characters long. If you specify the URI of a table that does not exist, Data Labeling Service creates a table at the URI with the correct schema when you create your EvaluationJob. If you specify the URI of a table that already exists, it must have the [correct schema](/ml-engine/docs/continuous-evaluation/create-job#table-schema). Provide the table URI in the following format: &quot;bq://{your_project_id}/ {your_dataset_name}/{your_table_name}&quot; [Learn more](/ml-engine/docs/continuous-evaluation/create-job#table-schema).
      },
      &quot;classificationMetadata&quot;: { # Metadata for classification annotations. # Optional. Metadata about annotations for the input. You must specify this field if you are using this InputConfig in an EvaluationJob for a model version that performs classification.
        &quot;isMultiLabel&quot;: True or False, # Whether the classification task is multi-label or not.
      },
      &quot;dataType&quot;: &quot;A String&quot;, # Required. Data type must be specifed when user tries to import data.
      &quot;gcsSource&quot;: { # Source of the Cloud Storage file to be imported. # Source located in Cloud Storage.
        &quot;inputUri&quot;: &quot;A String&quot;, # Required. The input URI of source file. This must be a Cloud Storage path (`gs://...`).
        &quot;mimeType&quot;: &quot;A String&quot;, # Required. The format of the source file. Only &quot;text/csv&quot; is supported.
      },
      &quot;textMetadata&quot;: { # Metadata for the text. # Required for text import, as language code must be specified.
        &quot;languageCode&quot;: &quot;A String&quot;, # The language of this text, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US.
      },
    },
    &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Specify this field if your model version performs text classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
      &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
      &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
      &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
        &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
      },
    },
  },
  &quot;labelMissingGroundTruth&quot;: True or False, # Required. Whether you want Data Labeling Service to provide ground truth labels for prediction input. If you want the service to assign human labelers to annotate your data, set this to `true`. If you want to provide your own ground truth labels in the evaluation job&#x27;s BigQuery table, set this to `false`.
  &quot;modelVersion&quot;: &quot;A String&quot;, # Required. The [AI Platform Prediction model version](/ml-engine/docs/prediction-overview) to be evaluated. Prediction input and output is sampled from this model version. When creating an evaluation job, specify the model version in the following format: &quot;projects/{project_id}/models/{model_name}/versions/{version_name}&quot; There can only be one evaluation job per model version.
  &quot;name&quot;: &quot;A String&quot;, # Output only. After you create a job, Data Labeling Service assigns a name to the job with the following format: &quot;projects/{project_id}/evaluationJobs/ {evaluation_job_id}&quot;
  &quot;schedule&quot;: &quot;A String&quot;, # Required. Describes the interval at which the job runs. This interval must be at least 1 day, and it is rounded to the nearest day. For example, if you specify a 50-hour interval, the job runs every 2 days. You can provide the schedule in [crontab format](/scheduler/docs/configuring/cron-job-schedules) or in an [English-like format](/appengine/docs/standard/python/config/cronref#schedule_format). Regardless of what you specify, the job will run at 10:00 AM UTC. Only the interval from this schedule is used, not the specific time of day.
  &quot;state&quot;: &quot;A String&quot;, # Output only. Describes the current state of the job.
}

  updateMask: string, Optional. Mask for which fields to update. You can only provide the following fields: * `evaluationJobConfig.humanAnnotationConfig.instruction` * `evaluationJobConfig.exampleCount` * `evaluationJobConfig.exampleSamplePercentage` You can provide more than one of these fields by separating them with commas.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Defines an evaluation job that runs periodically to generate Evaluations. [Creating an evaluation job](/ml-engine/docs/continuous-evaluation/create-job) is the starting point for using continuous evaluation.
  &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Name of the AnnotationSpecSet describing all the labels that your machine learning model outputs. You must create this resource before you create an evaluation job and provide its name in the following format: &quot;projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}&quot;
  &quot;attempts&quot;: [ # Output only. Every time the evaluation job runs and an error occurs, the failed attempt is appended to this array.
    { # Records a failed evaluation job run.
      &quot;attemptTime&quot;: &quot;A String&quot;,
      &quot;partialFailures&quot;: [ # Details of errors that occurred.
        { # 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).
          &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
          &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
            {
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
            },
          ],
          &quot;message&quot;: &quot;A String&quot;, # 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.
        },
      ],
    },
  ],
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Timestamp of when this evaluation job was created.
  &quot;description&quot;: &quot;A String&quot;, # Required. Description of the job. The description can be up to 25,000 characters long.
  &quot;evaluationJobConfig&quot;: { # Configures specific details of how a continuous evaluation job works. Provide this configuration when you create an EvaluationJob. # Required. Configuration details for the evaluation job.
    &quot;bigqueryImportKeys&quot;: { # Required. Prediction keys that tell Data Labeling Service where to find the data for evaluation in your BigQuery table. When the service samples prediction input and output from your model version and saves it to BigQuery, the data gets stored as JSON strings in the BigQuery table. These keys tell Data Labeling Service how to parse the JSON. You can provide the following entries in this field: * `data_json_key`: the data key for prediction input. You must provide either this key or `reference_json_key`. * `reference_json_key`: the data reference key for prediction input. You must provide either this key or `data_json_key`. * `label_json_key`: the label key for prediction output. Required. * `label_score_json_key`: the score key for prediction output. Required. * `bounding_box_json_key`: the bounding box key for prediction output. Required if your model version perform image object detection. Learn [how to configure prediction keys](/ml-engine/docs/continuous-evaluation/create-job#prediction-keys).
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;boundingPolyConfig&quot;: { # Config for image bounding poly (and bounding box) human labeling task. # Specify this field if your model version performs image object detection (bounding box detection). `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet.
      &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
      &quot;instructionMessage&quot;: &quot;A String&quot;, # Optional. Instruction message showed on contributors UI.
    },
    &quot;evaluationConfig&quot;: { # Configuration details used for calculating evaluation metrics and creating an Evaluation. # Required. Details for calculating evaluation metrics and creating Evaulations. If your model version performs image object detection, you must specify the `boundingBoxEvaluationOptions` field within this configuration. Otherwise, provide an empty object for this configuration.
      &quot;boundingBoxEvaluationOptions&quot;: { # Options regarding evaluation between bounding boxes. # Only specify this field if the related model performs image object detection (`IMAGE_BOUNDING_BOX_ANNOTATION`). Describes how to evaluate bounding boxes.
        &quot;iouThreshold&quot;: 3.14, # Minimum [intersection-over-union (IOU)](/vision/automl/object-detection/docs/evaluate#intersection-over-union) required for 2 bounding boxes to be considered a match. This must be a number between 0 and 1.
      },
    },
    &quot;evaluationJobAlertConfig&quot;: { # Provides details for how an evaluation job sends email alerts based on the results of a run. # Optional. Configuration details for evaluation job alerts. Specify this field if you want to receive email alerts if the evaluation job finds that your predictions have low mean average precision during a run.
      &quot;email&quot;: &quot;A String&quot;, # Required. An email address to send alerts to.
      &quot;minAcceptableMeanAveragePrecision&quot;: 3.14, # Required. A number between 0 and 1 that describes a minimum mean average precision threshold. When the evaluation job runs, if it calculates that your model version&#x27;s predictions from the recent interval have meanAveragePrecision below this threshold, then it sends an alert to your specified email.
    },
    &quot;exampleCount&quot;: 42, # Required. The maximum number of predictions to sample and save to BigQuery during each evaluation interval. This limit overrides `example_sample_percentage`: even if the service has not sampled enough predictions to fulfill `example_sample_perecentage` during an interval, it stops sampling predictions when it meets this limit.
    &quot;exampleSamplePercentage&quot;: 3.14, # Required. Fraction of predictions to sample and save to BigQuery during each evaluation interval. For example, 0.1 means 10% of predictions served by your model version get saved to BigQuery.
    &quot;humanAnnotationConfig&quot;: { # Configuration for how human labeling task should be done. # Optional. Details for human annotation of your data. If you set labelMissingGroundTruth to `true` for this evaluation job, then you must specify this field. If you plan to provide your own ground truth labels, then omit this field. Note that you must create an Instruction resource before you can specify this field. Provide the name of the instruction resource in the `instruction` field within this configuration.
      &quot;annotatedDatasetDescription&quot;: &quot;A String&quot;, # Optional. A human-readable description for AnnotatedDataset. The description can be up to 10000 characters long.
      &quot;annotatedDatasetDisplayName&quot;: &quot;A String&quot;, # Required. A human-readable name for AnnotatedDataset defined by users. Maximum of 64 characters .
      &quot;contributorEmails&quot;: [ # Optional. If you want your own labeling contributors to manage and work on this labeling request, you can set these contributors here. We will give them access to the question types in crowdcompute. Note that these emails must be registered in crowdcompute worker UI: https://crowd-compute.appspot.com/
        &quot;A String&quot;,
      ],
      &quot;instruction&quot;: &quot;A String&quot;, # Required. Instruction resource name.
      &quot;labelGroup&quot;: &quot;A String&quot;, # Optional. A human-readable label used to logically group labeling tasks. This string must match the regular expression `[a-zA-Z\\d_-]{0,128}`.
      &quot;languageCode&quot;: &quot;A String&quot;, # Optional. The Language of this question, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US. Only need to set this when task is language related. For example, French text classification.
      &quot;questionDuration&quot;: &quot;A String&quot;, # Optional. Maximum duration for contributors to answer a question. Maximum is 3600 seconds. Default is 3600 seconds.
      &quot;replicaCount&quot;: 42, # Optional. Replication of questions. Each question will be sent to up to this number of contributors to label. Aggregated answers will be returned. Default is set to 1. For image related labeling, valid values are 1, 3, 5.
      &quot;userEmailAddress&quot;: &quot;A String&quot;, # Email of the user who started the labeling task and should be notified by email. If empty no notification will be sent.
    },
    &quot;imageClassificationConfig&quot;: { # Config for image classification human labeling task. # Specify this field if your model version performs image classification or general classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
      &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one image.
      &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
      &quot;answerAggregationType&quot;: &quot;A String&quot;, # Optional. The type of how to aggregate answers.
    },
    &quot;inputConfig&quot;: { # The configuration of input data, including data type, location, etc. # Rquired. Details for the sampled prediction input. Within this configuration, there are requirements for several fields: * `dataType` must be one of `IMAGE`, `TEXT`, or `GENERAL_DATA`. * `annotationType` must be one of `IMAGE_CLASSIFICATION_ANNOTATION`, `TEXT_CLASSIFICATION_ANNOTATION`, `GENERAL_CLASSIFICATION_ANNOTATION`, or `IMAGE_BOUNDING_BOX_ANNOTATION` (image object detection). * If your machine learning model performs classification, you must specify `classificationMetadata.isMultiLabel`. * You must specify `bigquerySource` (not `gcsSource`).
      &quot;annotationType&quot;: &quot;A String&quot;, # Optional. The type of annotation to be performed on this data. You must specify this field if you are using this InputConfig in an EvaluationJob.
      &quot;bigquerySource&quot;: { # The BigQuery location for input data. If used in an EvaluationJob, this is where the service saves the prediction input and output sampled from the model version. # Source located in BigQuery. You must specify this field if you are using this InputConfig in an EvaluationJob.
        &quot;inputUri&quot;: &quot;A String&quot;, # Required. BigQuery URI to a table, up to 2,000 characters long. If you specify the URI of a table that does not exist, Data Labeling Service creates a table at the URI with the correct schema when you create your EvaluationJob. If you specify the URI of a table that already exists, it must have the [correct schema](/ml-engine/docs/continuous-evaluation/create-job#table-schema). Provide the table URI in the following format: &quot;bq://{your_project_id}/ {your_dataset_name}/{your_table_name}&quot; [Learn more](/ml-engine/docs/continuous-evaluation/create-job#table-schema).
      },
      &quot;classificationMetadata&quot;: { # Metadata for classification annotations. # Optional. Metadata about annotations for the input. You must specify this field if you are using this InputConfig in an EvaluationJob for a model version that performs classification.
        &quot;isMultiLabel&quot;: True or False, # Whether the classification task is multi-label or not.
      },
      &quot;dataType&quot;: &quot;A String&quot;, # Required. Data type must be specifed when user tries to import data.
      &quot;gcsSource&quot;: { # Source of the Cloud Storage file to be imported. # Source located in Cloud Storage.
        &quot;inputUri&quot;: &quot;A String&quot;, # Required. The input URI of source file. This must be a Cloud Storage path (`gs://...`).
        &quot;mimeType&quot;: &quot;A String&quot;, # Required. The format of the source file. Only &quot;text/csv&quot; is supported.
      },
      &quot;textMetadata&quot;: { # Metadata for the text. # Required for text import, as language code must be specified.
        &quot;languageCode&quot;: &quot;A String&quot;, # The language of this text, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US.
      },
    },
    &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Specify this field if your model version performs text classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
      &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
      &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
      &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
        &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
      },
    },
  },
  &quot;labelMissingGroundTruth&quot;: True or False, # Required. Whether you want Data Labeling Service to provide ground truth labels for prediction input. If you want the service to assign human labelers to annotate your data, set this to `true`. If you want to provide your own ground truth labels in the evaluation job&#x27;s BigQuery table, set this to `false`.
  &quot;modelVersion&quot;: &quot;A String&quot;, # Required. The [AI Platform Prediction model version](/ml-engine/docs/prediction-overview) to be evaluated. Prediction input and output is sampled from this model version. When creating an evaluation job, specify the model version in the following format: &quot;projects/{project_id}/models/{model_name}/versions/{version_name}&quot; There can only be one evaluation job per model version.
  &quot;name&quot;: &quot;A String&quot;, # Output only. After you create a job, Data Labeling Service assigns a name to the job with the following format: &quot;projects/{project_id}/evaluationJobs/ {evaluation_job_id}&quot;
  &quot;schedule&quot;: &quot;A String&quot;, # Required. Describes the interval at which the job runs. This interval must be at least 1 day, and it is rounded to the nearest day. For example, if you specify a 50-hour interval, the job runs every 2 days. You can provide the schedule in [crontab format](/scheduler/docs/configuring/cron-job-schedules) or in an [English-like format](/appengine/docs/standard/python/config/cronref#schedule_format). Regardless of what you specify, the job will run at 10:00 AM UTC. Only the interval from this schedule is used, not the specific time of day.
  &quot;state&quot;: &quot;A String&quot;, # Output only. Describes the current state of the job.
}</pre>
</div>

<div class="method">
    <code class="details" id="pause">pause(name, body=None, x__xgafv=None)</code>
  <pre>Pauses an evaluation job. Pausing an evaluation job that is already in a `PAUSED` state is a no-op.

Args:
  name: string, Required. Name of the evaluation job that is going to be paused. Format: &quot;projects/{project_id}/evaluationJobs/{evaluation_job_id}&quot; (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for PauseEvaluationJob.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # 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); } The JSON representation for `Empty` is empty JSON object `{}`.
}</pre>
</div>

<div class="method">
    <code class="details" id="resume">resume(name, body=None, x__xgafv=None)</code>
  <pre>Resumes a paused evaluation job. A deleted evaluation job can&#x27;t be resumed. Resuming a running or scheduled evaluation job is a no-op.

Args:
  name: string, Required. Name of the evaluation job that is going to be resumed. Format: &quot;projects/{project_id}/evaluationJobs/{evaluation_job_id}&quot; (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message ResumeEvaluationJob.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # 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); } The JSON representation for `Empty` is empty JSON object `{}`.
}</pre>
</div>

</body></html>