Files
codex/codex-rs/tools/src/tool_search_tests.rs
T
sayan-oai 728b8243a9 tools: simplify default tool search text (#27526)
## Why

Default tool search text currently derives identity from both `ToolName`
and `ToolSpec`. For function and namespace specs, this indexes the same
names more than once and also adds a flattened `{namespace}{name}` token
that is not model-visible.

## What changed

- Derive default search text entirely from `ToolSpec` while preserving
names, descriptions, namespace metadata, and recursive schema metadata.
- Keep the default search-text builder private and remove the unused
`ToolName` argument.
- Add coverage for the exact search text generated for a namespaced tool
with nested schema metadata.

## Example

For the `codex_app` namespace and `automation_update` tool (schema terms
omitted):

- Before: `codex_appautomation_update automation update codex_app
codex_app Manage Codex automations. automation_update automation update
...`
- After: `codex_app Manage Codex automations. automation_update
automation update ...`

## Testing

- `just test -p codex-tools`
2026-06-11 03:37:25 +00:00

49 lines
1.8 KiB
Rust

use super::*;
use pretty_assertions::assert_eq;
use std::collections::BTreeMap;
#[test]
fn default_search_text_uses_model_visible_namespace_metadata_once() {
let mut schedule_schema = JsonSchema::object(
BTreeMap::from([(
"timezone".to_string(),
JsonSchema::string(Some("IANA timezone.".to_string())),
)]),
/*required*/ None,
/*additional_properties*/ None,
);
schedule_schema.description = Some("Schedule settings.".to_string());
let mut parameters = JsonSchema::object(
BTreeMap::from([
(
"mode".to_string(),
JsonSchema::string(Some("Update mode.".to_string())),
),
("schedule".to_string(), schedule_schema),
]),
/*required*/ None,
/*additional_properties*/ None,
);
parameters.description = Some("Automation options.".to_string());
let spec = ToolSpec::Namespace(crate::ResponsesApiNamespace {
name: "codex_app".to_string(),
description: "Manage Codex automations.".to_string(),
tools: vec![ResponsesApiNamespaceTool::Function(ResponsesApiTool {
name: "automation_update".to_string(),
description: "Create or update automations.".to_string(),
strict: false,
defer_loading: None,
parameters,
output_schema: None,
})],
});
let search_info = ToolSearchInfo::from_tool_spec(spec, /*source_info*/ None)
.expect("namespace should be searchable");
assert_eq!(
search_info.entry.search_text,
"codex_app Manage Codex automations. automation_update automation update Create or update automations. Automation options. mode Update mode. schedule Schedule settings. timezone IANA timezone."
);
}