async fn parse_input(&self, input: &str) -> Value {
        log::info!("Using default implementation: {}", input);
        match serde_json::from_str::<Value>(input) {
            Ok(input) => {
                if input["input"].is_string() {
                    Value::String(input["input"].as_str().unwrap().to_string())
                } else {
                    Value::String(input.to_string())
                }
            }
            Err(_) => Value::String(input.to_string()),
        }
    }
Parses the input string, which could be a JSON value or a raw string, depending on the LLM model.

Implement this function to extract the parameters needed for your tool. If a simple
string is sufficient, the default implementation can be used.
src/tools/tool.rs