use llmsdk_provider::language_model::{ProviderTool, Tool};
use serde::Serialize;
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FileSearchOptions {
pub vector_store_ids: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_num_results: Option<u32>,
}
#[must_use]
pub fn file_search(opts: &FileSearchOptions) -> Tool {
let args = serde_json::to_value(opts)
.ok()
.and_then(|v| v.as_object().cloned());
Tool::Provider(ProviderTool {
id: "xai.file_search".into(),
name: "file_search".into(),
args,
provider_options: None,
})
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn vector_store_ids_required_field_emitted() {
let Tool::Provider(p) = file_search(&FileSearchOptions {
vector_store_ids: vec!["vs_1".into()],
max_num_results: Some(7),
}) else {
panic!("expected provider tool");
};
let args = p.args.unwrap();
assert_eq!(args["vectorStoreIds"][0], "vs_1");
assert_eq!(args["maxNumResults"], 7);
}
}