LLMka

Языковая модель Globerint — API чат-дополнений, совместимый с OpenAI

https://llm.globerint.ru/v1

Модель общего назначения, которая подставляется вместо api.openai.com/v1. Работает со штатным OpenAI SDK, LangChain, LlamaIndex и любым клиентом, умеющим обращаться к OpenAI — меняются только базовый адрес и ключ.

Содержание

Авторизация

Ключ передаётся заголовком Authorization. Он выдаётся отдельно; в примерах ниже подставьте свой вместо ВАШ_КЛЮЧ.

Authorization: Bearer ВАШ_КЛЮЧ

Базовый адрес: https://llm.globerint.ru/v1

Быстрый старт

Через curl:

curl https://llm.globerint.ru/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" \
  -d '{
    "model": "llmka-1",
    "messages": [{"role": "user", "content": "Объясни, что такое кэш, одним абзацем"}],
    "max_tokens": 200
  }'

Через официальный OpenAI SDK для Python — меняется только две строки:

from openai import OpenAI

client = OpenAI(
    base_url="https://llm.globerint.ru/v1",
    api_key="ВАШ_КЛЮЧ",
)

ответ = client.chat.completions.create(
    model="llmka-1",
    messages=[{"role": "user", "content": "Объясни, что такое кэш, одним абзацем"}],
    max_tokens=200,
)
print(ответ.choices[0].message.content)

Модели

НазваниеНазначение
llmka-1Обычный чат: диалог, классификация, перевод, пересказ, извлечение данных.
llmka-1-searchТо же, но с поиском в интернете: ответ опирается на найденные источники и содержит ссылки на них.
llmka-1-search-miniПоиск с укороченным бюджетом ответа. Для коротких фактических вопросов.

Адреса

АдресЧто делает
POST /v1/chat/completionsОсновной вызов: диалог, потоковая выдача, вызов функций, поиск.
GET /v1/modelsСписок доступных названий моделей.
POST /v1/web-searchПоиск отдельно от генерации: возвращает найденные источники без ответа модели.
GET /healthПроверка доступности.

Чат-дополнения

Формат запроса и ответа повторяет OpenAI. Роли — system, user, assistant; ответ приходит в choices[0].message.content, расход токенов — в usage.

{
  "model": "llmka-1",
  "messages": [
    {"role": "system", "content": "Ты помощник службы поддержки. Отвечай кратко."},
    {"role": "user", "content": "Как восстановить пароль?"}
  ],
  "temperature": 0.7,
  "max_tokens": 500
}

Режим размышления

По умолчанию модель сначала рассуждает про себя и только потом выдаёт ответ. Рассуждение приходит отдельным полем reasoning_content и расходует токены — на коротких ответах это лишняя трата, а при малом max_tokens модель может израсходовать весь бюджет на рассуждение и не дойти до ответа.

Выключается так:

{
  "model": "llmka-1",
  "messages": [{"role": "user", "content": "Столица Франции?"}],
  "chat_template_kwargs": {"enable_thinking": false},
  "max_tokens": 50
}

Оставляйте размышление включённым для задач с рассуждением — математика, логика, разбор кода. Выключайте для коротких ответов, классификации и извлечения данных.

Изображения

Модель принимает изображения. Вместо строки передайте content массивом, смешивая текст и картинку:

{
  "model": "llmka-1",
  "messages": [{
    "role": "user",
    "content": [
      {"type": "text", "text": "Что изображено на картинке?"},
      {"type": "image_url", "image_url": {"url": "data:image/png;base64,iVBORw0KGgo…"}}
    ]
  }],
  "max_tokens": 200
}

Изображение заметно увеличивает размер промпта, учитывайте это при подсчёте токенов. Звук и PDF не поддерживаются.

Структурированный вывод

Чтобы ответ гарантированно был разбираемым JSON нужной формы, опишите схему:

{
  "model": "llmka-1",
  "messages": [{"role": "user", "content": "Извлеки из текста имя и город: Анна из Казани"}],
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "person",
      "schema": {
        "type": "object",
        "properties": {
          "name": {"type": "string"},
          "city": {"type": "string"}
        },
        "required": ["name", "city"]
      }
    }
  }
}

Если достаточно любого корректного JSON без фиксированной формы — "response_format": {"type": "json_object"}.

Потоковая выдача

С "stream": true ответ приходит событиями text/event-stream: каждая строка начинается с data: , последняя — data: [DONE]. Текст лежит в choices[0].delta.content.

client = OpenAI(base_url="https://llm.globerint.ru/v1", api_key="ВАШ_КЛЮЧ")

поток = client.chat.completions.create(
    model="llmka-1",
    messages=[{"role": "user", "content": "Расскажи о море"}],
    stream=True,
)
for кусок in поток:
    print(кусок.choices[0].delta.content or "", end="", flush=True)

Вызов функций

Поддерживается в том же виде, что у OpenAI: описываете функции в tools, модель возвращает tool_calls с именем и аргументами, вы выполняете вызов и отдаёте результат сообщением с ролью tool.

{
  "model": "llmka-1",
  "messages": [{"role": "user", "content": "Какая погода в Москве?"}],
  "tools": [{
    "type": "function",
    "function": {
      "name": "get_weather",
      "description": "Текущая погода в городе",
      "parameters": {
        "type": "object",
        "properties": {"city": {"type": "string"}},
        "required": ["city"]
      }
    }
  }]
}

Укажите модель llmka-1-search — и ответ будет построен на найденных источниках, а ссылки на них придут в annotations.

{
  "model": "llmka-1-search",
  "messages": [{"role": "user", "content": "Что нового в законе о такси в 2026 году?"}],
  "web_search_options": {"search_context_size": "high"}
}

search_context_size принимает low, medium или high и задаёт, сколько источников получит модель. Чтобы ограничить поиск определёнными сайтами, добавьте список доменов:

"web_search_options": {
  "search_context_size": "medium",
  "allowed_domains": ["consultant.ru", "garant.ru"]
}

Параметры

ПараметрТипОписание
modelстрокаНазвание модели из списка выше.
messagesмассивИстория диалога.
max_tokensцелоеПредел длины ответа.
temperature0–2Разброс. Меньше — предсказуемее.
top_p0–1Отбор по суммарной вероятности.
streamда/нетПотоковая выдача событиями.
stopстрока или массивПоследовательности, на которых генерация прекращается.
response_formatобъектJSON-схема или произвольный JSON.
toolsмассивОписания функций.
chat_template_kwargsобъект{"enable_thinking": false} выключает размышление.
web_search_optionsобъектНастройки поиска для моделей *-search.

Ошибки

КодЧто означает
401Ключ не передан или не принят.
400Неверное тело запроса: опечатка в поле, недопустимое значение.
404Неизвестное название модели или адрес.
429Слишком много запросов одновременно. Повторите с задержкой.
500, 503Сбой на стороне сервиса. Повторите запрос.

Тело ошибки повторяет формат OpenAI: объект error с полями message, type и code.

Ограничения