长时间运行后,Google语音对文本api的配额超出了限制:如何更改请求,使其不超过配额

时间:2019-07-08 08:22:05

标签: google-cloud-speech quota

我们正在将音频文件发送到Google语音文本API。这些音频文件可以是10秒,也可以是几分钟。我们正在使用Firebase云功能发出这些请求。我们一次运行这些功能的多个实例。如果我们有很多音频文件,则会收到以下错误消息:

Error: 8 RESOURCE_EXHAUSTED: Quota exceeded for quota metric speech.googleapis.com/default_requests and limit DefaultRequestsPerMinutePerProject of service speech.googleapis.com 

问题是如何通过长时间运行来更改设置,以减少对单个文件的请求?

希望有人可以提供帮助!

我知道该API每分钟最多有300个请求。如果一次发送大量音频文件,则会超出此范围。 如前所述,我们使用长时间运行的操作来获取结果。如果我们发送1个音频文件,我们希望向API发出1个请求,但是如果我们查看配额页面,则会看到更多信息。 (例如20-50个请求)。我们认为这是由于操作检查响应吗?因此,它向API发出了新请求,以查看是否已经有结果?

问题是我们是否可以将这些值设置为较少定期检查,我们该怎么做?

我们认为这与以下方面有关:

export interface BackoffSettings {
  maxRetries?: number;
  initialRetryDelayMillis: number;
  retryDelayMultiplier: number;
  maxRetryDelayMillis: number;
  initialRpcTimeoutMillis?: number | null;
  maxRpcTimeoutMillis?: number | null;
  totalTimeoutMillis?: number | null;
  rpcTimeoutMultiplier?: number | null;
}

在这里,我们尝试将initialRetryDelayMillis设置为更高的值。 我们认为这是用于检查结果的,如果我们将其设置为较高的值,它将执行较少的请求以检查结果。事实似乎并非如此。

const audioConfig = {
    sampleRateHertz: wavOptions.sampleRate,
    encoding: 'LINEAR16',
    languageCode: speechLanguage,
    enableSpeakerDiarization: false,
    enableWordTimeOffsets: true,
    enableWordConfidence: true,
};

const request = {
    config: audioConfig,
    audio: { uri: 'gs://' + AUDIO_BUCKET_NAME + '/' + filePath },
};

const callOptions = {
    longrunning: {
        backoffSettings: {
            initialRetryDelayMillis: 100, 
            maxRetryDelayMillis: 60000, 
            retryDelayMultiplier: 1.3,
            initialRpcTimeoutMillis: null,
            rpcTimeoutMultiplier: null,
            maxRpcTimeoutMillis: null,
            totalTimeoutMillis: null
        }
    }
}

callOptions:上面显示的这些值是默认值。如果我们增加initialRetryDelayMillis或retryDelayMultiplier,我们甚至可以得到更多的请求,而不是更少。

const [operation] = await speechClient.longRunningRecognize(request, callOptions);

希望通过增加initialDelayMillis或retryDelayMultiplier来查看拒绝请求的数量,但情况恰恰相反。

0 个答案:

没有答案