WorldSignal

Run Muse Glimmer for free

The API is OpenAI-compatible. Change the base URL and the model name — everything else works as it is.

Python

Install the OpenAI SDK, then point it here.

# pip install -U openai
from openai import OpenAI

client = OpenAI(
    base_url="https://api.worldsignal.ai/v1",
    api_key="ws_...",
)

r = client.chat.completions.create(
    model="Muse-Glimmer-30B",
    messages=[{"role": "user", "content": "Hello!"}],
    max_tokens=4000,          # keep this high — see below
    temperature=1.0,
    top_p=0.95,
)
print(r.choices[0].message.content)

Set max_tokens high

This is the one thing that trips people up.

max_tokens covers the reasoning and the answer together. Too low and you get an empty response, no error — the budget went to thinking. Replying “OK” costs about 95 tokens. Use 4000 or more.

msg = r.choices[0].message
print(msg.model_extra["reasoning_content"])  # the thinking
print(msg.content)                              # the answer

Streaming

Recommended for long generations so requests don't time out.

stream = client.chat.completions.create(
    model="Muse-Glimmer-30B",
    messages=[{"role": "user", "content": "Write a poem."}],
    max_tokens=4000,
    stream=True,
)
for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Images

Send an image alongside your text.

import base64

b64 = base64.b64encode(open("shot.png", "rb").read()).decode()

r = client.chat.completions.create(
    model="Muse-Glimmer-30B",
    messages=[{"role": "user", "content": [
        {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}},
        {"type": "text", "text": "What is this?"},
    ]}],
    max_tokens=4000,
)

Images must be at least 14×14 pixels — that’s the vision encoder’s patch size. Smaller images return a 500.

Tool calling

Standard OpenAI tools in, standard tool_calls out.

r = client.chat.completions.create(
    model="Muse-Glimmer-30B",
    messages=[{"role": "user", "content": "Weather in Tokyo?"}],
    tools=[{"type": "function", "function": {
        "name": "get_weather",
        "parameters": {"type": "object",
            "properties": {"city": {"type": "string"}}},
    }}],
    max_tokens=4000,
)
print(r.choices[0].message.tool_calls)

curl

curl https://api.worldsignal.ai/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ws_..." \
  -d '{"model":"Muse-Glimmer-30B","messages":[{"role":"user","content":"Hi"}],"max_tokens":4000}'

On Windows PowerShell use curl.exe, not curl — the latter is an alias for Invoke-WebRequest and takes different flags.

Claude Code

Point Claude Code at this endpoint instead of Anthropic.

Add to ~/.claude/settings.json. On Windows that’s C:\Users\you\.claude\settings.json. Merge the env keys if the file already exists, then restart Claude Code.

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.worldsignal.ai",
    "ANTHROPIC_AUTH_TOKEN": "ws_...",
    "ANTHROPIC_MODEL": "Muse-Glimmer-30B",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "Muse-Glimmer-30B",
    "API_TIMEOUT_MS": "3000000"
  },
  "model": "Muse-Glimmer-30B"
}

Use ANTHROPIC_AUTH_TOKEN, not ANTHROPIC_API_KEY — that one sends x-api-key and returns 401. ANTHROPIC_BASE_URL takes no /v1. WebSearch and WebFetch stop working here; everything else does.

Limits

300requests / hour
1Mtokens / day
131,072context window

Going over returns 429. Counters roll continuously, so a few minutes clears it. Prompt and max_tokens share the 131,072 budget.