mod nvidia;
mod types;
mod usage;
pub use nvidia::{models, NvidiaClient, RetryPolicy};
pub use types::{
ChatMessage, ChatRequest, ChatResponse, Role, StreamChunk, ToolCall, ToolSpec, Usage,
};
pub use usage::{UsageEvent, UsageObserver, UsageSnapshot, UsageTotals};
use futures_util::stream::BoxStream;
use crate::error::Result;
#[async_trait::async_trait]
pub trait LlmProvider: Send + Sync {
async fn chat(&self, request: ChatRequest) -> Result<ChatResponse>;
async fn chat_stream(
&self,
request: ChatRequest,
) -> Result<BoxStream<'static, Result<StreamChunk>>>;
fn default_model(&self) -> &str;
}
#[async_trait::async_trait]
pub trait EmbeddingProvider: Send + Sync {
async fn embed_documents(&self, texts: &[String]) -> Result<Vec<Vec<f32>>>;
async fn embed_query(&self, text: &str) -> Result<Vec<f32>>;
}