<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="dialogflow_v2.html">Dialogflow API</a> . <a href="dialogflow_v2.projects.html">projects</a> . <a href="dialogflow_v2.projects.conversationModels.html">conversationModels</a> . <a href="dialogflow_v2.projects.conversationModels.evaluations.html">evaluations</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="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets an evaluation of conversation model.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists evaluations of a conversation model.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</a></code></p>
<p class="firstline">Retrieves the next page of results.</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="get">get(name, x__xgafv=None)</code>
  <pre>Gets an evaluation of conversation model.

Args:
  name: string, Required. The conversation model evaluation resource name. Format: `projects//conversationModels//evaluations/` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents evaluation result of a conversation model.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Creation time of this model.
  &quot;displayName&quot;: &quot;A String&quot;, # Optional. The display name of the model evaluation. At most 64 bytes long.
  &quot;evaluationConfig&quot;: { # The configuration for model evaluation. # Optional. The configuration of the evaluation task.
    &quot;datasets&quot;: [ # Required. Datasets used for evaluation.
      { # InputDataset used to create model or do evaluation. NextID:5
        &quot;dataset&quot;: &quot;A String&quot;, # Required. ConversationDataset resource name. Format: `projects//locations//conversationDatasets/`
      },
    ],
    &quot;smartComposeConfig&quot;: { # Smart compose specific configuration for evaluation job. # Configuration for smart compose model evalution.
      &quot;allowlistDocument&quot;: &quot;A String&quot;, # The allowlist document resource name. Format: `projects//knowledgeBases//documents/`. Only used for smart compose model.
      &quot;maxResultCount&quot;: 42, # Required. The model to be evaluated can return multiple results with confidence score on each query. These results will be sorted by the descending order of the scores and we only keep the first max_result_count results as the final results to evaluate.
    },
    &quot;smartReplyConfig&quot;: { # Smart reply specific configuration for evaluation job. # Configuration for smart reply model evalution.
      &quot;allowlistDocument&quot;: &quot;A String&quot;, # The allowlist document resource name. Format: `projects//knowledgeBases//documents/`. Only used for smart reply model.
      &quot;maxResultCount&quot;: 42, # Required. The model to be evaluated can return multiple results with confidence score on each query. These results will be sorted by the descending order of the scores and we only keep the first max_result_count results as the final results to evaluate.
    },
  },
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the evaluation. Format: `projects//conversationModels//evaluations/`
  &quot;rawHumanEvalTemplateCsv&quot;: &quot;A String&quot;, # Output only. Human eval template in csv format. It tooks real-world conversations provided through input dataset, generates example suggestions for customer to verify quality of the model. For Smart Reply, the generated csv file contains columns of Context, (Suggestions,Q1,Q2)*3, Actual reply. Context contains at most 10 latest messages in the conversation prior to the current suggestion. Q1: &quot;Would you send it as the next message of agent?&quot; Evaluated based on whether the suggest is appropriate to be sent by agent in current context. Q2: &quot;Does the suggestion move the conversation closer to resolution?&quot; Evaluated based on whether the suggestion provide solutions, or answers customer&#x27;s question or collect information from customer to resolve the customer&#x27;s issue. Actual reply column contains the actual agent reply sent in the context.
  &quot;smartReplyMetrics&quot;: { # The evaluation metrics for smart reply model. # Output only. Only available when model is for smart reply.
    &quot;allowlistCoverage&quot;: 3.14, # Percentage of target participant messages in the evaluation dataset for which similar messages have appeared at least once in the allowlist. Should be [0, 1].
    &quot;conversationCount&quot;: &quot;A String&quot;, # Total number of conversations used to generate this metric.
    &quot;topNMetrics&quot;: [ # Metrics of top n smart replies, sorted by TopNMetric.n.
      { # Evaluation metrics when retrieving `n` smart replies with the model.
        &quot;n&quot;: 42, # Number of retrieved smart replies. For example, when `n` is 3, this evaluation contains metrics for when Dialogflow retrieves 3 smart replies with the model.
        &quot;recall&quot;: 3.14, # Defined as `number of queries whose top n smart replies have at least one similar (token match similarity above the defined threshold) reply as the real reply` divided by `number of queries with at least one smart reply`. Value ranges from 0.0 to 1.0 inclusive.
      },
    ],
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists evaluations of a conversation model.

Args:
  parent: string, Required. The conversation model resource name. Format: `projects//conversationModels/` (required)
  pageSize: integer, Optional. Maximum number of evaluations to return in a single page. By default 100 and at most 1000.
  pageToken: string, Optional. The next_page_token value returned from a previous list request.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for ConversationModels.ListConversationModelEvaluations
  &quot;conversationModelEvaluations&quot;: [ # The list of evaluations to return.
    { # Represents evaluation result of a conversation model.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Creation time of this model.
      &quot;displayName&quot;: &quot;A String&quot;, # Optional. The display name of the model evaluation. At most 64 bytes long.
      &quot;evaluationConfig&quot;: { # The configuration for model evaluation. # Optional. The configuration of the evaluation task.
        &quot;datasets&quot;: [ # Required. Datasets used for evaluation.
          { # InputDataset used to create model or do evaluation. NextID:5
            &quot;dataset&quot;: &quot;A String&quot;, # Required. ConversationDataset resource name. Format: `projects//locations//conversationDatasets/`
          },
        ],
        &quot;smartComposeConfig&quot;: { # Smart compose specific configuration for evaluation job. # Configuration for smart compose model evalution.
          &quot;allowlistDocument&quot;: &quot;A String&quot;, # The allowlist document resource name. Format: `projects//knowledgeBases//documents/`. Only used for smart compose model.
          &quot;maxResultCount&quot;: 42, # Required. The model to be evaluated can return multiple results with confidence score on each query. These results will be sorted by the descending order of the scores and we only keep the first max_result_count results as the final results to evaluate.
        },
        &quot;smartReplyConfig&quot;: { # Smart reply specific configuration for evaluation job. # Configuration for smart reply model evalution.
          &quot;allowlistDocument&quot;: &quot;A String&quot;, # The allowlist document resource name. Format: `projects//knowledgeBases//documents/`. Only used for smart reply model.
          &quot;maxResultCount&quot;: 42, # Required. The model to be evaluated can return multiple results with confidence score on each query. These results will be sorted by the descending order of the scores and we only keep the first max_result_count results as the final results to evaluate.
        },
      },
      &quot;name&quot;: &quot;A String&quot;, # The resource name of the evaluation. Format: `projects//conversationModels//evaluations/`
      &quot;rawHumanEvalTemplateCsv&quot;: &quot;A String&quot;, # Output only. Human eval template in csv format. It tooks real-world conversations provided through input dataset, generates example suggestions for customer to verify quality of the model. For Smart Reply, the generated csv file contains columns of Context, (Suggestions,Q1,Q2)*3, Actual reply. Context contains at most 10 latest messages in the conversation prior to the current suggestion. Q1: &quot;Would you send it as the next message of agent?&quot; Evaluated based on whether the suggest is appropriate to be sent by agent in current context. Q2: &quot;Does the suggestion move the conversation closer to resolution?&quot; Evaluated based on whether the suggestion provide solutions, or answers customer&#x27;s question or collect information from customer to resolve the customer&#x27;s issue. Actual reply column contains the actual agent reply sent in the context.
      &quot;smartReplyMetrics&quot;: { # The evaluation metrics for smart reply model. # Output only. Only available when model is for smart reply.
        &quot;allowlistCoverage&quot;: 3.14, # Percentage of target participant messages in the evaluation dataset for which similar messages have appeared at least once in the allowlist. Should be [0, 1].
        &quot;conversationCount&quot;: &quot;A String&quot;, # Total number of conversations used to generate this metric.
        &quot;topNMetrics&quot;: [ # Metrics of top n smart replies, sorted by TopNMetric.n.
          { # Evaluation metrics when retrieving `n` smart replies with the model.
            &quot;n&quot;: 42, # Number of retrieved smart replies. For example, when `n` is 3, this evaluation contains metrics for when Dialogflow retrieves 3 smart replies with the model.
            &quot;recall&quot;: 3.14, # Defined as `number of queries whose top n smart replies have at least one similar (token match similarity above the defined threshold) reply as the real reply` divided by `number of queries with at least one smart reply`. Value ranges from 0.0 to 1.0 inclusive.
          },
        ],
      },
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next()</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>

</body></html>