use bytes::Bytes; pub use client_api::entity::ai_dto::{ AppFlowyOfflineAI, CompletionType, CreateChatContext, LLMModel, LocalAIConfig, ModelInfo, RelatedQuestion, RepeatedRelatedQuestion, StringOrMessage, }; pub use client_api::entity::billing_dto::SubscriptionPlan; pub use client_api::entity::chat_dto::{ ChatMessage, ChatMessageMetadata, ChatMessageType, ChatRAGData, ChatSettings, ContextLoader, MessageCursor, RepeatedChatMessage, UpdateChatParams, }; pub use client_api::entity::QuestionStreamValue; use client_api::error::AppResponseError; use flowy_error::FlowyError; use futures::stream::BoxStream; use lib_infra::async_trait::async_trait; use serde_json::Value; use std::collections::HashMap; use std::path::Path; pub type ChatMessageStream = BoxStream<'static, Result>; pub type StreamAnswer = BoxStream<'static, Result>; pub type StreamComplete = BoxStream<'static, Result>; #[async_trait] pub trait ChatCloudService: Send + Sync + 'static { async fn create_chat( &self, uid: &i64, workspace_id: &str, chat_id: &str, rag_ids: Vec, ) -> Result<(), FlowyError>; async fn create_question( &self, workspace_id: &str, chat_id: &str, message: &str, message_type: ChatMessageType, metadata: &[ChatMessageMetadata], ) -> Result; async fn create_answer( &self, workspace_id: &str, chat_id: &str, message: &str, question_id: i64, metadata: Option, ) -> Result; async fn stream_answer( &self, workspace_id: &str, chat_id: &str, message_id: i64, ) -> Result; async fn get_answer( &self, workspace_id: &str, chat_id: &str, question_message_id: i64, ) -> Result; async fn get_chat_messages( &self, workspace_id: &str, chat_id: &str, offset: MessageCursor, limit: u64, ) -> Result; async fn get_question_from_answer_id( &self, workspace_id: &str, chat_id: &str, answer_message_id: i64, ) -> Result; async fn get_related_message( &self, workspace_id: &str, chat_id: &str, message_id: i64, ) -> Result; async fn stream_complete( &self, workspace_id: &str, text: &str, complete_type: CompletionType, ) -> Result; async fn index_file( &self, workspace_id: &str, file_path: &Path, chat_id: &str, metadata: Option>, ) -> Result<(), FlowyError>; async fn get_local_ai_config(&self, workspace_id: &str) -> Result; async fn get_workspace_plan( &self, workspace_id: &str, ) -> Result, FlowyError>; async fn get_chat_settings( &self, workspace_id: &str, chat_id: &str, ) -> Result; async fn update_chat_settings( &self, workspace_id: &str, chat_id: &str, params: UpdateChatParams, ) -> Result<(), FlowyError>; }