Claude API with Python

Use the official anthropic Python SDK with Lumosel. The SDK works unchanged — just point base_url at Lumosel and use your API key.

Installation

pip install anthropic

Basic request

from anthropic import Anthropic

client = Anthropic(
    base_url="https://api.lumosel.vip",
    api_key="YOUR_API_KEY",
)

message = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello, Claude"}],
)

print(message.content[0].text)

Streaming

with client.messages.stream(
    model="claude-opus-4-8",
    max_tokens=4096,
    messages=[{"role": "user", "content": "Write a short story"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

Multi-turn conversation

messages = []

# First turn
messages.append({"role": "user", "content": "My name is Alice."})
response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=messages,
)
messages.append({"role": "assistant", "content": response.content})

# Second turn
messages.append({"role": "user", "content": "What's my name?"})
response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=messages,
)
print(response.content[0].text)

Token counting

count = client.messages.count_tokens(
    model="claude-opus-4-8",
    messages=[{"role": "user", "content": "Hello"}],
)
print(f"Input tokens: {count.input_tokens}")

Tool use

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

response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    tools=tools,
    messages=[{"role": "user", "content": "What's the weather in Paris?"}],
)

# Handle tool use blocks
for block in response.content:
    if block.type == "tool_use":
        print(f"Tool called: {block.name}, input: {block.input}")
    elif block.type == "text":
        print(block.text)

Error handling

from anthropic import (
    APIStatusError,
    RateLimitError,
    APIConnectionError,
)

try:
    message = client.messages.create(...)
except RateLimitError:
    print("Rate limited — wait and retry")
except APIConnectionError:
    print("Network error — check your connection")
except APIStatusError as e:
    print(f"API error {e.status_code}: {e.message}")

Ready to code?

Get your API key and make your first Python request in under a minute.

Start free trial →