Перейти к основному содержимому

API инференса

GenKaKu предоставляет совместимый с OpenAI HTTP API — созданный для агентов. Он поддерживает завершения чата, потоковую передачу, вызовы инструментов/функций и обнаружение моделей, поэтому любой фреймворк агентов, работающий с OpenAI, работает с изменением двух вещей: base_url и api_key. Больше ничего не меняется.

base_url:  https://genkaku.app/api/v1

Запускайте своего агента на GenKaKu: без цензуры модели (без отказов), децентрализованные вычисления, большой контекст, и ваши промпты никогда не хранятся (обрабатываются в памяти и отбрасываются — сохраняются только подсчёты токенов для тарификации) и анонимны для воркера (GPU, выполняющий вашу задачу, получает только текст промпта, никогда вашу личность). См. Создание агентов для настройки фреймворков.

Аутентификация

Сгенерируйте API-ключ на genkaku.app/settings → вкладка API. Ключи выглядят как sk-c0mpute-… и показываются один раз при создании. Передайте его как bearer-токен:

Authorization: Bearer sk-c0mpute-...

Запросы тарифицируются с баланса кредитов аккаунта, которому принадлежит ключ. Пополните баланс USDC из панели управления.

Модели

МодельОписание
qwen3.8-27b-uncensoredБез цензуры Qwen3.8 27B с инструментами, зрением и большим контекстом. Модель сети — также обеспечивает c0mpute code.
qwen3.8-27b-uncensored-thinkТа же модель с расширенным цепочечным рассуждением.
genkaku-proБез цензуры Qwen3.5. Быстрая, работает в широком пуле браузерных воркеров. Обслуживается 9B или 4B в зависимости от воркера, который её подхватил.
genkaku-swarmMiniMax-M2.5 (229B), обслуживаемый децентрализованным роем GPU. Доступность зависит от готовности кольца роя.

GET /v1/models выводит их с флагом available в реальном времени (27B требует онлайн-воркера с нативным GPU) и объектом pricing ({ "type": "per_token", "usd_per_m_input": 0.15, "usd_per_m_output": 0.90 }). Всегда проверяйте доступность, если зависите от 27B.

Старые идентификаторы моделей (supergemma4-26b, code) — устаревшие псевдонимы. Они по-прежнему отвечают в течение периода миграции и будут удалены — направляйте новые интеграции на указанные выше идентификаторы.

Ценообразование

Тарификация за токен, единая ставка для каждой текстовой модели:

USD / 1M токенов
Вход$0.15
Выход$0.90

Токены мышления — это токены вывода и не облагаются доплатой, поэтому qwen3.8-27b-uncensored-think стоит столько же за токен, что и базовая модель — просто генерирует их больше.

1 кредит = $0.001, и запрос округляется до целых кредитов с минимальным значением 1, поэтому типичное сообщение (~1200 вход / ~600 выход) стоит около 1 кредита. Кредиты покупаются за USDC на панели управления по 500 кредитов за доллар. Каждый ответ содержит блок usage с фактически тарифицируемыми подсчётами; потоковые ответы включают его в последнем фрагменте, когда вы отправляете "stream_options": {"include_usage": true}. Запрос, возвращающий вызов инструмента (один шаг цикла агента), тарифицирует токены, которые он сгенерировал. Лимит скорости: 60 запросов/мин на ключ.

Поскольку финальная стоимость известна только после остановки ответа, запрос размещает краткосрочный холд на максимальную стоимость, и неиспользованная часть возвращается сразу после расчёта. Проверка баланса должна учитывать холд, а не только типичную стоимость.

Тарифные планы и API-ключи

Если аккаунт, которому принадлежит ключ, находится на тарифном плане, API-запросы сначала тратят дневные кредиты этого плана, прежде чем обращаться к балансу. Дневные кредиты сбрасываются в 00:00 UTC и не переносятся.

Бесплатные дневные кредиты — исключение. Они предназначены для людей, использующих приложение, поэтому API-запросы никогда их не используют и всегда тарифицируют баланс.

Баланс

GET /v1/balance возвращает остаток кредитов на аккаунте, которому принадлежит ключ:

curl https://genkaku.app/api/v1/balance \
-H "Authorization: Bearer $C0MPUTE_API_KEY"
{
"object": "balance",
"credits": 12500,
"usd": 12.50,
"total_deposited": 20000,
"total_spent": 7500
}

Используйте для проверки остатка кредитов перед пакетом запросов или для отображения предупреждения о низком балансе в вашей интеграции.

Генерация изображений

POST /v1/images/generations — совместимый с OpenAI, без цензуры API генерации изображений (Chroma1-HD на GPU участников). 10 кредитов ($0.01) за изображение. Изображения возвращаются встроенными как base64 и никогда не хранятся на сервере.

curl https://genkaku.app/api/v1/images/generations \
-H "Authorization: Bearer $C0MPUTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "a neon-lit alley in the rain, cinematic", "size": "1024x1024"}'
from openai import OpenAI
client = OpenAI(base_url="https://genkaku.app/api/v1", api_key="sk-c0mpute-...")
img = client.images.generate(prompt="a neon-lit alley in the rain, cinematic", response_format="b64_json")
png_b64 = img.data[0].b64_json

Параметры: prompt (обязательный), size ("ШИРИНАxВЫСОТА", по умолчанию 1024x1024), negative_prompt, seed, nsfw (булев, по умолчанию false — в режиме SFW запускается классификатор вывода; абсолютная линия безопасности соблюдается в обоих режимах). n должно быть 1, а response_format должно быть b64_json (без URL — ничего не хранится). Рендер занимает ~30с; ошибки используют форматы OpenAI (402 insufficient_credits, 503 когда нет свободного GPU для изображений).

Завершения чата

POST /v1/chat/completions

curl

curl https://genkaku.app/api/v1/chat/completions \
-H "Authorization: Bearer $C0MPUTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "genkaku-pro",
"messages": [{"role": "user", "content": "Hello!"}]
}'

Python (OpenAI SDK)

from openai import OpenAI

client = OpenAI(base_url="https://genkaku.app/api/v1", api_key="sk-c0mpute-...")

resp = client.chat.completions.create(
model="genkaku-pro",
messages=[{"role": "user", "content": "Hello!"}],
)
print(resp.choices[0].message.content)

Node (OpenAI SDK)

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://genkaku.app/api/v1", apiKey: "sk-c0mpute-..." });

const resp = await client.chat.completions.create({
model: "genkaku-pro",
messages: [{ role: "user", content: "Hello!" }],
});
console.log(resp.choices[0].message.content);

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

Установите stream: true для получения Server-Sent Events как объектов chat.completion.chunk, завершающихся data: [DONE].

stream = client.chat.completions.create(
model="genkaku-pro",
messages=[{"role": "user", "content": "Write a haiku."}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")

Вызов функций (инструменты)

Передайте собственные tools. Когда модель решает вызвать инструмент, ответ возвращается с finish_reason: "tool_calls" и вызовом(ами) в message.tool_calls — вы запускаете инструмент и отправляете результат обратно как сообщение tool. Именно это позволяет фреймворкам агентов использовать свои собственные инструменты на GenKaKu.

tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]

messages = [{"role": "user", "content": "What's the weather in Paris?"}]
r1 = client.chat.completions.create(model="qwen3.8-27b-uncensored", messages=messages, tools=tools)

call = r1.choices[0].message.tool_calls[0] # get_weather({"city": "Paris"})
messages.append(r1.choices[0].message)
messages.append({"role": "tool", "tool_call_id": call.id, "content": "18C and sunny"})

r2 = client.chat.completions.create(model="qwen3.8-27b-uncensored", messages=messages, tools=tools)
print(r2.choices[0].message.content) # "The weather in Paris is 18°C and sunny."

Вызов инструментов и зрение наиболее надёжны на qwen3.8-27b-uncensored. Браузерная полоса может пытаться использовать инструменты, но менее стабильна.

Зрение

qwen3.8-27b-uncensored принимает изображения. Используйте мультимодальный формат контента OpenAI со встроенным base64 data: URL:

import base64
img = base64.b64encode(open("photo.png", "rb").read()).decode()

resp = client.chat.completions.create(
model="qwen3.8-27b-uncensored",
messages=[{"role": "user", "content": [
{"type": "text", "text": "What's in this image?"},
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{img}"}},
]}],
)
print(resp.choices[0].message.content)

Передавайте изображения встроенными как base64; удалённые https URL изображений не загружаются в этой версии. Зрение требует qwen3.8-27b-uncensored. Только ввод изображений — для создания изображений используйте эндпоинт генерации изображений.

Создание агентов

GenKaKu разработан как мозг для фреймворков агентов. Ваш фреймворк продолжает делать то, что делает — память, системный промпт / персона, цикл инструментов — а GenKaKu — это модель, которую он вызывает. Память и персона не требуют особой обработки: это просто массив сообщений и системное сообщение, которые вы уже отправляете. Инструменты работают через стандартный поток вызова функций выше (модель возвращает tool_calls, ваш фреймворк запускает их и отправляет результаты обратно).

Для агентов используйте qwen3.8-27b-uncensored (или qwen3.8-27b-uncensored-think для более сложных рассуждений) — 27B гораздо надёжнее при многошаговом использовании инструментов, чем браузерная полоса.

Любой совместимый с OpenAI фреймворк

Универсальная настройка: направьте провайдера моделей фреймворка на GenKaKu.

base_url / baseURL :  https://genkaku.app/api/v1
api_key : sk-c0mpute-...
model : qwen3.8-27b-uncensored

OpenAI Agents SDK (Python)

from agents import Agent, Runner, OpenAIChatCompletionsModel
from openai import AsyncOpenAI

client = AsyncOpenAI(base_url="https://genkaku.app/api/v1", api_key="sk-c0mpute-...")
agent = Agent(name="Assistant", instructions="You are helpful.",
model=OpenAIChatCompletionsModel(model="qwen3.8-27b-uncensored", openai_client=client))
print((await Runner.run(agent, "Plan my week.")).final_output)

LangChain / LangGraph (Python)

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="qwen3.8-27b-uncensored", base_url="https://genkaku.app/api/v1", api_key="sk-c0mpute-...")

Vercel AI SDK (TypeScript)

import { createOpenAI } from "@ai-sdk/openai";
const c0mpute = createOpenAI({ baseURL: "https://genkaku.app/api/v1", apiKey: "sk-c0mpute-..." });
// используйте c0mpute("qwen3.8-27b-uncensored") как модель в generateText / streamText / циклах инструментов

Hermes

GenKaKu — это пользовательский совместимый с OpenAI эндпоинт. Для Hermes используйте qwen3.8-27b-uncensored-think (27B с расширенными рассуждениями). Добавьте его как пользовательского провайдера в ~/.hermes/config.yaml, с API-ключом, установленным у провайдера (Hermes не читает ~/.hermes/.env во время выполнения, поэтому ключ должен находиться в конфигурации или экспортированной переменной окружения):

custom_providers:
- name: c0mpute
base_url: https://genkaku.app/api/v1
api_key: sk-c0mpute-... # ваш ключ, встроенный
models:
qwen3.8-27b-uncensored-think: {}

Не хотите хардкодить ключ? Используйте key_env и экспортируйте эту переменную в вашей оболочке (Hermes читает её из среды процесса, а не из .env):

custom_providers:
- name: c0mpute
base_url: https://genkaku.app/api/v1
key_env: OPENAI_API_KEY # должен быть экспортирован, например, в ~/.bashrc
models:
qwen3.8-27b-uncensored-think: {}

Затем выберите его через hermes model (или /model в сессии) и запустите, например hermes -z "hello" -m qwen3.8-27b-uncensored-think.

Если вы видите HTTP 401: Invalid API key, Hermes отправляет свой заполнитель no-key-required — он не нашёл ваш ключ. Установите api_key у провайдера, как указано выше (помещение ключа только в ~/.hermes/.env не работает).

Ошибки

Ошибки возвращаются в формате OpenAI ({ "error": { "message", "type", "code" } }):

СтатусЗначение
401Отсутствует или недействителен API-ключ
402Недостаточно кредитов — пополните баланс USDC
404Неизвестная модель
429Превышен лимит скорости
503Нет доступного воркера для запрошенной модели (27B требует онлайн-нативного воркера)

Лимиты скорости

По умолчанию 60 запросов/мин на ключ. Нужно больше? Свяжитесь с нами.

Генерация изображений

POST /api/images/generate — генерация изображения и получение его встроенным как base64 data URL. Это эндпоинт GenKaKu, отдельный от совместимого с OpenAI интерфейса /v1. Аутентификация использует тот же bearer-ключ sk-c0mpute-… (или авторизованную сессию).

Запрос

ПолеТипПо умолчаниюПримечания
promptстрокаОбязательный.
negative_promptстрокаОпциональный. Базовый антиартефактный негатив всегда применяется сверху.
width / heightцелое1024512–1536, привязано к кратным 64.
stepsцелое3210–60.
cfgчисло4.0Масштаб направления; Chroma предпочитает ~3.5–4.5.
seedцелоеслучайноеОпциональный, для воспроизводимого вывода.
nsfwлогическоеfalseРазрешить взрослый контент (18+). Если выключен, взрослый вывод блокируется.

Ответ

{
"image": "data:image/png;base64,...",
"model": "c0mpute-image",
"seed": 31337,
"width": 1024,
"height": 1024,
"credits_charged": 10
}

Изображение возвращается встроенным и никогда не хранится на сервере. 10 кредитов ($0.01) за изображение, автоматически возвращается при неудаче.

Ошибки

  • 400 — промпт заблокирован политикой контента, или запрос SFW привёл к взрослому выводу.
  • 402 — недостаточно кредитов.
  • 503 — нет онлайн-воркеров изображений в данный момент (попробуйте позже).

curl

curl https://genkaku.app/api/images/generate \
-H "Authorization: Bearer $C0MPUTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"a candid photo of a fox in snow, 35mm film","width":1216,"height":832}'