Lovely RouterДокументация
Получить ключ
Models API

Gemini

Вызывайте модели Gemini через родной Gemini API с помощью Google Gen AI SDK или Gemini CLI. Описаны generateContent, потоковая передача с alt=sse, countTokens и мышление.

Lovely Router обслуживает методы Gemini API generateContent, streamGenerateContent и countTokens по пути /v1beta/models/{model}. Направьте Google Gen AI SDK на https://lovelyrouter.com и передайте свой ключ Lovely Router в качестве API-ключа. Тела запросов передаются без изменений, поэтому справочник по API Google действует для каждого поля.

Настройка SDK#

SDK передают ключ в x-goog-api-key. Параметр запроса ?key= тоже работает.

curl "https://lovelyrouter.com/v1beta/models/gemini-3.1-pro:generateContent" \
  -H "x-goog-api-key: $LOVELY_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "contents": [{"role": "user", "parts": [{"text": "Explain DNS in two sentences."}]}]
  }'

Установите SDK командой pip install google-genai или npm install @google/genai. Id моделей соответствуют GET /v1/models; написания Google вроде gemini-3.1-pro-preview указывают на ту же модель. GET /v1beta/models перечисляет все модели, доступные в этом формате, в собственном формате ответа Gemini.

Потоковая передача ответов#

Вызовите :streamGenerateContent?alt=sse, чтобы получать server-sent events. Каждое событие — частичный GenerateContentResponse; последнее содержит итоговый usageMetadata. SDK добавляют alt=sse сами.

curl -N "https://lovelyrouter.com/v1beta/models/gemini-3-flash:streamGenerateContent?alt=sse" \
  -H "x-goog-api-key: $LOVELY_API_KEY" \
  -H "content-type: application/json" \
  -d '{"contents": [{"role": "user", "parts": [{"text": "Count to ten, slowly."}]}]}'

Без alt=sse метод передаёт поток в виде одного JSON-массива. Это тоже работает, но SSE проще разбирать, и он позволяет шлюзу отправить аккуратное событие ошибки, если поток застрянет. См. Потоковая передача.

Системная инструкция и мышление#

systemInstruction, generationConfig, safetySettings и tools (объявления функций) передаются так, как их описывает Google. Модели Gemini 3 по умолчанию думают; настройте это через thinkingConfig, как описано в руководстве Google по мышлению.

response = client.models.generate_content(
    model="gemini-3.1-pro",
    contents="Plan a three-day trip to Kyoto.",
    config=types.GenerateContentConfig(
        system_instruction="You are a concise travel planner.",
        max_output_tokens=4096,
    ),
)
print(response.text)
print(response.usage_metadata)

Токены мышления отражаются в usageMetadata.thoughtsTokenCount и тарифицируются по цене вывода вместе с candidatesTokenCount. Сводки рассуждений возвращаются как части с "thought": true, только если запрос задаёт generationConfig.thinkingConfig.includeThoughts: true, как и в API Google; без этого в ответе нет частей с рассуждениями.

Подсчёт токенов#

:countTokens принимает те же contents, что и вызов генерации, и возвращает totalTokens. Он бесплатный и работает при нулевом балансе. Подсчёт приблизительный: используйте его, чтобы сверить размер с контекстным окном, а не чтобы предсказать точное списание.

curl "https://lovelyrouter.com/v1beta/models/gemini-3.1-pro:countTokens" \
  -H "x-goog-api-key: $LOVELY_API_KEY" \
  -H "content-type: application/json" \
  -d '{"contents": [{"role": "user", "parts": [{"text": "Hello, Gemini"}]}]}'

Gemini CLI#

Gemini CLI берёт эндпоинт и ключ из окружения:

Shell
export GOOGLE_GEMINI_BASE_URL=https://lovelyrouter.com
export GEMINI_API_KEY="$LOVELY_API_KEY"
gemini -m gemini-3.1-pro

Другие клиенты описаны в разделе Использовать в своих инструментах.

Кеширование#

Gemini сам кеширует повторяющиеся префиксы промптов (неявное кеширование). Кешированные токены отражаются в usageMetadata.cachedContentTokenCount и тарифицируются по цене чтения из кеша. Шлюз держит каждый разговор на одном канале, чтобы кеш оставался тёплым; см. Кеширование промптов.

Что не поддерживается#

Эти эндпоинты Gemini API возвращают 404: cachedContents (явное кеширование контекста), загрузка файлов, embedContent и batchEmbedContents, пакетный режим и Live API.

Заголовки#

ЗаголовокПримечания
x-goog-api-keyВаш ключ Lovely Router. Authorization: Bearer и ?key= тоже работают.
x-lovely-groupНеобязателен. Закрепляет запрос за группой каналов, если ваш ключ к ней не привязан.
x-session-idНеобязателен. Объединяет запросы в один разговор для маршрутизации с учётом кеша.

Ошибки возвращаются в формате Gemini, {"error": {"code": 429, "message": "...", "status": "RESOURCE_EXHAUSTED"}}; см. Ошибки.