본문으로 건너뛰기

추론 API

GenKaKu는 에이전트를 위해 구축된 OpenAI 호환 HTTP API를 제공합니다. 채팅 완성, 스트리밍, 도구/함수 호출, 모델 검색을 지원하므로 OpenAI와 통신하는 모든 에이전트 프레임워크는 두 가지만 변경하면 작동합니다: base_urlapi_key. 다른 것은 변경되지 않습니다.

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

GenKaKu에서 에이전트를 실행하는 이유: 검열 없는 모델(거부 없음), 탈 컴퓨팅, 넓은 컨텍스트, 프롬프트는 절대 저장되지 않음(메모리에서 처리되고 폐기됨 — 과금을 위한 토큰 수만 보관), 워커에게 익명(작업을 실행하는 GPU는 프롬프트 텍스트만 받음, 신원은 받지 않음). 프레임워크 설정은 에이전트 구축을 참조하세요.

인증

genkaku.app/settingsAPI 탭에서 API 키를 생성합니다. 키는 sk-c0mpute-… 형식이며 생성 시 한 번만 표시됩니다. 베어러 토큰으로 전달합니다:

Authorization: Bearer sk-c0mpute-...

요청은 키를 소유한 계정의 크레딧 잔액에 과금됩니다. 대시보드에서 USDC로 충전합니다.

모델

모델설명
qwen3.8-27b-uncensored도구, 비전, 넓은 컨텍스트를 갖춘 검열 없는 Qwen3.8 27B. 네트워크의 모델 — c0mpute 코드를 구동합니다.
qwen3.8-27b-uncensored-think확장된 사고 체인 추론이 포함된 동일한 모델.
genkaku-pro검열 없는 Qwen3.5. 빠르며 광범위한 브라우저 워커 풀에서 실행됩니다. 9B 또는 4B로 응답합니다.
genkaku-swarmMiniMax-M2.5 (229B), 탈중앙화 GPU 스Warm에서 제공됩니다. 가용성은 스Warm 링 준비 상태에 따라 다릅니다.

GET /v1/models는 실시간 available 플래그(27B는 네이티브 GPU 워커가 온라인 상태여야 함)와 pricing 객체({ "type": "per_token", "usd_per_m_input": 0.15, "usd_per_m_output": 0.90 })와 함께 나열합니다. 27B에 의존하는 경우 항상 가용성을 확인하세요.

이전 모델 ID(supergemma4-26b, code)는 더 이상 사용되지 않는 별칭입니다. 마이그레이션 기간 동안 여전히 응답하지만 제거될 예정입니다 — 새 통합은 위의 ID를 가리키세요.

가격

과금은 토큰별이며, 모든 텍스트 모델에 하나의 요금표입니다:

USD / 1M 토큰
입력$0.15
출력$0.90

사고 토큰은 출력 토큰이며 추가 요금이 없으므로 qwen3.8-27b-uncensored-think는 기본 모델과 동일한 토큰당 비용입니다 — 단지 더 많이 생성하는 경향이 있습니다.

1 크레딧 = $0.001이며, 요청은 최소 1 크레딧으로 올림됩니다. 따라서 일반적인 메시지(~1,200 입력/~600 출력)는 약 1 크레딧입니다. 크레딧은 대시보드에서 USDC로 500 크레딧당 1달러에 구매합니다. 모든 응답에는 실제로 과금된 수를 포함하는 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 호환, 검열 없는 이미지 생성(기여자 GPU에서 Chroma1-HD). 이미지당 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("WIDTHxHEIGHT", 기본값 1024x1024), negative_prompt, seed, nsfw(불리언, 기본값 false — SFW 모드는 출력 분류기를 실행; 두 모드 모두 절대 안전 라인 적용). n은 1이어야 하며 response_formatb64_json이어야 합니다(URL 없음 — 아무것도 저장되지 않음). 렌더링은 약 30초 소요; 오류는 OpenAI 모양을 사용합니다(402 insufficient_credits, 이미지 GPU가 사용 가능한 경우 503).

채팅 완성

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로 설정하여 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는 이미지를 허용합니다. 인라인 base64 data: URL과 함께 OpenAI의 멀티모달 콘텐츠 형식을 사용합니다:

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-..." });
// use c0mpute("qwen3.8-27b-uncensored") as the model in generateText / streamText / tool loops

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-... # your key, inline
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 # must be exported, e.g. in ~/.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" } })으로 반환됩니다:

상태의미
401API 키 누락 또는 잘못됨
402크레딧 부족 — USDC로 충전하세요
404알 수 없는 모델
429속도 제한 초과
503요청된 모델에 사용 가능한 워커 없음(27B는 네이티브 워커가 온라인 상태여야 함)

속도 제한

기본 키당 분당 60개 요청. 더 필요하면 연락하세요.

이미지 생성

POST /api/images/generate — 이미지를 생성하고 base64 데이터 URL로 인라인으로 받습니다. 이것은 OpenAI 호환 /v1 표면과 별도의 GenKaKu 엔드포인트입니다. 인증은 동일한 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}'