use serde::{Deserialize, Serialize}; use std::collections::HashMap; #[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] pub struct Function { pub name: String, #[serde(skip_serializing_if = "Option::is_none")] pub description: Option, pub parameters: FunctionParameters, } #[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] pub struct FunctionParameters { #[serde(rename = "type")] pub schema_type: JSONSchemaType, #[serde(skip_serializing_if = "Option::is_none")] pub properties: Option>>, #[serde(skip_serializing_if = "Option::is_none")] pub required: Option>, } #[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)] #[serde(rename_all = "lowercase")] pub enum JSONSchemaType { Object, Number, String, Array, Null, Boolean, } #[derive(Debug, Deserialize, Serialize, Clone, Default, PartialEq, Eq)] pub struct JSONSchemaDefine { #[serde(rename = "type")] pub schema_type: Option, #[serde(skip_serializing_if = "Option::is_none")] pub description: Option, #[serde(skip_serializing_if = "Option::is_none")] pub enum_values: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub properties: Option>>, #[serde(skip_serializing_if = "Option::is_none")] pub required: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub items: Option>, } #[derive(Debug, Deserialize, Serialize, Clone)] #[serde(tag = "type")] #[serde(rename_all = "snake_case")] pub enum Tools { CodeInterpreter, FileSearch(ToolsFileSearch), Function(ToolsFunction), } #[derive(Debug, Deserialize, Serialize, Clone)] pub struct ToolsFileSearch { #[serde(skip_serializing_if = "Option::is_none")] pub file_search: Option, } #[derive(Debug, Deserialize, Serialize, Clone)] pub struct ToolsFunction { pub function: Function, } #[derive(Debug, Deserialize, Serialize, Clone)] pub struct ToolsFileSearchObject { pub max_num_results: Option, pub ranking_options: Option, } #[derive(Debug, Deserialize, Serialize, Clone)] pub struct FileSearchRankingOptions { pub ranker: Option, pub score_threshold: Option, } #[derive(Debug, Deserialize, Serialize, Clone)] pub enum FileSearchRanker { #[serde(rename = "auto")] Auto, #[serde(rename = "default_2024_08_21")] Default2024_08_21, }