Chat Completions (Electron)
Generate a chat completion with Electron. OpenAI-compatible request/response shape — point any OpenAI SDK at https://api.smallest.ai/waves/v1 and it just works.
Set stream: true to receive tokens via Server-Sent Events. With stream_options: { include_usage: true }, the final SSE chunk carries the usage block so token accounting is exact even on client disconnects.
Tool calling follows OpenAI's tools array convention. When you provide a voice-agent-style system prompt, Electron emits a short filler phrase in the assistant message content field alongside tool_calls — see the Tool Calling guide for the voice-agent pattern.
Examples
cURL
curl -X POST "https://api.smallest.ai/waves/v1/chat/completions" \
-H "Authorization: Bearer $SMALLEST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "electron",
"messages": [
{"role": "user", "content": "Write one sentence about why the sky is blue."}
]
}'
Python (pip install openai)
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.smallest.ai/waves/v1",
api_key=os.environ["SMALLEST_API_KEY"],
)
response = client.chat.completions.create(
model="electron",
messages=[
{"role": "user", "content": "Write one sentence about why the sky is blue."}
],
)
print(response.choices[0].message.content)
JavaScript / TypeScript (npm install openai)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.smallest.ai/waves/v1",
apiKey: process.env.SMALLEST_API_KEY,
});
const response = await client.chat.completions.create({
model: "electron",
messages: [
{ role: "user", content: "Write one sentence about why the sky is blue." },
],
});
console.log(response.choices[0].message.content);
Streaming with usage (Python)
stream = client.chat.completions.create(
model="electron",
messages=[{"role": "user", "content": "Tell me a one-sentence fun fact."}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
if chunk.usage:
print(f"\n\nTokens: {chunk.usage.total_tokens}")
Common gotchas
- Base URL is /waves/v1, not /v1. The OpenAI SDK appends /chat/completions for you.
- stream_options.include_usage: true is required for exact token accounting on streaming calls — the final SSE chunk carries the usage block.
- n > 1 and prompt_logprobs are rejected. Use multiple requests if you need parallel completions.
- Auth header is Authorization: Bearer $SMALLEST_API_KEY — get the key from the Smallest AI Console.
Request body
Example request
{
"model": "electron",
"messages": [
{
"role": "user"
}
]
}Response
Non-streaming: standard OpenAI chat.completion object.
Streaming (stream: true): text/event-stream SSE — each event is a chat.completion.chunk delta, terminated by data: [DONE].
Example response
{
"choices": [
{
"message": {
"role": "user"
}
}
]
}