diff options
| author | sigoden <sigoden@gmail.com> | 2024-04-25 14:03:16 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-25 14:03:16 +0800 |
| commit | a193710a7f88de12ef11c5a5c66a5591150fe247 (patch) | |
| tree | 937a64da3dad52706d155ac9191e324fd8648ccc /src/client/claude.rs | |
| parent | 4db9b309803796bc5f996d0b3713344eb44207ec (diff) | |
| download | aichat-a193710a7f88de12ef11c5a5c66a5591150fe247.tar.gz | |
refactor: extract common catch_error (#437)
Diffstat (limited to 'src/client/claude.rs')
| -rw-r--r-- | src/client/claude.rs | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/src/client/claude.rs b/src/client/claude.rs index 68ab509..68e9567 100644 --- a/src/client/claude.rs +++ b/src/client/claude.rs @@ -1,6 +1,6 @@ use super::{ - extract_sytem_message, ClaudeClient, Client, ExtraConfig, ImageUrl, MessageContent, - MessageContentPart, Model, ModelConfig, PromptType, ReplyHandler, SendData, + catch_error, extract_sytem_message, ClaudeClient, Client, ExtraConfig, ImageUrl, + MessageContent, MessageContentPart, Model, ModelConfig, PromptType, ReplyHandler, SendData, }; use crate::utils::PromptKind; @@ -30,7 +30,7 @@ impl Client for ClaudeClient { async fn send_message_inner(&self, client: &ReqwestClient, data: SendData) -> Result<String> { let builder = self.request_builder(client, data)?; - send_message(builder).await + claude_send_message(builder).await } async fn send_message_streaming_inner( @@ -40,7 +40,7 @@ impl Client for ClaudeClient { data: SendData, ) -> Result<()> { let builder = self.request_builder(client, data)?; - send_message_streaming(builder, handler).await + claude_send_message_streaming(builder, handler).await } } @@ -79,7 +79,7 @@ impl ClaudeClient { } } -async fn send_message(builder: RequestBuilder) -> Result<String> { +pub async fn claude_send_message(builder: RequestBuilder) -> Result<String> { let res = builder.send().await?; let status = res.status(); let data: Value = res.json().await?; @@ -94,7 +94,10 @@ async fn send_message(builder: RequestBuilder) -> Result<String> { Ok(output.to_string()) } -async fn send_message_streaming(builder: RequestBuilder, handler: &mut ReplyHandler) -> Result<()> { +pub async fn claude_send_message_streaming( + builder: RequestBuilder, + handler: &mut ReplyHandler, +) -> Result<()> { let mut es = builder.eventsource()?; while let Some(event) = es.next().await { match event { @@ -214,13 +217,3 @@ pub fn claude_build_body(data: SendData, model: &Model) -> Result<Value> { } Ok(body) } - -fn catch_error(data: &Value, status: u16) -> Result<()> { - debug!("Invalid response, status: {status}, data: {data}"); - if let Some(error) = data["error"].as_object() { - if let (Some(typ), Some(message)) = (error["type"].as_str(), error["message"].as_str()) { - bail!("{message} (type: {typ})"); - } - } - bail!("Invalid response, status: {status}, data: {data}"); -} |
