messages.rs (2536B)
1 use crate::tools::{ToolCall, ToolResponse}; 2 use async_openai::types::*; 3 use nostrdb::{Ndb, Transaction}; 4 5 #[derive(Debug, Clone)] 6 pub enum Message { 7 System(String), 8 Error(String), 9 User(String), 10 Assistant(String), 11 ToolCalls(Vec<ToolCall>), 12 ToolResponse(ToolResponse), 13 } 14 15 /// The ai backends response. Since we are using streaming APIs these are 16 /// represented as individual tokens or tool calls 17 pub enum DaveApiResponse { 18 ToolCalls(Vec<ToolCall>), 19 Token(String), 20 Failed(String), 21 } 22 23 impl Message { 24 pub fn tool_error(id: String, msg: String) -> Self { 25 Self::ToolResponse(ToolResponse::error(id, msg)) 26 } 27 28 pub fn to_api_msg(&self, txn: &Transaction, ndb: &Ndb) -> Option<ChatCompletionRequestMessage> { 29 match self { 30 Message::Error(_err) => None, 31 32 Message::User(msg) => Some(ChatCompletionRequestMessage::User( 33 ChatCompletionRequestUserMessage { 34 name: None, 35 content: ChatCompletionRequestUserMessageContent::Text(msg.clone()), 36 }, 37 )), 38 39 Message::Assistant(msg) => Some(ChatCompletionRequestMessage::Assistant( 40 ChatCompletionRequestAssistantMessage { 41 content: Some(ChatCompletionRequestAssistantMessageContent::Text( 42 msg.clone(), 43 )), 44 ..Default::default() 45 }, 46 )), 47 48 Message::System(msg) => Some(ChatCompletionRequestMessage::System( 49 ChatCompletionRequestSystemMessage { 50 content: ChatCompletionRequestSystemMessageContent::Text(msg.clone()), 51 ..Default::default() 52 }, 53 )), 54 55 Message::ToolCalls(calls) => Some(ChatCompletionRequestMessage::Assistant( 56 ChatCompletionRequestAssistantMessage { 57 tool_calls: Some(calls.iter().map(|c| c.to_api()).collect()), 58 ..Default::default() 59 }, 60 )), 61 62 Message::ToolResponse(resp) => { 63 let tool_response = resp.responses().format_for_dave(txn, ndb); 64 65 Some(ChatCompletionRequestMessage::Tool( 66 ChatCompletionRequestToolMessage { 67 tool_call_id: resp.id().to_owned(), 68 content: ChatCompletionRequestToolMessageContent::Text(tool_response), 69 }, 70 )) 71 } 72 } 73 } 74 }