OpenAI-compatible
Point the OpenAI SDK at ai.gullylabs.xyz/v1 and send model gully-ai. Chat completions, streaming, /v1/models and /v1/usage.
GullyAI runs Qwen3.6-27B (Apache-2.0 open weights) on vLLM, behind an OpenAI-compatible API with a key, a rate limit and a token meter for every product. One model for Gully Street, the Telegram bots, Gully Security, Gully Studio and HolderMaps.
https://ai.gullylabs.xyz/v1gully-aiGET ai.gullylabs.xyz/healthzEach dot is one health check made by this page, every 30 seconds. Nothing here is simulated.
gully-aiIf your code talks to OpenAI, it talks to GullyAI. Change the base URL and the key, keep everything else.
Point the OpenAI SDK at ai.gullylabs.xyz/v1 and send model gully-ai. Chat completions, streaming, /v1/models and /v1/usage.
Every product gets its own gai_ key. Only a SHA-256 hash of it is stored, and one key can be revoked without touching the others.
Requests per minute, tokens per minute and a max-token cap per key. Tokens are metered per key. Prompts and completions are never logged.
131,072 tokens configured on a 48 GB GPU (FP8 weights). The model itself supports 262K natively on larger cards.
Send tools in the OpenAI format and get tool_calls back, streaming included. Built for agents that call Gully services.
The model thinks before it answers. The thinking comes back in reasoning_content, separate from the answer, and can be turned off for fast, cheap calls.
Base URL, your key, model gully-ai. The same request works from curl, the OpenAI SDK for Node or Python, or any OpenAI-compatible client.
curl https://ai.gullylabs.xyz/v1/chat/completions \
-H "Authorization: Bearer $GULLY_AI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gully-ai",
"messages": [{"role": "user", "content": "Explain gas in one sentence."}],
"max_tokens": 300
}'
import OpenAI from 'openai';
const ai = new OpenAI({
baseURL: 'https://ai.gullylabs.xyz/v1',
apiKey: process.env.GULLY_AI_API_KEY,
});
const r = await ai.chat.completions.create({
model: 'gully-ai',
messages: [{ role: 'user', content: 'Explain gas in one sentence.' }],
max_tokens: 300,
});
console.log(r.choices[0].message.content, r.usage);
import os
from openai import OpenAI
ai = OpenAI(base_url="https://ai.gullylabs.xyz/v1",
api_key=os.environ["GULLY_AI_API_KEY"])
r = ai.chat.completions.create(
model="gully-ai",
messages=[{"role": "user", "content": "Explain gas in one sentence."}],
max_tokens=300,
)
print(r.choices[0].message.content)
Each product calls GullyAI from its own backend with its own key, so limits and usage are per product and nothing leaks into a browser or an app.
Chat assistant in the app: summarise activity, explain a token, draft posts. Streaming.
keygully-streetShort replies to bot commands and token explanations, with thinking off for speed.
keytg-botsExplains scan results, triages findings and calls a scan_token tool itself.
gully-security
NPC dialogue and quest text, through the game backend. Keys never ship inside a game build.
keygully-studio
Narrates a holder distribution: who holds what, which wallets cluster, how concentrated it is.
keyholdermaps
Gully Chain is supported in every Gully product. GullyAI's part is the agent: a tool-calling loop that reads the chain through Gully RPC, checks tokens with HolderMaps and Gully Security, and pays for paid endpoints with x402 through Gully Pay. Money and chain writes always need a confirm or a hard budget.
The agent is designed, not built yet. It comes after GullyAI has served plain chat for a few weeks.
Straight answers about what exists today.
No waitlist. Tell us what you are building and we issue your key with its own limits. It works as soon as the model server is online.