Warn about confusing agent tool catalogs
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
use crank_core::{
|
||||
ToolDescription, ToolQualityFinding, ToolQualityMappingRule, ToolQualityMappingSet,
|
||||
ToolQualityReport, ToolQualitySchemaNode, ToolQualitySeverity, analyze_tool_identity_quality,
|
||||
ToolDescription, ToolQualityCatalogTool, ToolQualityFinding, ToolQualityMappingRule,
|
||||
ToolQualityMappingSet, ToolQualityReport, ToolQualitySchemaNode, ToolQualitySeverity,
|
||||
analyze_agent_tool_catalog_quality, analyze_tool_identity_quality,
|
||||
analyze_tool_response_projection_quality, analyze_tool_schema_quality,
|
||||
};
|
||||
|
||||
@@ -235,6 +236,79 @@ fn marks_large_output_projection_as_info() {
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn warns_about_large_agent_tool_catalog() {
|
||||
let tools: Vec<ToolQualityCatalogTool> = (0..9)
|
||||
.map(|index| {
|
||||
catalog_tool(
|
||||
&format!("tool_{index}"),
|
||||
&format!("Tool {index}"),
|
||||
"Does one task",
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
|
||||
let report = analyze_agent_tool_catalog_quality(&tools);
|
||||
|
||||
assert!(has_finding(
|
||||
&report,
|
||||
"agent_catalog_too_large",
|
||||
ToolQualitySeverity::Warning
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn warns_about_similar_agent_tools() {
|
||||
let tools = vec![
|
||||
catalog_tool(
|
||||
"get_exchange_rate",
|
||||
"Получить курс валюты",
|
||||
"Получает последний курс валюты",
|
||||
),
|
||||
catalog_tool(
|
||||
"fetch_exchange_rate",
|
||||
"Запросить курс валюты",
|
||||
"Получает текущий курс валюты",
|
||||
),
|
||||
];
|
||||
|
||||
let report = analyze_agent_tool_catalog_quality(&tools);
|
||||
|
||||
assert!(has_finding(
|
||||
&report,
|
||||
"agent_catalog_similar_tools",
|
||||
ToolQualitySeverity::Warning
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn accepts_small_catalog_with_distinct_tools() {
|
||||
let tools = vec![
|
||||
catalog_tool(
|
||||
"get_exchange_rate",
|
||||
"Получить курс валюты",
|
||||
"Получает курс валюты",
|
||||
),
|
||||
catalog_tool(
|
||||
"get_weather_forecast",
|
||||
"Получить прогноз погоды",
|
||||
"Получает прогноз погоды",
|
||||
),
|
||||
];
|
||||
|
||||
let report = analyze_agent_tool_catalog_quality(&tools);
|
||||
|
||||
assert!(report.findings.is_empty());
|
||||
}
|
||||
|
||||
fn catalog_tool(name: &str, display_name: &str, description: &str) -> ToolQualityCatalogTool {
|
||||
ToolQualityCatalogTool {
|
||||
name: name.to_owned(),
|
||||
display_name: display_name.to_owned(),
|
||||
description: description.to_owned(),
|
||||
}
|
||||
}
|
||||
|
||||
fn has_finding(report: &ToolQualityReport, code: &str, severity: ToolQualitySeverity) -> bool {
|
||||
report
|
||||
.findings
|
||||
|
||||
Reference in New Issue
Block a user