rpc-agent 0.1.4

A modular Rust framework for building RPC-based agents with pluggable provider integrations
Documentation
use crate::AgentServer;
use crate::agent::AgentWorker;
use crate::error::Error;
use crate::message::Message;
use crate::providers::CompletionProvider;
use rig::tool::Tool;
use std::net::{Ipv4Addr, SocketAddr};
use std::sync::Arc;

use crate::tools::NoTool;

struct DummyCompletionProvider;

#[async_trait::async_trait]
impl CompletionProvider for DummyCompletionProvider {
    async fn chat(&self, prompt: &str) -> Result<String, Error> {
        Ok(format!("dummy: {}", prompt))
    }
}

#[tokio::test]
async fn completion_provider_trait_works() {
    let provider = DummyCompletionProvider;
    let result = provider.chat("hello").await;
    assert_eq!(result.unwrap(), "dummy: hello");
}

#[test]
#[should_panic]
fn notool_definition_panics() {
    let notool = NoTool;
    let _ = futures::executor::block_on(notool.definition("test".to_string()));
}

#[test]
#[should_panic]
fn notool_call_panics() {
    let notool = NoTool;
    let _ = futures::executor::block_on(notool.call(()));
}

struct DummyProvider;

#[async_trait::async_trait]
impl CompletionProvider for DummyProvider {
    async fn chat(&self, prompt: &str) -> Result<String, Error> {
        Ok(format!("MOCK: {}", prompt))
    }
}

#[tokio::test]
async fn agent_server_mock_message() {
    let provider = Arc::new(Box::new(DummyProvider) as Box<dyn CompletionProvider>);
    let agent = AgentServer::new(SocketAddr::from((Ipv4Addr::LOCALHOST, 12345)), provider);
    let ctx = tarpc::context::current();
    let result = agent
        .message(ctx, Message::Text("test mock".to_string()))
        .await;
    assert_eq!(result.unwrap(), "MOCK: test mock");
}