solagent_rig_cookie/
get_agent_by_ca.rsuse serde::{Deserialize, Serialize};
use solagent_core::{
rig::{completion::ToolDefinition, tool::Tool},
IWallet, SolanaAgentKit,
};
use solagent_parameters::parameters;
use solagent_plugin_cookie::get_agent_by_ca;
use std::sync::Arc;
#[derive(Debug, Deserialize)]
pub struct GetAgentByCaArgs {
contract_address: String,
interval: Option<u32>,
}
#[derive(Deserialize, Serialize)]
pub struct GetAgentByCaOutput {
pub data: serde_json::Value,
}
#[derive(Debug, thiserror::Error)]
#[error("GetAgentByCa error")]
pub struct GetAgentByCaError;
pub struct GetAgentByCa<W: IWallet> {
agent: Arc<SolanaAgentKit<W>>,
}
impl<W: IWallet> GetAgentByCa<W> {
pub fn new(agent: Arc<SolanaAgentKit<W>>) -> Self {
GetAgentByCa { agent }
}
}
impl<W: IWallet + std::marker::Send + std::marker::Sync> Tool for GetAgentByCa<W> {
const NAME: &'static str = "get_agent_by_ca";
type Error = GetAgentByCaError;
type Args = GetAgentByCaArgs;
type Output = GetAgentByCaOutput;
async fn definition(&self, _prompt: String) -> ToolDefinition {
ToolDefinition {
name: "get_agent_by_ca".to_string(),
description: r#"
Retrieve agent details in specified interval by one of its tokens contract address.
"#
.to_string(),
parameters: parameters!(
contract_address: String,
interval: Option<u32>,
),
}
}
async fn call(&self, args: Self::Args) -> Result<Self::Output, Self::Error> {
let data = get_agent_by_ca(&self.agent, &args.contract_address, args.interval).await.expect("get_agent_by_ca");
Ok(GetAgentByCaOutput { data })
}
}