oxify_connect_llm/
streaming.rs1use async_trait::async_trait;
4use futures::stream::Stream;
5use serde::{Deserialize, Serialize};
6use std::pin::Pin;
7
8use crate::{LlmRequest, Result};
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct LlmChunk {
13 pub content: String,
15
16 pub done: bool,
18
19 pub model: Option<String>,
21
22 pub usage: Option<StreamUsage>,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct StreamUsage {
28 pub prompt_tokens: Option<u32>,
29 pub completion_tokens: Option<u32>,
30 pub total_tokens: Option<u32>,
31}
32
33pub type LlmStream = Pin<Box<dyn Stream<Item = Result<LlmChunk>> + Send>>;
35
36#[async_trait]
38pub trait StreamingLlmProvider: Send + Sync {
39 async fn complete_stream(&self, request: LlmRequest) -> Result<LlmStream>;
41}