v6

latestOpenAPI 3.0.1raw.githubusercontent.com2026-08-011616.0 KB
LLM

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.
post/waves/v1/chat/completions

Request body

modelstring required

Model ID. Currently only "electron".

temperaturenumber

Sampling temperature.

top_pnumber

Nucleus sampling.

max_tokensinteger

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

streamboolean

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

toolsobject[]

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.

seedinteger

Best-effort determinism.

logit_biasobject
logprobsboolean
top_logprobsinteger
presence_penaltynumber
frequency_penaltynumber
userstring

Opaque end-user identifier. Not interpreted by Electron.

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

idstring
object'chat.completion'
createdinteger
modelstring

Example response

{
  "choices": [
    {
      "message": {
        "role": "user"
      }
    }
  ]
}