Skip to main content
@lokutor/sdk latest: 1.5.1 The Python SDK (lokutor on PyPI) was versioned in lockstep with the JS SDK from 1.3.0 and is at 1.4.1; 1.5.0 and 1.5.1 are JS-only releases — see the Python API Reference for its current surface.

Changelog

1.5.1

  • JS: new requestMicrophone(), to call inside the tap or click that starts a call; pass its result to BrowserAudioManager as microphone. The call then uses that stream instead of asking for the microphone after the connection opens, which iOS Safari could refuse without showing its prompt (the agent spoke and nothing the caller said reached it). It also moves an iOS audio session left in 'playback' back to 'auto', since iOS refuses the microphone in playback mode.
  • JS: when the microphone cannot start, connect() now rejects with the new code audio.microphone_unavailable (not retryable) and closes the session. Previously connect() stayed pending while the session kept talking.
  • JS: BrowserAudioManager.cleanup() closes its AudioContext; init() no longer waits indefinitely on AudioContext.resume(). Server errors reach onError once (they were delivered twice).

1.5.0

  • JS: the voice-agent client reconnects only after the connection drops or the server goes away (close codes 1001, 1006, 1011–1014). When the server ends the session on purpose (1000, 1008, 4xxx) it stays closed, fires error with code session.ended and the server’s reason, status disconnected, and a new ended event — previously it reconnected into a fresh session.
  • JS: a reconnection reuses the running microphone (it used to start a second capture, doubling and scrambling the caller’s audio) and resets the response generation counter (it used to discard every response of the new session as stale, so the agent answered and nothing was heard).
  • JS: new session_limit event when the server announces a session’s remaining time; ConversationalPanel shows it as a countdown, says “Reconnecting…” while the client retries, ends the call visibly when the connection is gone, shows the server’s reason, and adds onEnded(message).
  • JS: BrowserAudioManager keeps the screen awake while the microphone is live (keepAwake, default true) and resumes audio when the page returns to the foreground.

1.4.1

  • Python: pyaudio (needed only for local mic/speaker convenience — VoiceAgentClient’s live audio loop, and TTSClient/STTClient’s optional local playback/capture helpers) is now an optional audio extra (pip install lokutor[audio]) instead of a hard dependency. It needs PortAudio’s C library, which doesn’t compile on a clean machine without the system package — previously this broke pip install lokutor outright, and blocked even TTSClient/STTClient usage that never touches local audio hardware.

1.4.0

  • JS: the voice-agent panel’s “listening” curtain is now the agent’s own accent color with a grain texture, replacing a fixed stock-photo background
  • JS: removed a leftover pulse animation and an opacity dim on the visualizer that were never updated for the current binary (agent/user, no idle) visualizer state
  • Backend: a false-positive barge-in that resumes playback now tells the client — previously the client was left showing listening while the bot was audibly still speaking (see WebSocket Protocol → Barge-in)
  • Backend: /ws/agent’s voice and language messages now reject an unrecognised value the same way POST /tts/synthesize and /ws/tts already did, instead of silently applying a fallback

1.3.0

  • Nine supported languages, Versa 2.0 voice ids
  • Wire vocabulary canonicalized to voice/language (the older voice_id/lang names remain accepted as deprecated aliases)

1.2.1

Point release on top of 1.2.0.

1.2.0

  • Standalone speech-to-text: STTClient for one-shot transcription of a complete audio clip (POST /stt/transcribe), SpeechToTextClient for continuous/live transcription over WS /ws/stt — neither requires the full voice-agent (LLM + TTS) pipeline
  • simpleTranscribe() convenience function

1.1.43

  • Tool calling improvements: submitToolResult() method, call_id in tool_call events
  • Conversation panel UI component
  • Python SDK: update_prompt(), get_transcript(), get_transcript_text()
  • Python SDK: on() event listener pattern

1.1.17

  • Initial stable release
  • VoiceAgentClient for real-time conversations
  • TTSClient for standalone text-to-speech
  • BrowserAudioManager for Web Audio API
  • LokutorError with typed error codes
  • WebSocket reconnection with exponential backoff
  • Viseme streaming support
  • 10 voices; language count at the time isn’t preserved accurately in this entry — see Voices, Languages & Models for the current count (nine)

Versioning policy

  • MAJOR — Breaking API changes
  • MINOR — New features, backwards compatible
  • PATCH — Bug fixes, backwards compatible