Дорожная карта и ограничения
Что ещё открыто, почему, и какое именно действие закрывает пункт. Пункты покидают эту страницу, когда зафиксированная cassette или принятое изменение их закрывает — это рабочий список соглашения «сначала проверь» (почему — см. Участие в проекте § соглашение о живой верификации и Архитектура § соглашение о живой верификации).
Запись cassette самостоятельно: у каждого пункта «Не верифицировано на живую» ниже есть соответствующий тест
TestVerify*, который SKIP-ается, пока вы не захватите cassette пути успеха черезZAI_RECORD=1. Перед записью харнесс редуцируетAuthorizationдоBearer REDACTED— перед коммитом проверьте черезgrep "Bearer " pkg/client/testdata/cassettes/<name>.yaml.ZAI_RECORD=1 ZAI_API_KEY=<real-key> go test -run TestVerify<Name> ./pkg/client
Не верифицировано на живую
Две группы: сервисы, для которых форма успешного ответа ещё не зафиксирована, и поля, добавленные в спринте 2026-07-18, которые соответствуют документации, но не закреплены cassette.
Сервисы, требующие cassette пути успеха
У используемого до сих пор dev-аккаунта нет PAYG-баланса / прав для этих сервисов, поэтому подтверждены только форма запроса и пути ошибок. Cassette, зафиксировавшая реальный успешный ответ, закрывает каждый пункт.
- Anthropic Messages (
TestVerifyAnthropicMessages) — маршрутизация, заголовокanthropic-versionи Bearer-аутентификация подтверждены (бракованный ключ возвращает чистый 401, а не 404/timeout). Открытый вопрос, который закрыла бы cassette: GLM отдаёт рассуждения как Anthropic-блокиthinkingили как OpenAI-полеreasoning_content? (claude-code-router#1133) - Embeddings (
TestVerifyEmbeddings) — сейчас возвращает400 Unknown Model(код 1211) на каждом проверенном аккаунте; это ограничение по тарифу, а не баг маршрутизации (см. Аккаунты и квоты). - Moderations (
TestVerifyModerations) — то же ограничение по тарифу с кодом 1211. - Успешная форма ответа Agents
Invoke(TestVerifyAgentsInvoke) — на живую сегодня подтверждён только конверт ошибки (ID/AgentID/Status/Error), черезtestdata/cassettes/agents_invoke.yaml(200 со встроенной ошибкой). Форма успешного ответаChoices/Usageсмоделирована только по документации. - Voice
Clone/Delete(TestVerifyVoiceClone,TestVerifyVoiceDelete) —Voice Listподтверждён на живую; для clone/delete требуется загруженный образец аудио и реальный ID клонированного голоса для записи. Для clone нужныZAI_VOICE_SAMPLE_FILE_ID+ZAI_VOICE_NAME; для delete —ZAI_VOICE_ID. - Эндпоинты Batch и Files в целом — специализированного каркаса
TestVerify*ещё нет; для записи потребовался бы аккаунт PAYG с соответствующими правами.
Поля, добавленные в спринте 2026-07-18 и ожидающие cassette
Эти поля добавлены в pkg/client/types.go / chat.go, чтобы соответствовать
актуальной спецификации docs.z.ai для завершения чата. Они аддитивны и покрыты
unit-тестами, но НЕ ВЕРИФИЦИРОВАНЫ НА ЖИВУЮ, пока cassette не зафиксирует
точную wire-форму. У каждого готов тест TestVerify* для записи.
ChatRequest.StreamToolCall(TestVerifyChatStreamToolCall) — стримаемые дельты tool-call для GLM-4.6+. Cassette должна показать, что дельты tool-call приходят в нескольких SSE-чанках черезStreamDelta.ToolCalls.- Дискриминация
Toolмеждуfunction/retrieval/web_search(NewFunctionTool/NewRetrievalTool/NewWebSearchTool) — спецификация перечисляет все три типа; подтверждён толькоfunction. Форма payloadweb_search({"search_query":[...]}) следует примеру из официального Python SDK. ChatResponse.WebSearch(TestVerifyChatWebSearchResponse) — массивweb_searchверхнего уровня, возвращаемый при срабатывании инструментаweb_search. Форма записи переиспользуетWebSearchResultизtools.go(верифицировано на живую для отдельного инструмента web-search); размещение как массива верхнего уровня смоделировано по документации.ThinkingConfig.Effort = "xhigh"— добавлено в валидируемый enum (xhigh→max, только GLM-5.2). Специализированного теста нет; покрывается любой cassette с thinking + xhigh.- Константы
FinishReason*(sensitive,model_context_window_exceeded,network_error) — добавлены из документации; ни одна cassette пока не воспроизводит эти пути завершения. - Клиентская regex для имён инструментов (
^[A-Za-z0-9_-]{1,64}$) и ограничение в 128 функций — задокументированные серверные правила, которые мы применяем локально; не подтверждено, что они являются точным критерием отказа на стороне сервера. - Китайский региональный шлюз для monitor/biz/agents/detection —
RegionChinaнаправляет quota/usage/account/agents/detection наopen.bigmodel.cn./modelsи/chat/completionsверифицированы на живую на китайском хосте; пути monitor/biz/agents смоделированы путем зеркалирования структурыapi.z.aiи требуют cassette с подходящим китайским ключом для подтверждения.
Более старые открытые вопросы (без специализированного теста пока)
- Переписывание совместимости tool-schema — набор конструкций JSON-Schema,
которые парсер GLM отклоняет с HTTP 500
(
anyOf/oneOf/allOf/$ref), взят из общественных баг-репортов (claude-code-router#1474), а не воспроизведён здесь на живом аккаунте. Само переписывание полностью покрыто unit-тестами и инертно на уже плоских schema; cassette, зафиксировавшая, какие именно конструкции дают 500 (а какие проходят после уплощения вывода), повысила бы статус с «задокументированное поведение» до «верифицировано на живую». См.pkg/client/toolschema.go.
Не реализовано
- Логирование запросов/ответов и сбор метрик — встроенных хуков инструментирования пока нет.
- Производительные бенчмарки — отложены до измерения реального узкого места; ни один известный горячий путь пока не оправдывает их проведения (профилируйте перед оптимизацией).
Намеренно не реализовано
- Assistant API — подтверждён как устаревший / deprecated. Собственный
живой OpenAPI-spec Z.AI (
docs.bigmodel.cn/openapi/openapi.json) помечает каждый путь Assistant как"deprecated": true, а вызов его изapi.z.aiполностью уходит в timeout вместо возврата ошибки. Создавать клиент для API, выводимого из эксплуатации, не стоит затрат на поддержку — если Z.AI когда-либо отменит это решение, в spec выше готовы полные schema запросов/ответов для транскрипции.