← Интеграции

curl из GitLab CI

чистый HTTP без библиотек

Что даёт

Любой шаг пайплайна может спросить модель: проверить текст, сгенерировать документацию, перевести changelog.

Эндпоинт: POST https://api.morsmorii.ru/v1/chat/completions

Какую модель брать

claude-haiku-4-5 для коротких текстов, claude-sonnet-5-5, когда нужно понимание кода

В CI важны скорость и цена: Haiku отвечает за секунды и стоит копейки; на анализ diff берите Sonnet.

Ориентир стоимости

сообщение коммита или описание MR на Haiku 4.5: ~3 000 токенов на входе — около 1 ₽

Конфигурация

Вместо sk-ВАШ_КЛЮЧ_MORSMORII подставьте ключ из раздела «API-ключи». Для инструмента лучше завести отдельный ключ с ограничением по моделям и бюджетом.

.gitlab-ci.yml
ask_model:
  image: alpine:3.20
  before_script:
    - apk add --no-cache curl jq
  script:
    - |
      jq -n --arg text "$(head -c 20000 README.md)" \
        '{model: "claude-haiku-4-5", messages: [{role: "user", content: ("Проверь орфографию:\n\n" + $text)}]}' > req.json
      curl -sS --fail https://api.morsmorii.ru/v1/chat/completions \
        -H "Authorization: Bearer $MORSMORII_API_KEY" \
        -H "Content-Type: application/json" \
        -d @req.json \
        | jq -r '.choices[0].message.content'
Ошибки: код и текст в едином формате
{"error":{"message":"The model `claude-opus-5-5` is not enabled for this API key. Enabled models: claude-haiku-4-5. Create a key with this model at https://app.morsmorii.ru/developers","type":"invalid_request_error","param":"model","code":"model_not_allowed_for_key"}}

Как ограничить ключ

  1. В разделе «API-ключи» создайте отдельный ключ для этого инструмента — так расход виден отдельно, а отзыв не заденет остальное.
  2. В поле «Модели» оставьте только рекомендованные выше: ключ ответит 403 на любую другую модель.
  3. Задайте месячный бюджет в рублях: после него — 429 key_budget_exceeded, списание останавливается.
  4. В команде каждый сотрудник заводит свои ключи: расход по людям видно в разделе «Команда» и в GET /v1/usage.

Тонкости

  • Используйте --fail, чтобы job падал на 4xx/5xx, и masked-переменную для ключа.
  • Заголовок x-request-id в ответе — для обращения в поддержку.
Как проверено: проверено запуском инструмента. Те же команды выполнены curl'ом из контейнера alpine с jq: ответ с --fail, ошибки 401 без ключа, 403 на модель вне ключа, 404 на неизвестную модель; 429 по бюджету ключа — автотестом гейта.