Setting up the infra for unit evals on the new tool. For now, replicating the eval setup as close as possible to the old tool. ## Self-Review Checklist <!-- Check before requesting review: --> - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - N/A
142 lines
3.8 KiB
Rust
142 lines
3.8 KiB
Rust
mod context_server_registry;
|
|
mod copy_path_tool;
|
|
mod create_directory_tool;
|
|
mod delete_path_tool;
|
|
mod diagnostics_tool;
|
|
mod edit_file_tool;
|
|
#[cfg(all(test, feature = "unit-eval"))]
|
|
mod evals;
|
|
mod fetch_tool;
|
|
mod find_path_tool;
|
|
mod grep_tool;
|
|
mod list_directory_tool;
|
|
mod move_path_tool;
|
|
mod now_tool;
|
|
mod open_tool;
|
|
mod read_file_tool;
|
|
mod restore_file_from_disk_tool;
|
|
mod save_file_tool;
|
|
mod spawn_agent_tool;
|
|
mod streaming_edit_file_tool;
|
|
mod terminal_tool;
|
|
mod tool_edit_parser;
|
|
mod tool_permissions;
|
|
mod update_plan_tool;
|
|
mod web_search_tool;
|
|
|
|
use crate::AgentTool;
|
|
use language_model::{LanguageModelRequestTool, LanguageModelToolSchemaFormat};
|
|
|
|
pub use context_server_registry::*;
|
|
pub use copy_path_tool::*;
|
|
pub use create_directory_tool::*;
|
|
pub use delete_path_tool::*;
|
|
pub use diagnostics_tool::*;
|
|
pub use edit_file_tool::*;
|
|
pub use fetch_tool::*;
|
|
pub use find_path_tool::*;
|
|
pub use grep_tool::*;
|
|
pub use list_directory_tool::*;
|
|
pub use move_path_tool::*;
|
|
pub use now_tool::*;
|
|
pub use open_tool::*;
|
|
pub use read_file_tool::*;
|
|
pub use restore_file_from_disk_tool::*;
|
|
pub use save_file_tool::*;
|
|
pub use spawn_agent_tool::*;
|
|
pub use streaming_edit_file_tool::*;
|
|
pub use terminal_tool::*;
|
|
pub use tool_permissions::*;
|
|
pub use update_plan_tool::*;
|
|
pub use web_search_tool::*;
|
|
|
|
macro_rules! tools {
|
|
($($tool:ty),* $(,)?) => {
|
|
/// Every built-in tool name, determined at compile time.
|
|
pub const ALL_TOOL_NAMES: &[&str] = &[
|
|
$(<$tool>::NAME,)*
|
|
];
|
|
|
|
const _: () = {
|
|
const fn str_eq(a: &str, b: &str) -> bool {
|
|
let a = a.as_bytes();
|
|
let b = b.as_bytes();
|
|
if a.len() != b.len() {
|
|
return false;
|
|
}
|
|
let mut i = 0;
|
|
while i < a.len() {
|
|
if a[i] != b[i] {
|
|
return false;
|
|
}
|
|
i += 1;
|
|
}
|
|
true
|
|
}
|
|
|
|
const NAMES: &[&str] = ALL_TOOL_NAMES;
|
|
let mut i = 0;
|
|
while i < NAMES.len() {
|
|
let mut j = i + 1;
|
|
while j < NAMES.len() {
|
|
if str_eq(NAMES[i], NAMES[j]) {
|
|
panic!("Duplicate tool name in tools! macro");
|
|
}
|
|
j += 1;
|
|
}
|
|
i += 1;
|
|
}
|
|
};
|
|
|
|
/// Returns whether the tool with the given name supports the given provider.
|
|
pub fn tool_supports_provider(name: &str, provider: &language_model::LanguageModelProviderId) -> bool {
|
|
$(
|
|
if name == <$tool>::NAME {
|
|
return <$tool>::supports_provider(provider);
|
|
}
|
|
)*
|
|
false
|
|
}
|
|
|
|
/// A list of all built-in tools
|
|
pub fn built_in_tools() -> impl Iterator<Item = LanguageModelRequestTool> {
|
|
fn language_model_tool<T: AgentTool>() -> LanguageModelRequestTool {
|
|
LanguageModelRequestTool {
|
|
name: T::NAME.to_string(),
|
|
description: T::description().to_string(),
|
|
input_schema: T::input_schema(LanguageModelToolSchemaFormat::JsonSchema).to_value(),
|
|
use_input_streaming: T::supports_input_streaming(),
|
|
}
|
|
}
|
|
[
|
|
$(
|
|
language_model_tool::<$tool>(),
|
|
)*
|
|
]
|
|
.into_iter()
|
|
}
|
|
};
|
|
}
|
|
|
|
tools! {
|
|
CopyPathTool,
|
|
CreateDirectoryTool,
|
|
DeletePathTool,
|
|
DiagnosticsTool,
|
|
EditFileTool,
|
|
FetchTool,
|
|
FindPathTool,
|
|
GrepTool,
|
|
ListDirectoryTool,
|
|
MovePathTool,
|
|
NowTool,
|
|
OpenTool,
|
|
ReadFileTool,
|
|
RestoreFileFromDiskTool,
|
|
SaveFileTool,
|
|
SpawnAgentTool,
|
|
TerminalTool,
|
|
UpdatePlanTool,
|
|
WebSearchTool,
|
|
}
|