Unverified Commit 8ad20daf authored by drbh's avatar drbh Committed by GitHub
Browse files

CI (2599): Update ToolType input schema (#2601)



* Update ToolType input schema

* lint

* fix: run formatter

* fix: allow tool choide to be null

---------
Co-authored-by: default avatarWauplin <lucainp@gmail.com>
parent 6db3bcb7
...@@ -2114,12 +2114,18 @@ ...@@ -2114,12 +2114,18 @@
"ToolType": { "ToolType": {
"oneOf": [ "oneOf": [
{ {
"type": "object", "type": "string",
"default": null, "description": "Means the model can pick between generating a message or calling one or more tools.",
"nullable": true "enum": [
"auto"
]
}, },
{ {
"type": "string" "type": "string",
"description": "Means the model will not call any tool and instead generates a message.",
"enum": [
"none"
]
}, },
{ {
"type": "object", "type": "object",
...@@ -2131,13 +2137,10 @@ ...@@ -2131,13 +2137,10 @@
"$ref": "#/components/schemas/FunctionName" "$ref": "#/components/schemas/FunctionName"
} }
} }
},
{
"type": "object",
"default": null,
"nullable": true
} }
] ],
"description": "Controls which (if any) tool is called by the model.",
"example": "auto"
}, },
"Url": { "Url": {
"type": "object", "type": "object",
......
...@@ -53,10 +53,7 @@ impl ToolGrammar { ...@@ -53,10 +53,7 @@ impl ToolGrammar {
// if tools are provided and no tool_choice we default to the OneOf // if tools are provided and no tool_choice we default to the OneOf
let tools_to_use = match tool_choice { let tools_to_use = match tool_choice {
ToolType::FunctionName(name) => { ToolType::Function(function) => {
vec![Self::find_tool_by_name(&tools, &name)?]
}
ToolType::Function { function } => {
vec![Self::find_tool_by_name(&tools, &function.name)?] vec![Self::find_tool_by_name(&tools, &function.name)?]
} }
ToolType::OneOf => tools.clone(), ToolType::OneOf => tools.clone(),
......
...@@ -957,12 +957,18 @@ pub fn default_tool_prompt() -> String { ...@@ -957,12 +957,18 @@ pub fn default_tool_prompt() -> String {
} }
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, ToSchema)] #[derive(Clone, Debug, Deserialize, PartialEq, Serialize, ToSchema)]
#[serde(untagged)] #[schema(example = "auto")]
/// Controls which (if any) tool is called by the model.
pub enum ToolType { pub enum ToolType {
/// Means the model can pick between generating a message or calling one or more tools.
#[schema(rename = "auto")]
OneOf, OneOf,
FunctionName(String), /// Means the model will not call any tool and instead generates a message.
Function { function: FunctionName }, #[schema(rename = "none")]
NoTool, NoTool,
/// Forces the model to call a specific tool.
#[schema(rename = "function")]
Function(FunctionName),
} }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ToSchema)] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ToSchema)]
...@@ -977,6 +983,7 @@ pub struct ToolChoice(pub Option<ToolType>); ...@@ -977,6 +983,7 @@ pub struct ToolChoice(pub Option<ToolType>);
#[derive(Deserialize)] #[derive(Deserialize)]
#[serde(untagged)] #[serde(untagged)]
enum ToolTypeDeserializer { enum ToolTypeDeserializer {
Null,
String(String), String(String),
ToolType(ToolType), ToolType(ToolType),
} }
...@@ -984,10 +991,11 @@ enum ToolTypeDeserializer { ...@@ -984,10 +991,11 @@ enum ToolTypeDeserializer {
impl From<ToolTypeDeserializer> for ToolChoice { impl From<ToolTypeDeserializer> for ToolChoice {
fn from(value: ToolTypeDeserializer) -> Self { fn from(value: ToolTypeDeserializer) -> Self {
match value { match value {
ToolTypeDeserializer::Null => ToolChoice(None),
ToolTypeDeserializer::String(s) => match s.as_str() { ToolTypeDeserializer::String(s) => match s.as_str() {
"none" => ToolChoice(Some(ToolType::NoTool)), "none" => ToolChoice(Some(ToolType::NoTool)),
"auto" => ToolChoice(Some(ToolType::OneOf)), "auto" => ToolChoice(Some(ToolType::OneOf)),
_ => ToolChoice(Some(ToolType::FunctionName(s))), _ => ToolChoice(Some(ToolType::Function(FunctionName { name: s }))),
}, },
ToolTypeDeserializer::ToolType(tool_type) => ToolChoice(Some(tool_type)), ToolTypeDeserializer::ToolType(tool_type) => ToolChoice(Some(tool_type)),
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment