Skip to navigation

Electron — Chat Completions

View as Markdown

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.

Authentication

AuthorizationBearer

API key authentication. Include your key as Authorization: Bearer YOUR_API_KEY. Access tokens are not accepted on this endpoint.

Headers

x-expire-contentenumOptional

Enterprise plans only. Set to true to expire this request’s content. Prompts and completions are deleted within 7 days; the usage record (token counts, model, latency) is kept. Omit the header to keep content. On other plans the header is ignored and the request is processed normally. See Zero Data Retention.

Allowed values:

Request

This endpoint expects an object.
modelstringRequired

Model ID. Currently only "electron".

messageslist of objectsRequired
Chat history. Standard OpenAI message array.
temperaturedoubleOptional0-2Defaults to 1
Sampling temperature.
top_pdoubleOptional0-1Defaults to 1
Nucleus sampling.
max_tokensintegerOptional>=1

Maximum output tokens. Combined input + output context ceiling is 32,768.

streambooleanOptionalDefaults to false

When true, response is text/event-stream. See the Streaming guide.

stream_optionsobjectOptional
toolslist of maps from strings to anyOptional

Tool / function calling definitions. Forwarded verbatim to the OpenAI-compatible upstream, so the standard OpenAI shape ({type: "function", function: {name, description, parameters}}) is the recommended form and is what the examples below use. The wire schema is permissive (array<object>) — any tools payload the upstream accepts will work. See Tool Calling for details.

tool_choiceenum or objectOptional
response_formatobjectOptional

Output shape. {type: "text"} (default) or {type: "json_object"}.

stopstring or list of stringsOptional
seedintegerOptional

Best-effort determinism.

logit_biasmap from strings to doublesOptional
logprobsbooleanOptionalDefaults to false
top_logprobsintegerOptional0-20
presence_penaltydoubleOptional-2-2Defaults to 0
frequency_penaltydoubleOptional-2-2Defaults to 0
userstringOptional

Opaque end-user identifier. Not interpreted by Electron.

Response headers

X-Request-IdstringOptional
Unique request identifier. Include in support tickets.

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].

idstringOptional
objectenumOptional
Allowed values:
createdintegerOptional
modelstringOptional
choiceslist of objectsOptional
usageobjectOptional

Errors

400
Bad Request Error
401
Unauthorized Error
403
Forbidden Error
429
Too Many Requests Error
502
Bad Gateway Error
503
Service Unavailable Error