agent: Improve Gemini tool schema compatibility (#30216)
Closes #30056 Apparently the API supports the "default" field now, so we can remove that transformation. However, optional is not supported See https://ai.google.dev/api/caching#Schema Release Notes: - agent: Improve tool schema compatibility for Gemini models
This commit is contained in:
parent
d39c220f26
commit
6565c091e4
1 changed files with 4 additions and 31 deletions
|
@ -35,25 +35,17 @@ fn adapt_to_json_schema_subset(json: &mut Value) -> Result<()> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const KEYS_TO_REMOVE: [&str; 4] = [
|
const KEYS_TO_REMOVE: [&str; 5] = [
|
||||||
"format",
|
"format",
|
||||||
"additionalProperties",
|
"additionalProperties",
|
||||||
"exclusiveMinimum",
|
"exclusiveMinimum",
|
||||||
"exclusiveMaximum",
|
"exclusiveMaximum",
|
||||||
|
"optional",
|
||||||
];
|
];
|
||||||
for key in KEYS_TO_REMOVE {
|
for key in KEYS_TO_REMOVE {
|
||||||
obj.remove(key);
|
obj.remove(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(default) = obj.get("default") {
|
|
||||||
let is_null = default.is_null();
|
|
||||||
// Default is not supported, so we need to remove it
|
|
||||||
obj.remove("default");
|
|
||||||
if is_null {
|
|
||||||
obj.insert("nullable".to_string(), Value::Bool(true));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If a type is not specified for an input parameter, add a default type
|
// If a type is not specified for an input parameter, add a default type
|
||||||
if matches!(obj.get("description"), Some(Value::String(_)))
|
if matches!(obj.get("description"), Some(Value::String(_)))
|
||||||
&& !obj.contains_key("type")
|
&& !obj.contains_key("type")
|
||||||
|
@ -92,26 +84,6 @@ mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_transform_default_null_to_nullable() {
|
|
||||||
let mut json = json!({
|
|
||||||
"description": "A test field",
|
|
||||||
"type": "string",
|
|
||||||
"default": null
|
|
||||||
});
|
|
||||||
|
|
||||||
adapt_to_json_schema_subset(&mut json).unwrap();
|
|
||||||
|
|
||||||
assert_eq!(
|
|
||||||
json,
|
|
||||||
json!({
|
|
||||||
"description": "A test field",
|
|
||||||
"type": "string",
|
|
||||||
"nullable": true
|
|
||||||
})
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_transform_adds_type_when_missing() {
|
fn test_transform_adds_type_when_missing() {
|
||||||
let mut json = json!({
|
let mut json = json!({
|
||||||
|
@ -157,7 +129,8 @@ mod tests {
|
||||||
"format": "uint32",
|
"format": "uint32",
|
||||||
"exclusiveMinimum": 0,
|
"exclusiveMinimum": 0,
|
||||||
"exclusiveMaximum": 100,
|
"exclusiveMaximum": 100,
|
||||||
"additionalProperties": false
|
"additionalProperties": false,
|
||||||
|
"optional": true
|
||||||
});
|
});
|
||||||
|
|
||||||
adapt_to_json_schema_subset(&mut json).unwrap();
|
adapt_to_json_schema_subset(&mut json).unwrap();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue