
Added a "Setup" section with a link to installation instructions in the README for improved usability. Also adjusted the license text for consistency and deleted the empty `gitleaks-report.json` file as it was unnecessary.
web-agent-rs
Remote genaiscript host for integration into conversational AI applications.
This project is actively being developed to suit more use-cases, expect breaking changes.
Setup
See Installation
Disclaimer
This has not undergone a formal security assessment. You should do your own evaluation before using this.
How it works
- A chat client specifies the URL to this host in their environment.
- They send a request with their credentials to create a stream resource
Adding New Agents
This project allows you to create and integrate new agents that can perform various tasks. Here's how to add a new agent:
1. Create a GenAIScript File
Create a new .genai.mts
file in the packages/genaiscript/genaisrc/
directory. This file will contain the agent's logic.
Example structure of a GenAIScript file:
import {SomeClient} from "@agentic/some-package";
import "./tools/some-tool.genai.mjs"
script({
title: "your_agent_name",
maxTokens: 8192,
cache: false,
tools: ["tool-name"],
});
def("USER_INPUT", env.vars.user_input);
$`You are an assistant that performs a specific task.
- Instruction 1
- Instruction 2
- Instruction 3`
2. Create a Rust Agent Function
Create a new Rust file in the src/agents/
directory or add a function to an existing file. This function will be a wrapper that calls the GenAIScript file.
Example agent function:
use tokio::process::Child;
use tracing;
use crate::utils::utils::run_agent;
pub async fn your_agent_name(stream_id: &str, input: &str) -> Result<Child, String> {
run_agent(stream_id, input, "./packages/genaiscript/genaisrc/your-agent.genai.mts").await
}
3. Register the Agent in the Module
Add your agent to the src/agents/mod.rs
file:
pub mod your_agent_name;
4. Register the Agent in the Webhook Handler
Add your agent to the match statement in the handle_webhooks
function in src/handlers/webhooks.rs
:
// In the handle_webhooks function
let cmd = match resource.as_str() {
"web-search" => search_agent(stream_id.as_str(), &*input).await,
"news-search" => news_agent(stream_id.as_str(), &*input).await,
// Add your agent here
"your-resource-name" => your_agent_name(stream_id.as_str(), &*input).await,
_ => {
tracing::error!("Unsupported resource type: {}", resource);
return StatusCode::BAD_REQUEST.into_response();
}
};
5. Configure Environment Variables
If your agent requires specific API keys or configuration, add them to the ShimBinding
struct in src/utils/utils.rs
.
Existing Agents
The project currently includes the following agents:
- Web Search: Performs web searches using SearxNG
- News Search: Searches for news articles
- Image Generator: Generates images based on text prompts
- Finance Query: Provides financial information
- Web Scrape: Scrapes content from web pages
Documentation
Comprehensive documentation is available in the docs directory:
- Installation Guide - How to install and set up the project
- Configuration Guide - Environment variables and configuration options
- API Documentation - API endpoints and usage examples
- Authentication - Authentication system documentation
- Agents Guide - How to create and use agents
License
This project is licensed under the MIT License