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](/waves/documentation/llm-electron/tool-function-calling) for the voice-agent pattern. ## Examples **cURL** ```bash 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`) ```python 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`) ```typescript 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) ```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](https://app.smallest.ai/dashboard/api-keys).

Authentication

AuthorizationBearer

Header authentication of the form Bearer <token>

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 objectsOptional

Tool / function calling definitions. Standard OpenAI shape. See Tool Calling.

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

idstring
objectenum
createdinteger
modelstring
choiceslist of objects
usageobject

Errors

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