livespeech_sdk/
lib.rs

1//! # LiveSpeech SDK
2//!
3//! A Rust SDK for real-time speech-to-speech AI conversations.
4//!
5//! ## Quick Start
6//!
7//! ```rust,no_run
8//! use livespeech_sdk::{LiveSpeechClient, Config, Region, SessionConfig, LiveSpeechEvent};
9//!
10//! #[tokio::main]
11//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
12//!     // Create configuration
13//!     let config = Config::builder()
14//!         .region(Region::ApNortheast2)
15//!         .api_key("your-api-key")
16//!         .build()?;
17//!
18//!     // Create client
19//!     let client = LiveSpeechClient::new(config);
20//!
21//!     // Subscribe to events (recommended)
22//!     let mut events = client.subscribe();
23//!     tokio::spawn(async move {
24//!         while let Ok(event) = events.recv().await {
25//!             match event {
26//!                 LiveSpeechEvent::Ready(_) => println!("Ready for audio"),
27//!                 LiveSpeechEvent::UserTranscript(e) => println!("You said: {}", e.text),
28//!                 LiveSpeechEvent::Response(e) => println!("AI: {}", e.text),
29//!                 LiveSpeechEvent::Audio(e) => println!("Audio: {} bytes", e.data.len()),
30//!                 LiveSpeechEvent::TurnComplete(_) => println!("Turn complete"),
31//!                 LiveSpeechEvent::Error(e) => eprintln!("Error: {}", e.message),
32//!                 _ => {}
33//!             }
34//!         }
35//!     });
36//!
37//!     // Connect and start session
38//!     client.connect().await?;
39//!     let session_id = client.start_session(Some(
40//!         SessionConfig::new("You are a helpful assistant.")
41//!     )).await?;
42//!     println!("Session: {}", session_id);
43//!
44//!     // Stream audio
45//!     client.audio_start().await?;
46//!     let audio_chunk: Vec<u8> = vec![0u8; 3200]; // PCM16 audio
47//!     client.send_audio_chunk(&audio_chunk).await?;
48//!     client.audio_end().await?;
49//!
50//!     // Cleanup
51//!     client.end_session().await?;
52//!     client.disconnect().await;
53//!
54//!     Ok(())
55//! }
56//! ```
57
58pub mod audio;
59pub mod client;
60pub mod error;
61pub mod types;
62
63// Re-export main types for convenience
64pub use client::{ConnectionState, LiveSpeechClient};
65pub use error::{LiveSpeechError, Result};
66pub use types::{
67    // Config types
68    Config, ConfigBuilder, ConfigError, FunctionParameters, PipelineMode, Region, SessionConfig,
69    Tool,
70    // Event types
71    AudioEvent, AudioHandler, ConnectedEvent, DisconnectedEvent, DisconnectReason, ErrorCode,
72    ErrorEvent, ErrorHandler, LiveSpeechEvent, ReadyEvent, ReconnectingEvent, ResponseEvent,
73    ResponseHandler, SessionEndedEvent, SessionStartedEvent, ToolCallEvent, TurnCompleteEvent,
74    UserTranscriptEvent,
75    // Message types
76    ClientMessage, ServerMessage, ToolResponsePayload,
77};
78
79// Re-export audio utilities
80pub use audio::{
81    bytes_to_int16, create_wav_header, decode_from_base64, encode_to_base64, float32_to_int16,
82    int16_to_bytes, int16_to_float32, wrap_pcm_in_wav, AudioEncoder,
83};