sarvam-rs 0.2.0

Rust SDK for Sarvam AI APIs — chat, translation, speech-to-text, text-to-speech, transliteration, and language identification
Documentation
use std::time::Duration;

use sarvam::{
    types::{
        CreateDocumentIntelligenceJobRequest, DocumentIntelligenceJobParameters,
        DocumentIntelligenceLanguage, DocumentOutputFormat, DocumentUploadUrlsRequest,
    },
    SarvamClient,
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let api_key = std::env::var("SARVAM_API_KEY").expect("SARVAM_API_KEY not set");
    let client = SarvamClient::new(api_key);

    let job = client
        .document_intelligence()
        .create_job(CreateDocumentIntelligenceJobRequest {
            job_parameters: Some(DocumentIntelligenceJobParameters {
                language: Some(DocumentIntelligenceLanguage::EnIn),
                output_format: Some(DocumentOutputFormat::Markdown),
                ..Default::default()
            }),
            callback: None,
        })
        .await?;

    println!("Created doc job: {}", job.job_id);

    let upload_urls = client
        .document_intelligence()
        .get_upload_urls(DocumentUploadUrlsRequest {
            job_id: job.job_id.clone(),
            files: vec!["document.pdf".to_string()],
        })
        .await?;

    println!("Upload URLs: {}", upload_urls.upload_urls.len());
    client
        .document_intelligence()
        .start_job(&job.job_id)
        .await?;

    let status = client
        .document_intelligence()
        .wait_until_terminal(&job.job_id, Duration::from_secs(2))
        .await?;
    println!("Final state: {:?}", status.job_state);

    if status.job_state.is_success_like() {
        let downloads = client
            .document_intelligence()
            .get_download_urls(&job.job_id)
            .await?;
        println!("Download URLs: {}", downloads.download_urls.len());
    }

    Ok(())
}