espionox 0.1.42

A library for creating multi-agent workflows in Rust
Documentation
use espionox::agents::{
    language_models::{
        openai::gpt::{Gpt, GptModel},
        LanguageModel,
    },
    memory::{Message, MessageStack},
    Agent,
};
use espionox::features::tools::vision::{message_vector_to_context_with_image, vision_completion};
use espionox::features::tools::websurf::Surfer;

use crate::{helpers, init_test, test_env};

#[tokio::test]
async fn vision_completion_works() {
    init_test();
    dotenv::dotenv().ok();
    let client = reqwest::Client::new();
    let api_key = std::env::var("OPENAI_KEY").unwrap();
    tracing::info!("API KEY: {}", api_key);
    let image_url = "./tests/test-screenshot.png";
    let mut messages = MessageStack::new("You are an image looker-atter");
    messages.push(Message::new_user("What is this image?"));
    let gpt = Gpt::new(GptModel::Gpt4, 0.4);
    let model = LanguageModel::OpenAi(gpt);

    let context = message_vector_to_context_with_image(&mut messages, Some(image_url), None);
    tracing::info!("Getting completion response");
    let response = vision_completion(&client, &api_key, &context, &model)
        .await
        .unwrap();
    tracing::info!("{:?}", response);
}

#[tokio::test]
async fn surfer_get_screenshot_works() {
    init_test();
    let mut env = test_env();
    let agent = Agent::default();
    let handle = env.insert_agent(None, agent).await.unwrap();
    let mut surfer = Surfer::from(&handle);
    surfer.get_screenshot("https://docs.rs/headless_chrome/latest/headless_chrome/browser/tab/struct.Tab.html#method.print_to_pdf").unwrap();
    let api_key = std::env::var("OPENAI_KEY").unwrap();
    let desc = surfer
        .description_of_current_screenshot(&api_key)
        .await
        .unwrap();
    tracing::info!("{:?}", desc);
}

#[tokio::test]
async fn surfer_listener_works() {
    init_test();
    let agent = Agent::default();
    let mut environment = helpers::test_env();
    let mut handle = environment.insert_agent(None, agent).await.unwrap();
    let surfer = Surfer::from(&handle);
    environment.insert_listener(surfer).await;
    environment.spawn().await.unwrap();
    let comp_ticket = handle
        .request_io_completion(Message::new_user("What is on the front page of wikipedia?"))
        .await
        .unwrap();
    environment.finalize_dispatch().await.unwrap();
    let comp_noti = environment
        .notifications
        .wait_for_notification(&comp_ticket)
        .await
        .unwrap();
    let response: &Message = comp_noti.extract_body().try_into().unwrap();
    println!("{}", response.content);
}