use super::request::{Feedback, FileType};
use serde::{Deserialize, Serialize};
use serde_json::Value as JsonValue;
use serde_with::{serde_as, EnumMap};
use std::collections::HashMap;
use std::fmt::{Display, Formatter, Result as FmtResult};
#[derive(Debug, Serialize, Deserialize)]
pub struct ErrorResponse {
pub code: String,
pub message: String,
pub status: u32,
}
impl Display for ErrorResponse {
fn fmt(&self, f: &mut Formatter) -> FmtResult {
write!(f, "{}", serde_json::to_string(&self).unwrap())
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ResultResponse {
pub result: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ChatMessageBase {
pub message_id: String,
pub conversation_id: String,
pub created_at: u64,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ChatMessageResponse {
#[serde(flatten)]
pub base: ChatMessageBase,
pub event: String,
pub mode: AppMode,
pub answer: String,
pub metadata: HashMap<String, JsonValue>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(tag = "event", rename_all = "snake_case")]
pub enum SteamMessageEvent {
Message {
#[serde(flatten)]
base: Option<ChatMessageBase>,
id: String,
task_id: String,
answer: String,
#[serde(flatten)]
extra: HashMap<String, JsonValue>,
},
MessageFile {
#[serde(flatten)]
base: Option<ChatMessageBase>,
id: String,
#[serde(rename = "type")]
type_: FileType,
belongs_to: BelongsTo,
url: String,
#[serde(flatten)]
extra: HashMap<String, JsonValue>,
},
MessageEnd {
#[serde(flatten)]
base: Option<ChatMessageBase>,
id: String,
task_id: String,
metadata: HashMap<String, JsonValue>,
#[serde(flatten)]
extra: HashMap<String, JsonValue>,
},
MessageReplace {
#[serde(flatten)]
base: Option<ChatMessageBase>,
task_id: String,
answer: String,
#[serde(flatten)]
extra: HashMap<String, JsonValue>,
},
WorkflowStarted {
#[serde(flatten)]
base: Option<ChatMessageBase>,
task_id: String,
workflow_run_id: String,
data: WorkflowData,
#[serde(flatten)]
extra: HashMap<String, JsonValue>,
},
NodeStarted {
#[serde(flatten)]
base: Option<ChatMessageBase>,
task_id: String,
workflow_run_id: String,
data: NodeData,
#[serde(flatten)]
extra: HashMap<String, JsonValue>,
},
NodeFinished {
#[serde(flatten)]
base: Option<ChatMessageBase>,
task_id: String,
workflow_run_id: String,
data: NodeFinishedData,
#[serde(flatten)]
extra: HashMap<String, JsonValue>,
},
WorkflowFinished {
#[serde(flatten)]
base: Option<ChatMessageBase>,
task_id: String,
workflow_run_id: String,
data: WorkflowFinishedData,
#[serde(flatten)]
extra: HashMap<String, JsonValue>,
},
Error {
#[serde(flatten)]
base: Option<ChatMessageBase>,
status: u32,
code: String,
message: String,
#[serde(flatten)]
extra: HashMap<String, JsonValue>,
},
Ping,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct WorkflowData {
pub id: String,
pub workflow_id: String,
pub sequence_number: u32,
pub inputs: JsonValue,
pub created_at: u64,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct WorkflowFinishedData {
pub id: String,
pub workflow_id: String,
pub status: FinishedStatus,
pub outputs: Option<JsonValue>,
pub error: Option<String>,
pub elapsed_time: Option<f64>,
pub total_tokens: Option<u32>,
pub total_steps: u32,
pub created_at: u64,
pub finished_at: u64,
#[serde(flatten)]
pub extra: HashMap<String, JsonValue>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct NodeData {
pub id: String,
pub node_id: String,
pub node_type: String,
pub title: String,
pub index: u32,
pub predecessor_node_id: Option<String>,
pub inputs: Option<JsonValue>,
pub created_at: u64,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct NodeFinishedData {
pub id: String,
pub node_id: String,
pub index: u32,
pub predecessor_node_id: Option<String>,
pub inputs: Option<JsonValue>,
pub process_data: Option<JsonValue>,
pub outputs: Option<JsonValue>,
pub status: FinishedStatus,
pub error: Option<String>,
pub elapsed_time: Option<f64>,
pub execution_metadata: Option<ExecutionMetadata>,
pub created_at: u64,
#[serde(flatten)]
pub extra: HashMap<String, JsonValue>,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum FinishedStatus {
Running,
Succeeded,
Failed,
Stopped,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ExecutionMetadata {
pub total_tokens: Option<u32>,
pub total_price: Option<String>,
pub currency: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Eq, PartialEq)]
#[serde(rename_all = "kebab-case")]
pub enum AppMode {
Completion,
Workflow,
Chat,
AdvancedChat,
AgentChat,
Channel,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct MessagesSuggestedResponse {
pub result: String,
pub data: Vec<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct MessagesResponse {
pub limit: u32,
pub has_more: bool,
pub data: Vec<MessagesData>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct MessagesData {
pub id: String,
pub conversation_id: String,
pub inputs: JsonValue,
pub query: String,
pub answer: String,
pub message_files: Vec<MessagesHistoryFile>,
pub feedback: Option<MessagesHistoryFeedbacks>,
pub retriever_resources: Vec<JsonValue>,
pub created_at: u64,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct MessagesHistoryFile {
id: String,
#[serde(rename = "type")]
type_: FileType,
url: String,
belongs_to: BelongsTo,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum BelongsTo {
User,
Assistant,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct MessagesHistoryFeedbacks {
pub rating: Feedback,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ConversationsResponse {
pub has_more: bool,
pub limit: u32,
pub data: Vec<ConversationsData>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ConversationsData {
pub id: String,
pub name: String,
pub inputs: HashMap<String, String>,
pub introduction: String,
pub created_at: u64,
}
#[serde_as]
#[derive(Debug, Deserialize, Serialize)]
pub struct ParametersResponse {
pub opening_statement: String,
pub suggested_questions: Vec<String>,
pub suggested_questions_after_answer: ParametersSuggestedQuestionsAfterAnswer,
pub speech_to_text: ParametersSpeechToText,
pub retriever_resource: ParametersRetrieverResource,
pub annotation_reply: ParametersAnnotationReply,
pub user_input_form: Vec<ParametersUserInputFormItem>,
#[serde_as(as = "EnumMap")]
pub file_upload: Vec<ParametersFileUploadItem>,
pub system_parameters: ParametersSystemParameters,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ParametersSuggestedQuestionsAfterAnswer {
pub enabled: bool,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ParametersSpeechToText {
pub enabled: bool,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ParametersRetrieverResource {
pub enabled: bool,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ParametersAnnotationReply {
pub enabled: bool,
}
#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum ParametersUserInputFormItem {
#[serde(rename = "text-input")]
TextInput {
label: String,
variable: String,
required: bool,
},
Paragraph {
label: String,
variable: String,
required: bool,
},
Number {
label: String,
variable: String,
required: bool,
},
Select {
label: String,
variable: String,
required: bool,
options: Vec<String>,
},
}
#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum ParametersFileUploadItem {
Image {
enabled: bool,
number_limits: u32,
transfer_methods: Vec<TransferMethod>,
},
}
#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum TransferMethod {
RemoteUrl,
LocalFile,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct ParametersSystemParameters {
pub image_file_size_limit: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct MetaResponse {
pub tool_icons: HashMap<String, ToolIcon>,
}
#[derive(Debug, Deserialize, Serialize)]
#[serde(untagged)]
pub enum ToolIcon {
Url(String),
Emoji { background: String, content: String },
}
#[derive(Debug, Deserialize, Serialize)]
pub struct AudioToTextResponse {
pub text: String,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct FilesUploadResponse {
id: String,
name: String,
size: u64,
extension: String,
mime_type: String,
created_by: String,
created_at: u64,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct WorkflowsRunResponse {
pub workflow_run_id: String,
pub task_id: String,
pub data: WorkflowFinishedData,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct CompletionMessagesResponse {
pub message_id: String,
pub task_id: String,
pub created_at: u64,
pub event: String,
pub mode: AppMode,
pub answer: String,
pub metadata: HashMap<String, JsonValue>,
}