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.

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