Skip to main content

claude_rust_types/domain/
provider.rs

1use 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 enum StreamEvent {
16    ContentDelta { text: String },
17    ToolUseStart { id: String, name: String },
18    ToolUseDelta { json_chunk: String },
19    Stop { reason: StopReason },
20    Error { message: String },
21}
22
23#[async_trait::async_trait]
24pub trait Provider: Send + Sync {
25    async fn stream(
26        &self,
27        conversation: &Conversation,
28        tools: &[Value],
29    ) -> AppResult<BoxStream<'static, StreamEvent>>;
30}