Skip to content

Commit 5867baa

Browse files
committed
refactoring function
1 parent 34aae91 commit 5867baa

File tree

6 files changed

+106
-58
lines changed

6 files changed

+106
-58
lines changed

examples/function_call.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use openai_api_rs::v1::api::OpenAIClient;
22
use openai_api_rs::v1::chat_completion::{self, ChatCompletionRequest};
33
use openai_api_rs::v1::common::GPT4_O;
4+
use openai_api_rs::v1::types;
45
use serde::{Deserialize, Serialize};
56
use std::collections::HashMap;
67
use std::{env, vec};
@@ -21,8 +22,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
2122
let mut properties = HashMap::new();
2223
properties.insert(
2324
"coin".to_string(),
24-
Box::new(chat_completion::JSONSchemaDefine {
25-
schema_type: Some(chat_completion::JSONSchemaType::String),
25+
Box::new(types::JSONSchemaDefine {
26+
schema_type: Some(types::JSONSchemaType::String),
2627
description: Some("The cryptocurrency to get the price of".to_string()),
2728
..Default::default()
2829
}),
@@ -40,11 +41,11 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
4041
)
4142
.tools(vec![chat_completion::Tool {
4243
r#type: chat_completion::ToolType::Function,
43-
function: chat_completion::Function {
44+
function: types::Function {
4445
name: String::from("get_coin_price"),
4546
description: Some(String::from("Get the price of a cryptocurrency")),
46-
parameters: chat_completion::FunctionParameters {
47-
schema_type: chat_completion::JSONSchemaType::Object,
47+
parameters: types::FunctionParameters {
48+
schema_type: types::JSONSchemaType::Object,
4849
properties: Some(properties),
4950
required: Some(vec![String::from("coin")]),
5051
},

examples/function_call_role.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use openai_api_rs::v1::api::OpenAIClient;
22
use openai_api_rs::v1::chat_completion::{self, ChatCompletionRequest};
33
use openai_api_rs::v1::common::GPT4_O;
4+
use openai_api_rs::v1::types;
45
use serde::{Deserialize, Serialize};
56
use std::collections::HashMap;
67
use std::{env, vec};
@@ -21,8 +22,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
2122
let mut properties = HashMap::new();
2223
properties.insert(
2324
"coin".to_string(),
24-
Box::new(chat_completion::JSONSchemaDefine {
25-
schema_type: Some(chat_completion::JSONSchemaType::String),
25+
Box::new(types::JSONSchemaDefine {
26+
schema_type: Some(types::JSONSchemaType::String),
2627
description: Some("The cryptocurrency to get the price of".to_string()),
2728
..Default::default()
2829
}),
@@ -40,11 +41,11 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
4041
)
4142
.tools(vec![chat_completion::Tool {
4243
r#type: chat_completion::ToolType::Function,
43-
function: chat_completion::Function {
44+
function: types::Function {
4445
name: String::from("get_coin_price"),
4546
description: Some(String::from("Get the price of a cryptocurrency")),
46-
parameters: chat_completion::FunctionParameters {
47-
schema_type: chat_completion::JSONSchemaType::Object,
47+
parameters: types::FunctionParameters {
48+
schema_type: types::JSONSchemaType::Object,
4849
properties: Some(properties),
4950
required: Some(vec![String::from("coin")]),
5051
},

src/v1/assistant.rs

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use serde::{Deserialize, Serialize};
22
use std::collections::HashMap;
33

4+
use super::types;
45
use crate::impl_builder_methods;
56

67
#[derive(Debug, Serialize, Clone)]
@@ -56,13 +57,53 @@ pub struct AssistantObject {
5657
pub model: String,
5758
#[serde(skip_serializing_if = "Option::is_none")]
5859
pub instructions: Option<String>,
59-
pub tools: Vec<HashMap<String, String>>,
60+
pub tools: Vec<Tools>,
6061
#[serde(skip_serializing_if = "Option::is_none")]
6162
pub tool_resources: Option<ToolResource>,
6263
pub metadata: Option<HashMap<String, String>>,
6364
pub headers: Option<HashMap<String, String>>,
6465
}
6566

67+
#[derive(Debug, Deserialize, Serialize, Clone)]
68+
#[serde(tag = "type")]
69+
#[serde(rename_all = "snake_case")]
70+
pub enum Tools {
71+
CodeInterpreter,
72+
FileSearch(ToolsFileSearch),
73+
Function(ToolsFunction),
74+
}
75+
76+
#[derive(Debug, Deserialize, Serialize, Clone)]
77+
pub struct ToolsFileSearch {
78+
#[serde(skip_serializing_if = "Option::is_none")]
79+
pub file_search: Option<ToolsFileSearchObject>,
80+
}
81+
82+
#[derive(Debug, Deserialize, Serialize, Clone)]
83+
pub struct ToolsFunction {
84+
pub function: types::Function,
85+
}
86+
87+
#[derive(Debug, Deserialize, Serialize, Clone)]
88+
pub struct ToolsFileSearchObject {
89+
pub max_num_results: Option<u8>,
90+
pub ranking_options: Option<FileSearchRankingOptions>,
91+
}
92+
93+
#[derive(Debug, Deserialize, Serialize, Clone)]
94+
pub struct FileSearchRankingOptions {
95+
pub ranker: Option<FileSearchRanker>,
96+
pub score_threshold: Option<f32>,
97+
}
98+
99+
#[derive(Debug, Deserialize, Serialize, Clone)]
100+
pub enum FileSearchRanker {
101+
#[serde(rename = "auto")]
102+
Auto,
103+
#[serde(rename = "default_2024_08_21")]
104+
Default2024_08_21,
105+
}
106+
66107
#[derive(Debug, Deserialize, Serialize, Clone)]
67108
pub struct ToolResource {
68109
#[serde(skip_serializing_if = "Option::is_none")]

src/v1/chat_completion.rs

Lines changed: 4 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
use super::{common, types};
12
use crate::impl_builder_methods;
2-
use crate::v1::common;
3+
34
use serde::de::{self, MapAccess, SeqAccess, Visitor};
45
use serde::ser::SerializeMap;
56
use serde::{Deserialize, Deserializer, Serialize, Serializer};
@@ -185,6 +186,7 @@ impl<'de> Deserialize<'de> for Content {
185186
deserializer.deserialize_any(ContentVisitor)
186187
}
187188
}
189+
188190
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
189191
#[allow(non_camel_case_types)]
190192
pub enum ContentType {
@@ -251,51 +253,6 @@ pub struct ChatCompletionResponse {
251253
pub headers: Option<HashMap<String, String>>,
252254
}
253255

254-
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
255-
pub struct Function {
256-
pub name: String,
257-
#[serde(skip_serializing_if = "Option::is_none")]
258-
pub description: Option<String>,
259-
pub parameters: FunctionParameters,
260-
}
261-
262-
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
263-
#[serde(rename_all = "lowercase")]
264-
pub enum JSONSchemaType {
265-
Object,
266-
Number,
267-
String,
268-
Array,
269-
Null,
270-
Boolean,
271-
}
272-
273-
#[derive(Debug, Deserialize, Serialize, Clone, Default, PartialEq, Eq)]
274-
pub struct JSONSchemaDefine {
275-
#[serde(rename = "type")]
276-
pub schema_type: Option<JSONSchemaType>,
277-
#[serde(skip_serializing_if = "Option::is_none")]
278-
pub description: Option<String>,
279-
#[serde(skip_serializing_if = "Option::is_none")]
280-
pub enum_values: Option<Vec<String>>,
281-
#[serde(skip_serializing_if = "Option::is_none")]
282-
pub properties: Option<HashMap<String, Box<JSONSchemaDefine>>>,
283-
#[serde(skip_serializing_if = "Option::is_none")]
284-
pub required: Option<Vec<String>>,
285-
#[serde(skip_serializing_if = "Option::is_none")]
286-
pub items: Option<Box<JSONSchemaDefine>>,
287-
}
288-
289-
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
290-
pub struct FunctionParameters {
291-
#[serde(rename = "type")]
292-
pub schema_type: JSONSchemaType,
293-
#[serde(skip_serializing_if = "Option::is_none")]
294-
pub properties: Option<HashMap<String, Box<JSONSchemaDefine>>>,
295-
#[serde(skip_serializing_if = "Option::is_none")]
296-
pub required: Option<Vec<String>>,
297-
}
298-
299256
#[derive(Debug, Deserialize, Serialize, PartialEq, Eq)]
300257
#[allow(non_camel_case_types)]
301258
pub enum FinishReason {
@@ -352,7 +309,7 @@ where
352309
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
353310
pub struct Tool {
354311
pub r#type: ToolType,
355-
pub function: Function,
312+
pub function: types::Function,
356313
}
357314

358315
#[derive(Debug, Deserialize, Serialize, Copy, Clone, PartialEq, Eq)]

src/v1/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
pub mod common;
22
pub mod error;
3+
pub mod types;
34

45
pub mod audio;
56
pub mod batch;

src/v1/types.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
use serde::{Deserialize, Serialize};
2+
use std::collections::HashMap;
3+
4+
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
5+
pub 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)]
13+
pub 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")]
24+
pub 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)]
34+
pub 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+
}

0 commit comments

Comments
 (0)