sarvam-rs
An unofficial Rust SDK for Sarvam AI APIs — chat completions, translation, transliteration, language identification, speech-to-text, speech-to-text batch jobs, speech-to-text WebSocket streaming, text-to-speech, and Document Intelligence job workflows.
Installation
or
Add to your Cargo.toml:
[]
= { = "sarvam-rs", = "0.2.0" }
Streaming support (SSE-based chat streaming, STT/STTT WebSocket streaming, and WebSocket-based TTS streaming) is enabled by default. To disable it:
[]
= { = "sarvam-rs", = "0.2.0", = false }
Quick Start
use ;
async
API Reference
Support Matrix
| Surface | Status | Entry point |
|---|---|---|
| Chat completions | Supported | client.chat().completions(...) |
| Chat streaming | Supported | client.chat().completions_stream(...) |
| Translation | Supported | client.text().translate(...) |
| Transliteration | Supported | client.text().transliterate(...) |
| Language identification | Supported | client.text().identify_language(...) |
| Speech-to-text REST | Supported | client.speech_to_text().transcribe(...).send() |
| Speech-to-text streaming | Supported | client.speech_to_text().stream().connect() |
| Speech-to-text batch | Supported | client.speech_to_text_batch() |
| Speech-to-text translate REST | Supported | client.speech_to_text_translate().translate(...).send() |
| Speech-to-text translate streaming | Supported | client.speech_to_text_translate().stream().connect() |
| Speech-to-text translate batch | Supported | client.speech_to_text_translate_batch() |
| Text-to-speech REST | Supported | client.text_to_speech().convert(...) |
| Text-to-speech streaming | Supported | client.text_to_speech().stream().connect() |
| Document Intelligence | Supported | client.document_intelligence() |
Client Configuration
use Duration;
use ;
// Simple
let client = new;
// With custom config
let client = from_config;
Chat Completions
use *;
let request = ChatCompletionRequest ;
let response = client.chat.completions.await?;
Available models: Sarvam105b, Sarvam30b, SarvamM.
For new workloads, prefer Sarvam30b or Sarvam105b.
Streaming Chat
let mut stream = client.chat.completions_stream.await?;
while let Some = stream.next.await
Translation
use *;
let request = TranslationRequest ;
let response = client.text.translate.await?;
println!;
Transliteration
use *;
let request = TransliterationRequest ;
let response = client.text.transliterate.await?;
println!;
Language Identification
use *;
let request = LanguageIdentificationRequest ;
let response = client.text.identify_language.await?;
println!;
Speech-to-Text
use *;
let response = client
.speech_to_text
.transcribe
.model
.mode
.language_enum
.send
.await?;
println!;
Speech-to-Text Translate
Transcribe audio and translate to English in one step using the /speech-to-text endpoint:
use *;
let response = client
.speech_to_text
.transcribe
.model
.mode
.language_enum
.send
.await?;
println!;
If you need the dedicated endpoint instead of mode=translate:
use *;
let response = client
.speech_to_text_translate
.translate
.model
.send
.await?;
println!;
Streaming STT (WebSocket)
use ;
use ;
let audio = read?;
let mut stream = client
.speech_to_text
.stream
.model
.mode
.language_code
.flush_signal
.connect
.await?;
stream
.send_audio
.await?;
stream.flush.await?;
while let Some = stream.next.await
Batch STT
use Duration;
use ;
let batch = client.speech_to_text_batch;
let job = batch
.create_job
.await?;
let upload_urls = batch
.get_upload_urls
.await?;
println!;
batch.start_job.await?;
let status = batch
.wait_until_terminal
.await?;
println!;
Text-to-Speech
use *;
use Engine;
let request = TextToSpeechRequest ;
let response = client.text_to_speech.convert.await?;
let audio_bytes = STANDARD.decode?;
write?;
Streaming TTS (WebSocket)
use Engine;
let mut stream = client
.text_to_speech
.stream
.model
.target_language_code
.speaker
.connect
.await?;
stream.send_text.await?;
stream.flush.await?;
while let Some = stream.next.await
Document Intelligence
use Duration;
use ;
let docs = client.document_intelligence;
let job = docs
.create_job
.await?;
let upload_urls = docs
.get_upload_urls
.await?;
println!;
docs.start_job.await?;
let status = docs
.wait_until_terminal
.await?;
if status.job_state.is_success_like
Error Handling
All API methods return Result<T, SarvamError>:
use SarvamError;
match client.chat.completions.await
Supported Languages
The SDK supports 22+ Indic languages across all APIs including Hindi, Bengali, Kannada, Malayalam, Marathi, Odia, Punjabi, Tamil, Telugu, Gujarati, Urdu, Nepali, and more. Language codes follow the xx-IN format (e.g., hi-IN, ta-IN).
Feature Flags
| Feature | Default | Description |
|---|---|---|
streaming |
Yes | SSE chat streaming plus STT/STTT/TTS WebSocket clients |
Examples
See the examples/ directory for complete working examples:
| Example | Description |
|---|---|
chat |
Basic chat completion |
chat_stream |
Streaming chat completion |
translate |
Text translation |
transliterate |
Text transliteration |
language_identification |
Language detection |
speech_to_text |
Audio transcription |
speech_to_text_translate |
Audio transcription + English translation using mode=translate |
speech_to_text_stream |
Streaming speech-to-text via WebSocket |
speech_to_text_translate_stream |
Streaming speech-to-text translate via WebSocket |
speech_to_text_batch |
Batch speech-to-text job workflow |
speech_to_text_translate_batch |
Batch speech-to-text translate job workflow |
text_to_speech |
Text-to-audio conversion |
text_to_speech_stream |
Streaming text-to-audio via WebSocket |
document_intelligence |
Document Intelligence job workflow |
Run an example:
Examples that need an audio file also read AUDIO_FILE: