Skip to main content

Code Examples

These examples use the official OpenAI SDKs — they work with Schatzi AI by changing the base URL. Every snippet is copy-pasteable and ready to run.

Python (OpenAI SDK)​

Install the SDK:

pip install openai

Basic Chat Completion​

from openai import OpenAI

client = OpenAI(
api_key="sk-your-api-key",
base_url="https://backend.schatziai.ch/v1"
)

response = client.chat.completions.create(
model="MODEL_ID",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Summarise the key points of FADP compliance."}
],
max_tokens=500
)

print(response.choices[0].message.content)

Streaming​

stream = client.chat.completions.create(
model="MODEL_ID",
messages=[{"role": "user", "content": "Explain Swiss data sovereignty in 3 paragraphs."}],
stream=True
)

for chunk in stream:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)

Embeddings​

response = client.embeddings.create(
model="EMBEDDING_MODEL_ID",
input="Swiss financial regulations"
)

vector = response.data[0].embedding
print(f"Dimensions: {len(vector)}")

JavaScript / TypeScript (OpenAI SDK)​

Install the SDK:

npm install openai

Basic Chat Completion​

import OpenAI from "openai";

const client = new OpenAI({
apiKey: "sk-your-api-key",
baseURL: "https://backend.schatziai.ch/v1",
});

const response = await client.chat.completions.create({
model: "MODEL_ID",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Draft a client email in German and English." },
],
max_tokens: 500,
});

console.log(response.choices[0].message.content);

Streaming​

const stream = await client.chat.completions.create({
model: "MODEL_ID",
messages: [{ role: "user", content: "List 5 benefits of Swiss data residency." }],
stream: true,
});

for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) process.stdout.write(content);
}

curl​

Basic Request​

curl https://backend.schatziai.ch/v1/chat/completions \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "MODEL_ID",
"messages": [
{"role": "user", "content": "What is FADP?"}
],
"max_tokens": 200
}'

Streaming​

curl https://backend.schatziai.ch/v1/chat/completions \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-N \
-d '{
"model": "MODEL_ID",
"messages": [{"role": "user", "content": "Count to 5"}],
"stream": true
}'

List Models​

curl https://backend.schatziai.ch/v1/models \
-H "Authorization: Bearer sk-your-api-key"

Extended Parameters​

Reasoning Control (Python)​

For reasoning models, use reasoning_effort and max_completion_tokens to control the balance between speed and accuracy:

response = client.chat.completions.create(
model="MODEL_ID",
messages=[{"role": "user", "content": "Solve this step by step: what is 247 * 389?"}],
extra_body={
"reasoning_effort": "high",
"max_completion_tokens": 16384,
}
)

Set reasoning_effort to "low" for fast tool-calling workflows, or "high" for complex multi-step reasoning.

Structured JSON Output (Python)​

Request structured output using response_format:

response = client.chat.completions.create(
model="MODEL_ID",
messages=[{"role": "user", "content": "List 3 Swiss cities with population"}],
extra_body={
"response_format": {
"type": "json_object"
}
}
)

import json
data = json.loads(response.choices[0].message.content)

Deterministic Output (curl)​

Use seed for reproducible results:

curl https://backend.schatziai.ch/v1/chat/completions \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "MODEL_ID",
"messages": [{"role": "user", "content": "Generate a UUID"}],
"seed": 42,
"max_tokens": 50
}'
info

Extended parameters (reasoning_effort, max_completion_tokens, response_format, seed, logprobs, top_logprobs, parallel_tool_calls) are passed through to the inference backend. Not all models support all parameters — if a model doesn't support a parameter, the API returns a 400 error. See Endpoint Reference for the full parameter list.


Migrating from OpenAI​

If you have existing code that uses the OpenAI API, switching to Schatzi AI requires only two changes:

SettingOpenAISchatzi AI
Base URLhttps://api.openai.com/v1https://backend.schatziai.ch/v1
API Keysk-... (OpenAI key)sk-... (Schatzi AI key from your dashboard)

Model IDs differ between platforms. Use GET /v1/models to discover available models.

export OPENAI_API_KEY="sk-your-schatzi-key"
export OPENAI_BASE_URL="https://backend.schatziai.ch/v1"

The OpenAI Python and JS SDKs read these environment variables automatically — no code changes needed beyond setting these variables.


Error Handling (Python)​

from openai import OpenAI, APIError, RateLimitError, AuthenticationError

client = OpenAI(
api_key="sk-your-api-key",
base_url="https://backend.schatziai.ch/v1"
)

try:
response = client.chat.completions.create(
model="MODEL_ID",
messages=[{"role": "user", "content": "Hello"}]
)
print(response.choices[0].message.content)
except AuthenticationError:
print("Invalid API key. Check your key in the dashboard.")
except RateLimitError:
print("Usage limit reached. Check your billing period.")
except APIError as e:
print(f"API error: {e.message}")

Tips​

  • Store your API key in an environment variable, not in source code.
  • Use streaming for long responses to improve perceived latency.
  • Set max_tokens to control response length and cost.
  • Use system messages to set consistent behaviour across requests.
  • See Model Comparison for choosing the right model.
  • See Monitoring Usage for tracking costs.