Repository navigation
Open
Labels
samplesIssues that are directly related to samples.Issues that are directly related to samples.type: feature request‘Nice-to-have’ improvement, new feature or different behavior or design.‘Nice-to-have’ improvement, new feature or different behavior or design.
Description
Hello, Please can I suggest a change?
In this example script:
we have the following extract:
foreach ($stream->closeWriteAndReadAll() as $response) {
$recognitionResult = $response->getRecognitionResult();
if ($recognitionResult) {
$transcript = $recognitionResult->getTranscript();
printf('Intermediate transcript: %s' . PHP_EOL, $transcript);
}
}
// get final response and relevant info
if ($response) {
print(str_repeat("=", 20) . PHP_EOL);
$queryResult = $response->getQueryResult();
$queryText = $queryResult->getQueryText();
$intent = $queryResult->getIntent();
$displayName = $intent->getDisplayName();
$confidence = $queryResult->getIntentDetectionConfidence();
$fulfilmentText = $queryResult->getFulfillmentText();
// output relevant info
printf('Query text: %s' . PHP_EOL, $queryText);
printf('Detected intent: %s (confidence: %f)' . PHP_EOL, $displayName,
$confidence);
print(PHP_EOL);
printf('Fulfilment text: %s' . PHP_EOL, $fulfilmentText);
}Which relies on using $response that is set from the last iteration of the loop and might not always be available.
Suggestion:
$queryResult = null;
foreach ($stream->closeWriteAndReadAll() as $response) {
$recognitionResult = $response->getRecognitionResult();
if ($recognitionResult) {
$transcript = $recognitionResult->getTranscript();
printf('Intermediate transcript: %s' . PHP_EOL, $transcript);
}
$queryResult = !$queryResult && $response->getQueryResult()
? $response->getQueryResult()
: $queryResult;
}
// get final response and relevant info
if ($queryResult) {
print(str_repeat("=", 20) . PHP_EOL);
$queryText = $queryResult->getQueryText();
$intent = $queryResult->getIntent();
$displayName = $intent->getDisplayName();
$confidence = $queryResult->getIntentDetectionConfidence();
$fulfilmentText = $queryResult->getFulfillmentText();
// output relevant info
printf('Query text: %s' . PHP_EOL, $queryText);
printf('Detected intent: %s (confidence: %f)' . PHP_EOL, $displayName,
$confidence);
print(PHP_EOL);
printf('Fulfilment text: %s' . PHP_EOL, $fulfilmentText);
}In this example setting $queryResult has been moved into the foreach ($stream->closeWriteAndReadAll() as $response) loop because getQueryResult() isn't always available on the final iteration of the loop.
For example when utilising OutputAudioConfig() it is set on the penultimate iteration. Which would throw an exception in the current example and result in the loss of results.
Related issue:
googleapis/google-cloud-php#2026
Metadata
Metadata
Assignees
Labels
samplesIssues that are directly related to samples.Issues that are directly related to samples.type: feature request‘Nice-to-have’ improvement, new feature or different behavior or design.‘Nice-to-have’ improvement, new feature or different behavior or design.
Activity
[-]DialogFlow - Suggested update to detect_intent_stream.php example to avoid Exception when using OutputAudioConfig()[/-][+]DialogFlow - Suggested update to detect_intent_stream.php sample script. Avoiding Exception when using OutputAudioConfig()[/+]bshaffer commentedon Jun 13, 2019
This looks good, although shouldn't it be this instead, since we want the final iteration of it?