mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
728b8243a9
## 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`
49 lines
1.8 KiB
Rust
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."
|
|
);
|
|
}
|