claude_rust_types/domain/
provider.rs1use claude_rust_errors::AppResult;
2use futures::stream::BoxStream;
3use serde_json::Value;
4
5use super::message::Conversation;
6
7#[derive(Debug, Clone)]
8pub enum StopReason {
9 EndTurn,
10 ToolUse,
11 MaxTokens,
12}
13
14#[derive(Debug, Clone)]
15pub struct UsageStats {
16 pub input_tokens: u64,
17 pub output_tokens: u64,
18}
19
20#[derive(Debug, Clone)]
21pub enum StreamEvent {
22 ContentDelta { text: String },
23 ThinkingDelta { text: String },
24 ToolUseStart { id: String, name: String },
25 ToolUseDelta { json_chunk: String },
26 Stop { reason: StopReason },
27 Usage { stats: UsageStats },
28 Error { message: String },
29}
30
31#[async_trait::async_trait]
32pub trait Provider: Send + Sync {
33 async fn stream(
34 &self,
35 conversation: &Conversation,
36 tools: &[Value],
37 ) -> AppResult<BoxStream<'static, StreamEvent>>;
38}