Превышена квота api в Google речь в тексте при длительной работе: как изменить запрос, чтобы он не превышал квоту - PullRequest
0 голосов
/ 08 июля 2019

Мы отправляем аудиофайлы в 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 аудиофайл, мы ожидаем сделать 1 запрос к API, но если мы проверим страницу квот, мы увидим гораздо больше.(Вроде 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, но в противном случае.

...