fix(grok): убрать неверное утверждение про «разные кошельки»
Владелец прислал анонс x.ai/news/grok-hermes: доступ к Grok даётся по подписке SuperGrok через OAuth, покупать кредиты API не требуется. Моя формулировка в интерфейсе утверждала обратное — что подписка кредиты не пополняет и это отдельный кошелёк. Это неверно, и оно уже попадало пользователю на экран. Установлено проверками: - cli-chat-proxy.grok.com/v1/models принимает наш OAuth-токен -> 200, отдаёт grok-4.6; - тот же прокси /chat/completions -> 426, требует версию Grok CLI не ниже 0.1.202, и она читается не из заголовков, которые я перебрал; - api.x.ai/v1/responses (путь из документации Hermes) -> 402 personal-team-blocked:spending-limit. При этом подключён ochenstarik@gmail.com, а подписка SuperGrok — на victor.trushenko@gmail.com. То есть отказ объясняется аккаунтом, а не природой подписки, и утверждать иное я не мог. Сообщение переписано на проверяемое: у аккаунта нет ни баланса, ни лимита трат, а доступ даёт подписка на ЭТОМ же аккаунте либо купленные кредиты. Само чтение биллинга остаётся — оно работает и показывает настоящие числа. Тесты: 422 passed, ruff чисто. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
6ebea01386
commit
98b6e68617
2 changed files with 10 additions and 6 deletions
|
|
@ -754,8 +754,11 @@ class AccountQuotaService:
|
||||||
биллинговым эндпоинтом grok.com. Именно оттуда берут данные и
|
биллинговым эндпоинтом grok.com. Именно оттуда берут данные и
|
||||||
Grok Build, и /usage.
|
Grok Build, и /usage.
|
||||||
|
|
||||||
Важно: подписка SuperGrok и кредиты API — РАЗНЫЕ кошельки. Вызовы
|
Что показывает ответ: предоплаченный баланс и лимит трат по мере
|
||||||
через Hub списываются со второго, и именно его показывает этот ответ.
|
использования. Доступ к Grok даёт либо подписка SuperGrok на этом же
|
||||||
|
аккаунте (см. анонс x.ai/news/grok-hermes — OAuth без покупки кредитов),
|
||||||
|
либо купленные кредиты. Нули в обоих полях означают, что ни того, ни
|
||||||
|
другого на аккаунте нет.
|
||||||
"""
|
"""
|
||||||
now = _utc_now()
|
now = _utc_now()
|
||||||
token = None
|
token = None
|
||||||
|
|
@ -831,9 +834,10 @@ class AccountQuotaService:
|
||||||
reason = None
|
reason = None
|
||||||
if not prepaid and not cap:
|
if not prepaid and not cap:
|
||||||
reason = (
|
reason = (
|
||||||
"Кредиты API исчерпаны: предоплаченный баланс и лимит по мере "
|
"У этого аккаунта нет ни предоплаченного баланса, ни лимита по "
|
||||||
"использования равны нулю. Подписка SuperGrok их не пополняет — "
|
"мере использования. Доступ даёт либо подписка SuperGrok на ЭТОМ "
|
||||||
"это отдельный кошелёк."
|
"же аккаунте, либо купленные кредиты — проверьте, что подключён "
|
||||||
|
"тот аккаунт, на котором оформлена подписка."
|
||||||
)
|
)
|
||||||
|
|
||||||
return QuotaSnapshot(
|
return QuotaSnapshot(
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ def test_exhausted_account_explains_two_wallets():
|
||||||
snap = AccountQuotaService()._collect_grok_quota("grok-orch", _auth())
|
snap = AccountQuotaService()._collect_grok_quota("grok-orch", _auth())
|
||||||
|
|
||||||
assert snap.source == "provider_api"
|
assert snap.source == "provider_api"
|
||||||
assert "SuperGrok" in (snap.unavailable_reason or ""), "не объяснено, что это разные кошельки"
|
assert "SuperGrok" in (snap.unavailable_reason or ""), "не объяснено, откуда берётся доступ"
|
||||||
assert all(b.status == "exhausted" for b in snap.buckets)
|
assert all(b.status == "exhausted" for b in snap.buckets)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue