use crate::error::AiResult; use async_trait::async_trait; use serde_json::Value; #[async_trait] pub trait FunctionCall: Send + Sync { type Context; fn name(&self) -> &'static str; fn description(&self) -> &'static str { "" } fn schema(&self) -> Value; async fn call( &self, context: &mut Self::Context, args: Value, ) -> AiResult; }