pub use client_api::entity::ai_dto::{RelatedQuestion, RepeatedRelatedQuestion, StringOrMessage}; pub use client_api::entity::{ ChatAuthorType, ChatMessage, ChatMessageType, MessageCursor, QAChatMessage, RepeatedChatMessage, }; use client_api::error::AppResponseError; use flowy_error::FlowyError; use futures::stream::BoxStream; use lib_infra::async_trait::async_trait; use lib_infra::future::FutureResult; pub type ChatMessageStream = BoxStream<'static, Result>; pub type StreamAnswer = BoxStream<'static, Result>; #[async_trait] pub trait ChatCloudService: Send + Sync + 'static { fn create_chat( &self, uid: &i64, workspace_id: &str, chat_id: &str, ) -> FutureResult<(), FlowyError>; async fn send_chat_message( &self, workspace_id: &str, chat_id: &str, message: &str, message_type: ChatMessageType, ) -> Result; fn send_question( &self, workspace_id: &str, chat_id: &str, message: &str, message_type: ChatMessageType, ) -> FutureResult; fn save_answer( &self, workspace_id: &str, chat_id: &str, message: &str, question_id: i64, ) -> FutureResult; async fn stream_answer( &self, workspace_id: &str, chat_id: &str, message_id: i64, ) -> Result; fn get_chat_messages( &self, workspace_id: &str, chat_id: &str, offset: MessageCursor, limit: u64, ) -> FutureResult; fn get_related_message( &self, workspace_id: &str, chat_id: &str, message_id: i64, ) -> FutureResult; fn generate_answer( &self, workspace_id: &str, chat_id: &str, question_message_id: i64, ) -> FutureResult; }