Personal ML Engineering LabAI API User Guide
chunchunmaru.isgood.hostКабинет
Содержание документации
User guideApproval required

Playground и AI API

Короткая инструкция для работы с OpenAI и Claude через единый OpenAI-compatible API: от входа и approval до первого запроса и Code Interpreter.

Base URL: https://crawlingchaos.isgood.host/api/v1. Модельные маршруты доступны только на Crawling Chaos.
Hostname—
Backendпроверяем…
Providerпроверяем…
Сессия—
AI access—

Вход и approval

  1. Создай аккаунт или войди в личном кабинете.
  2. При регистрации сохрани recovery-код: повторно он не показывается.
  3. В профиле кратко опиши личный или учебный сценарий и отправь заявку.
  4. После ручного approval открой Playground, отдельный Chat или создай gateway key.
Регистрация сама по себе не открывает модели. Browser-сессия привязана к hostname, поэтому для Playground входи именно на Crawling Chaos.

Черновики Playground остаются локально в браузере. История обычного Chat привязана к одобренному аккаунту на сервере: после входа тот же диалог можно открыть на другом устройстве. Хранится до 30 чатов и 80 сообщений в каждом; файлы и base64 в историю не записываются. Enter отправляет сообщение, Shift+Enter создаёт новый абзац.

Gateway key

В кабинете открой вкладку API-ключи, задай понятное имя и сразу скопируй созданный секрет. Полное значение показывается один раз.

shell
export ML_PORTAL_BASE_URL="https://crawlingchaos.isgood.host/api/v1"
export ML_PORTAL_API_KEY="paste_your_gateway_key_here"

Передавай ключ как Authorization: Bearer $ML_PORTAL_API_KEY. Это длинный ключ портала, а не исходный токен OpenAI или Anthropic. При удалении он сразу перестаёт работать и исчезает из всех списков.

Во вкладке Использование видны общие токены, расход каждого ключа, browser Playground и разбивка по моделям. Тексты запросов в статистику не входят.

Доступные модели

Не фиксируй model ID заранее: список зависит от настроенных провайдеров и может расширяться.

GET/api/v1/modelsapproved
shell
curl "$ML_PORTAL_BASE_URL/models" \
  -H "Authorization: Bearer $ML_PORTAL_API_KEY"

Каждая запись сообщает provider, endpoints, tools, tools_by_endpoint, input_mime_types, attachments_endpoint, max_inline_attachments, max_inline_images, max_inline_documents, max_inline_attachment_bytes, max_request_body_bytes, subtype-лимиты файлов, эффективный лимит ответа и, когда применимо, reasoning_efforts с endpoint-scoped метаданными. attachments_endpoint явно показывает, куда отправлять файлы: chat.completions для OpenAI или messages для Claude. Для API и Playground доступен полный одобренный каталог. Упрощённый Chat намеренно показывает только gpt-5.5, gpt-5.6-sol и claude-opus-4-8. Интерфейсы обновляют live-каталог примерно раз в четыре дня; после перезапуска сервиса первое чтение обновляет его сразу.

Статистика и стоимость

Во вкладке Использование стоимость показана по ключам и моделям. Администратор дополнительно видит её по пользователям и API-ключам. Значения считаются в USD из provider usage и сохраняются как снимок: последующее изменение тарифов не переписывает историю.

Это оценка, не счёт: ≈ означает полное покрытие известных запросов, ≥ — нижнюю границу при неполных данных или неизвестной цене модели, — — отсутствие полезной оценки.

Учитываются входные, выходные и cached tokens, а также сообщённые провайдером cache writes и применимые коэффициенты длинного контекста. Hosted tools, Code Interpreter, web search, runtime сессий, налоги, кредиты, Batch и специальные service tiers не входят. Окончательное списание сверяй в панели OpenAI или Anthropic.

API возвращает целое поле estimated_cost_micros: раздели его на 1_000_000, чтобы получить USD. Поля cost_estimate_status, pricing_catalog_version, unpriced_model_count и unestimated_event_count объясняют покрытие суммы.

OpenAI-compatible Chat

Один endpoint принимает точный model ID OpenAI или Claude из /models. Это основной вариант для VS Code, Cursor и других OpenAI-compatible клиентов.

python
import os

from openai import OpenAI

client = OpenAI(
    api_key=os.environ["ML_PORTAL_API_KEY"],
    base_url="https://crawlingchaos.isgood.host/api/v1",
)

answer = client.chat.completions.create(
    model="OPENAI_OR_CLAUDE_MODEL_FROM_MODELS",
    messages=[{"role": "user", "content": "Проверь идею ML-проекта"}],
)
print(answer.choices[0].message.content)

Поддерживаются streaming и до 128 function tools, которые выполняет сам клиент. Hosted shell/web tools для Claude на сервере не включаются.

VS Code coding agent

  1. Открой API-ключи на Crawling Chaos.
  2. Оставь режим Автоматически · все совместимые модели и выбери способ хранения ключа. При необходимости можно собрать профиль только для одного протокола или одной модели.
  3. Скопируй или скачай chatLanguageModels.json, затем открой в VS Code команду Chat: Manage Language Models и добавь сгенерированную запись.
  4. Отдельный фрагмент settings.json включает основную BYOK-модель как utility model; после изменения выполни Developer: Reload Window.
Все модели: генератор добавляет каждую модель ровно один раз и выбирает совместимый endpoint на уровне модели. OpenAI предпочитает Responses с client function tools и получает zeroDataRetentionEnabled: true, чтобы VS Code не отправлял запрещённый previous_response_id. Claude и OpenAI-модели без Responses используют Chat Completions; в этом fallback-профиле reasoning picker не публикуется, поскольку каталог подтверждает reasoning и tools по отдельности, но не их совместимость в одном Chat-запросе. Для Claude modelOptions убирает одновременно заданные VS Code temperature и top_p. Модели без function tools не включаются в coding-agent профиль.

Сам JSON собирается за миллисекунды. Обычно прогретый каталог загружается менее чем за секунду; первое обновление после рестарта API может обращаться к провайдерам до 30 секунд. Кнопка повторной загрузки появляется в той же форме, а URL скриптов версионируются, чтобы браузер не оставался на старом генераторе.

Ссылка вида ${input:chat.lm.secret.…} работает только в том профиле VS Code, где была создана. Браузер не может записать секрет в VS Code SecretStorage. Режим «готовый JSON с ключом внутри» убирает ручную настройку, но сохраняет рабочий Bearer-ключ открытым текстом — не коммить и не синхронизируй такой файл.

BYOK-модель работает в Chat и agent mode. Обычные inline completions и часть функций поиска кода могут по-прежнему зависеть от встроенных сервисов VS Code/GitHub — это отдельный механизм, не ошибка gateway.

Вложения по возможностям модели

В Chat нажми +: список форматов строится из input_mime_types выбранной модели. OpenAI и Claude принимают изображения, PDF и проверенные UTF-8 файлы — Markdown, табличный текст, JSON/YAML и распространённые исходники. Если формат отсутствует в метаданных модели, интерфейс и API его отклонят.

Chat берёт лимиты из выбранной модели. Текущая OpenAI-политика: до 100 inline-частей и 50 000 000 декодированных байт суммарно. Claude допускает до 23 000 000 байт; проверенные 1M-context модели — до 600 image/document-блоков и PDF-страниц суммарно, а 200k-context модели — до 100. Так base64 JSON остаётся ниже нативного 32 MB лимита Messages. Это транспортный максимум: token quota и контекст применяются отдельно. Файл передаётся только в текущем запросе, не сохраняется в серверной истории и для следующего сообщения прикладывается заново.

OpenAI-модели получают изображения как image_url, PDF как нативный file.file_data, а UTF-8 текст и код шлюз после проверки преобразует в именованную пользовательскую текстовую часть. Claude-вложения Chat отправляет через нативный /messages: image/PDF в base64, а текст и исходники — как UTF-8 text/plain. Office-файлы сначала преобразуй в PDF или текст.

json · OpenAI Chat
{
  "model": "OPENAI_MODEL_FROM_MODELS",
  "messages": [{
    "role": "user",
    "content": [
      {"type": "file", "file": {
        "filename": "notes.md",
        "file_data": "data:text/plain;base64,..."
      }},
      {"type": "text", "text": "Сделай краткий разбор"}
    ]
  }]
}

OpenAI Responses

Выбери OpenAI-модель из /models и отправь текстовый запрос:

shell
curl "$ML_PORTAL_BASE_URL/responses" \
  -H "Authorization: Bearer $ML_PORTAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"OPENAI_MODEL_FROM_MODELS","input":"Составь план небольшого ML-эксперимента","max_output_tokens":4096}'

Python SDK

python
import os

from openai import OpenAI


client = OpenAI(
    api_key=os.environ["ML_PORTAL_API_KEY"],
    base_url="https://crawlingchaos.isgood.host/api/v1",
)

response = client.responses.create(
    model="OPENAI_MODEL_FROM_MODELS",
    input="Объясни precision и recall в пяти предложениях.",
)
print(response.output_text)

Если модель рекламирует выбранный уровень в reasoning_efforts, Responses принимает "reasoning": {"effort": "medium"}, а OpenAI Chat Completions — top-level "reasoning_effort": "medium". Значение Auto не отправляет provider-поле.

Native Claude Messages

Для возможностей, которых нет в compatibility-слое, остаётся нативный формат Anthropic Messages и отдельный endpoint:

shell
curl "$ML_PORTAL_BASE_URL/messages" \
  -H "Authorization: Bearer $ML_PORTAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"CLAUDE_MODEL_FROM_MODELS","max_tokens":4096,"messages":[{"role":"user","content":"Составь план ML-эксперимента"}]}'

Для Claude Opus 4.8 выбранный effort передаётся нативно через "output_config": {"effort": "high"}; "thinking": {"type": "adaptive"} — отдельное поле, которое интерфейс включает для adaptive thinking. OpenAI-compatible Chat намеренно отклоняет Claude-поле reasoning_effort с кодом reasoning_endpoint_unsupported: используй нативный POST /api/v1/messages, чтобы настройка не была молча проигнорирована. Обычный browser Chat уже выбирает этот нативный маршрут.

Если Anthropic ещё не настроен владельцем, Claude-модели не появляются в /models. Каталог проекта обновляется автоматически; новые Sonnet/Haiku могут включаться сразу, а новые более дорогие Opus/Fable требуют проверки владельца. Выбор провайдера всегда определяется точным model ID — случайного fallback нет.

Code Interpreter

Инструмент доступен только для OpenAI-модели, у которой /models содержит code_interpreter в массиве tools. В Playground переключатель включается автоматически по этой метаданной.

json
{
  "model": "OPENAI_MODEL_FROM_MODELS",
  "input": "Используй Python и рассчитай среднее [12, 17, 25, 31]",
  "tools": [{
    "type": "code_interpreter",
    "container": {"type": "auto"}
  }]
}

Это hosted-инструмент OpenAI, а не локальный shell на Crawling Chaos. Запрос отправляется через POST /responses.

Ошибки и лимиты

StatusЗначениеДействие клиента
401Ключ отсутствует, неверен или удалёнПроверить Bearer key
403Нет approval или модель запрещенаПроверить профиль и models
404AI route вызван не через Crawling ChaosИспользовать edge hostname
413 / 422Размер или поля запроса неверныИсправить запрос
429Rate limit или месячная квотаУчитывать Retry-After
503Provider не настроен или недоступенНе создавать новый аккаунт

При 429 дождись Retry-After. Ошибки 401, 403 и 422 требуют исправить ключ, доступ или тело запроса — повтор без изменения не поможет.