rustvani 0.1.2

Voice AI framework for Rust — real-time speech pipelines with STT, LLM, TTS, and Dhara conversation flows
[package]
name = "rustvani"
version = "0.1.2"
edition = "2021"
license = "BSD-2-Clause"
description = "Voice AI framework for Rust — real-time speech pipelines with STT, LLM, TTS, and Dhara conversation flows"
repository = "https://github.com/Allenmylath/rustvani"
homepage = "https://github.com/Allenmylath/rustvani"
documentation = "https://docs.rs/rustvani"
readme = "README.md"
keywords = ["voice", "ai", "speech", "pipeline", "conversational-ai"]
categories = ["multimedia::audio", "asynchronous", "api-bindings"]
exclude = [
    "src/bin/*", "dhara/*", "tests/*", "examples/*", ".env*",
    "piper-models/*", "assets/*", "src/vad/data/silero.onnx",
    "src/turn/smart_turn_weights.bin.gz",
]

# ---------------------------------------------------------------------------
# Features
# ---------------------------------------------------------------------------
[features]
default = ["vad-silero", "transport-websocket", "stt-sarvam", "llm-openai", "tts-deepgram", "dhara"]

# Core VAD
vad-silero = ["dep:ort", "dep:ndarray"]

# Transport
transport-websocket = ["dep:axum", "dep:tower-http", "dep:tokio-tungstenite"]

# Services
stt-sarvam = ["dep:reqwest"]
llm-openai = ["dep:reqwest"]
tts-deepgram = ["dep:tokio-tungstenite"]
tts-sarvam = ["dep:tokio-tungstenite"]

# Dhara conversation flow system
dhara = ["dep:thiserror"]

# Database tools (optional — not in default)
db-postgres = ["dep:tokio-postgres", "dep:postgres-native-tls", "dep:native-tls"]


# ---------------------------------------------------------------------------
# Dependencies
# ---------------------------------------------------------------------------
[dependencies]
# Core (always required)
tokio           = { version = "1",   features = ["full"] }
tokio-util      = { version = "0.7", features = ["rt"] }
async-trait     = "0.1"
async-recursion = "1"
futures         = "0.3"
log             = "0.4"
serde           = { version = "1",   features = ["derive"] }
serde_json      = "1"
base64          = "0.22"

# Audio processing (always required for voice pipeline)
hound           = "3"
nnnoiseless     = "0.1"
rubato          = "0.14"
rustfft         = "6"
flate2          = "1"
matrixmultiply  = "0.3"

# VAD — Silero via ONNX Runtime
ort             = { version = "=2.0.0-rc.10", features = ["ndarray", "download-binaries"], optional = true }
ndarray         = { version = "0.16", optional = true }

# Transport — WebSocket (axum server + tungstenite)
axum            = { version = "0.7", features = ["ws"], optional = true }
tower-http      = { version = "0.5", features = ["cors"], optional = true }
tokio-tungstenite = { version = "0.29", features = ["rustls-tls-webpki-roots"], optional = true }

# HTTP client (LLM + STT services)
reqwest         = { version = "0.12", default-features = false, features = ["json", "stream", "rustls-tls", "http2"], optional = true }

# Dhara conversation flow system
thiserror       = { version = "1", optional = true }

# Database — Postgres (optional tool)
tokio-postgres      = { version = "0.7", features = ["with-serde_json-1", "with-chrono-0_4", "with-uuid-1"], optional = true }
postgres-native-tls = { version = "0.5", optional = true }
native-tls          = { version = "0.2", optional = true }

# Used by db-postgres tools
chrono          = { version = "0.4", features = ["serde"] }
uuid            = { version = "1",   features = ["serde", "v4"] }

# ---------------------------------------------------------------------------
# Dev dependencies
# ---------------------------------------------------------------------------
[dev-dependencies]
tokio      = { version = "1", features = ["full", "test-util"] }
env_logger = "0.11"
dotenvy    = "0.15"