openai_api_rs/v1/
types.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
5pub struct Function {
6    pub name: String,
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub description: Option<String>,
9    pub parameters: FunctionParameters,
10}
11
12#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
13pub struct FunctionParameters {
14    #[serde(rename = "type")]
15    pub schema_type: JSONSchemaType,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub properties: Option<HashMap<String, Box<JSONSchemaDefine>>>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub required: Option<Vec<String>>,
20}
21
22#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
23#[serde(rename_all = "lowercase")]
24pub enum JSONSchemaType {
25    Object,
26    Number,
27    String,
28    Array,
29    Null,
30    Boolean,
31}
32
33#[derive(Debug, Deserialize, Serialize, Clone, Default, PartialEq, Eq)]
34pub struct JSONSchemaDefine {
35    #[serde(rename = "type")]
36    pub schema_type: Option<JSONSchemaType>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub description: Option<String>,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub enum_values: Option<Vec<String>>,
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub properties: Option<HashMap<String, Box<JSONSchemaDefine>>>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub required: Option<Vec<String>>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub items: Option<Box<JSONSchemaDefine>>,
47}
48
49#[derive(Debug, Deserialize, Serialize, Clone)]
50#[serde(tag = "type")]
51#[serde(rename_all = "snake_case")]
52pub enum Tools {
53    CodeInterpreter,
54    FileSearch(ToolsFileSearch),
55    Function(ToolsFunction),
56}
57
58#[derive(Debug, Deserialize, Serialize, Clone)]
59pub struct ToolsFileSearch {
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub file_search: Option<ToolsFileSearchObject>,
62}
63
64#[derive(Debug, Deserialize, Serialize, Clone)]
65pub struct ToolsFunction {
66    pub function: Function,
67}
68
69#[derive(Debug, Deserialize, Serialize, Clone)]
70pub struct ToolsFileSearchObject {
71    pub max_num_results: Option<u8>,
72    pub ranking_options: Option<FileSearchRankingOptions>,
73}
74
75#[derive(Debug, Deserialize, Serialize, Clone)]
76pub struct FileSearchRankingOptions {
77    pub ranker: Option<FileSearchRanker>,
78    pub score_threshold: Option<f32>,
79}
80
81#[derive(Debug, Deserialize, Serialize, Clone)]
82pub enum FileSearchRanker {
83    #[serde(rename = "auto")]
84    Auto,
85    #[serde(rename = "default_2024_08_21")]
86    Default2024_08_21,
87}