use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize)]
pub struct PageResponse<T> {
#[serde(skip_serializing_if = "Option::is_none")]
pub has_more: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub items: Option<Vec<T>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SessionCreateRequest {
pub app_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_set: Option<ToolSet>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SessionUpdateRequest {
pub app_id: String,
pub session_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_set: Option<ToolSet>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SessionGetRequest {
pub app_id: String,
pub session_id: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SessionDeleteRequest {
pub app_id: String,
pub session_id: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Session {
#[serde(skip_serializing_if = "Option::is_none")]
pub session_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub app_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_set: Option<ToolSet>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ToolSet {
#[serde(skip_serializing_if = "Option::is_none")]
pub tools: Option<Vec<Tool>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Tool {
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub config: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct MessageCreateRequest {
pub app_id: String,
pub session_id: String,
pub content: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub message_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, Value>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct MessageGetRequest {
pub app_id: String,
pub session_id: String,
pub message_id: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct MessageListRequest {
pub app_id: String,
pub session_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_size: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Message {
#[serde(skip_serializing_if = "Option::is_none")]
pub message_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub session_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, Value>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RunCreateRequest {
pub app_id: String,
pub session_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub instructions: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub additional_messages: Option<Vec<Message>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_set: Option<ToolSet>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RunGetRequest {
pub app_id: String,
pub session_id: String,
pub run_id: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RunListRequest {
pub app_id: String,
pub session_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_size: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RunCancelRequest {
pub app_id: String,
pub session_id: String,
pub run_id: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Run {
#[serde(skip_serializing_if = "Option::is_none")]
pub run_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub session_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub started_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub completed_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub failed_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cancelled_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub instructions: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tool_set: Option<ToolSet>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_error: Option<RunError>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RunError {
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SkillStartRequest {
pub app_id: String,
pub skill_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub input: Option<HashMap<String, Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub session_id: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SkillGetRequest {
pub app_id: String,
pub skill_id: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SkillListRequest {
pub app_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_size: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Skill {
#[serde(skip_serializing_if = "Option::is_none")]
pub skill_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub skill_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_config: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output_config: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct SkillExecution {
#[serde(skip_serializing_if = "Option::is_none")]
pub execution_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub skill_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input: Option<HashMap<String, Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output: Option<HashMap<String, Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub started_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub completed_at: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DataKnowledgeAskRequest {
pub app_id: String,
pub question: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub knowledge_base_ids: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub chat_history: Option<Vec<ChatMessage>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub retrieval_config: Option<RetrievalConfig>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ChatMessage {
pub role: String,
pub content: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct RetrievalConfig {
#[serde(skip_serializing_if = "Option::is_none")]
pub top_k: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub similarity_threshold: Option<f64>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DataKnowledgeAnswer {
#[serde(skip_serializing_if = "Option::is_none")]
pub answer: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub references: Option<Vec<KnowledgeReference>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub confidence_score: Option<f64>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct KnowledgeReference {
#[serde(skip_serializing_if = "Option::is_none")]
pub document_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub relevance_score: Option<f64>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DataKnowledgeFileUploadRequest {
pub app_id: String,
pub file: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_type: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DataKnowledgeCreateRequest {
pub app_id: String,
pub title: String,
pub content: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub category_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, Value>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DataKnowledgeGetRequest {
pub app_id: String,
pub knowledge_id: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DataKnowledgeDeleteRequest {
pub app_id: String,
pub knowledge_id: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DataKnowledgeListRequest {
pub app_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_size: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub category_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub keyword: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DataKnowledgeCategoryListRequest {
pub app_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_size: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DataKnowledge {
#[serde(skip_serializing_if = "Option::is_none")]
pub knowledge_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub category_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub category_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, Value>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DataKnowledgeCategory {
#[serde(skip_serializing_if = "Option::is_none")]
pub category_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub weight: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct FileUploadResult {
#[serde(skip_serializing_if = "Option::is_none")]
pub file_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_size: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uploaded_at: Option<String>,
}