Skip to content

Server Compatibility Layers

In a nutshell

The OVOS servers (for speech-to-text, text-to-speech, translation, and chat personas) can impersonate popular commercial services such as OpenAI, Google, DeepL, and ElevenLabs. This page lists which imitations each server offers. The benefit is simple: an app written to talk to one of those services can point at your own OVOS server instead, with no code changes. Think of it as a power adapter that lets the same plug fit a different socket. See the STT Server, TTS Server, Translate Server, and Persona Server pages, or the Glossary.

Each OVOS service server exposes vendor-prefixed routers. Existing clients and integrations can connect without modification. Every router accepts the vendor's original request format and translates it to the native OVOS plugin call.

A compatible wire format does not guarantee identical capabilities

Matching a vendor's request and response shape does not always mean the behavior underneath matches, especially around streaming. For example, the TTS server's ElevenLabs stream-input WebSocket router accepts text incrementally. It sends audio back in frames, exactly like the real ElevenLabs protocol. Underneath, though, each buffered chunk of text is still synthesized with one ordinary, blocking call to the configured OVOS TTS plugin. Only the resulting complete audio is sliced into fixed-size frames afterward. Most OVOS TTS plugins do not support true incremental, word-by-word synthesis. The first audio frame is not available until that chunk has finished generating in full. Clients built around the real API's low first-byte latency may not see the same latency here. Check the specific router and the underlying plugin's capabilities before assuming parity beyond the wire format.


Pattern

Each compat router is a self-contained FastAPI APIRouter mounted under a fixed vendor prefix. The router:

  1. Accepts the vendor's HTTP contract (paths, query params, request/response bodies).
  2. Translates to the server's internal process() call.
  3. Returns the vendor's expected response format.

All compat routers are always loaded. No feature flag is needed.


STT Server Compat Routes

pip install --pre "ovos-stt-http-server>=0.25.1a3". Routers are implemented in ovos_stt_http_server.routers.

Prefix Vendor
/openai OpenAI Whisper (/openai/v1/audio/transcriptions, plus /openai/v1/audio/translations — transcribes then translates to English via the configured OVOS translate plugin)
/deepgram Deepgram
/google Google Cloud Speech
/assemblyai AssemblyAI
/speechmatics Speechmatics
/azure-stt Microsoft Azure Speech
/aws AWS Transcribe
/watson/speech-to-text IBM Watson STT
/wit Wit.ai
/vosk Vosk-server WebSocket
/vosk-webrtc Vosk WebRTC variant
/whisper-cpp whisper.cpp HTTP server
/gladia Gladia
/groq Groq Whisper
/elevenlabs ElevenLabs Scribe
/speech-api Chromium/Google speech-api
/client Kaldi GStreamer Server

TTS Server Compat Routes

pip install ovos-tts-server. Routers are implemented in ovos_tts_server.routers.

Prefix Vendor
/elevenlabs ElevenLabs (HTTP /v1/text-to-speech/{voice_id} plus the stream-input WebSocket streaming protocol)
/openai OpenAI TTS
/coqui Coqui TTS
/google-tts Google Cloud TTS
/amazon-polly Amazon Polly
/azure-tts Microsoft Azure TTS
/cartesia Cartesia
/deepgram Deepgram Aura
/playht PlayHT
/marytts MaryTTS (/marytts/process, /voices, /locales)

Translate Server Compat Routes

pip install --pre "ovos-translate-server>=0.10.0a1". Routers are implemented in ovos_translate_server.routers.

Prefix Vendor
/libretranslate LibreTranslate
/deepl DeepL v2
/deeplx DeepLX
/google Google Translate v2
/azure Azure Translator v3
/amazon Amazon Translate
/lingva Lingva Translate

Persona Server Compat Routes

pip install --pre ovos-persona-server. --pre is required: the last stable ovos-persona does not declare ovos-workshop, so a plain install imports with ModuleNotFoundError: No module named 'ovos_workshop'. create_persona_app() mounts the routes below. It mounts a chat router at prefix /openai/v1 (POST /openai/v1/chat/completions, OpenAI-compatible), an Ollama router at prefix /ollama/api, and a UTCP router at /tools. It also mounts /mcp when started with the --mcp flag (which requires the mcp extra — the extra alone no longer exposes the endpoint).

Prefix Vendor
/openai/v1 OpenAI-compatible chat (POST /openai/v1/chat/completions)
/ollama/api Ollama
/cohere/v1 Cohere
/tgi HuggingFace TGI
/bedrock/model AWS Bedrock
/gemini/v1beta/models Google Gemini
/anthropic/v1 Anthropic
/tools UTCP tool manifest and invocation
/mcp MCP server (requires the mcp extra)

All vendor routers are mounted

The source tree's vendor-specific router modules for Anthropic, Gemini, Cohere, HuggingFace TGI, and AWS Bedrock are all mounted by create_persona_app(), each under its own prefix, so every one of these compat routes is reachable in the shipped app.

OpenAI-compatible example

import openai

client = openai.OpenAI(api_key="", base_url="http://localhost:8337/openai/v1")
response = client.chat.completions.create(
    model="",
    messages=[{"role": "user", "content": "tell me a joke"}]
)
print(response.choices[0].message.content)

Source code: ovos-stt-http-server, ovos-tts-server, ovos-translate-server, ovos-persona-server.


Read next: HiveMind Related: STT Server · TTS Server · Translate Server · Persona Server