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-swarm | MiniMax-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 | целое | 1024 | 512–1536, привязано к кратным 64. |
steps | целое | 32 | 10–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}'