fix(llm): не ронять задачу из-за мёртвого BYOK-ключа - #13
Merged
Conversation
OpenRouter перебирает привязанные Google-ключи внутри одного запроса. Если у рабочих ключей исчерпана суточная квота модели, очередь доходит до ключа с удалённым service account, и провайдер отвечает 401 ACCOUNT_STATE_INVALID. Такой 401 обрывал перебор моделей, хотя следующие модели в списке доступны, и задача падала целиком. Теперь провайдерский отказ BYOK трактуется как отказ конкретного кандидата: модель уходит в cooldown, перебор продолжается. Невалидный ключ самого OpenRouter по-прежнему пробрасывается сразу.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Проблема
Прод-задача упала с
401 ACCOUNT_STATE_INVALID— «The bound service account is deleted or disabled».По логу видно всю цепочку внутри одного запроса: OpenRouter перебрал привязанные Google-ключи, получил
429 Quota exceeded ... quotaValue: 20, model: gemini-3.6-flashот рабочих (суточная квота free-tier исчерпана), а на последнем —401от ключа с удалённым service account.Этот
401обрывал перебор моделей, хотяgemini-3.5-flashиgemini-3.5-flash-liteв тот момент отвечали нормально и стоят следующими вLLM_MODELS_SUBSPLIT. Задача упала целиком вместо мягкой деградации.Что изменено
Провайдерский отказ BYOK (
is_byok: true,provider_name: "Google AI Studio") трактуется как отказ конкретного кандидата: модель уходит в cooldown на 300 с, перебор продолжается со следующей.Невалидный ключ самого OpenRouter — это ошибка конфигурации, а не отказ кандидата, поэтому пробрасывается сразу, как и раньше.
Проверка
499 passedruff check/ruff format --checkчистыПубличный API не менялся.