Expand description
§RusticAI
A Rust-native agent framework with tool calling, streaming, and multi-provider support for OpenAI, Anthropic, Gemini, and Grok.
§Quick Start
use rustic_ai::{Agent, RunInput, UsageLimits, UserContent, infer_model, infer_provider};
let model = infer_model("openai:gpt-4o-mini", infer_provider)?;
let agent = Agent::new(model)
.system_prompt("You are a helpful assistant.");
let input = RunInput::new(
vec![UserContent::Text("Hello!".to_string())],
vec![],
(),
UsageLimits::default(),
);
let result = agent.run(input).await?;
println!("{}", result.output);Type-state builder:
use rustic_ai::{RunInput, UsageLimits};
let input = RunInput::builder(())
.user_text("Hello!")
.usage_limits(UsageLimits::default())
.build();Typed structured output:
use rustic_ai::{Agent, RunInput, UsageLimits, UserContent, infer_model, infer_provider};
use schemars::JsonSchema;
use serde::Deserialize;
#[derive(Deserialize, JsonSchema)]
struct Answer {
answer: String,
}
let model = infer_model("openai:gpt-4o-mini", infer_provider)?;
let agent = Agent::new(model).output_schema_for::<Answer>();
let input = RunInput::new(
vec![UserContent::Text("Respond with {\"answer\": \"ok\"}".to_string())],
vec![],
(),
UsageLimits::default(),
);
let _ = agent.run(input).await?;§Features
- Agent orchestration with tool calling, usage limits, and message history
- Multi-provider support for OpenAI, Gemini, Anthropic, and Grok
- Streaming with structured events
- Structured output validation via JSON schema
- Deferred tools for approval flows
- MCP toolsets for remote tool integration
- Instrumentation hooks with tracing/OpenTelemetry support
§Optional Features
telemetry-otel- OpenTelemetry/OTLP exporter supporttelemetry-datadog- Datadog exporter support
Re-exports§
pub use agent::Agent;pub use agent::AgentEventStream;pub use agent::AgentRunResult;pub use agent::AgentRunState;pub use agent::AgentStreamEvent;pub use agent::DeferredToolCall;pub use agent::RunInput;pub use agent::RunInputBuilder;pub use error::AgentError;pub use failover::FailoverResult;pub use failover::classify_error_kind;pub use failover::run_with_config;pub use failover::run_with_config_and_classifier;pub use failover::run_with_failover;pub use failover::run_with_failover_with_classifier;pub use failover::run_with_utility_failover;pub use failover::run_with_utility_failover_with_classifier;pub use instrumentation::Instrumenter;pub use instrumentation::NoopInstrumenter;pub use instrumentation::TracingInstrumenter;pub use messages::AudioUrl;pub use messages::BinaryContent;pub use messages::DocumentUrl;pub use messages::ImageUrl;pub use messages::ModelMessage;pub use messages::ModelRequest;pub use messages::ModelRequestPart;pub use messages::ModelResponse;pub use messages::ModelResponsePart;pub use messages::ProviderItemPart;pub use messages::RetryPromptPart;pub use messages::SystemPromptPart;pub use messages::TextPart;pub use messages::ToolCallPart;pub use messages::ToolReturnPart;pub use messages::UserContent;pub use messages::UserPromptPart;pub use messages::VideoUrl;pub use model::Model;pub use model::ModelError;pub use model::ModelRequestParameters;pub use model::ModelSettings;pub use model::ModelStream;pub use model::OutputMode;pub use model::StreamChunk;pub use model_config::CircuitBreakerConfig;pub use model_config::InMemoryResolver;pub use model_config::ModelConfigEntry;pub use model_config::ModelConfigResolver;pub use model_config::ResolvedModelConfig;pub use providers::Provider;pub use providers::ProviderError;pub use providers::infer_model;pub use providers::infer_provider;pub use realtime::grok::GrokClient as GrokRealtimeClient;pub use realtime::grok::GrokSender as GrokRealtimeSender;pub use realtime::grok::ServerEvent as GrokRealtimeEvent;pub use realtime::grok::SessionConfig as GrokSessionConfig;pub use tools::ToolError;pub use tools::FunctionTool;pub use tools::RunContext;pub use tools::Tool;pub use tools::ToolDefinition;pub use tools::ToolKind;pub use tools::Toolset;pub use usage::RequestUsage;pub use usage::RunUsage;pub use usage::UsageError;pub use usage::UsageLimits;